@contember/engine-actions 2.1.0-alpha.36 → 2.1.0-alpha.39

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 (513) hide show
  1. package/dist/development/index.cjs +118 -0
  2. package/dist/development/index.cjs.map +1 -0
  3. package/dist/development/index.js +118 -0
  4. package/dist/development/index.js.map +1 -0
  5. package/dist/development/src/ActionsExecutionContainerHookFactory.cjs +42 -0
  6. package/dist/development/src/ActionsExecutionContainerHookFactory.cjs.map +1 -0
  7. package/dist/development/src/ActionsExecutionContainerHookFactory.js +42 -0
  8. package/dist/development/src/ActionsExecutionContainerHookFactory.js.map +1 -0
  9. package/dist/development/src/ImplementationException.cjs +6 -0
  10. package/dist/development/src/ImplementationException.cjs.map +1 -0
  11. package/dist/development/src/ImplementationException.js +6 -0
  12. package/dist/development/src/ImplementationException.js.map +1 -0
  13. package/dist/development/src/ListenerStoreProvider.cjs +25 -0
  14. package/dist/development/src/ListenerStoreProvider.cjs.map +1 -0
  15. package/dist/development/src/ListenerStoreProvider.js +25 -0
  16. package/dist/development/src/ListenerStoreProvider.js.map +1 -0
  17. package/dist/development/src/authorization/ActionsAuthorizationActions.cjs +17 -0
  18. package/dist/development/src/authorization/ActionsAuthorizationActions.cjs.map +1 -0
  19. package/dist/development/src/authorization/ActionsAuthorizationActions.js +18 -0
  20. package/dist/development/src/authorization/ActionsAuthorizationActions.js.map +1 -0
  21. package/dist/development/src/authorization/ActionsPermissionsFactory.cjs +16 -0
  22. package/dist/development/src/authorization/ActionsPermissionsFactory.cjs.map +1 -0
  23. package/dist/development/src/authorization/ActionsPermissionsFactory.js +16 -0
  24. package/dist/development/src/authorization/ActionsPermissionsFactory.js.map +1 -0
  25. package/dist/development/src/dispatch/DispatchWorkerSupervisor.cjs +127 -0
  26. package/dist/development/src/dispatch/DispatchWorkerSupervisor.cjs.map +1 -0
  27. package/dist/development/src/dispatch/DispatchWorkerSupervisor.js +127 -0
  28. package/dist/development/src/dispatch/DispatchWorkerSupervisor.js.map +1 -0
  29. package/dist/development/src/dispatch/EventDispatcher.cjs +43 -0
  30. package/dist/development/src/dispatch/EventDispatcher.cjs.map +1 -0
  31. package/dist/development/src/dispatch/EventDispatcher.js +43 -0
  32. package/dist/development/src/dispatch/EventDispatcher.js.map +1 -0
  33. package/dist/development/src/dispatch/EventsRepository.cjs +122 -0
  34. package/dist/development/src/dispatch/EventsRepository.cjs.map +1 -0
  35. package/dist/development/src/dispatch/EventsRepository.js +122 -0
  36. package/dist/development/src/dispatch/EventsRepository.js.map +1 -0
  37. package/dist/development/src/dispatch/ProjectDispatcher.cjs +99 -0
  38. package/dist/development/src/dispatch/ProjectDispatcher.cjs.map +1 -0
  39. package/dist/development/src/dispatch/ProjectDispatcher.js +99 -0
  40. package/dist/development/src/dispatch/ProjectDispatcher.js.map +1 -0
  41. package/dist/development/src/dispatch/TargetHandlerResolver.cjs +16 -0
  42. package/dist/development/src/dispatch/TargetHandlerResolver.cjs.map +1 -0
  43. package/dist/development/src/dispatch/TargetHandlerResolver.js +16 -0
  44. package/dist/development/src/dispatch/TargetHandlerResolver.js.map +1 -0
  45. package/dist/development/src/dispatch/WebhookFetcher.cjs +16 -0
  46. package/dist/development/src/dispatch/WebhookFetcher.cjs.map +1 -0
  47. package/dist/development/src/dispatch/WebhookFetcher.js +16 -0
  48. package/dist/development/src/dispatch/WebhookFetcher.js.map +1 -0
  49. package/dist/development/src/dispatch/WebhookTargetHandler.cjs +198 -0
  50. package/dist/development/src/dispatch/WebhookTargetHandler.cjs.map +1 -0
  51. package/dist/development/src/dispatch/WebhookTargetHandler.js +181 -0
  52. package/dist/development/src/dispatch/WebhookTargetHandler.js.map +1 -0
  53. package/dist/development/src/graphql/http/ActionsApiMiddlewareFactory.cjs +39 -0
  54. package/dist/development/src/graphql/http/ActionsApiMiddlewareFactory.cjs.map +1 -0
  55. package/dist/development/src/graphql/http/ActionsApiMiddlewareFactory.js +39 -0
  56. package/dist/development/src/graphql/http/ActionsApiMiddlewareFactory.js.map +1 -0
  57. package/dist/development/src/graphql/http/ActionsContextResolver.cjs +36 -0
  58. package/dist/development/src/graphql/http/ActionsContextResolver.cjs.map +1 -0
  59. package/dist/development/src/graphql/http/ActionsContextResolver.js +36 -0
  60. package/dist/development/src/graphql/http/ActionsContextResolver.js.map +1 -0
  61. package/dist/development/src/graphql/http/ActionsGraphQLHandlerFactory.cjs +20 -0
  62. package/dist/development/src/graphql/http/ActionsGraphQLHandlerFactory.cjs.map +1 -0
  63. package/dist/development/src/graphql/http/ActionsGraphQLHandlerFactory.js +20 -0
  64. package/dist/development/src/graphql/http/ActionsGraphQLHandlerFactory.js.map +1 -0
  65. package/dist/development/src/graphql/http/ActionsWebsocketControllerFactory.cjs +152 -0
  66. package/dist/development/src/graphql/http/ActionsWebsocketControllerFactory.cjs.map +1 -0
  67. package/dist/development/src/graphql/http/ActionsWebsocketControllerFactory.js +135 -0
  68. package/dist/development/src/graphql/http/ActionsWebsocketControllerFactory.js.map +1 -0
  69. package/dist/development/src/graphql/resolvers/ResolversFactory.cjs +36 -0
  70. package/dist/development/src/graphql/resolvers/ResolversFactory.cjs.map +1 -0
  71. package/dist/development/src/graphql/resolvers/ResolversFactory.js +36 -0
  72. package/dist/development/src/graphql/resolvers/ResolversFactory.js.map +1 -0
  73. package/dist/development/src/graphql/resolvers/mutation/ProcessBatchMutationResolver.cjs +19 -0
  74. package/dist/development/src/graphql/resolvers/mutation/ProcessBatchMutationResolver.cjs.map +1 -0
  75. package/dist/development/src/graphql/resolvers/mutation/ProcessBatchMutationResolver.js +19 -0
  76. package/dist/development/src/graphql/resolvers/mutation/ProcessBatchMutationResolver.js.map +1 -0
  77. package/dist/development/src/graphql/resolvers/mutation/RetryEventMutationResolver.cjs +21 -0
  78. package/dist/development/src/graphql/resolvers/mutation/RetryEventMutationResolver.cjs.map +1 -0
  79. package/dist/development/src/graphql/resolvers/mutation/RetryEventMutationResolver.js +21 -0
  80. package/dist/development/src/graphql/resolvers/mutation/RetryEventMutationResolver.js.map +1 -0
  81. package/dist/development/src/graphql/resolvers/mutation/SetVariablesMutationResolver.cjs +19 -0
  82. package/dist/development/src/graphql/resolvers/mutation/SetVariablesMutationResolver.cjs.map +1 -0
  83. package/dist/development/src/graphql/resolvers/mutation/SetVariablesMutationResolver.js +19 -0
  84. package/dist/development/src/graphql/resolvers/mutation/SetVariablesMutationResolver.js.map +1 -0
  85. package/dist/development/src/graphql/resolvers/mutation/StopEventMutationResolver.cjs +19 -0
  86. package/dist/development/src/graphql/resolvers/mutation/StopEventMutationResolver.cjs.map +1 -0
  87. package/dist/development/src/graphql/resolvers/mutation/StopEventMutationResolver.js +19 -0
  88. package/dist/development/src/graphql/resolvers/mutation/StopEventMutationResolver.js.map +1 -0
  89. package/dist/development/src/graphql/resolvers/query/EventsQueryResolver.cjs +61 -0
  90. package/dist/development/src/graphql/resolvers/query/EventsQueryResolver.cjs.map +1 -0
  91. package/dist/development/src/graphql/resolvers/query/EventsQueryResolver.js +61 -0
  92. package/dist/development/src/graphql/resolvers/query/EventsQueryResolver.js.map +1 -0
  93. package/dist/development/src/graphql/resolvers/query/VariablesQueryResolver.cjs +19 -0
  94. package/dist/development/src/graphql/resolvers/query/VariablesQueryResolver.cjs.map +1 -0
  95. package/dist/development/src/graphql/resolvers/query/VariablesQueryResolver.js +19 -0
  96. package/dist/development/src/graphql/resolvers/query/VariablesQueryResolver.js.map +1 -0
  97. package/dist/development/src/graphql/schema/actions.graphql.cjs +107 -0
  98. package/dist/development/src/graphql/schema/actions.graphql.cjs.map +1 -0
  99. package/dist/development/src/graphql/schema/actions.graphql.js +107 -0
  100. package/dist/development/src/graphql/schema/actions.graphql.js.map +1 -0
  101. package/dist/development/src/migrations/2023-03-10-145000-actions-variables.cjs +16 -0
  102. package/dist/development/src/migrations/2023-03-10-145000-actions-variables.cjs.map +1 -0
  103. package/dist/development/src/migrations/2023-03-10-145000-actions-variables.js +17 -0
  104. package/dist/development/src/migrations/2023-03-10-145000-actions-variables.js.map +1 -0
  105. package/dist/development/src/migrations/2025-05-28-160000-action-event-user.cjs +16 -0
  106. package/dist/development/src/migrations/2025-05-28-160000-action-event-user.cjs.map +1 -0
  107. package/dist/development/src/migrations/2025-05-28-160000-action-event-user.js +17 -0
  108. package/dist/development/src/migrations/2025-05-28-160000-action-event-user.js.map +1 -0
  109. package/dist/development/src/migrations/index.cjs +12 -0
  110. package/dist/development/src/migrations/index.cjs.map +1 -0
  111. package/dist/development/src/migrations/index.js +12 -0
  112. package/dist/development/src/migrations/index.js.map +1 -0
  113. package/dist/development/src/migrations/snapshot.cjs +51 -0
  114. package/dist/development/src/migrations/snapshot.cjs.map +1 -0
  115. package/dist/development/src/migrations/snapshot.js +52 -0
  116. package/dist/development/src/migrations/snapshot.js.map +1 -0
  117. package/dist/development/src/model/EventByIdQuery.cjs +17 -0
  118. package/dist/development/src/model/EventByIdQuery.cjs.map +1 -0
  119. package/dist/development/src/model/EventByIdQuery.js +17 -0
  120. package/dist/development/src/model/EventByIdQuery.js.map +1 -0
  121. package/dist/development/src/model/EventsInProcessingQuery.cjs +14 -0
  122. package/dist/development/src/model/EventsInProcessingQuery.cjs.map +1 -0
  123. package/dist/development/src/model/EventsInProcessingQuery.js +14 -0
  124. package/dist/development/src/model/EventsInProcessingQuery.js.map +1 -0
  125. package/dist/development/src/model/EventsToProcessQuery.cjs +15 -0
  126. package/dist/development/src/model/EventsToProcessQuery.cjs.map +1 -0
  127. package/dist/development/src/model/EventsToProcessQuery.js +15 -0
  128. package/dist/development/src/model/EventsToProcessQuery.js.map +1 -0
  129. package/dist/development/src/model/EventsToProcessSpecification.cjs +8 -0
  130. package/dist/development/src/model/EventsToProcessSpecification.cjs.map +1 -0
  131. package/dist/development/src/model/EventsToProcessSpecification.js +8 -0
  132. package/dist/development/src/model/EventsToProcessSpecification.js.map +1 -0
  133. package/dist/development/src/model/FailedEventsQuery.cjs +14 -0
  134. package/dist/development/src/model/FailedEventsQuery.cjs.map +1 -0
  135. package/dist/development/src/model/FailedEventsQuery.js +14 -0
  136. package/dist/development/src/model/FailedEventsQuery.js.map +1 -0
  137. package/dist/development/src/model/SetVariableCommand.cjs +21 -0
  138. package/dist/development/src/model/SetVariableCommand.cjs.map +1 -0
  139. package/dist/development/src/model/SetVariableCommand.js +21 -0
  140. package/dist/development/src/model/SetVariableCommand.js.map +1 -0
  141. package/dist/development/src/model/VariablesManager.cjs +41 -0
  142. package/dist/development/src/model/VariablesManager.cjs.map +1 -0
  143. package/dist/development/src/model/VariablesManager.js +41 -0
  144. package/dist/development/src/model/VariablesManager.js.map +1 -0
  145. package/dist/development/src/model/VariablesQuery.cjs +10 -0
  146. package/dist/development/src/model/VariablesQuery.cjs.map +1 -0
  147. package/dist/development/src/model/VariablesQuery.js +10 -0
  148. package/dist/development/src/model/VariablesQuery.js.map +1 -0
  149. package/dist/development/src/triggers/TriggerHandler.cjs +129 -0
  150. package/dist/development/src/triggers/TriggerHandler.cjs.map +1 -0
  151. package/dist/development/src/triggers/TriggerHandler.js +129 -0
  152. package/dist/development/src/triggers/TriggerHandler.js.map +1 -0
  153. package/dist/development/src/triggers/TriggerIndirectChangesFetcher.cjs +63 -0
  154. package/dist/development/src/triggers/TriggerIndirectChangesFetcher.cjs.map +1 -0
  155. package/dist/development/src/triggers/TriggerIndirectChangesFetcher.js +63 -0
  156. package/dist/development/src/triggers/TriggerIndirectChangesFetcher.js.map +1 -0
  157. package/dist/development/src/triggers/TriggerListenersBuilder.cjs +169 -0
  158. package/dist/development/src/triggers/TriggerListenersBuilder.cjs.map +1 -0
  159. package/dist/development/src/triggers/TriggerListenersBuilder.js +169 -0
  160. package/dist/development/src/triggers/TriggerListenersBuilder.js.map +1 -0
  161. package/dist/development/src/triggers/TriggerListenersFactory.cjs +17 -0
  162. package/dist/development/src/triggers/TriggerListenersFactory.cjs.map +1 -0
  163. package/dist/development/src/triggers/TriggerListenersFactory.js +17 -0
  164. package/dist/development/src/triggers/TriggerListenersFactory.js.map +1 -0
  165. package/dist/development/src/triggers/TriggerListenersStore.cjs +24 -0
  166. package/dist/development/src/triggers/TriggerListenersStore.cjs.map +1 -0
  167. package/dist/development/src/triggers/TriggerListenersStore.js +24 -0
  168. package/dist/development/src/triggers/TriggerListenersStore.js.map +1 -0
  169. package/dist/development/src/triggers/TriggerPayloadBuilder.cjs +163 -0
  170. package/dist/development/src/triggers/TriggerPayloadBuilder.cjs.map +1 -0
  171. package/dist/development/src/triggers/TriggerPayloadBuilder.js +163 -0
  172. package/dist/development/src/triggers/TriggerPayloadBuilder.js.map +1 -0
  173. package/dist/development/src/triggers/TriggerPayloadManager.cjs +27 -0
  174. package/dist/development/src/triggers/TriggerPayloadManager.cjs.map +1 -0
  175. package/dist/development/src/triggers/TriggerPayloadManager.js +27 -0
  176. package/dist/development/src/triggers/TriggerPayloadManager.js.map +1 -0
  177. package/dist/development/src/triggers/TriggerPayloadPersister.cjs +47 -0
  178. package/dist/development/src/triggers/TriggerPayloadPersister.cjs.map +1 -0
  179. package/dist/development/src/triggers/TriggerPayloadPersister.js +47 -0
  180. package/dist/development/src/triggers/TriggerPayloadPersister.js.map +1 -0
  181. package/dist/development/src/utils/assertNever.cjs +7 -0
  182. package/dist/development/src/utils/assertNever.cjs.map +1 -0
  183. package/dist/development/src/utils/assertNever.js +7 -0
  184. package/dist/development/src/utils/assertNever.js.map +1 -0
  185. package/dist/development/src/utils/map.cjs +13 -0
  186. package/dist/development/src/utils/map.cjs.map +1 -0
  187. package/dist/development/src/utils/map.js +13 -0
  188. package/dist/development/src/utils/map.js.map +1 -0
  189. package/dist/development/src/utils/notifyChannel.cjs +9 -0
  190. package/dist/development/src/utils/notifyChannel.cjs.map +1 -0
  191. package/dist/development/src/utils/notifyChannel.js +9 -0
  192. package/dist/development/src/utils/notifyChannel.js.map +1 -0
  193. package/dist/production/index.cjs +118 -0
  194. package/dist/production/index.cjs.map +1 -0
  195. package/dist/production/index.js +118 -0
  196. package/dist/production/index.js.map +1 -0
  197. package/dist/production/src/ActionsExecutionContainerHookFactory.cjs +42 -0
  198. package/dist/production/src/ActionsExecutionContainerHookFactory.cjs.map +1 -0
  199. package/dist/production/src/ActionsExecutionContainerHookFactory.js +42 -0
  200. package/dist/production/src/ActionsExecutionContainerHookFactory.js.map +1 -0
  201. package/dist/production/src/ImplementationException.cjs +6 -0
  202. package/dist/production/src/ImplementationException.cjs.map +1 -0
  203. package/dist/production/src/ImplementationException.js +6 -0
  204. package/dist/production/src/ImplementationException.js.map +1 -0
  205. package/dist/production/src/ListenerStoreProvider.cjs +25 -0
  206. package/dist/production/src/ListenerStoreProvider.cjs.map +1 -0
  207. package/dist/production/src/ListenerStoreProvider.js +25 -0
  208. package/dist/production/src/ListenerStoreProvider.js.map +1 -0
  209. package/dist/production/src/authorization/ActionsAuthorizationActions.cjs +17 -0
  210. package/dist/production/src/authorization/ActionsAuthorizationActions.cjs.map +1 -0
  211. package/dist/production/src/authorization/ActionsAuthorizationActions.js +18 -0
  212. package/dist/production/src/authorization/ActionsAuthorizationActions.js.map +1 -0
  213. package/dist/production/src/authorization/ActionsPermissionsFactory.cjs +16 -0
  214. package/dist/production/src/authorization/ActionsPermissionsFactory.cjs.map +1 -0
  215. package/dist/production/src/authorization/ActionsPermissionsFactory.js +16 -0
  216. package/dist/production/src/authorization/ActionsPermissionsFactory.js.map +1 -0
  217. package/dist/production/src/dispatch/DispatchWorkerSupervisor.cjs +127 -0
  218. package/dist/production/src/dispatch/DispatchWorkerSupervisor.cjs.map +1 -0
  219. package/dist/production/src/dispatch/DispatchWorkerSupervisor.js +127 -0
  220. package/dist/production/src/dispatch/DispatchWorkerSupervisor.js.map +1 -0
  221. package/dist/production/src/dispatch/EventDispatcher.cjs +43 -0
  222. package/dist/production/src/dispatch/EventDispatcher.cjs.map +1 -0
  223. package/dist/production/src/dispatch/EventDispatcher.js +43 -0
  224. package/dist/production/src/dispatch/EventDispatcher.js.map +1 -0
  225. package/dist/production/src/dispatch/EventsRepository.cjs +122 -0
  226. package/dist/production/src/dispatch/EventsRepository.cjs.map +1 -0
  227. package/dist/production/src/dispatch/EventsRepository.js +122 -0
  228. package/dist/production/src/dispatch/EventsRepository.js.map +1 -0
  229. package/dist/production/src/dispatch/ProjectDispatcher.cjs +99 -0
  230. package/dist/production/src/dispatch/ProjectDispatcher.cjs.map +1 -0
  231. package/dist/production/src/dispatch/ProjectDispatcher.js +99 -0
  232. package/dist/production/src/dispatch/ProjectDispatcher.js.map +1 -0
  233. package/dist/production/src/dispatch/TargetHandlerResolver.cjs +16 -0
  234. package/dist/production/src/dispatch/TargetHandlerResolver.cjs.map +1 -0
  235. package/dist/production/src/dispatch/TargetHandlerResolver.js +16 -0
  236. package/dist/production/src/dispatch/TargetHandlerResolver.js.map +1 -0
  237. package/dist/production/src/dispatch/WebhookFetcher.cjs +16 -0
  238. package/dist/production/src/dispatch/WebhookFetcher.cjs.map +1 -0
  239. package/dist/production/src/dispatch/WebhookFetcher.js +16 -0
  240. package/dist/production/src/dispatch/WebhookFetcher.js.map +1 -0
  241. package/dist/production/src/dispatch/WebhookTargetHandler.cjs +198 -0
  242. package/dist/production/src/dispatch/WebhookTargetHandler.cjs.map +1 -0
  243. package/dist/production/src/dispatch/WebhookTargetHandler.js +181 -0
  244. package/dist/production/src/dispatch/WebhookTargetHandler.js.map +1 -0
  245. package/dist/production/src/graphql/http/ActionsApiMiddlewareFactory.cjs +39 -0
  246. package/dist/production/src/graphql/http/ActionsApiMiddlewareFactory.cjs.map +1 -0
  247. package/dist/production/src/graphql/http/ActionsApiMiddlewareFactory.js +39 -0
  248. package/dist/production/src/graphql/http/ActionsApiMiddlewareFactory.js.map +1 -0
  249. package/dist/production/src/graphql/http/ActionsContextResolver.cjs +36 -0
  250. package/dist/production/src/graphql/http/ActionsContextResolver.cjs.map +1 -0
  251. package/dist/production/src/graphql/http/ActionsContextResolver.js +36 -0
  252. package/dist/production/src/graphql/http/ActionsContextResolver.js.map +1 -0
  253. package/dist/production/src/graphql/http/ActionsGraphQLHandlerFactory.cjs +20 -0
  254. package/dist/production/src/graphql/http/ActionsGraphQLHandlerFactory.cjs.map +1 -0
  255. package/dist/production/src/graphql/http/ActionsGraphQLHandlerFactory.js +20 -0
  256. package/dist/production/src/graphql/http/ActionsGraphQLHandlerFactory.js.map +1 -0
  257. package/dist/production/src/graphql/http/ActionsWebsocketControllerFactory.cjs +152 -0
  258. package/dist/production/src/graphql/http/ActionsWebsocketControllerFactory.cjs.map +1 -0
  259. package/dist/production/src/graphql/http/ActionsWebsocketControllerFactory.js +135 -0
  260. package/dist/production/src/graphql/http/ActionsWebsocketControllerFactory.js.map +1 -0
  261. package/dist/production/src/graphql/resolvers/ResolversFactory.cjs +36 -0
  262. package/dist/production/src/graphql/resolvers/ResolversFactory.cjs.map +1 -0
  263. package/dist/production/src/graphql/resolvers/ResolversFactory.js +36 -0
  264. package/dist/production/src/graphql/resolvers/ResolversFactory.js.map +1 -0
  265. package/dist/production/src/graphql/resolvers/mutation/ProcessBatchMutationResolver.cjs +19 -0
  266. package/dist/production/src/graphql/resolvers/mutation/ProcessBatchMutationResolver.cjs.map +1 -0
  267. package/dist/production/src/graphql/resolvers/mutation/ProcessBatchMutationResolver.js +19 -0
  268. package/dist/production/src/graphql/resolvers/mutation/ProcessBatchMutationResolver.js.map +1 -0
  269. package/dist/production/src/graphql/resolvers/mutation/RetryEventMutationResolver.cjs +21 -0
  270. package/dist/production/src/graphql/resolvers/mutation/RetryEventMutationResolver.cjs.map +1 -0
  271. package/dist/production/src/graphql/resolvers/mutation/RetryEventMutationResolver.js +21 -0
  272. package/dist/production/src/graphql/resolvers/mutation/RetryEventMutationResolver.js.map +1 -0
  273. package/dist/production/src/graphql/resolvers/mutation/SetVariablesMutationResolver.cjs +19 -0
  274. package/dist/production/src/graphql/resolvers/mutation/SetVariablesMutationResolver.cjs.map +1 -0
  275. package/dist/production/src/graphql/resolvers/mutation/SetVariablesMutationResolver.js +19 -0
  276. package/dist/production/src/graphql/resolvers/mutation/SetVariablesMutationResolver.js.map +1 -0
  277. package/dist/production/src/graphql/resolvers/mutation/StopEventMutationResolver.cjs +19 -0
  278. package/dist/production/src/graphql/resolvers/mutation/StopEventMutationResolver.cjs.map +1 -0
  279. package/dist/production/src/graphql/resolvers/mutation/StopEventMutationResolver.js +19 -0
  280. package/dist/production/src/graphql/resolvers/mutation/StopEventMutationResolver.js.map +1 -0
  281. package/dist/production/src/graphql/resolvers/query/EventsQueryResolver.cjs +61 -0
  282. package/dist/production/src/graphql/resolvers/query/EventsQueryResolver.cjs.map +1 -0
  283. package/dist/production/src/graphql/resolvers/query/EventsQueryResolver.js +61 -0
  284. package/dist/production/src/graphql/resolvers/query/EventsQueryResolver.js.map +1 -0
  285. package/dist/production/src/graphql/resolvers/query/VariablesQueryResolver.cjs +19 -0
  286. package/dist/production/src/graphql/resolvers/query/VariablesQueryResolver.cjs.map +1 -0
  287. package/dist/production/src/graphql/resolvers/query/VariablesQueryResolver.js +19 -0
  288. package/dist/production/src/graphql/resolvers/query/VariablesQueryResolver.js.map +1 -0
  289. package/dist/production/src/graphql/schema/actions.graphql.cjs +107 -0
  290. package/dist/production/src/graphql/schema/actions.graphql.cjs.map +1 -0
  291. package/dist/production/src/graphql/schema/actions.graphql.js +107 -0
  292. package/dist/production/src/graphql/schema/actions.graphql.js.map +1 -0
  293. package/dist/production/src/migrations/2023-03-10-145000-actions-variables.cjs +16 -0
  294. package/dist/production/src/migrations/2023-03-10-145000-actions-variables.cjs.map +1 -0
  295. package/dist/production/src/migrations/2023-03-10-145000-actions-variables.js +17 -0
  296. package/dist/production/src/migrations/2023-03-10-145000-actions-variables.js.map +1 -0
  297. package/dist/production/src/migrations/2025-05-28-160000-action-event-user.cjs +16 -0
  298. package/dist/production/src/migrations/2025-05-28-160000-action-event-user.cjs.map +1 -0
  299. package/dist/production/src/migrations/2025-05-28-160000-action-event-user.js +17 -0
  300. package/dist/production/src/migrations/2025-05-28-160000-action-event-user.js.map +1 -0
  301. package/dist/production/src/migrations/index.cjs +12 -0
  302. package/dist/production/src/migrations/index.cjs.map +1 -0
  303. package/dist/production/src/migrations/index.js +12 -0
  304. package/dist/production/src/migrations/index.js.map +1 -0
  305. package/dist/production/src/migrations/snapshot.cjs +51 -0
  306. package/dist/production/src/migrations/snapshot.cjs.map +1 -0
  307. package/dist/production/src/migrations/snapshot.js +52 -0
  308. package/dist/production/src/migrations/snapshot.js.map +1 -0
  309. package/dist/production/src/model/EventByIdQuery.cjs +17 -0
  310. package/dist/production/src/model/EventByIdQuery.cjs.map +1 -0
  311. package/dist/production/src/model/EventByIdQuery.js +17 -0
  312. package/dist/production/src/model/EventByIdQuery.js.map +1 -0
  313. package/dist/production/src/model/EventsInProcessingQuery.cjs +14 -0
  314. package/dist/production/src/model/EventsInProcessingQuery.cjs.map +1 -0
  315. package/dist/production/src/model/EventsInProcessingQuery.js +14 -0
  316. package/dist/production/src/model/EventsInProcessingQuery.js.map +1 -0
  317. package/dist/production/src/model/EventsToProcessQuery.cjs +15 -0
  318. package/dist/production/src/model/EventsToProcessQuery.cjs.map +1 -0
  319. package/dist/production/src/model/EventsToProcessQuery.js +15 -0
  320. package/dist/production/src/model/EventsToProcessQuery.js.map +1 -0
  321. package/dist/production/src/model/EventsToProcessSpecification.cjs +8 -0
  322. package/dist/production/src/model/EventsToProcessSpecification.cjs.map +1 -0
  323. package/dist/production/src/model/EventsToProcessSpecification.js +8 -0
  324. package/dist/production/src/model/EventsToProcessSpecification.js.map +1 -0
  325. package/dist/production/src/model/FailedEventsQuery.cjs +14 -0
  326. package/dist/production/src/model/FailedEventsQuery.cjs.map +1 -0
  327. package/dist/production/src/model/FailedEventsQuery.js +14 -0
  328. package/dist/production/src/model/FailedEventsQuery.js.map +1 -0
  329. package/dist/production/src/model/SetVariableCommand.cjs +21 -0
  330. package/dist/production/src/model/SetVariableCommand.cjs.map +1 -0
  331. package/dist/production/src/model/SetVariableCommand.js +21 -0
  332. package/dist/production/src/model/SetVariableCommand.js.map +1 -0
  333. package/dist/production/src/model/VariablesManager.cjs +41 -0
  334. package/dist/production/src/model/VariablesManager.cjs.map +1 -0
  335. package/dist/production/src/model/VariablesManager.js +41 -0
  336. package/dist/production/src/model/VariablesManager.js.map +1 -0
  337. package/dist/production/src/model/VariablesQuery.cjs +10 -0
  338. package/dist/production/src/model/VariablesQuery.cjs.map +1 -0
  339. package/dist/production/src/model/VariablesQuery.js +10 -0
  340. package/dist/production/src/model/VariablesQuery.js.map +1 -0
  341. package/dist/production/src/triggers/TriggerHandler.cjs +129 -0
  342. package/dist/production/src/triggers/TriggerHandler.cjs.map +1 -0
  343. package/dist/production/src/triggers/TriggerHandler.js +129 -0
  344. package/dist/production/src/triggers/TriggerHandler.js.map +1 -0
  345. package/dist/production/src/triggers/TriggerIndirectChangesFetcher.cjs +63 -0
  346. package/dist/production/src/triggers/TriggerIndirectChangesFetcher.cjs.map +1 -0
  347. package/dist/production/src/triggers/TriggerIndirectChangesFetcher.js +63 -0
  348. package/dist/production/src/triggers/TriggerIndirectChangesFetcher.js.map +1 -0
  349. package/dist/production/src/triggers/TriggerListenersBuilder.cjs +169 -0
  350. package/dist/production/src/triggers/TriggerListenersBuilder.cjs.map +1 -0
  351. package/dist/production/src/triggers/TriggerListenersBuilder.js +169 -0
  352. package/dist/production/src/triggers/TriggerListenersBuilder.js.map +1 -0
  353. package/dist/production/src/triggers/TriggerListenersFactory.cjs +17 -0
  354. package/dist/production/src/triggers/TriggerListenersFactory.cjs.map +1 -0
  355. package/dist/production/src/triggers/TriggerListenersFactory.js +17 -0
  356. package/dist/production/src/triggers/TriggerListenersFactory.js.map +1 -0
  357. package/dist/production/src/triggers/TriggerListenersStore.cjs +24 -0
  358. package/dist/production/src/triggers/TriggerListenersStore.cjs.map +1 -0
  359. package/dist/production/src/triggers/TriggerListenersStore.js +24 -0
  360. package/dist/production/src/triggers/TriggerListenersStore.js.map +1 -0
  361. package/dist/production/src/triggers/TriggerPayloadBuilder.cjs +163 -0
  362. package/dist/production/src/triggers/TriggerPayloadBuilder.cjs.map +1 -0
  363. package/dist/production/src/triggers/TriggerPayloadBuilder.js +163 -0
  364. package/dist/production/src/triggers/TriggerPayloadBuilder.js.map +1 -0
  365. package/dist/production/src/triggers/TriggerPayloadManager.cjs +27 -0
  366. package/dist/production/src/triggers/TriggerPayloadManager.cjs.map +1 -0
  367. package/dist/production/src/triggers/TriggerPayloadManager.js +27 -0
  368. package/dist/production/src/triggers/TriggerPayloadManager.js.map +1 -0
  369. package/dist/production/src/triggers/TriggerPayloadPersister.cjs +47 -0
  370. package/dist/production/src/triggers/TriggerPayloadPersister.cjs.map +1 -0
  371. package/dist/production/src/triggers/TriggerPayloadPersister.js +47 -0
  372. package/dist/production/src/triggers/TriggerPayloadPersister.js.map +1 -0
  373. package/dist/production/src/utils/assertNever.cjs +7 -0
  374. package/dist/production/src/utils/assertNever.cjs.map +1 -0
  375. package/dist/production/src/utils/assertNever.js +7 -0
  376. package/dist/production/src/utils/assertNever.js.map +1 -0
  377. package/dist/production/src/utils/map.cjs +13 -0
  378. package/dist/production/src/utils/map.cjs.map +1 -0
  379. package/dist/production/src/utils/map.js +13 -0
  380. package/dist/production/src/utils/map.js.map +1 -0
  381. package/dist/production/src/utils/notifyChannel.cjs +9 -0
  382. package/dist/production/src/utils/notifyChannel.cjs.map +1 -0
  383. package/dist/production/src/utils/notifyChannel.js +9 -0
  384. package/dist/production/src/utils/notifyChannel.js.map +1 -0
  385. package/dist/tests/cases/unit/generator.test.d.ts +2 -0
  386. package/dist/tests/cases/unit/generator.test.d.ts.map +1 -0
  387. package/dist/tests/cases/unit/webhookHandler.test.d.ts +2 -0
  388. package/dist/tests/cases/unit/webhookHandler.test.d.ts.map +1 -0
  389. package/dist/tests/src/gql.d.ts +2 -0
  390. package/dist/tests/src/gql.d.ts.map +1 -0
  391. package/dist/tests/src/uuid.d.ts +3 -0
  392. package/dist/tests/src/uuid.d.ts.map +1 -0
  393. package/dist/tests/tsconfig.tsbuildinfo +1 -0
  394. package/dist/types/ActionsExecutionContainerHookFactory.d.ts +8 -0
  395. package/dist/types/ActionsExecutionContainerHookFactory.d.ts.map +1 -0
  396. package/dist/types/ImplementationException.d.ts +3 -0
  397. package/dist/types/ImplementationException.d.ts.map +1 -0
  398. package/dist/types/ListenerStoreProvider.d.ts +7 -0
  399. package/dist/types/ListenerStoreProvider.d.ts.map +1 -0
  400. package/dist/types/authorization/ActionsAuthorizationActions.d.ts +38 -0
  401. package/dist/types/authorization/ActionsAuthorizationActions.d.ts.map +1 -0
  402. package/dist/types/authorization/ActionsPermissionsFactory.d.ts +5 -0
  403. package/dist/types/authorization/ActionsPermissionsFactory.d.ts.map +1 -0
  404. package/dist/types/authorization/Identity.d.ts +5 -0
  405. package/dist/types/authorization/Identity.d.ts.map +1 -0
  406. package/dist/types/authorization/index.d.ts +4 -0
  407. package/dist/types/authorization/index.d.ts.map +1 -0
  408. package/dist/types/dispatch/DispatchWorkerSupervisor.d.ts +17 -0
  409. package/dist/types/dispatch/DispatchWorkerSupervisor.d.ts.map +1 -0
  410. package/dist/types/dispatch/EventDispatcher.d.ts +25 -0
  411. package/dist/types/dispatch/EventDispatcher.d.ts.map +1 -0
  412. package/dist/types/dispatch/EventsRepository.d.ts +23 -0
  413. package/dist/types/dispatch/EventsRepository.d.ts.map +1 -0
  414. package/dist/types/dispatch/ProjectDispatcher.d.ts +22 -0
  415. package/dist/types/dispatch/ProjectDispatcher.d.ts.map +1 -0
  416. package/dist/types/dispatch/TargetHandlerResolver.d.ts +9 -0
  417. package/dist/types/dispatch/TargetHandlerResolver.d.ts.map +1 -0
  418. package/dist/types/dispatch/WebhookFetcher.d.ts +14 -0
  419. package/dist/types/dispatch/WebhookFetcher.d.ts.map +1 -0
  420. package/dist/types/dispatch/WebhookTargetHandler.d.ts +16 -0
  421. package/dist/types/dispatch/WebhookTargetHandler.d.ts.map +1 -0
  422. package/dist/types/dispatch/types.d.ts +27 -0
  423. package/dist/types/dispatch/types.d.ts.map +1 -0
  424. package/dist/types/graphql/http/ActionsApiMiddlewareFactory.d.ts +13 -0
  425. package/dist/types/graphql/http/ActionsApiMiddlewareFactory.d.ts.map +1 -0
  426. package/dist/types/graphql/http/ActionsContextResolver.d.ts +14 -0
  427. package/dist/types/graphql/http/ActionsContextResolver.d.ts.map +1 -0
  428. package/dist/types/graphql/http/ActionsGraphQLHandlerFactory.d.ts +8 -0
  429. package/dist/types/graphql/http/ActionsGraphQLHandlerFactory.d.ts.map +1 -0
  430. package/dist/types/graphql/http/ActionsWebsocketControllerFactory.d.ts +11 -0
  431. package/dist/types/graphql/http/ActionsWebsocketControllerFactory.d.ts.map +1 -0
  432. package/dist/types/graphql/resolvers/ActionsContext.d.ts +14 -0
  433. package/dist/types/graphql/resolvers/ActionsContext.d.ts.map +1 -0
  434. package/dist/types/graphql/resolvers/ResolversFactory.d.ts +15 -0
  435. package/dist/types/graphql/resolvers/ResolversFactory.d.ts.map +1 -0
  436. package/dist/types/graphql/resolvers/index.d.ts +3 -0
  437. package/dist/types/graphql/resolvers/index.d.ts.map +1 -0
  438. package/dist/types/graphql/resolvers/mutation/ProcessBatchMutationResolver.d.ts +11 -0
  439. package/dist/types/graphql/resolvers/mutation/ProcessBatchMutationResolver.d.ts.map +1 -0
  440. package/dist/types/graphql/resolvers/mutation/RetryEventMutationResolver.d.ts +11 -0
  441. package/dist/types/graphql/resolvers/mutation/RetryEventMutationResolver.d.ts.map +1 -0
  442. package/dist/types/graphql/resolvers/mutation/SetVariablesMutationResolver.d.ts +11 -0
  443. package/dist/types/graphql/resolvers/mutation/SetVariablesMutationResolver.d.ts.map +1 -0
  444. package/dist/types/graphql/resolvers/mutation/StopEventMutationResolver.d.ts +11 -0
  445. package/dist/types/graphql/resolvers/mutation/StopEventMutationResolver.d.ts.map +1 -0
  446. package/dist/types/graphql/resolvers/mutation/index.d.ts +5 -0
  447. package/dist/types/graphql/resolvers/mutation/index.d.ts.map +1 -0
  448. package/dist/types/graphql/resolvers/query/EventsQueryResolver.d.ts +14 -0
  449. package/dist/types/graphql/resolvers/query/EventsQueryResolver.d.ts.map +1 -0
  450. package/dist/types/graphql/resolvers/query/VariablesQueryResolver.d.ts +12 -0
  451. package/dist/types/graphql/resolvers/query/VariablesQueryResolver.d.ts.map +1 -0
  452. package/dist/types/graphql/resolvers/query/index.d.ts +2 -0
  453. package/dist/types/graphql/resolvers/query/index.d.ts.map +1 -0
  454. package/dist/types/graphql/schema/actions.graphql.d.ts +3 -0
  455. package/dist/types/graphql/schema/actions.graphql.d.ts.map +1 -0
  456. package/dist/types/graphql/schema/index.d.ts +299 -0
  457. package/dist/types/graphql/schema/index.d.ts.map +1 -0
  458. package/dist/types/index.d.ts +13 -0
  459. package/dist/types/index.d.ts.map +1 -0
  460. package/dist/types/migrations/2023-03-10-145000-actions-variables.d.ts +3 -0
  461. package/dist/types/migrations/2023-03-10-145000-actions-variables.d.ts.map +1 -0
  462. package/dist/types/migrations/2025-05-28-160000-action-event-user.d.ts +3 -0
  463. package/dist/types/migrations/2025-05-28-160000-action-event-user.d.ts.map +1 -0
  464. package/dist/types/migrations/index.d.ts +3 -0
  465. package/dist/types/migrations/index.d.ts.map +1 -0
  466. package/dist/types/migrations/snapshot.d.ts +3 -0
  467. package/dist/types/migrations/snapshot.d.ts.map +1 -0
  468. package/dist/types/model/EventByIdQuery.d.ts +8 -0
  469. package/dist/types/model/EventByIdQuery.d.ts.map +1 -0
  470. package/dist/types/model/EventsInProcessingQuery.d.ts +9 -0
  471. package/dist/types/model/EventsInProcessingQuery.d.ts.map +1 -0
  472. package/dist/types/model/EventsToProcessQuery.d.ts +9 -0
  473. package/dist/types/model/EventsToProcessQuery.d.ts.map +1 -0
  474. package/dist/types/model/EventsToProcessSpecification.d.ts +4 -0
  475. package/dist/types/model/EventsToProcessSpecification.d.ts.map +1 -0
  476. package/dist/types/model/FailedEventsQuery.d.ts +9 -0
  477. package/dist/types/model/FailedEventsQuery.d.ts.map +1 -0
  478. package/dist/types/model/SetVariableCommand.d.ts +8 -0
  479. package/dist/types/model/SetVariableCommand.d.ts.map +1 -0
  480. package/dist/types/model/VariablesManager.d.ts +8 -0
  481. package/dist/types/model/VariablesManager.d.ts.map +1 -0
  482. package/dist/types/model/VariablesQuery.d.ts +12 -0
  483. package/dist/types/model/VariablesQuery.d.ts.map +1 -0
  484. package/dist/types/model/types.d.ts +22 -0
  485. package/dist/types/model/types.d.ts.map +1 -0
  486. package/dist/types/triggers/TriggerHandler.d.ts +26 -0
  487. package/dist/types/triggers/TriggerHandler.d.ts.map +1 -0
  488. package/dist/types/triggers/TriggerIndirectChangesFetcher.d.ts +19 -0
  489. package/dist/types/triggers/TriggerIndirectChangesFetcher.d.ts.map +1 -0
  490. package/dist/types/triggers/TriggerListeners.d.ts +9 -0
  491. package/dist/types/triggers/TriggerListeners.d.ts.map +1 -0
  492. package/dist/types/triggers/TriggerListenersBuilder.d.ts +15 -0
  493. package/dist/types/triggers/TriggerListenersBuilder.d.ts.map +1 -0
  494. package/dist/types/triggers/TriggerListenersFactory.d.ts +8 -0
  495. package/dist/types/triggers/TriggerListenersFactory.d.ts.map +1 -0
  496. package/dist/types/triggers/TriggerListenersStore.d.ts +48 -0
  497. package/dist/types/triggers/TriggerListenersStore.d.ts.map +1 -0
  498. package/dist/types/triggers/TriggerPayloadBuilder.d.ts +14 -0
  499. package/dist/types/triggers/TriggerPayloadBuilder.d.ts.map +1 -0
  500. package/dist/types/triggers/TriggerPayloadManager.d.ts +22 -0
  501. package/dist/types/triggers/TriggerPayloadManager.d.ts.map +1 -0
  502. package/dist/types/triggers/TriggerPayloadPersister.d.ts +21 -0
  503. package/dist/types/triggers/TriggerPayloadPersister.d.ts.map +1 -0
  504. package/dist/types/triggers/index.d.ts +8 -0
  505. package/dist/types/triggers/index.d.ts.map +1 -0
  506. package/dist/types/tsconfig.tsbuildinfo +1 -0
  507. package/dist/types/utils/assertNever.d.ts +2 -0
  508. package/dist/types/utils/assertNever.d.ts.map +1 -0
  509. package/dist/types/utils/map.d.ts +2 -0
  510. package/dist/types/utils/map.d.ts.map +1 -0
  511. package/dist/types/utils/notifyChannel.d.ts +4 -0
  512. package/dist/types/utils/notifyChannel.d.ts.map +1 -0
  513. package/package.json +22 -22
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TriggerIndirectChangesFetcher.cjs","sources":["../../../../../packages/engine-actions/src/triggers/TriggerIndirectChangesFetcher.ts"],"sourcesContent":["import { Mapper, PathFactory, WhereBuilder } from '@contember/engine-content-api'\nimport { IndirectListener, JunctionListener } from './TriggerListenersStore'\nimport { SelectBuilder } from '@contember/database'\nimport { ActionsPayload, Input, Model, Schema } from '@contember/schema'\nimport { JoinBuilder } from '@contember/engine-content-api'\nimport { getTargetEntity } from '@contember/schema-utils'\n\nexport type TriggerIndirectChangesFetcherResult = {\n\tid: Input.PrimaryValue\n\tnodes?: ActionsPayload.EntityEventPathNode[]\n}[]\n\nexport class TriggerIndirectChangesFetcher {\n\tconstructor(\n\t\tprivate readonly model: Model.Schema,\n\t\tprivate readonly mapper: Mapper,\n\t\tprivate readonly whereBuilder: WhereBuilder,\n\t\tprivate readonly joinBuilder: JoinBuilder,\n\t\tprivate readonly pathFactory: PathFactory,\n\t) {\n\t}\n\n\tpublic async fetch(\n\t\tlistener: IndirectListener | JunctionListener,\n\t\twhere: Input.Where,\n\t): Promise<TriggerIndirectChangesFetcherResult> {\n\t\tif (listener.trigger.withNodes) {\n\t\t\treturn this.fetchWithNodes(listener, where)\n\t\t}\n\n\t\tfor (let i = listener.path.length - 1; i >= 0; i--) {\n\t\t\twhere = { [listener.path[i]]: where }\n\t\t}\n\t\tconst qb = SelectBuilder.create<{ id: Input.PrimaryValue }>()\n\t\t\t.from(listener.rootEntity.tableName, 'root_')\n\t\t\t.select(['root_', listener.rootEntity.primaryColumn], 'id')\n\t\tconst path = this.pathFactory.create([])\n\t\tconst qbWithWhere = this.whereBuilder.build(qb, listener.rootEntity, path, where)\n\n\t\treturn (await qbWithWhere.getResult(this.mapper.db))\n\t}\n\n\tprivate async fetchWithNodes(\n\t\tlistener: IndirectListener | JunctionListener,\n\t\twhere: Input.Where,\n\t): Promise<TriggerIndirectChangesFetcherResult> {\n\t\tconst basePath = this.pathFactory.create([])\n\t\tlet path = basePath\n\t\tlet entity = listener.rootEntity\n\t\tlet qb = SelectBuilder.create()\n\t\t\t.from(entity.tableName, path.alias)\n\t\t\t.select([path.alias, entity.primaryColumn], path.for(entity.primary).alias)\n\n\t\tfor (let i = 0; i < listener.path.length; i++) {\n\t\t\tconst relationName = listener.path[i]\n\t\t\tpath = path.for(relationName)\n\t\t\tconst targetEntity = getTargetEntity(this.model, entity, relationName)\n\t\t\tif (!targetEntity) {\n\t\t\t\tthrow new Error(`Target entity for relation ${entity.name}::${relationName} not found`)\n\t\t\t}\n\t\t\tqb = this.joinBuilder.join(qb, path, entity, relationName)\n\n\t\t\tentity = targetEntity\n\t\t\tqb = qb.select([path.alias, targetEntity.primaryColumn], path.for(targetEntity.primary).alias)\n\t\t}\n\n\t\tconst qbWithWhere = this.whereBuilder.build(qb, entity, path, where)\n\n\t\tconst result = await qbWithWhere.getResult(this.mapper.db)\n\n\t\treturn result.map(row => {\n\t\t\tconst nodes: ActionsPayload.EntityEventPathNode[] = []\n\t\t\tlet entity = listener.rootEntity\n\t\t\tlet path = basePath\n\t\t\tconst id = row[path.for(entity.primary).alias]\n\t\t\tfor (let i = 0; i < listener.path.length; i++) {\n\t\t\t\tconst relationName = listener.path[i]\n\t\t\t\tconst targetEntity = getTargetEntity(this.model, entity, relationName)\n\t\t\t\tif (!targetEntity) {\n\t\t\t\t\tthrow new Error(`Target entity for relation ${entity.name}::${relationName} not found`)\n\t\t\t\t}\n\t\t\t\tpath = path.for(relationName)\n\t\t\t\tnodes.push({ relation: relationName, entity: targetEntity.name, id: row[path.for(targetEntity.primary).alias] })\n\t\t\t\tentity = targetEntity\n\t\t\t}\n\t\t\treturn { id, nodes }\n\t\t})\n\t}\n}\n"],"names":["SelectBuilder","getTargetEntity","entity","path"],"mappings":";;;;AAYO,MAAM,8BAA8B;AAAA,EAC1C,YACkB,OACA,QACA,cACA,aACA,aAChB;AALgB,SAAA,QAAA;AACA,SAAA,SAAA;AACA,SAAA,eAAA;AACA,SAAA,cAAA;AACA,SAAA,cAAA;AAAA,EAElB;AAAA,EAEA,MAAa,MACZ,UACA,OAC+C;AAC/C,QAAI,SAAS,QAAQ,WAAW;AAC/B,aAAO,KAAK,eAAe,UAAU,KAAK;AAAA,IAC3C;AAEA,aAAS,IAAI,SAAS,KAAK,SAAS,GAAG,KAAK,GAAG,KAAK;AACnD,cAAQ,EAAE,CAAC,SAAS,KAAK,CAAC,CAAC,GAAG,MAAA;AAAA,IAC/B;AACA,UAAM,KAAKA,SAAAA,cAAc,OAAA,EACvB,KAAK,SAAS,WAAW,WAAW,OAAO,EAC3C,OAAO,CAAC,SAAS,SAAS,WAAW,aAAa,GAAG,IAAI;AAC3D,UAAM,OAAO,KAAK,YAAY,OAAO,CAAA,CAAE;AACvC,UAAM,cAAc,KAAK,aAAa,MAAM,IAAI,SAAS,YAAY,MAAM,KAAK;AAEhF,WAAQ,MAAM,YAAY,UAAU,KAAK,OAAO,EAAE;AAAA,EACnD;AAAA,EAEA,MAAc,eACb,UACA,OAC+C;AAC/C,UAAM,WAAW,KAAK,YAAY,OAAO,CAAA,CAAE;AAC3C,QAAI,OAAO;AACX,QAAI,SAAS,SAAS;AACtB,QAAI,KAAKA,uBAAc,SACrB,KAAK,OAAO,WAAW,KAAK,KAAK,EACjC,OAAO,CAAC,KAAK,OAAO,OAAO,aAAa,GAAG,KAAK,IAAI,OAAO,OAAO,EAAE,KAAK;AAE3E,aAAS,IAAI,GAAG,IAAI,SAAS,KAAK,QAAQ,KAAK;AAC9C,YAAM,eAAe,SAAS,KAAK,CAAC;AACpC,aAAO,KAAK,IAAI,YAAY;AAC5B,YAAM,eAAeC,YAAAA,gBAAgB,KAAK,OAAO,QAAQ,YAAY;AACrE,UAAI,CAAC,cAAc;AAClB,cAAM,IAAI,MAAM,8BAA8B,OAAO,IAAI,KAAK,YAAY,YAAY;AAAA,MACvF;AACA,WAAK,KAAK,YAAY,KAAK,IAAI,MAAM,QAAQ,YAAY;AAEzD,eAAS;AACT,WAAK,GAAG,OAAO,CAAC,KAAK,OAAO,aAAa,aAAa,GAAG,KAAK,IAAI,aAAa,OAAO,EAAE,KAAK;AAAA,IAC9F;AAEA,UAAM,cAAc,KAAK,aAAa,MAAM,IAAI,QAAQ,MAAM,KAAK;AAEnE,UAAM,SAAS,MAAM,YAAY,UAAU,KAAK,OAAO,EAAE;AAEzD,WAAO,OAAO,IAAI,CAAA,QAAO;AACxB,YAAM,QAA8C,CAAA;AACpD,UAAIC,UAAS,SAAS;AACtB,UAAIC,QAAO;AACX,YAAM,KAAK,IAAIA,MAAK,IAAID,QAAO,OAAO,EAAE,KAAK;AAC7C,eAAS,IAAI,GAAG,IAAI,SAAS,KAAK,QAAQ,KAAK;AAC9C,cAAM,eAAe,SAAS,KAAK,CAAC;AACpC,cAAM,eAAeD,YAAAA,gBAAgB,KAAK,OAAOC,SAAQ,YAAY;AACrE,YAAI,CAAC,cAAc;AAClB,gBAAM,IAAI,MAAM,8BAA8BA,QAAO,IAAI,KAAK,YAAY,YAAY;AAAA,QACvF;AACAC,gBAAOA,MAAK,IAAI,YAAY;AAC5B,cAAM,KAAK,EAAE,UAAU,cAAc,QAAQ,aAAa,MAAM,IAAI,IAAIA,MAAK,IAAI,aAAa,OAAO,EAAE,KAAK,GAAG;AAC/GD,kBAAS;AAAA,MACV;AACA,aAAO,EAAE,IAAI,MAAA;AAAA,IACd,CAAC;AAAA,EACF;AACD;;"}
@@ -0,0 +1,63 @@
1
+ import { SelectBuilder } from "@contember/database";
2
+ import { getTargetEntity } from "@contember/schema-utils";
3
+ class TriggerIndirectChangesFetcher {
4
+ constructor(model, mapper, whereBuilder, joinBuilder, pathFactory) {
5
+ this.model = model;
6
+ this.mapper = mapper;
7
+ this.whereBuilder = whereBuilder;
8
+ this.joinBuilder = joinBuilder;
9
+ this.pathFactory = pathFactory;
10
+ }
11
+ async fetch(listener, where) {
12
+ if (listener.trigger.withNodes) {
13
+ return this.fetchWithNodes(listener, where);
14
+ }
15
+ for (let i = listener.path.length - 1; i >= 0; i--) {
16
+ where = { [listener.path[i]]: where };
17
+ }
18
+ const qb = SelectBuilder.create().from(listener.rootEntity.tableName, "root_").select(["root_", listener.rootEntity.primaryColumn], "id");
19
+ const path = this.pathFactory.create([]);
20
+ const qbWithWhere = this.whereBuilder.build(qb, listener.rootEntity, path, where);
21
+ return await qbWithWhere.getResult(this.mapper.db);
22
+ }
23
+ async fetchWithNodes(listener, where) {
24
+ const basePath = this.pathFactory.create([]);
25
+ let path = basePath;
26
+ let entity = listener.rootEntity;
27
+ let qb = SelectBuilder.create().from(entity.tableName, path.alias).select([path.alias, entity.primaryColumn], path.for(entity.primary).alias);
28
+ for (let i = 0; i < listener.path.length; i++) {
29
+ const relationName = listener.path[i];
30
+ path = path.for(relationName);
31
+ const targetEntity = getTargetEntity(this.model, entity, relationName);
32
+ if (!targetEntity) {
33
+ throw new Error(`Target entity for relation ${entity.name}::${relationName} not found`);
34
+ }
35
+ qb = this.joinBuilder.join(qb, path, entity, relationName);
36
+ entity = targetEntity;
37
+ qb = qb.select([path.alias, targetEntity.primaryColumn], path.for(targetEntity.primary).alias);
38
+ }
39
+ const qbWithWhere = this.whereBuilder.build(qb, entity, path, where);
40
+ const result = await qbWithWhere.getResult(this.mapper.db);
41
+ return result.map((row) => {
42
+ const nodes = [];
43
+ let entity2 = listener.rootEntity;
44
+ let path2 = basePath;
45
+ const id = row[path2.for(entity2.primary).alias];
46
+ for (let i = 0; i < listener.path.length; i++) {
47
+ const relationName = listener.path[i];
48
+ const targetEntity = getTargetEntity(this.model, entity2, relationName);
49
+ if (!targetEntity) {
50
+ throw new Error(`Target entity for relation ${entity2.name}::${relationName} not found`);
51
+ }
52
+ path2 = path2.for(relationName);
53
+ nodes.push({ relation: relationName, entity: targetEntity.name, id: row[path2.for(targetEntity.primary).alias] });
54
+ entity2 = targetEntity;
55
+ }
56
+ return { id, nodes };
57
+ });
58
+ }
59
+ }
60
+ export {
61
+ TriggerIndirectChangesFetcher
62
+ };
63
+ //# sourceMappingURL=TriggerIndirectChangesFetcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TriggerIndirectChangesFetcher.js","sources":["../../../../../packages/engine-actions/src/triggers/TriggerIndirectChangesFetcher.ts"],"sourcesContent":["import { Mapper, PathFactory, WhereBuilder } from '@contember/engine-content-api'\nimport { IndirectListener, JunctionListener } from './TriggerListenersStore'\nimport { SelectBuilder } from '@contember/database'\nimport { ActionsPayload, Input, Model, Schema } from '@contember/schema'\nimport { JoinBuilder } from '@contember/engine-content-api'\nimport { getTargetEntity } from '@contember/schema-utils'\n\nexport type TriggerIndirectChangesFetcherResult = {\n\tid: Input.PrimaryValue\n\tnodes?: ActionsPayload.EntityEventPathNode[]\n}[]\n\nexport class TriggerIndirectChangesFetcher {\n\tconstructor(\n\t\tprivate readonly model: Model.Schema,\n\t\tprivate readonly mapper: Mapper,\n\t\tprivate readonly whereBuilder: WhereBuilder,\n\t\tprivate readonly joinBuilder: JoinBuilder,\n\t\tprivate readonly pathFactory: PathFactory,\n\t) {\n\t}\n\n\tpublic async fetch(\n\t\tlistener: IndirectListener | JunctionListener,\n\t\twhere: Input.Where,\n\t): Promise<TriggerIndirectChangesFetcherResult> {\n\t\tif (listener.trigger.withNodes) {\n\t\t\treturn this.fetchWithNodes(listener, where)\n\t\t}\n\n\t\tfor (let i = listener.path.length - 1; i >= 0; i--) {\n\t\t\twhere = { [listener.path[i]]: where }\n\t\t}\n\t\tconst qb = SelectBuilder.create<{ id: Input.PrimaryValue }>()\n\t\t\t.from(listener.rootEntity.tableName, 'root_')\n\t\t\t.select(['root_', listener.rootEntity.primaryColumn], 'id')\n\t\tconst path = this.pathFactory.create([])\n\t\tconst qbWithWhere = this.whereBuilder.build(qb, listener.rootEntity, path, where)\n\n\t\treturn (await qbWithWhere.getResult(this.mapper.db))\n\t}\n\n\tprivate async fetchWithNodes(\n\t\tlistener: IndirectListener | JunctionListener,\n\t\twhere: Input.Where,\n\t): Promise<TriggerIndirectChangesFetcherResult> {\n\t\tconst basePath = this.pathFactory.create([])\n\t\tlet path = basePath\n\t\tlet entity = listener.rootEntity\n\t\tlet qb = SelectBuilder.create()\n\t\t\t.from(entity.tableName, path.alias)\n\t\t\t.select([path.alias, entity.primaryColumn], path.for(entity.primary).alias)\n\n\t\tfor (let i = 0; i < listener.path.length; i++) {\n\t\t\tconst relationName = listener.path[i]\n\t\t\tpath = path.for(relationName)\n\t\t\tconst targetEntity = getTargetEntity(this.model, entity, relationName)\n\t\t\tif (!targetEntity) {\n\t\t\t\tthrow new Error(`Target entity for relation ${entity.name}::${relationName} not found`)\n\t\t\t}\n\t\t\tqb = this.joinBuilder.join(qb, path, entity, relationName)\n\n\t\t\tentity = targetEntity\n\t\t\tqb = qb.select([path.alias, targetEntity.primaryColumn], path.for(targetEntity.primary).alias)\n\t\t}\n\n\t\tconst qbWithWhere = this.whereBuilder.build(qb, entity, path, where)\n\n\t\tconst result = await qbWithWhere.getResult(this.mapper.db)\n\n\t\treturn result.map(row => {\n\t\t\tconst nodes: ActionsPayload.EntityEventPathNode[] = []\n\t\t\tlet entity = listener.rootEntity\n\t\t\tlet path = basePath\n\t\t\tconst id = row[path.for(entity.primary).alias]\n\t\t\tfor (let i = 0; i < listener.path.length; i++) {\n\t\t\t\tconst relationName = listener.path[i]\n\t\t\t\tconst targetEntity = getTargetEntity(this.model, entity, relationName)\n\t\t\t\tif (!targetEntity) {\n\t\t\t\t\tthrow new Error(`Target entity for relation ${entity.name}::${relationName} not found`)\n\t\t\t\t}\n\t\t\t\tpath = path.for(relationName)\n\t\t\t\tnodes.push({ relation: relationName, entity: targetEntity.name, id: row[path.for(targetEntity.primary).alias] })\n\t\t\t\tentity = targetEntity\n\t\t\t}\n\t\t\treturn { id, nodes }\n\t\t})\n\t}\n}\n"],"names":["entity","path"],"mappings":";;AAYO,MAAM,8BAA8B;AAAA,EAC1C,YACkB,OACA,QACA,cACA,aACA,aAChB;AALgB,SAAA,QAAA;AACA,SAAA,SAAA;AACA,SAAA,eAAA;AACA,SAAA,cAAA;AACA,SAAA,cAAA;AAAA,EAElB;AAAA,EAEA,MAAa,MACZ,UACA,OAC+C;AAC/C,QAAI,SAAS,QAAQ,WAAW;AAC/B,aAAO,KAAK,eAAe,UAAU,KAAK;AAAA,IAC3C;AAEA,aAAS,IAAI,SAAS,KAAK,SAAS,GAAG,KAAK,GAAG,KAAK;AACnD,cAAQ,EAAE,CAAC,SAAS,KAAK,CAAC,CAAC,GAAG,MAAA;AAAA,IAC/B;AACA,UAAM,KAAK,cAAc,OAAA,EACvB,KAAK,SAAS,WAAW,WAAW,OAAO,EAC3C,OAAO,CAAC,SAAS,SAAS,WAAW,aAAa,GAAG,IAAI;AAC3D,UAAM,OAAO,KAAK,YAAY,OAAO,CAAA,CAAE;AACvC,UAAM,cAAc,KAAK,aAAa,MAAM,IAAI,SAAS,YAAY,MAAM,KAAK;AAEhF,WAAQ,MAAM,YAAY,UAAU,KAAK,OAAO,EAAE;AAAA,EACnD;AAAA,EAEA,MAAc,eACb,UACA,OAC+C;AAC/C,UAAM,WAAW,KAAK,YAAY,OAAO,CAAA,CAAE;AAC3C,QAAI,OAAO;AACX,QAAI,SAAS,SAAS;AACtB,QAAI,KAAK,cAAc,SACrB,KAAK,OAAO,WAAW,KAAK,KAAK,EACjC,OAAO,CAAC,KAAK,OAAO,OAAO,aAAa,GAAG,KAAK,IAAI,OAAO,OAAO,EAAE,KAAK;AAE3E,aAAS,IAAI,GAAG,IAAI,SAAS,KAAK,QAAQ,KAAK;AAC9C,YAAM,eAAe,SAAS,KAAK,CAAC;AACpC,aAAO,KAAK,IAAI,YAAY;AAC5B,YAAM,eAAe,gBAAgB,KAAK,OAAO,QAAQ,YAAY;AACrE,UAAI,CAAC,cAAc;AAClB,cAAM,IAAI,MAAM,8BAA8B,OAAO,IAAI,KAAK,YAAY,YAAY;AAAA,MACvF;AACA,WAAK,KAAK,YAAY,KAAK,IAAI,MAAM,QAAQ,YAAY;AAEzD,eAAS;AACT,WAAK,GAAG,OAAO,CAAC,KAAK,OAAO,aAAa,aAAa,GAAG,KAAK,IAAI,aAAa,OAAO,EAAE,KAAK;AAAA,IAC9F;AAEA,UAAM,cAAc,KAAK,aAAa,MAAM,IAAI,QAAQ,MAAM,KAAK;AAEnE,UAAM,SAAS,MAAM,YAAY,UAAU,KAAK,OAAO,EAAE;AAEzD,WAAO,OAAO,IAAI,CAAA,QAAO;AACxB,YAAM,QAA8C,CAAA;AACpD,UAAIA,UAAS,SAAS;AACtB,UAAIC,QAAO;AACX,YAAM,KAAK,IAAIA,MAAK,IAAID,QAAO,OAAO,EAAE,KAAK;AAC7C,eAAS,IAAI,GAAG,IAAI,SAAS,KAAK,QAAQ,KAAK;AAC9C,cAAM,eAAe,SAAS,KAAK,CAAC;AACpC,cAAM,eAAe,gBAAgB,KAAK,OAAOA,SAAQ,YAAY;AACrE,YAAI,CAAC,cAAc;AAClB,gBAAM,IAAI,MAAM,8BAA8BA,QAAO,IAAI,KAAK,YAAY,YAAY;AAAA,QACvF;AACAC,gBAAOA,MAAK,IAAI,YAAY;AAC5B,cAAM,KAAK,EAAE,UAAU,cAAc,QAAQ,aAAa,MAAM,IAAI,IAAIA,MAAK,IAAI,aAAa,OAAO,EAAE,KAAK,GAAG;AAC/GD,kBAAS;AAAA,MACV;AACA,aAAO,EAAE,IAAI,MAAA;AAAA,IACd,CAAC;AAAA,EACF;AACD;"}
@@ -0,0 +1,169 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const TriggerListenersStore = require("./TriggerListenersStore.cjs");
4
+ const schemaUtils = require("@contember/schema-utils");
5
+ const map = require("../utils/map.cjs");
6
+ const ImplementationException = require("../ImplementationException.cjs");
7
+ var __defProp = Object.defineProperty;
8
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
9
+ var __publicField = (obj, key, value) => __defNormalProp(obj, key + "", value);
10
+ class TriggerListenerBuilder {
11
+ constructor(model) {
12
+ this.model = model;
13
+ __publicField(this, "data", {
14
+ createListeners: /* @__PURE__ */ new Map(),
15
+ updateListeners: /* @__PURE__ */ new Map(),
16
+ deleteListeners: /* @__PURE__ */ new Map(),
17
+ indirectListeners: /* @__PURE__ */ new Map(),
18
+ junctionListeners: /* @__PURE__ */ new Map()
19
+ });
20
+ }
21
+ add(trigger) {
22
+ if (trigger.type === "basic") {
23
+ this.processBasicTrigger(trigger);
24
+ } else if (trigger.type === "watch") {
25
+ this.processIndirectListeners(trigger);
26
+ } else {
27
+ ((_) => {
28
+ throw new ImplementationException.ImplementationException(`Unhandled trigger ${trigger.type}`);
29
+ })();
30
+ }
31
+ }
32
+ processBasicTrigger(trigger) {
33
+ const entity = schemaUtils.getEntity(this.model, trigger.entity);
34
+ if (trigger.create) {
35
+ this.addListener("createListeners", trigger.entity, {
36
+ type: "create",
37
+ entity,
38
+ trigger
39
+ });
40
+ }
41
+ if (trigger.delete) {
42
+ this.addListener("deleteListeners", trigger.entity, {
43
+ type: "delete",
44
+ entity,
45
+ trigger
46
+ });
47
+ }
48
+ if (trigger.update) {
49
+ this.addListener("updateListeners", trigger.entity, {
50
+ type: "update",
51
+ entity,
52
+ trigger,
53
+ fields: new Set(trigger.update === true ? Object.keys(entity.fields) : trigger.update)
54
+ // todo: only columns and owning
55
+ });
56
+ }
57
+ }
58
+ processIndirectListeners(trigger) {
59
+ const entity = schemaUtils.getEntity(this.model, trigger.entity);
60
+ this.addListener("createListeners", trigger.entity, {
61
+ type: "create",
62
+ entity,
63
+ trigger
64
+ });
65
+ this.addListener("deleteListeners", trigger.entity, {
66
+ type: "delete",
67
+ entity,
68
+ trigger
69
+ });
70
+ this.processIndirectListenersNode(trigger, entity, entity, trigger.watch, []);
71
+ }
72
+ processIndirectListenersNode(trigger, rootEntity, entity, node, path) {
73
+ const fields = /* @__PURE__ */ new Set();
74
+ const relations = /* @__PURE__ */ new Set();
75
+ for (const entry of node) {
76
+ const [field, args, selection] = Array.isArray(entry) ? entry : [entry, void 0, void 0];
77
+ schemaUtils.acceptFieldVisitor(this.model, entity, field, {
78
+ visitColumn: ({ entity: entity2, column }) => {
79
+ if (selection?.length > 0) {
80
+ throw new ImplementationException.ImplementationException(`Column ${field} cannot have sub-selection`);
81
+ }
82
+ fields.add(column.name);
83
+ },
84
+ visitManyHasOne: ({ entity: entity2, relation, targetEntity, targetRelation }) => {
85
+ fields.add(relation.name);
86
+ relations.add(relation.name);
87
+ if (selection?.length > 0) {
88
+ this.processIndirectListenersNode(trigger, rootEntity, targetEntity, selection, [...path, relation.name]);
89
+ }
90
+ },
91
+ visitOneHasMany: ({ entity: entity2, relation, targetEntity, targetRelation }) => {
92
+ this.processIndirectListenersNode(trigger, rootEntity, targetEntity, [...selection ?? [], targetRelation.name], [...path, relation.name]);
93
+ },
94
+ visitOneHasOneOwning: ({ entity: entity2, relation, targetEntity, targetRelation }) => {
95
+ fields.add(relation.name);
96
+ relations.add(relation.name);
97
+ if (selection?.length > 0) {
98
+ this.processIndirectListenersNode(trigger, rootEntity, targetEntity, selection, [...path, relation.name]);
99
+ }
100
+ },
101
+ visitOneHasOneInverse: ({ entity: entity2, relation, targetEntity, targetRelation }) => {
102
+ this.processIndirectListenersNode(trigger, rootEntity, targetEntity, [...selection ?? [], targetRelation.name], [...path, relation.name]);
103
+ },
104
+ visitManyHasManyOwning: ({ entity: entity2, relation, targetEntity, targetRelation }) => {
105
+ this.addJunctionListener(entity2.name, relation.name, {
106
+ type: "junction",
107
+ rootEntity,
108
+ path,
109
+ trigger,
110
+ context: {
111
+ entity: entity2,
112
+ relation,
113
+ type: "owning"
114
+ }
115
+ });
116
+ if (selection?.length > 0) {
117
+ this.processIndirectListenersNode(trigger, rootEntity, targetEntity, selection, [...path, relation.name]);
118
+ }
119
+ },
120
+ visitManyHasManyInverse: ({ entity: entity2, relation, targetEntity, targetRelation }) => {
121
+ this.addJunctionListener(targetEntity.name, targetRelation.name, {
122
+ type: "junction",
123
+ rootEntity,
124
+ path,
125
+ trigger,
126
+ context: {
127
+ entity: entity2,
128
+ relation,
129
+ type: "inverse"
130
+ }
131
+ });
132
+ if (selection?.length > 0) {
133
+ this.processIndirectListenersNode(trigger, rootEntity, targetEntity, selection, [...path, relation.name]);
134
+ }
135
+ }
136
+ });
137
+ }
138
+ if (path.length === 0) {
139
+ this.addListener("updateListeners", entity.name, {
140
+ type: "update",
141
+ entity: rootEntity,
142
+ fields,
143
+ trigger
144
+ });
145
+ } else {
146
+ this.addListener("indirectListeners", entity.name, {
147
+ type: "indirect",
148
+ rootEntity,
149
+ fields,
150
+ relations,
151
+ path,
152
+ trigger
153
+ });
154
+ }
155
+ }
156
+ createStore() {
157
+ return new TriggerListenersStore.TriggerListenersStore(this.data);
158
+ }
159
+ addListener(type, entityName, value) {
160
+ map.mapGetOrPut(this.data[type], entityName, () => []).push(value);
161
+ }
162
+ addJunctionListener(entityName, relationName, listener) {
163
+ const entityJunctionListeners = map.mapGetOrPut(this.data.junctionListeners, entityName, () => /* @__PURE__ */ new Map());
164
+ const relationListeners = map.mapGetOrPut(entityJunctionListeners, relationName, () => []);
165
+ relationListeners.push(listener);
166
+ }
167
+ }
168
+ exports.TriggerListenerBuilder = TriggerListenerBuilder;
169
+ //# sourceMappingURL=TriggerListenersBuilder.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TriggerListenersBuilder.cjs","sources":["../../../../../packages/engine-actions/src/triggers/TriggerListenersBuilder.ts"],"sourcesContent":["import { Actions, Model } from '@contember/schema'\nimport { TriggerListeners } from './TriggerListeners'\nimport { JunctionListener, TriggerListenersStore } from './TriggerListenersStore'\nimport { acceptFieldVisitor, getEntity } from '@contember/schema-utils'\nimport { mapGetOrPut } from '../utils/map'\nimport { ImplementationException } from '../ImplementationException'\n\nexport class TriggerListenerBuilder {\n\tprivate readonly data: TriggerListeners = {\n\t\tcreateListeners: new Map(),\n\t\tupdateListeners: new Map(),\n\t\tdeleteListeners: new Map(),\n\t\tindirectListeners: new Map(),\n\t\tjunctionListeners: new Map(),\n\t}\n\n\tconstructor(\n\t\tprivate readonly model: Model.Schema,\n\t) {\n\t}\n\n\tpublic add(trigger: Actions.AnyTrigger) {\n\t\tif (trigger.type === 'basic') {\n\t\t\tthis.processBasicTrigger(trigger)\n\t\t} else if (trigger.type === 'watch') {\n\t\t\tthis.processIndirectListeners(trigger)\n\t\t} else {\n\t\t\t;((_: never) => {\n\t\t\t\tthrow new ImplementationException(`Unhandled trigger ${(trigger as any).type}`)\n\t\t\t})(trigger)\n\t\t}\n\t}\n\n\tprivate processBasicTrigger(trigger: Actions.BasicTrigger) {\n\t\tconst entity = getEntity(this.model, trigger.entity)\n\t\tif (trigger.create) {\n\t\t\tthis.addListener('createListeners', trigger.entity, {\n\t\t\t\ttype: 'create',\n\t\t\t\tentity,\n\t\t\t\ttrigger,\n\t\t\t})\n\t\t}\n\t\tif (trigger.delete) {\n\t\t\tthis.addListener('deleteListeners', trigger.entity, {\n\t\t\t\ttype: 'delete',\n\t\t\t\tentity,\n\t\t\t\ttrigger,\n\t\t\t})\n\t\t}\n\t\tif (trigger.update) {\n\t\t\tthis.addListener('updateListeners', trigger.entity, {\n\t\t\t\ttype: 'update',\n\t\t\t\tentity,\n\t\t\t\ttrigger,\n\t\t\t\tfields: new Set(trigger.update === true ? Object.keys(entity.fields) : trigger.update), // todo: only columns and owning\n\t\t\t})\n\t\t}\n\t}\n\n\tprivate processIndirectListeners(\n\t\ttrigger: Actions.WatchTrigger,\n\t) {\n\t\tconst entity = getEntity(this.model, trigger.entity)\n\t\tthis.addListener('createListeners', trigger.entity, {\n\t\t\ttype: 'create',\n\t\t\tentity,\n\t\t\ttrigger,\n\t\t})\n\t\tthis.addListener('deleteListeners', trigger.entity, {\n\t\t\ttype: 'delete',\n\t\t\tentity,\n\t\t\ttrigger,\n\t\t})\n\t\tthis.processIndirectListenersNode(trigger, entity, entity, trigger.watch, [])\n\t}\n\tprivate processIndirectListenersNode(\n\t\ttrigger: Actions.WatchTrigger,\n\t\trootEntity: Model.Entity,\n\t\tentity: Model.Entity,\n\t\tnode: Actions.SelectionNode,\n\t\tpath: string[],\n\t) {\n\t\tconst fields = new Set<string>()\n\t\tconst relations = new Set<string>()\n\t\tfor (const entry of node) {\n\t\t\tconst [field, args, selection] = Array.isArray(entry) ? entry : [entry, undefined, undefined]\n\t\t\tacceptFieldVisitor(this.model, entity, field, {\n\t\t\t\tvisitColumn: ({ entity, column }) => {\n\t\t\t\t\tif (selection?.length > 0) {\n\t\t\t\t\t\tthrow new ImplementationException(`Column ${field} cannot have sub-selection`)\n\t\t\t\t\t}\n\t\t\t\t\tfields.add(column.name)\n\t\t\t\t},\n\t\t\t\tvisitManyHasOne: ({ entity, relation, targetEntity, targetRelation }) => {\n\t\t\t\t\tfields.add(relation.name)\n\t\t\t\t\trelations.add(relation.name)\n\t\t\t\t\tif (selection?.length > 0) {\n\t\t\t\t\t\tthis.processIndirectListenersNode(trigger, rootEntity, targetEntity, selection, [...path, relation.name])\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tvisitOneHasMany: ({ entity, relation, targetEntity, targetRelation }) => {\n\t\t\t\t\tthis.processIndirectListenersNode(trigger, rootEntity, targetEntity, [...selection ?? [], targetRelation.name], [...path, relation.name])\n\t\t\t\t},\n\t\t\t\tvisitOneHasOneOwning: ({ entity, relation, targetEntity, targetRelation }) => {\n\t\t\t\t\tfields.add(relation.name)\n\t\t\t\t\trelations.add(relation.name)\n\t\t\t\t\tif (selection?.length > 0) {\n\t\t\t\t\t\tthis.processIndirectListenersNode(trigger, rootEntity, targetEntity, selection, [...path, relation.name])\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tvisitOneHasOneInverse: ({ entity, relation, targetEntity, targetRelation }) => {\n\t\t\t\t\tthis.processIndirectListenersNode(trigger, rootEntity, targetEntity, [...selection ?? [], targetRelation.name], [...path, relation.name])\n\t\t\t\t},\n\t\t\t\tvisitManyHasManyOwning: ({ entity, relation, targetEntity, targetRelation }) => {\n\t\t\t\t\tthis.addJunctionListener(entity.name, relation.name, {\n\t\t\t\t\t\ttype: 'junction',\n\t\t\t\t\t\trootEntity,\n\t\t\t\t\t\tpath: path,\n\t\t\t\t\t\ttrigger,\n\t\t\t\t\t\tcontext: {\n\t\t\t\t\t\t\tentity,\n\t\t\t\t\t\t\trelation,\n\t\t\t\t\t\t\ttype: 'owning',\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t\tif (selection?.length > 0) {\n\t\t\t\t\t\tthis.processIndirectListenersNode(trigger, rootEntity, targetEntity, selection, [...path, relation.name])\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tvisitManyHasManyInverse: ({ entity, relation, targetEntity, targetRelation }) => {\n\t\t\t\t\tthis.addJunctionListener(targetEntity.name, targetRelation.name, {\n\t\t\t\t\t\ttype: 'junction',\n\t\t\t\t\t\trootEntity,\n\t\t\t\t\t\tpath: path,\n\t\t\t\t\t\ttrigger,\n\t\t\t\t\t\tcontext: {\n\t\t\t\t\t\t\tentity,\n\t\t\t\t\t\t\trelation,\n\t\t\t\t\t\t\ttype: 'inverse',\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t\tif (selection?.length > 0) {\n\t\t\t\t\t\tthis.processIndirectListenersNode(trigger, rootEntity, targetEntity, selection, [...path, relation.name])\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\t\tif (path.length === 0) {\n\t\t\tthis.addListener('updateListeners', entity.name, {\n\t\t\t\ttype: 'update',\n\t\t\t\tentity: rootEntity,\n\t\t\t\tfields,\n\t\t\t\ttrigger,\n\t\t\t})\n\t\t} else {\n\t\t\tthis.addListener('indirectListeners', entity.name, {\n\t\t\t\ttype: 'indirect',\n\t\t\t\trootEntity: rootEntity,\n\t\t\t\tfields,\n\t\t\t\trelations,\n\t\t\t\tpath,\n\t\t\t\ttrigger,\n\t\t\t})\n\t\t}\n\t}\n\n\tpublic createStore(): TriggerListenersStore {\n\t\treturn new TriggerListenersStore(this.data)\n\t}\n\n\tprivate addListener<\n\t\tK extends Exclude<keyof TriggerListeners, 'junctionListeners'>,\n\t\tV extends TriggerListeners[K] extends Map<string, infer V extends any[]> ? V[number] : never,\n\t>(\n\t\ttype: K,\n\t\tentityName: string,\n\t\tvalue: V,\n\t) {\n\t\tmapGetOrPut<string, V[], []>(this.data[type] as Map<string, V[]>, entityName, () => []).push(value)\n\t}\n\n\tprivate addJunctionListener(entityName: string, relationName: string, listener: JunctionListener) {\n\t\tconst entityJunctionListeners = mapGetOrPut(this.data.junctionListeners, entityName, () => new Map())\n\t\tconst relationListeners = mapGetOrPut(entityJunctionListeners, relationName, () => [])\n\t\trelationListeners.push(listener)\n\t}\n}\n"],"names":["ImplementationException","getEntity","acceptFieldVisitor","entity","TriggerListenersStore","mapGetOrPut"],"mappings":"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"}
@@ -0,0 +1,169 @@
1
+ import { TriggerListenersStore } from "./TriggerListenersStore.js";
2
+ import { getEntity, acceptFieldVisitor } from "@contember/schema-utils";
3
+ import { mapGetOrPut } from "../utils/map.js";
4
+ import { ImplementationException } from "../ImplementationException.js";
5
+ var __defProp = Object.defineProperty;
6
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
7
+ var __publicField = (obj, key, value) => __defNormalProp(obj, key + "", value);
8
+ class TriggerListenerBuilder {
9
+ constructor(model) {
10
+ this.model = model;
11
+ __publicField(this, "data", {
12
+ createListeners: /* @__PURE__ */ new Map(),
13
+ updateListeners: /* @__PURE__ */ new Map(),
14
+ deleteListeners: /* @__PURE__ */ new Map(),
15
+ indirectListeners: /* @__PURE__ */ new Map(),
16
+ junctionListeners: /* @__PURE__ */ new Map()
17
+ });
18
+ }
19
+ add(trigger) {
20
+ if (trigger.type === "basic") {
21
+ this.processBasicTrigger(trigger);
22
+ } else if (trigger.type === "watch") {
23
+ this.processIndirectListeners(trigger);
24
+ } else {
25
+ ((_) => {
26
+ throw new ImplementationException(`Unhandled trigger ${trigger.type}`);
27
+ })();
28
+ }
29
+ }
30
+ processBasicTrigger(trigger) {
31
+ const entity = getEntity(this.model, trigger.entity);
32
+ if (trigger.create) {
33
+ this.addListener("createListeners", trigger.entity, {
34
+ type: "create",
35
+ entity,
36
+ trigger
37
+ });
38
+ }
39
+ if (trigger.delete) {
40
+ this.addListener("deleteListeners", trigger.entity, {
41
+ type: "delete",
42
+ entity,
43
+ trigger
44
+ });
45
+ }
46
+ if (trigger.update) {
47
+ this.addListener("updateListeners", trigger.entity, {
48
+ type: "update",
49
+ entity,
50
+ trigger,
51
+ fields: new Set(trigger.update === true ? Object.keys(entity.fields) : trigger.update)
52
+ // todo: only columns and owning
53
+ });
54
+ }
55
+ }
56
+ processIndirectListeners(trigger) {
57
+ const entity = getEntity(this.model, trigger.entity);
58
+ this.addListener("createListeners", trigger.entity, {
59
+ type: "create",
60
+ entity,
61
+ trigger
62
+ });
63
+ this.addListener("deleteListeners", trigger.entity, {
64
+ type: "delete",
65
+ entity,
66
+ trigger
67
+ });
68
+ this.processIndirectListenersNode(trigger, entity, entity, trigger.watch, []);
69
+ }
70
+ processIndirectListenersNode(trigger, rootEntity, entity, node, path) {
71
+ const fields = /* @__PURE__ */ new Set();
72
+ const relations = /* @__PURE__ */ new Set();
73
+ for (const entry of node) {
74
+ const [field, args, selection] = Array.isArray(entry) ? entry : [entry, void 0, void 0];
75
+ acceptFieldVisitor(this.model, entity, field, {
76
+ visitColumn: ({ entity: entity2, column }) => {
77
+ if (selection?.length > 0) {
78
+ throw new ImplementationException(`Column ${field} cannot have sub-selection`);
79
+ }
80
+ fields.add(column.name);
81
+ },
82
+ visitManyHasOne: ({ entity: entity2, relation, targetEntity, targetRelation }) => {
83
+ fields.add(relation.name);
84
+ relations.add(relation.name);
85
+ if (selection?.length > 0) {
86
+ this.processIndirectListenersNode(trigger, rootEntity, targetEntity, selection, [...path, relation.name]);
87
+ }
88
+ },
89
+ visitOneHasMany: ({ entity: entity2, relation, targetEntity, targetRelation }) => {
90
+ this.processIndirectListenersNode(trigger, rootEntity, targetEntity, [...selection ?? [], targetRelation.name], [...path, relation.name]);
91
+ },
92
+ visitOneHasOneOwning: ({ entity: entity2, relation, targetEntity, targetRelation }) => {
93
+ fields.add(relation.name);
94
+ relations.add(relation.name);
95
+ if (selection?.length > 0) {
96
+ this.processIndirectListenersNode(trigger, rootEntity, targetEntity, selection, [...path, relation.name]);
97
+ }
98
+ },
99
+ visitOneHasOneInverse: ({ entity: entity2, relation, targetEntity, targetRelation }) => {
100
+ this.processIndirectListenersNode(trigger, rootEntity, targetEntity, [...selection ?? [], targetRelation.name], [...path, relation.name]);
101
+ },
102
+ visitManyHasManyOwning: ({ entity: entity2, relation, targetEntity, targetRelation }) => {
103
+ this.addJunctionListener(entity2.name, relation.name, {
104
+ type: "junction",
105
+ rootEntity,
106
+ path,
107
+ trigger,
108
+ context: {
109
+ entity: entity2,
110
+ relation,
111
+ type: "owning"
112
+ }
113
+ });
114
+ if (selection?.length > 0) {
115
+ this.processIndirectListenersNode(trigger, rootEntity, targetEntity, selection, [...path, relation.name]);
116
+ }
117
+ },
118
+ visitManyHasManyInverse: ({ entity: entity2, relation, targetEntity, targetRelation }) => {
119
+ this.addJunctionListener(targetEntity.name, targetRelation.name, {
120
+ type: "junction",
121
+ rootEntity,
122
+ path,
123
+ trigger,
124
+ context: {
125
+ entity: entity2,
126
+ relation,
127
+ type: "inverse"
128
+ }
129
+ });
130
+ if (selection?.length > 0) {
131
+ this.processIndirectListenersNode(trigger, rootEntity, targetEntity, selection, [...path, relation.name]);
132
+ }
133
+ }
134
+ });
135
+ }
136
+ if (path.length === 0) {
137
+ this.addListener("updateListeners", entity.name, {
138
+ type: "update",
139
+ entity: rootEntity,
140
+ fields,
141
+ trigger
142
+ });
143
+ } else {
144
+ this.addListener("indirectListeners", entity.name, {
145
+ type: "indirect",
146
+ rootEntity,
147
+ fields,
148
+ relations,
149
+ path,
150
+ trigger
151
+ });
152
+ }
153
+ }
154
+ createStore() {
155
+ return new TriggerListenersStore(this.data);
156
+ }
157
+ addListener(type, entityName, value) {
158
+ mapGetOrPut(this.data[type], entityName, () => []).push(value);
159
+ }
160
+ addJunctionListener(entityName, relationName, listener) {
161
+ const entityJunctionListeners = mapGetOrPut(this.data.junctionListeners, entityName, () => /* @__PURE__ */ new Map());
162
+ const relationListeners = mapGetOrPut(entityJunctionListeners, relationName, () => []);
163
+ relationListeners.push(listener);
164
+ }
165
+ }
166
+ export {
167
+ TriggerListenerBuilder
168
+ };
169
+ //# sourceMappingURL=TriggerListenersBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TriggerListenersBuilder.js","sources":["../../../../../packages/engine-actions/src/triggers/TriggerListenersBuilder.ts"],"sourcesContent":["import { Actions, Model } from '@contember/schema'\nimport { TriggerListeners } from './TriggerListeners'\nimport { JunctionListener, TriggerListenersStore } from './TriggerListenersStore'\nimport { acceptFieldVisitor, getEntity } from '@contember/schema-utils'\nimport { mapGetOrPut } from '../utils/map'\nimport { ImplementationException } from '../ImplementationException'\n\nexport class TriggerListenerBuilder {\n\tprivate readonly data: TriggerListeners = {\n\t\tcreateListeners: new Map(),\n\t\tupdateListeners: new Map(),\n\t\tdeleteListeners: new Map(),\n\t\tindirectListeners: new Map(),\n\t\tjunctionListeners: new Map(),\n\t}\n\n\tconstructor(\n\t\tprivate readonly model: Model.Schema,\n\t) {\n\t}\n\n\tpublic add(trigger: Actions.AnyTrigger) {\n\t\tif (trigger.type === 'basic') {\n\t\t\tthis.processBasicTrigger(trigger)\n\t\t} else if (trigger.type === 'watch') {\n\t\t\tthis.processIndirectListeners(trigger)\n\t\t} else {\n\t\t\t;((_: never) => {\n\t\t\t\tthrow new ImplementationException(`Unhandled trigger ${(trigger as any).type}`)\n\t\t\t})(trigger)\n\t\t}\n\t}\n\n\tprivate processBasicTrigger(trigger: Actions.BasicTrigger) {\n\t\tconst entity = getEntity(this.model, trigger.entity)\n\t\tif (trigger.create) {\n\t\t\tthis.addListener('createListeners', trigger.entity, {\n\t\t\t\ttype: 'create',\n\t\t\t\tentity,\n\t\t\t\ttrigger,\n\t\t\t})\n\t\t}\n\t\tif (trigger.delete) {\n\t\t\tthis.addListener('deleteListeners', trigger.entity, {\n\t\t\t\ttype: 'delete',\n\t\t\t\tentity,\n\t\t\t\ttrigger,\n\t\t\t})\n\t\t}\n\t\tif (trigger.update) {\n\t\t\tthis.addListener('updateListeners', trigger.entity, {\n\t\t\t\ttype: 'update',\n\t\t\t\tentity,\n\t\t\t\ttrigger,\n\t\t\t\tfields: new Set(trigger.update === true ? Object.keys(entity.fields) : trigger.update), // todo: only columns and owning\n\t\t\t})\n\t\t}\n\t}\n\n\tprivate processIndirectListeners(\n\t\ttrigger: Actions.WatchTrigger,\n\t) {\n\t\tconst entity = getEntity(this.model, trigger.entity)\n\t\tthis.addListener('createListeners', trigger.entity, {\n\t\t\ttype: 'create',\n\t\t\tentity,\n\t\t\ttrigger,\n\t\t})\n\t\tthis.addListener('deleteListeners', trigger.entity, {\n\t\t\ttype: 'delete',\n\t\t\tentity,\n\t\t\ttrigger,\n\t\t})\n\t\tthis.processIndirectListenersNode(trigger, entity, entity, trigger.watch, [])\n\t}\n\tprivate processIndirectListenersNode(\n\t\ttrigger: Actions.WatchTrigger,\n\t\trootEntity: Model.Entity,\n\t\tentity: Model.Entity,\n\t\tnode: Actions.SelectionNode,\n\t\tpath: string[],\n\t) {\n\t\tconst fields = new Set<string>()\n\t\tconst relations = new Set<string>()\n\t\tfor (const entry of node) {\n\t\t\tconst [field, args, selection] = Array.isArray(entry) ? entry : [entry, undefined, undefined]\n\t\t\tacceptFieldVisitor(this.model, entity, field, {\n\t\t\t\tvisitColumn: ({ entity, column }) => {\n\t\t\t\t\tif (selection?.length > 0) {\n\t\t\t\t\t\tthrow new ImplementationException(`Column ${field} cannot have sub-selection`)\n\t\t\t\t\t}\n\t\t\t\t\tfields.add(column.name)\n\t\t\t\t},\n\t\t\t\tvisitManyHasOne: ({ entity, relation, targetEntity, targetRelation }) => {\n\t\t\t\t\tfields.add(relation.name)\n\t\t\t\t\trelations.add(relation.name)\n\t\t\t\t\tif (selection?.length > 0) {\n\t\t\t\t\t\tthis.processIndirectListenersNode(trigger, rootEntity, targetEntity, selection, [...path, relation.name])\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tvisitOneHasMany: ({ entity, relation, targetEntity, targetRelation }) => {\n\t\t\t\t\tthis.processIndirectListenersNode(trigger, rootEntity, targetEntity, [...selection ?? [], targetRelation.name], [...path, relation.name])\n\t\t\t\t},\n\t\t\t\tvisitOneHasOneOwning: ({ entity, relation, targetEntity, targetRelation }) => {\n\t\t\t\t\tfields.add(relation.name)\n\t\t\t\t\trelations.add(relation.name)\n\t\t\t\t\tif (selection?.length > 0) {\n\t\t\t\t\t\tthis.processIndirectListenersNode(trigger, rootEntity, targetEntity, selection, [...path, relation.name])\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tvisitOneHasOneInverse: ({ entity, relation, targetEntity, targetRelation }) => {\n\t\t\t\t\tthis.processIndirectListenersNode(trigger, rootEntity, targetEntity, [...selection ?? [], targetRelation.name], [...path, relation.name])\n\t\t\t\t},\n\t\t\t\tvisitManyHasManyOwning: ({ entity, relation, targetEntity, targetRelation }) => {\n\t\t\t\t\tthis.addJunctionListener(entity.name, relation.name, {\n\t\t\t\t\t\ttype: 'junction',\n\t\t\t\t\t\trootEntity,\n\t\t\t\t\t\tpath: path,\n\t\t\t\t\t\ttrigger,\n\t\t\t\t\t\tcontext: {\n\t\t\t\t\t\t\tentity,\n\t\t\t\t\t\t\trelation,\n\t\t\t\t\t\t\ttype: 'owning',\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t\tif (selection?.length > 0) {\n\t\t\t\t\t\tthis.processIndirectListenersNode(trigger, rootEntity, targetEntity, selection, [...path, relation.name])\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tvisitManyHasManyInverse: ({ entity, relation, targetEntity, targetRelation }) => {\n\t\t\t\t\tthis.addJunctionListener(targetEntity.name, targetRelation.name, {\n\t\t\t\t\t\ttype: 'junction',\n\t\t\t\t\t\trootEntity,\n\t\t\t\t\t\tpath: path,\n\t\t\t\t\t\ttrigger,\n\t\t\t\t\t\tcontext: {\n\t\t\t\t\t\t\tentity,\n\t\t\t\t\t\t\trelation,\n\t\t\t\t\t\t\ttype: 'inverse',\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t\tif (selection?.length > 0) {\n\t\t\t\t\t\tthis.processIndirectListenersNode(trigger, rootEntity, targetEntity, selection, [...path, relation.name])\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\t\tif (path.length === 0) {\n\t\t\tthis.addListener('updateListeners', entity.name, {\n\t\t\t\ttype: 'update',\n\t\t\t\tentity: rootEntity,\n\t\t\t\tfields,\n\t\t\t\ttrigger,\n\t\t\t})\n\t\t} else {\n\t\t\tthis.addListener('indirectListeners', entity.name, {\n\t\t\t\ttype: 'indirect',\n\t\t\t\trootEntity: rootEntity,\n\t\t\t\tfields,\n\t\t\t\trelations,\n\t\t\t\tpath,\n\t\t\t\ttrigger,\n\t\t\t})\n\t\t}\n\t}\n\n\tpublic createStore(): TriggerListenersStore {\n\t\treturn new TriggerListenersStore(this.data)\n\t}\n\n\tprivate addListener<\n\t\tK extends Exclude<keyof TriggerListeners, 'junctionListeners'>,\n\t\tV extends TriggerListeners[K] extends Map<string, infer V extends any[]> ? V[number] : never,\n\t>(\n\t\ttype: K,\n\t\tentityName: string,\n\t\tvalue: V,\n\t) {\n\t\tmapGetOrPut<string, V[], []>(this.data[type] as Map<string, V[]>, entityName, () => []).push(value)\n\t}\n\n\tprivate addJunctionListener(entityName: string, relationName: string, listener: JunctionListener) {\n\t\tconst entityJunctionListeners = mapGetOrPut(this.data.junctionListeners, entityName, () => new Map())\n\t\tconst relationListeners = mapGetOrPut(entityJunctionListeners, relationName, () => [])\n\t\trelationListeners.push(listener)\n\t}\n}\n"],"names":["entity"],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const TriggerListenersBuilder = require("./TriggerListenersBuilder.cjs");
4
+ class TriggerListenersFactory {
5
+ constructor(schema) {
6
+ this.schema = schema;
7
+ }
8
+ create() {
9
+ const builder = new TriggerListenersBuilder.TriggerListenerBuilder(this.schema.model);
10
+ for (const trigger of Object.values(this.schema.actions.triggers)) {
11
+ builder.add(trigger);
12
+ }
13
+ return builder.createStore();
14
+ }
15
+ }
16
+ exports.TriggerListenersFactory = TriggerListenersFactory;
17
+ //# sourceMappingURL=TriggerListenersFactory.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TriggerListenersFactory.cjs","sources":["../../../../../packages/engine-actions/src/triggers/TriggerListenersFactory.ts"],"sourcesContent":["import { TriggerListenersStore } from './TriggerListenersStore'\nimport { TriggerListenerBuilder } from './TriggerListenersBuilder'\nimport { Schema } from '@contember/schema'\n\nexport class TriggerListenersFactory {\n\tconstructor(\n\t\tprivate readonly schema: Schema,\n\t) {\n\t}\n\n\tpublic create(): TriggerListenersStore {\n\t\tconst builder = new TriggerListenerBuilder(this.schema.model)\n\t\tfor (const trigger of Object.values(this.schema.actions.triggers)) {\n\t\t\tbuilder.add(trigger)\n\t\t}\n\n\t\treturn builder.createStore()\n\t}\n}\n"],"names":["TriggerListenerBuilder"],"mappings":";;;AAIO,MAAM,wBAAwB;AAAA,EACpC,YACkB,QAChB;AADgB,SAAA,SAAA;AAAA,EAElB;AAAA,EAEO,SAAgC;AACtC,UAAM,UAAU,IAAIA,wBAAAA,uBAAuB,KAAK,OAAO,KAAK;AAC5D,eAAW,WAAW,OAAO,OAAO,KAAK,OAAO,QAAQ,QAAQ,GAAG;AAClE,cAAQ,IAAI,OAAO;AAAA,IACpB;AAEA,WAAO,QAAQ,YAAA;AAAA,EAChB;AACD;;"}
@@ -0,0 +1,17 @@
1
+ import { TriggerListenerBuilder } from "./TriggerListenersBuilder.js";
2
+ class TriggerListenersFactory {
3
+ constructor(schema) {
4
+ this.schema = schema;
5
+ }
6
+ create() {
7
+ const builder = new TriggerListenerBuilder(this.schema.model);
8
+ for (const trigger of Object.values(this.schema.actions.triggers)) {
9
+ builder.add(trigger);
10
+ }
11
+ return builder.createStore();
12
+ }
13
+ }
14
+ export {
15
+ TriggerListenersFactory
16
+ };
17
+ //# sourceMappingURL=TriggerListenersFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TriggerListenersFactory.js","sources":["../../../../../packages/engine-actions/src/triggers/TriggerListenersFactory.ts"],"sourcesContent":["import { TriggerListenersStore } from './TriggerListenersStore'\nimport { TriggerListenerBuilder } from './TriggerListenersBuilder'\nimport { Schema } from '@contember/schema'\n\nexport class TriggerListenersFactory {\n\tconstructor(\n\t\tprivate readonly schema: Schema,\n\t) {\n\t}\n\n\tpublic create(): TriggerListenersStore {\n\t\tconst builder = new TriggerListenerBuilder(this.schema.model)\n\t\tfor (const trigger of Object.values(this.schema.actions.triggers)) {\n\t\t\tbuilder.add(trigger)\n\t\t}\n\n\t\treturn builder.createStore()\n\t}\n}\n"],"names":[],"mappings":";AAIO,MAAM,wBAAwB;AAAA,EACpC,YACkB,QAChB;AADgB,SAAA,SAAA;AAAA,EAElB;AAAA,EAEO,SAAgC;AACtC,UAAM,UAAU,IAAI,uBAAuB,KAAK,OAAO,KAAK;AAC5D,eAAW,WAAW,OAAO,OAAO,KAAK,OAAO,QAAQ,QAAQ,GAAG;AAClE,cAAQ,IAAI,OAAO;AAAA,IACpB;AAEA,WAAO,QAAQ,YAAA;AAAA,EAChB;AACD;"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ class TriggerListenersStore {
4
+ constructor(listeners) {
5
+ this.listeners = listeners;
6
+ }
7
+ getUpdateListeners(entityName) {
8
+ return this.listeners.updateListeners.get(entityName) ?? [];
9
+ }
10
+ getDeleteListener(entityName) {
11
+ return this.listeners.deleteListeners.get(entityName) ?? [];
12
+ }
13
+ getCreateListener(entityName) {
14
+ return this.listeners.createListeners.get(entityName) ?? [];
15
+ }
16
+ getIndirectListeners(entityName) {
17
+ return this.listeners.indirectListeners.get(entityName) ?? [];
18
+ }
19
+ getJunctionListeners(entityName, relationName) {
20
+ return this.listeners.junctionListeners.get(entityName)?.get(relationName) ?? [];
21
+ }
22
+ }
23
+ exports.TriggerListenersStore = TriggerListenersStore;
24
+ //# sourceMappingURL=TriggerListenersStore.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TriggerListenersStore.cjs","sources":["../../../../../packages/engine-actions/src/triggers/TriggerListenersStore.ts"],"sourcesContent":["import { Actions, Model } from '@contember/schema'\nimport { TriggerListeners } from './TriggerListeners'\n\nexport interface IndirectListener {\n\ttype: 'indirect'\n\ttrigger: Actions.WatchTrigger\n\trootEntity: Model.Entity\n\tfields: Set<string>\n\trelations: Set<string>\n\tpath: string[]\n}\n\nexport interface JunctionListener {\n\ttype: 'junction'\n\ttrigger: Actions.WatchTrigger\n\trootEntity: Model.Entity\n\tpath: string[]\n\tcontext: {\n\t\tentity: Model.Entity\n\t\trelation: Model.ManyHasManyOwningRelation | Model.ManyHasManyInverseRelation\n\t\ttype: 'owning' | 'inverse'\n\t}\n}\n\nexport interface DeleteListener {\n\ttype: 'delete'\n\ttrigger: Actions.AnyTrigger\n\tentity: Model.Entity\n}\n\nexport interface CreateListener {\n\ttype: 'create'\n\ttrigger: Actions.AnyTrigger\n\tentity: Model.Entity\n}\n\nexport interface UpdateListener {\n\ttype: 'update'\n\ttrigger: Actions.AnyTrigger\n\tentity: Model.Entity\n\tfields: Set<string>\n}\n\nexport type AnyListener =\n\t| JunctionListener\n\t| UpdateListener\n\t| CreateListener\n\t| DeleteListener\n\t| IndirectListener\n\nexport class TriggerListenersStore {\n\tconstructor(\n\t\tprivate readonly listeners: TriggerListeners,\n\t) {\n\t}\n\n\tpublic getUpdateListeners(entityName: string): UpdateListener[] {\n\t\treturn this.listeners.updateListeners.get(entityName) ?? []\n\t}\n\n\tpublic getDeleteListener(entityName: string): DeleteListener[] {\n\t\treturn this.listeners.deleteListeners.get(entityName) ?? []\n\t}\n\n\tpublic getCreateListener(entityName: string): CreateListener[] {\n\t\treturn this.listeners.createListeners.get(entityName) ?? []\n\t}\n\n\tpublic getIndirectListeners(entityName: string): IndirectListener[] {\n\t\treturn this.listeners.indirectListeners.get(entityName) ?? []\n\t}\n\n\tpublic getJunctionListeners(entityName: string, relationName: string): JunctionListener[] {\n\t\treturn this.listeners.junctionListeners.get(entityName)?.get(relationName) ?? []\n\t}\n}\n"],"names":[],"mappings":";;AAkDO,MAAM,sBAAsB;AAAA,EAClC,YACkB,WAChB;AADgB,SAAA,YAAA;AAAA,EAElB;AAAA,EAEO,mBAAmB,YAAsC;AAC/D,WAAO,KAAK,UAAU,gBAAgB,IAAI,UAAU,KAAK,CAAA;AAAA,EAC1D;AAAA,EAEO,kBAAkB,YAAsC;AAC9D,WAAO,KAAK,UAAU,gBAAgB,IAAI,UAAU,KAAK,CAAA;AAAA,EAC1D;AAAA,EAEO,kBAAkB,YAAsC;AAC9D,WAAO,KAAK,UAAU,gBAAgB,IAAI,UAAU,KAAK,CAAA;AAAA,EAC1D;AAAA,EAEO,qBAAqB,YAAwC;AACnE,WAAO,KAAK,UAAU,kBAAkB,IAAI,UAAU,KAAK,CAAA;AAAA,EAC5D;AAAA,EAEO,qBAAqB,YAAoB,cAA0C;AACzF,WAAO,KAAK,UAAU,kBAAkB,IAAI,UAAU,GAAG,IAAI,YAAY,KAAK,CAAA;AAAA,EAC/E;AACD;;"}
@@ -0,0 +1,24 @@
1
+ class TriggerListenersStore {
2
+ constructor(listeners) {
3
+ this.listeners = listeners;
4
+ }
5
+ getUpdateListeners(entityName) {
6
+ return this.listeners.updateListeners.get(entityName) ?? [];
7
+ }
8
+ getDeleteListener(entityName) {
9
+ return this.listeners.deleteListeners.get(entityName) ?? [];
10
+ }
11
+ getCreateListener(entityName) {
12
+ return this.listeners.createListeners.get(entityName) ?? [];
13
+ }
14
+ getIndirectListeners(entityName) {
15
+ return this.listeners.indirectListeners.get(entityName) ?? [];
16
+ }
17
+ getJunctionListeners(entityName, relationName) {
18
+ return this.listeners.junctionListeners.get(entityName)?.get(relationName) ?? [];
19
+ }
20
+ }
21
+ export {
22
+ TriggerListenersStore
23
+ };
24
+ //# sourceMappingURL=TriggerListenersStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TriggerListenersStore.js","sources":["../../../../../packages/engine-actions/src/triggers/TriggerListenersStore.ts"],"sourcesContent":["import { Actions, Model } from '@contember/schema'\nimport { TriggerListeners } from './TriggerListeners'\n\nexport interface IndirectListener {\n\ttype: 'indirect'\n\ttrigger: Actions.WatchTrigger\n\trootEntity: Model.Entity\n\tfields: Set<string>\n\trelations: Set<string>\n\tpath: string[]\n}\n\nexport interface JunctionListener {\n\ttype: 'junction'\n\ttrigger: Actions.WatchTrigger\n\trootEntity: Model.Entity\n\tpath: string[]\n\tcontext: {\n\t\tentity: Model.Entity\n\t\trelation: Model.ManyHasManyOwningRelation | Model.ManyHasManyInverseRelation\n\t\ttype: 'owning' | 'inverse'\n\t}\n}\n\nexport interface DeleteListener {\n\ttype: 'delete'\n\ttrigger: Actions.AnyTrigger\n\tentity: Model.Entity\n}\n\nexport interface CreateListener {\n\ttype: 'create'\n\ttrigger: Actions.AnyTrigger\n\tentity: Model.Entity\n}\n\nexport interface UpdateListener {\n\ttype: 'update'\n\ttrigger: Actions.AnyTrigger\n\tentity: Model.Entity\n\tfields: Set<string>\n}\n\nexport type AnyListener =\n\t| JunctionListener\n\t| UpdateListener\n\t| CreateListener\n\t| DeleteListener\n\t| IndirectListener\n\nexport class TriggerListenersStore {\n\tconstructor(\n\t\tprivate readonly listeners: TriggerListeners,\n\t) {\n\t}\n\n\tpublic getUpdateListeners(entityName: string): UpdateListener[] {\n\t\treturn this.listeners.updateListeners.get(entityName) ?? []\n\t}\n\n\tpublic getDeleteListener(entityName: string): DeleteListener[] {\n\t\treturn this.listeners.deleteListeners.get(entityName) ?? []\n\t}\n\n\tpublic getCreateListener(entityName: string): CreateListener[] {\n\t\treturn this.listeners.createListeners.get(entityName) ?? []\n\t}\n\n\tpublic getIndirectListeners(entityName: string): IndirectListener[] {\n\t\treturn this.listeners.indirectListeners.get(entityName) ?? []\n\t}\n\n\tpublic getJunctionListeners(entityName: string, relationName: string): JunctionListener[] {\n\t\treturn this.listeners.junctionListeners.get(entityName)?.get(relationName) ?? []\n\t}\n}\n"],"names":[],"mappings":"AAkDO,MAAM,sBAAsB;AAAA,EAClC,YACkB,WAChB;AADgB,SAAA,YAAA;AAAA,EAElB;AAAA,EAEO,mBAAmB,YAAsC;AAC/D,WAAO,KAAK,UAAU,gBAAgB,IAAI,UAAU,KAAK,CAAA;AAAA,EAC1D;AAAA,EAEO,kBAAkB,YAAsC;AAC9D,WAAO,KAAK,UAAU,gBAAgB,IAAI,UAAU,KAAK,CAAA;AAAA,EAC1D;AAAA,EAEO,kBAAkB,YAAsC;AAC9D,WAAO,KAAK,UAAU,gBAAgB,IAAI,UAAU,KAAK,CAAA;AAAA,EAC1D;AAAA,EAEO,qBAAqB,YAAwC;AACnE,WAAO,KAAK,UAAU,kBAAkB,IAAI,UAAU,KAAK,CAAA;AAAA,EAC5D;AAAA,EAEO,qBAAqB,YAAoB,cAA0C;AACzF,WAAO,KAAK,UAAU,kBAAkB,IAAI,UAAU,GAAG,IAAI,YAAY,KAAK,CAAA;AAAA,EAC/E;AACD;"}