@contember/engine-actions 1.3.0-alpha.13

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 (289) hide show
  1. package/dist/src/ActionsExecutionContainerHookFactory.d.ts +8 -0
  2. package/dist/src/ActionsExecutionContainerHookFactory.d.ts.map +1 -0
  3. package/dist/src/ActionsExecutionContainerHookFactory.js +28 -0
  4. package/dist/src/ActionsExecutionContainerHookFactory.js.map +1 -0
  5. package/dist/src/ImplementationException.d.ts +3 -0
  6. package/dist/src/ImplementationException.d.ts.map +1 -0
  7. package/dist/src/ImplementationException.js +7 -0
  8. package/dist/src/ImplementationException.js.map +1 -0
  9. package/dist/src/ListenerStoreProvider.d.ts +7 -0
  10. package/dist/src/ListenerStoreProvider.d.ts.map +1 -0
  11. package/dist/src/ListenerStoreProvider.js +21 -0
  12. package/dist/src/ListenerStoreProvider.js.map +1 -0
  13. package/dist/src/dispatch/DispatchWorkerSupervisor.d.ts +17 -0
  14. package/dist/src/dispatch/DispatchWorkerSupervisor.d.ts.map +1 -0
  15. package/dist/src/dispatch/DispatchWorkerSupervisor.js +123 -0
  16. package/dist/src/dispatch/DispatchWorkerSupervisor.js.map +1 -0
  17. package/dist/src/dispatch/EventDispatcher.d.ts +25 -0
  18. package/dist/src/dispatch/EventDispatcher.d.ts.map +1 -0
  19. package/dist/src/dispatch/EventDispatcher.js +46 -0
  20. package/dist/src/dispatch/EventDispatcher.js.map +1 -0
  21. package/dist/src/dispatch/EventsRepository.d.ts +22 -0
  22. package/dist/src/dispatch/EventsRepository.d.ts.map +1 -0
  23. package/dist/src/dispatch/EventsRepository.js +138 -0
  24. package/dist/src/dispatch/EventsRepository.js.map +1 -0
  25. package/dist/src/dispatch/ProjectDispatcher.d.ts +22 -0
  26. package/dist/src/dispatch/ProjectDispatcher.d.ts.map +1 -0
  27. package/dist/src/dispatch/ProjectDispatcher.js +103 -0
  28. package/dist/src/dispatch/ProjectDispatcher.js.map +1 -0
  29. package/dist/src/dispatch/TargetHandlerResolver.d.ts +9 -0
  30. package/dist/src/dispatch/TargetHandlerResolver.d.ts.map +1 -0
  31. package/dist/src/dispatch/TargetHandlerResolver.js +17 -0
  32. package/dist/src/dispatch/TargetHandlerResolver.js.map +1 -0
  33. package/dist/src/dispatch/WebhookTargetHandler.d.ts +7 -0
  34. package/dist/src/dispatch/WebhookTargetHandler.d.ts.map +1 -0
  35. package/dist/src/dispatch/WebhookTargetHandler.js +85 -0
  36. package/dist/src/dispatch/WebhookTargetHandler.js.map +1 -0
  37. package/dist/src/dispatch/types.d.ts +27 -0
  38. package/dist/src/dispatch/types.d.ts.map +1 -0
  39. package/dist/src/dispatch/types.js +3 -0
  40. package/dist/src/dispatch/types.js.map +1 -0
  41. package/dist/src/graphql/http/ActionsApiMiddlewareFactory.d.ts +10 -0
  42. package/dist/src/graphql/http/ActionsApiMiddlewareFactory.d.ts.map +1 -0
  43. package/dist/src/graphql/http/ActionsApiMiddlewareFactory.js +31 -0
  44. package/dist/src/graphql/http/ActionsApiMiddlewareFactory.js.map +1 -0
  45. package/dist/src/graphql/http/ActionsContextResolver.d.ts +11 -0
  46. package/dist/src/graphql/http/ActionsContextResolver.d.ts.map +1 -0
  47. package/dist/src/graphql/http/ActionsContextResolver.js +33 -0
  48. package/dist/src/graphql/http/ActionsContextResolver.js.map +1 -0
  49. package/dist/src/graphql/http/ActionsGraphQLHandlerFactory.d.ts +8 -0
  50. package/dist/src/graphql/http/ActionsGraphQLHandlerFactory.d.ts.map +1 -0
  51. package/dist/src/graphql/http/ActionsGraphQLHandlerFactory.js +21 -0
  52. package/dist/src/graphql/http/ActionsGraphQLHandlerFactory.js.map +1 -0
  53. package/dist/src/graphql/http/ActionsWebsocketControllerFactory.d.ts +11 -0
  54. package/dist/src/graphql/http/ActionsWebsocketControllerFactory.d.ts.map +1 -0
  55. package/dist/src/graphql/http/ActionsWebsocketControllerFactory.js +150 -0
  56. package/dist/src/graphql/http/ActionsWebsocketControllerFactory.js.map +1 -0
  57. package/dist/src/graphql/resolvers/ActionsContext.d.ts +9 -0
  58. package/dist/src/graphql/resolvers/ActionsContext.d.ts.map +1 -0
  59. package/dist/src/graphql/resolvers/ActionsContext.js +3 -0
  60. package/dist/src/graphql/resolvers/ActionsContext.js.map +1 -0
  61. package/dist/src/graphql/resolvers/ResolversFactory.d.ts +13 -0
  62. package/dist/src/graphql/resolvers/ResolversFactory.d.ts.map +1 -0
  63. package/dist/src/graphql/resolvers/ResolversFactory.js +32 -0
  64. package/dist/src/graphql/resolvers/ResolversFactory.js.map +1 -0
  65. package/dist/src/graphql/resolvers/index.d.ts +3 -0
  66. package/dist/src/graphql/resolvers/index.d.ts.map +1 -0
  67. package/dist/src/graphql/resolvers/index.js +19 -0
  68. package/dist/src/graphql/resolvers/index.js.map +1 -0
  69. package/dist/src/graphql/resolvers/mutation/ProcessBatchMutationResolver.d.ts +11 -0
  70. package/dist/src/graphql/resolvers/mutation/ProcessBatchMutationResolver.d.ts.map +1 -0
  71. package/dist/src/graphql/resolvers/mutation/ProcessBatchMutationResolver.js +16 -0
  72. package/dist/src/graphql/resolvers/mutation/ProcessBatchMutationResolver.js.map +1 -0
  73. package/dist/src/graphql/resolvers/mutation/SetVariablesMutationResolver.d.ts +11 -0
  74. package/dist/src/graphql/resolvers/mutation/SetVariablesMutationResolver.d.ts.map +1 -0
  75. package/dist/src/graphql/resolvers/mutation/SetVariablesMutationResolver.js +16 -0
  76. package/dist/src/graphql/resolvers/mutation/SetVariablesMutationResolver.js.map +1 -0
  77. package/dist/src/graphql/resolvers/mutation/index.d.ts +3 -0
  78. package/dist/src/graphql/resolvers/mutation/index.d.ts.map +1 -0
  79. package/dist/src/graphql/resolvers/mutation/index.js +19 -0
  80. package/dist/src/graphql/resolvers/mutation/index.js.map +1 -0
  81. package/dist/src/graphql/resolvers/query/EventsQueryResolver.d.ts +11 -0
  82. package/dist/src/graphql/resolvers/query/EventsQueryResolver.d.ts.map +1 -0
  83. package/dist/src/graphql/resolvers/query/EventsQueryResolver.js +43 -0
  84. package/dist/src/graphql/resolvers/query/EventsQueryResolver.js.map +1 -0
  85. package/dist/src/graphql/resolvers/query/VariablesQueryResolver.d.ts +12 -0
  86. package/dist/src/graphql/resolvers/query/VariablesQueryResolver.d.ts.map +1 -0
  87. package/dist/src/graphql/resolvers/query/VariablesQueryResolver.js +16 -0
  88. package/dist/src/graphql/resolvers/query/VariablesQueryResolver.js.map +1 -0
  89. package/dist/src/graphql/resolvers/query/index.d.ts +2 -0
  90. package/dist/src/graphql/resolvers/query/index.d.ts.map +1 -0
  91. package/dist/src/graphql/resolvers/query/index.js +18 -0
  92. package/dist/src/graphql/resolvers/query/index.js.map +1 -0
  93. package/dist/src/graphql/schema/actions.graphql.d.ts +3 -0
  94. package/dist/src/graphql/schema/actions.graphql.d.ts.map +1 -0
  95. package/dist/src/graphql/schema/actions.graphql.js +93 -0
  96. package/dist/src/graphql/schema/actions.graphql.js.map +1 -0
  97. package/dist/src/graphql/schema/index.d.ts +224 -0
  98. package/dist/src/graphql/schema/index.d.ts.map +1 -0
  99. package/dist/src/graphql/schema/index.js +3 -0
  100. package/dist/src/graphql/schema/index.js.map +1 -0
  101. package/dist/src/index.d.ts +13 -0
  102. package/dist/src/index.d.ts.map +1 -0
  103. package/dist/src/index.js +81 -0
  104. package/dist/src/index.js.map +1 -0
  105. package/dist/src/migrations/2023-03-10-145000-actions-variables.d.ts +3 -0
  106. package/dist/src/migrations/2023-03-10-145000-actions-variables.d.ts.map +1 -0
  107. package/dist/src/migrations/2023-03-10-145000-actions-variables.js +17 -0
  108. package/dist/src/migrations/2023-03-10-145000-actions-variables.js.map +1 -0
  109. package/dist/src/migrations/index.d.ts +3 -0
  110. package/dist/src/migrations/index.d.ts.map +1 -0
  111. package/dist/src/migrations/index.js +13 -0
  112. package/dist/src/migrations/index.js.map +1 -0
  113. package/dist/src/migrations/snapshot.d.ts +3 -0
  114. package/dist/src/migrations/snapshot.d.ts.map +1 -0
  115. package/dist/src/migrations/snapshot.js +49 -0
  116. package/dist/src/migrations/snapshot.js.map +1 -0
  117. package/dist/src/model/EventsInProcessingQuery.d.ts +9 -0
  118. package/dist/src/model/EventsInProcessingQuery.d.ts.map +1 -0
  119. package/dist/src/model/EventsInProcessingQuery.js +22 -0
  120. package/dist/src/model/EventsInProcessingQuery.js.map +1 -0
  121. package/dist/src/model/EventsToProcessQuery.d.ts +9 -0
  122. package/dist/src/model/EventsToProcessQuery.d.ts.map +1 -0
  123. package/dist/src/model/EventsToProcessQuery.js +22 -0
  124. package/dist/src/model/EventsToProcessQuery.js.map +1 -0
  125. package/dist/src/model/EventsToProcessSpecification.d.ts +4 -0
  126. package/dist/src/model/EventsToProcessSpecification.d.ts.map +1 -0
  127. package/dist/src/model/EventsToProcessSpecification.js +14 -0
  128. package/dist/src/model/EventsToProcessSpecification.js.map +1 -0
  129. package/dist/src/model/FailedEventsQuery.d.ts +9 -0
  130. package/dist/src/model/FailedEventsQuery.d.ts.map +1 -0
  131. package/dist/src/model/FailedEventsQuery.js +22 -0
  132. package/dist/src/model/FailedEventsQuery.js.map +1 -0
  133. package/dist/src/model/SetVariableCommand.d.ts +8 -0
  134. package/dist/src/model/SetVariableCommand.d.ts.map +1 -0
  135. package/dist/src/model/SetVariableCommand.js +26 -0
  136. package/dist/src/model/SetVariableCommand.js.map +1 -0
  137. package/dist/src/model/VariablesManager.d.ts +8 -0
  138. package/dist/src/model/VariablesManager.d.ts.map +1 -0
  139. package/dist/src/model/VariablesManager.js +46 -0
  140. package/dist/src/model/VariablesManager.js.map +1 -0
  141. package/dist/src/model/VariablesQuery.d.ts +12 -0
  142. package/dist/src/model/VariablesQuery.d.ts.map +1 -0
  143. package/dist/src/model/VariablesQuery.js +13 -0
  144. package/dist/src/model/VariablesQuery.js.map +1 -0
  145. package/dist/src/model/types.d.ts +16 -0
  146. package/dist/src/model/types.d.ts.map +1 -0
  147. package/dist/src/model/types.js +3 -0
  148. package/dist/src/model/types.js.map +1 -0
  149. package/dist/src/triggers/Payload.d.ts +62 -0
  150. package/dist/src/triggers/Payload.d.ts.map +1 -0
  151. package/dist/src/triggers/Payload.js +3 -0
  152. package/dist/src/triggers/Payload.js.map +1 -0
  153. package/dist/src/triggers/TriggerHandler.d.ts +26 -0
  154. package/dist/src/triggers/TriggerHandler.d.ts.map +1 -0
  155. package/dist/src/triggers/TriggerHandler.js +130 -0
  156. package/dist/src/triggers/TriggerHandler.js.map +1 -0
  157. package/dist/src/triggers/TriggerIndirectChangesFetcher.d.ts +11 -0
  158. package/dist/src/triggers/TriggerIndirectChangesFetcher.d.ts.map +1 -0
  159. package/dist/src/triggers/TriggerIndirectChangesFetcher.js +24 -0
  160. package/dist/src/triggers/TriggerIndirectChangesFetcher.js.map +1 -0
  161. package/dist/src/triggers/TriggerListeners.d.ts +9 -0
  162. package/dist/src/triggers/TriggerListeners.d.ts.map +1 -0
  163. package/dist/src/triggers/TriggerListeners.js +3 -0
  164. package/dist/src/triggers/TriggerListeners.js.map +1 -0
  165. package/dist/src/triggers/TriggerListenersBuilder.d.ts +15 -0
  166. package/dist/src/triggers/TriggerListenersBuilder.d.ts.map +1 -0
  167. package/dist/src/triggers/TriggerListenersBuilder.js +169 -0
  168. package/dist/src/triggers/TriggerListenersBuilder.js.map +1 -0
  169. package/dist/src/triggers/TriggerListenersFactory.d.ts +8 -0
  170. package/dist/src/triggers/TriggerListenersFactory.d.ts.map +1 -0
  171. package/dist/src/triggers/TriggerListenersFactory.js +18 -0
  172. package/dist/src/triggers/TriggerListenersFactory.js.map +1 -0
  173. package/dist/src/triggers/TriggerListenersStore.d.ts +48 -0
  174. package/dist/src/triggers/TriggerListenersStore.d.ts.map +1 -0
  175. package/dist/src/triggers/TriggerListenersStore.js +30 -0
  176. package/dist/src/triggers/TriggerListenersStore.js.map +1 -0
  177. package/dist/src/triggers/TriggerPayloadBuilder.d.ts +14 -0
  178. package/dist/src/triggers/TriggerPayloadBuilder.d.ts.map +1 -0
  179. package/dist/src/triggers/TriggerPayloadBuilder.js +140 -0
  180. package/dist/src/triggers/TriggerPayloadBuilder.js.map +1 -0
  181. package/dist/src/triggers/TriggerPayloadManager.d.ts +27 -0
  182. package/dist/src/triggers/TriggerPayloadManager.d.ts.map +1 -0
  183. package/dist/src/triggers/TriggerPayloadManager.js +26 -0
  184. package/dist/src/triggers/TriggerPayloadManager.js.map +1 -0
  185. package/dist/src/triggers/TriggerPayloadPersister.d.ts +18 -0
  186. package/dist/src/triggers/TriggerPayloadPersister.d.ts.map +1 -0
  187. package/dist/src/triggers/TriggerPayloadPersister.js +44 -0
  188. package/dist/src/triggers/TriggerPayloadPersister.js.map +1 -0
  189. package/dist/src/triggers/index.d.ts +8 -0
  190. package/dist/src/triggers/index.d.ts.map +1 -0
  191. package/dist/src/triggers/index.js +24 -0
  192. package/dist/src/triggers/index.js.map +1 -0
  193. package/dist/src/tsconfig.tsbuildinfo +1 -0
  194. package/dist/src/utils/assertNever.d.ts +2 -0
  195. package/dist/src/utils/assertNever.d.ts.map +1 -0
  196. package/dist/src/utils/assertNever.js +8 -0
  197. package/dist/src/utils/assertNever.js.map +1 -0
  198. package/dist/src/utils/map.d.ts +2 -0
  199. package/dist/src/utils/map.d.ts.map +1 -0
  200. package/dist/src/utils/map.js +14 -0
  201. package/dist/src/utils/map.js.map +1 -0
  202. package/dist/tests/cases/integration/triggers.manyHasManyWatch.test.d.ts +2 -0
  203. package/dist/tests/cases/integration/triggers.manyHasManyWatch.test.d.ts.map +1 -0
  204. package/dist/tests/cases/integration/triggers.manyHasManyWatch.test.js +442 -0
  205. package/dist/tests/cases/integration/triggers.manyHasManyWatch.test.js.map +1 -0
  206. package/dist/tests/cases/integration/triggers.manyHasOneWatch.test.d.ts +2 -0
  207. package/dist/tests/cases/integration/triggers.manyHasOneWatch.test.d.ts.map +1 -0
  208. package/dist/tests/cases/integration/triggers.manyHasOneWatch.test.js +449 -0
  209. package/dist/tests/cases/integration/triggers.manyHasOneWatch.test.js.map +1 -0
  210. package/dist/tests/cases/integration/triggers.rootWatch.test.d.ts +2 -0
  211. package/dist/tests/cases/integration/triggers.rootWatch.test.d.ts.map +1 -0
  212. package/dist/tests/cases/integration/triggers.rootWatch.test.js +159 -0
  213. package/dist/tests/cases/integration/triggers.rootWatch.test.js.map +1 -0
  214. package/dist/tests/cases/integration/utils.d.ts +4 -0
  215. package/dist/tests/cases/integration/utils.d.ts.map +1 -0
  216. package/dist/tests/cases/integration/utils.js +12 -0
  217. package/dist/tests/cases/integration/utils.js.map +1 -0
  218. package/dist/tests/cases/unit/generator.test.d.ts +2 -0
  219. package/dist/tests/cases/unit/generator.test.d.ts.map +1 -0
  220. package/dist/tests/cases/unit/generator.test.js +627 -0
  221. package/dist/tests/cases/unit/generator.test.js.map +1 -0
  222. package/dist/tests/src/gql.d.ts +2 -0
  223. package/dist/tests/src/gql.d.ts.map +1 -0
  224. package/dist/tests/src/gql.js +14 -0
  225. package/dist/tests/src/gql.js.map +1 -0
  226. package/dist/tests/tsconfig.tsbuildinfo +1 -0
  227. package/graphql-actions.codegen.yml +21 -0
  228. package/package.json +45 -0
  229. package/src/ActionsExecutionContainerHookFactory.ts +28 -0
  230. package/src/ImplementationException.ts +2 -0
  231. package/src/ListenerStoreProvider.ts +17 -0
  232. package/src/dispatch/DispatchWorkerSupervisor.ts +137 -0
  233. package/src/dispatch/EventDispatcher.ts +64 -0
  234. package/src/dispatch/EventsRepository.ts +165 -0
  235. package/src/dispatch/ProjectDispatcher.ts +119 -0
  236. package/src/dispatch/TargetHandlerResolver.ts +18 -0
  237. package/src/dispatch/WebhookTargetHandler.ts +88 -0
  238. package/src/dispatch/types.ts +31 -0
  239. package/src/graphql/http/ActionsApiMiddlewareFactory.ts +36 -0
  240. package/src/graphql/http/ActionsContextResolver.ts +38 -0
  241. package/src/graphql/http/ActionsGraphQLHandlerFactory.ts +23 -0
  242. package/src/graphql/http/ActionsWebsocketControllerFactory.ts +143 -0
  243. package/src/graphql/resolvers/ActionsContext.ts +9 -0
  244. package/src/graphql/resolvers/ResolversFactory.ts +35 -0
  245. package/src/graphql/resolvers/index.ts +2 -0
  246. package/src/graphql/resolvers/mutation/ProcessBatchMutationResolver.ts +16 -0
  247. package/src/graphql/resolvers/mutation/SetVariablesMutationResolver.ts +19 -0
  248. package/src/graphql/resolvers/mutation/index.ts +2 -0
  249. package/src/graphql/resolvers/query/EventsQueryResolver.ts +55 -0
  250. package/src/graphql/resolvers/query/VariablesQueryResolver.ts +18 -0
  251. package/src/graphql/resolvers/query/index.ts +1 -0
  252. package/src/graphql/schema/actions.graphql.ts +91 -0
  253. package/src/graphql/schema/index.ts +295 -0
  254. package/src/index.ts +88 -0
  255. package/src/migrations/2023-03-10-145000-actions-variables.ts +16 -0
  256. package/src/migrations/index.ts +7 -0
  257. package/src/migrations/snapshot.ts +47 -0
  258. package/src/model/EventsInProcessingQuery.ts +21 -0
  259. package/src/model/EventsToProcessQuery.ts +21 -0
  260. package/src/model/EventsToProcessSpecification.ts +11 -0
  261. package/src/model/FailedEventsQuery.ts +21 -0
  262. package/src/model/SetVariableCommand.ts +26 -0
  263. package/src/model/VariablesManager.ts +49 -0
  264. package/src/model/VariablesQuery.ts +17 -0
  265. package/src/model/types.ts +15 -0
  266. package/src/triggers/Payload.ts +82 -0
  267. package/src/triggers/TriggerHandler.ts +161 -0
  268. package/src/triggers/TriggerIndirectChangesFetcher.ts +30 -0
  269. package/src/triggers/TriggerListeners.ts +16 -0
  270. package/src/triggers/TriggerListenersBuilder.ts +190 -0
  271. package/src/triggers/TriggerListenersFactory.ts +19 -0
  272. package/src/triggers/TriggerListenersStore.ts +76 -0
  273. package/src/triggers/TriggerPayloadBuilder.ts +148 -0
  274. package/src/triggers/TriggerPayloadManager.ts +47 -0
  275. package/src/triggers/TriggerPayloadPersister.ts +43 -0
  276. package/src/triggers/index.ts +7 -0
  277. package/src/tsconfig.json +21 -0
  278. package/src/utils/assertNever.ts +3 -0
  279. package/src/utils/map.ts +13 -0
  280. package/tests/cases/integration/triggers.manyHasManyWatch.test.ts +437 -0
  281. package/tests/cases/integration/triggers.manyHasOneWatch.test.ts +446 -0
  282. package/tests/cases/integration/triggers.rootWatch.test.ts +152 -0
  283. package/tests/cases/integration/utils.ts +9 -0
  284. package/tests/cases/unit/generator.test.ts +689 -0
  285. package/tests/src/gql.ts +7 -0
  286. package/tests/tsconfig.json +16 -0
  287. package/tsconfig.json +5 -0
  288. package/tsconfig.settings.json +8 -0
  289. package/vite.config.js +3 -0
@@ -0,0 +1,169 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TriggerListenerBuilder = void 0;
4
+ const TriggerListenersStore_1 = require("./TriggerListenersStore");
5
+ const schema_utils_1 = require("@contember/schema-utils");
6
+ const map_1 = require("../utils/map");
7
+ const ImplementationException_1 = require("../ImplementationException");
8
+ class TriggerListenerBuilder {
9
+ constructor(model) {
10
+ this.model = model;
11
+ this.data = {
12
+ createListeners: new Map(),
13
+ updateListeners: new Map(),
14
+ deleteListeners: new Map(),
15
+ indirectListeners: new Map(),
16
+ junctionListeners: new Map(),
17
+ };
18
+ }
19
+ add(trigger) {
20
+ if (trigger.type === 'basic') {
21
+ this.processBasicTrigger(trigger);
22
+ }
23
+ else if (trigger.type === 'watch') {
24
+ this.processIndirectListeners(trigger);
25
+ }
26
+ else {
27
+ ((_) => {
28
+ throw new ImplementationException_1.ImplementationException(`Unhandled trigger ${trigger.type}`);
29
+ })(trigger);
30
+ }
31
+ }
32
+ processBasicTrigger(trigger) {
33
+ const entity = (0, schema_utils_1.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(Object.keys(entity.fields)), // todo: only columns and owning
54
+ });
55
+ }
56
+ }
57
+ processIndirectListeners(trigger) {
58
+ const entity = (0, schema_utils_1.getEntity)(this.model, trigger.entity);
59
+ this.addListener('createListeners', trigger.entity, {
60
+ type: 'create',
61
+ entity,
62
+ trigger,
63
+ });
64
+ this.addListener('deleteListeners', trigger.entity, {
65
+ type: 'delete',
66
+ entity,
67
+ trigger,
68
+ });
69
+ this.processIndirectListenersNode(trigger, entity, entity, trigger.watch, []);
70
+ }
71
+ processIndirectListenersNode(trigger, rootEntity, entity, node, path) {
72
+ const fields = new Set();
73
+ const relations = new Set();
74
+ for (const entry of node) {
75
+ const [field, args, selection] = Array.isArray(entry) ? entry : [entry, undefined, undefined];
76
+ (0, schema_utils_1.acceptFieldVisitor)(this.model, entity, field, {
77
+ visitColumn: ({ entity, column }) => {
78
+ if ((selection === null || selection === void 0 ? void 0 : selection.length) > 0) {
79
+ throw new ImplementationException_1.ImplementationException(`Column ${field} cannot have sub-selection`);
80
+ }
81
+ fields.add(column.name);
82
+ },
83
+ visitManyHasOne: ({ entity, relation, targetEntity, targetRelation }) => {
84
+ fields.add(relation.name);
85
+ relations.add(relation.name);
86
+ if ((selection === null || selection === void 0 ? void 0 : selection.length) > 0) {
87
+ this.processIndirectListenersNode(trigger, rootEntity, targetEntity, selection, [...path, relation.name]);
88
+ }
89
+ },
90
+ visitOneHasMany: ({ entity, relation, targetEntity, targetRelation }) => {
91
+ this.processIndirectListenersNode(trigger, rootEntity, targetEntity, [...selection !== null && selection !== void 0 ? selection : [], targetRelation.name], [...path, relation.name]);
92
+ },
93
+ visitOneHasOneOwning: ({ entity, relation, targetEntity, targetRelation }) => {
94
+ fields.add(relation.name);
95
+ relations.add(relation.name);
96
+ if ((selection === null || selection === void 0 ? void 0 : selection.length) > 0) {
97
+ this.processIndirectListenersNode(trigger, rootEntity, targetEntity, selection, [...path, relation.name]);
98
+ }
99
+ },
100
+ visitOneHasOneInverse: ({ entity, relation, targetEntity, targetRelation }) => {
101
+ this.processIndirectListenersNode(trigger, rootEntity, targetEntity, [...selection !== null && selection !== void 0 ? selection : [], targetRelation.name], [...path, relation.name]);
102
+ },
103
+ visitManyHasManyOwning: ({ entity, relation, targetEntity, targetRelation }) => {
104
+ this.addJunctionListener(entity.name, relation.name, {
105
+ type: 'junction',
106
+ rootEntity,
107
+ path: path,
108
+ trigger,
109
+ context: {
110
+ entity,
111
+ relation,
112
+ type: 'owning',
113
+ },
114
+ });
115
+ if ((selection === null || selection === void 0 ? void 0 : selection.length) > 0) {
116
+ this.processIndirectListenersNode(trigger, rootEntity, targetEntity, selection, [...path, relation.name]);
117
+ }
118
+ },
119
+ visitManyHasManyInverse: ({ entity, relation, targetEntity, targetRelation }) => {
120
+ this.addJunctionListener(targetEntity.name, targetRelation.name, {
121
+ type: 'junction',
122
+ rootEntity,
123
+ path: path,
124
+ trigger,
125
+ context: {
126
+ entity,
127
+ relation,
128
+ type: 'inverse',
129
+ },
130
+ });
131
+ if ((selection === null || selection === void 0 ? void 0 : selection.length) > 0) {
132
+ this.processIndirectListenersNode(trigger, rootEntity, targetEntity, selection, [...path, relation.name]);
133
+ }
134
+ },
135
+ });
136
+ }
137
+ if (path.length === 0) {
138
+ this.addListener('updateListeners', entity.name, {
139
+ type: 'update',
140
+ entity: rootEntity,
141
+ fields,
142
+ trigger,
143
+ });
144
+ }
145
+ else {
146
+ this.addListener('indirectListeners', entity.name, {
147
+ type: 'indirect',
148
+ rootEntity: rootEntity,
149
+ fields,
150
+ relations,
151
+ path,
152
+ trigger,
153
+ });
154
+ }
155
+ }
156
+ createStore() {
157
+ return new TriggerListenersStore_1.TriggerListenersStore(this.data);
158
+ }
159
+ addListener(type, entityName, value) {
160
+ (0, map_1.mapGetOrPut)(this.data[type], entityName, () => []).push(value);
161
+ }
162
+ addJunctionListener(entityName, relationName, listener) {
163
+ const entityJunctionListeners = (0, map_1.mapGetOrPut)(this.data.junctionListeners, entityName, () => new Map());
164
+ const relationListeners = (0, map_1.mapGetOrPut)(entityJunctionListeners, relationName, () => []);
165
+ relationListeners.push(listener);
166
+ }
167
+ }
168
+ exports.TriggerListenerBuilder = TriggerListenerBuilder;
169
+ //# sourceMappingURL=TriggerListenersBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TriggerListenersBuilder.js","sourceRoot":"","sources":["../../../src/triggers/TriggerListenersBuilder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { TriggerListenersStore } from './TriggerListenersStore';
2
+ import { Schema } from '@contember/schema';
3
+ export declare class TriggerListenersFactory {
4
+ private readonly schema;
5
+ constructor(schema: Schema);
6
+ create(): TriggerListenersStore;
7
+ }
8
+ //# sourceMappingURL=TriggerListenersFactory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TriggerListenersFactory.d.ts","sourceRoot":"","sources":["../../../src/triggers/TriggerListenersFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAE/D,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAE1C,qBAAa,uBAAuB;IAElC,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM;IAIzB,MAAM,IAAI,qBAAqB;CAQtC"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TriggerListenersFactory = void 0;
4
+ const TriggerListenersBuilder_1 = require("./TriggerListenersBuilder");
5
+ class TriggerListenersFactory {
6
+ constructor(schema) {
7
+ this.schema = schema;
8
+ }
9
+ create() {
10
+ const builder = new TriggerListenersBuilder_1.TriggerListenerBuilder(this.schema.model);
11
+ for (const trigger of Object.values(this.schema.actions.triggers)) {
12
+ builder.add(trigger);
13
+ }
14
+ return builder.createStore();
15
+ }
16
+ }
17
+ exports.TriggerListenersFactory = TriggerListenersFactory;
18
+ //# sourceMappingURL=TriggerListenersFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TriggerListenersFactory.js","sourceRoot":"","sources":["../../../src/triggers/TriggerListenersFactory.ts"],"names":[],"mappings":";;;AACA,uEAAkE;AAGlE,MAAa,uBAAuB;IACnC,YACkB,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAEhC,CAAC;IAEM,MAAM;QACZ,MAAM,OAAO,GAAG,IAAI,gDAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC7D,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YAClE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;SACpB;QAED,OAAO,OAAO,CAAC,WAAW,EAAE,CAAA;IAC7B,CAAC;CACD;AAdD,0DAcC"}
@@ -0,0 +1,48 @@
1
+ import { Actions, Model } from '@contember/schema';
2
+ import { TriggerListeners } from './TriggerListeners';
3
+ export interface IndirectListener {
4
+ type: 'indirect';
5
+ trigger: Actions.AnyTrigger;
6
+ rootEntity: Model.Entity;
7
+ fields: Set<string>;
8
+ relations: Set<string>;
9
+ path: string[];
10
+ }
11
+ export interface JunctionListener {
12
+ type: 'junction';
13
+ trigger: Actions.AnyTrigger;
14
+ rootEntity: Model.Entity;
15
+ path: string[];
16
+ context: {
17
+ entity: Model.Entity;
18
+ relation: Model.ManyHasManyOwningRelation | Model.ManyHasManyInverseRelation;
19
+ type: 'owning' | 'inverse';
20
+ };
21
+ }
22
+ export interface DeleteListener {
23
+ type: 'delete';
24
+ trigger: Actions.AnyTrigger;
25
+ entity: Model.Entity;
26
+ }
27
+ export interface CreateListener {
28
+ type: 'create';
29
+ trigger: Actions.AnyTrigger;
30
+ entity: Model.Entity;
31
+ }
32
+ export interface UpdateListener {
33
+ type: 'update';
34
+ trigger: Actions.AnyTrigger;
35
+ entity: Model.Entity;
36
+ fields: Set<string>;
37
+ }
38
+ export declare type AnyListener = JunctionListener | UpdateListener | CreateListener | DeleteListener | IndirectListener;
39
+ export declare class TriggerListenersStore {
40
+ private readonly listeners;
41
+ constructor(listeners: TriggerListeners);
42
+ getUpdateListeners(entityName: string): UpdateListener[];
43
+ getDeleteListener(entityName: string): DeleteListener[];
44
+ getCreateListener(entityName: string): CreateListener[];
45
+ getIndirectListeners(entityName: string): IndirectListener[];
46
+ getJunctionListeners(entityName: string, relationName: string): JunctionListener[];
47
+ }
48
+ //# sourceMappingURL=TriggerListenersStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TriggerListenersStore.d.ts","sourceRoot":"","sources":["../../../src/triggers/TriggerListenersStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAErD,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,UAAU,CAAA;IAChB,OAAO,EAAE,OAAO,CAAC,UAAU,CAAA;IAC3B,UAAU,EAAE,KAAK,CAAC,MAAM,CAAA;IACxB,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACnB,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACtB,IAAI,EAAE,MAAM,EAAE,CAAA;CACd;AAED,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,UAAU,CAAA;IAChB,OAAO,EAAE,OAAO,CAAC,UAAU,CAAA;IAC3B,UAAU,EAAE,KAAK,CAAC,MAAM,CAAA;IACxB,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,OAAO,EAAE;QACR,MAAM,EAAE,KAAK,CAAC,MAAM,CAAA;QACpB,QAAQ,EAAE,KAAK,CAAC,yBAAyB,GAAG,KAAK,CAAC,0BAA0B,CAAA;QAC5E,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAA;KAC1B,CAAA;CACD;AAED,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,QAAQ,CAAA;IACd,OAAO,EAAE,OAAO,CAAC,UAAU,CAAA;IAC3B,MAAM,EAAE,KAAK,CAAC,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,QAAQ,CAAA;IACd,OAAO,EAAE,OAAO,CAAC,UAAU,CAAA;IAC3B,MAAM,EAAE,KAAK,CAAC,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,QAAQ,CAAA;IACd,OAAO,EAAE,OAAO,CAAC,UAAU,CAAA;IAC3B,MAAM,EAAE,KAAK,CAAC,MAAM,CAAA;IACpB,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CACnB;AAED,oBAAY,WAAW,GACpB,gBAAgB,GAChB,cAAc,GACd,cAAc,GACd,cAAc,GACd,gBAAgB,CAAA;AAEnB,qBAAa,qBAAqB;IAEhC,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAT,SAAS,EAAE,gBAAgB;IAItC,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,EAAE;IAIxD,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,EAAE;IAIvD,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,EAAE;IAIvD,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,gBAAgB,EAAE;IAI5D,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,gBAAgB,EAAE;CAGzF"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TriggerListenersStore = void 0;
4
+ class TriggerListenersStore {
5
+ constructor(listeners) {
6
+ this.listeners = listeners;
7
+ }
8
+ getUpdateListeners(entityName) {
9
+ var _a;
10
+ return (_a = this.listeners.updateListeners.get(entityName)) !== null && _a !== void 0 ? _a : [];
11
+ }
12
+ getDeleteListener(entityName) {
13
+ var _a;
14
+ return (_a = this.listeners.deleteListeners.get(entityName)) !== null && _a !== void 0 ? _a : [];
15
+ }
16
+ getCreateListener(entityName) {
17
+ var _a;
18
+ return (_a = this.listeners.createListeners.get(entityName)) !== null && _a !== void 0 ? _a : [];
19
+ }
20
+ getIndirectListeners(entityName) {
21
+ var _a;
22
+ return (_a = this.listeners.indirectListeners.get(entityName)) !== null && _a !== void 0 ? _a : [];
23
+ }
24
+ getJunctionListeners(entityName, relationName) {
25
+ var _a, _b;
26
+ return (_b = (_a = this.listeners.junctionListeners.get(entityName)) === null || _a === void 0 ? void 0 : _a.get(relationName)) !== null && _b !== void 0 ? _b : [];
27
+ }
28
+ }
29
+ exports.TriggerListenersStore = TriggerListenersStore;
30
+ //# sourceMappingURL=TriggerListenersStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TriggerListenersStore.js","sourceRoot":"","sources":["../../../src/triggers/TriggerListenersStore.ts"],"names":[],"mappings":";;;AAkDA,MAAa,qBAAqB;IACjC,YACkB,SAA2B;QAA3B,cAAS,GAAT,SAAS,CAAkB;IAE7C,CAAC;IAEM,kBAAkB,CAAC,UAAkB;;QAC3C,OAAO,MAAA,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,mCAAI,EAAE,CAAA;IAC5D,CAAC;IAEM,iBAAiB,CAAC,UAAkB;;QAC1C,OAAO,MAAA,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,mCAAI,EAAE,CAAA;IAC5D,CAAC;IAEM,iBAAiB,CAAC,UAAkB;;QAC1C,OAAO,MAAA,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,mCAAI,EAAE,CAAA;IAC5D,CAAC;IAEM,oBAAoB,CAAC,UAAkB;;QAC7C,OAAO,MAAA,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,mCAAI,EAAE,CAAA;IAC9D,CAAC;IAEM,oBAAoB,CAAC,UAAkB,EAAE,YAAoB;;QACnE,OAAO,MAAA,MAAA,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,0CAAE,GAAG,CAAC,YAAY,CAAC,mCAAI,EAAE,CAAA;IACjF,CAAC;CACD;AAzBD,sDAyBC"}
@@ -0,0 +1,14 @@
1
+ import { AnyEventPayload } from './Payload';
2
+ import { FiredEvent } from './TriggerPayloadManager';
3
+ import { Mapper } from '@contember/engine-content-api';
4
+ export declare class TriggerPayloadBuilder {
5
+ private readonly mapper;
6
+ constructor(mapper: Mapper);
7
+ build(events: FiredEvent[]): Promise<AnyEventPayload[]>;
8
+ preprocessEvent(event: FiredEvent): Promise<FiredEvent>;
9
+ private buildWatchEventPayloads;
10
+ private buildBaseEventPayloads;
11
+ private fetchSelection;
12
+ private convertSelectionNode;
13
+ }
14
+ //# sourceMappingURL=TriggerPayloadBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TriggerPayloadBuilder.d.ts","sourceRoot":"","sources":["../../../src/triggers/TriggerPayloadBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAuC,MAAM,WAAW,CAAA;AAGhF,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAEpD,OAAO,EAAa,MAAM,EAAc,MAAM,+BAA+B,CAAA;AAI7E,qBAAa,qBAAqB;IAEhC,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM;IAInB,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAmBvD,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAYpE,OAAO,CAAC,uBAAuB;IAoB/B,OAAO,CAAC,sBAAsB;YAsDhB,cAAc;IAkB5B,OAAO,CAAC,oBAAoB;CAS5B"}
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TriggerPayloadBuilder = void 0;
4
+ const ImplementationException_1 = require("../ImplementationException");
5
+ const assertNever_1 = require("../utils/assertNever");
6
+ const engine_content_api_1 = require("@contember/engine-content-api");
7
+ class TriggerPayloadBuilder {
8
+ constructor(mapper) {
9
+ this.mapper = mapper;
10
+ }
11
+ async build(events) {
12
+ const filteredEvents = events.filter(it => {
13
+ var _a;
14
+ return it.cause.type !== 'BeforeUpdateEvent'
15
+ || ((_a = it.cause.afterEvent) === null || _a === void 0 ? void 0 : _a.hasChanges) === true;
16
+ });
17
+ if (filteredEvents.length === 0) {
18
+ return [];
19
+ }
20
+ const selections = await this.fetchSelection(filteredEvents);
21
+ const triggerType = filteredEvents[0].listener.trigger.type;
22
+ if (triggerType === 'basic') {
23
+ return filteredEvents.map(it => ({ trigger: it.listener.trigger.name, ...this.buildBaseEventPayloads(it, selections[it.primary]) }));
24
+ }
25
+ if (triggerType === 'watch') {
26
+ return this.buildWatchEventPayloads(filteredEvents, selections);
27
+ }
28
+ return (0, assertNever_1.assertNever)(triggerType);
29
+ }
30
+ async preprocessEvent(event) {
31
+ if (event.listener.type === 'delete' && event.listener.trigger.selection) {
32
+ const input = this.convertSelectionNode(event.listener.trigger.selection);
33
+ const selection = await this.mapper.selectUnique(event.entity, input.withArg('by', {
34
+ [event.entity.primary]: event.primary,
35
+ }), []);
36
+ return { ...event, selection };
37
+ }
38
+ return event;
39
+ }
40
+ buildWatchEventPayloads(events, selections) {
41
+ var _a;
42
+ var _b;
43
+ const byPrimary = {};
44
+ for (const event of events) {
45
+ (_a = byPrimary[_b = event.primary]) !== null && _a !== void 0 ? _a : (byPrimary[_b] = { primary: event.primary, events: [] });
46
+ byPrimary[event.primary].events.push(event);
47
+ }
48
+ const payloads = [];
49
+ for (const eventsByPrimary of Object.values(byPrimary)) {
50
+ payloads.push({
51
+ operation: 'watch',
52
+ trigger: events[0].listener.trigger.name,
53
+ entity: events[0].entity.name,
54
+ id: eventsByPrimary.primary,
55
+ selection: selections[eventsByPrimary.primary],
56
+ events: eventsByPrimary.events.map(it => this.buildBaseEventPayloads(it)),
57
+ });
58
+ }
59
+ return payloads;
60
+ }
61
+ buildBaseEventPayloads(event, selection) {
62
+ switch (event.cause.type) {
63
+ case 'AfterInsertEvent':
64
+ return {
65
+ operation: 'create',
66
+ entity: event.cause.entity.name,
67
+ id: event.cause.id,
68
+ selection,
69
+ values: Object.fromEntries(event.cause.data.map(it => [it.fieldName, it.resolvedValue])),
70
+ path: 'path' in event.listener ? event.listener.path : undefined,
71
+ };
72
+ case 'AfterUpdateEvent':
73
+ case 'BeforeUpdateEvent':
74
+ const afterEvent = event.cause.type === 'AfterUpdateEvent' ? event.cause : event.cause.afterEvent;
75
+ if (!afterEvent) {
76
+ throw new ImplementationException_1.ImplementationException();
77
+ }
78
+ return {
79
+ operation: 'update',
80
+ entity: event.cause.entity.name,
81
+ id: event.cause.id,
82
+ selection,
83
+ values: Object.fromEntries(event.cause.data.map(it => [it.fieldName, it.resolvedValue])),
84
+ path: 'path' in event.listener ? event.listener.path : undefined,
85
+ old: Object.fromEntries(afterEvent.data.map(it => [it.fieldName, it.old])),
86
+ };
87
+ case 'BeforeDeleteEvent':
88
+ return {
89
+ operation: 'delete',
90
+ entity: event.cause.entity.name,
91
+ id: event.cause.id,
92
+ selection,
93
+ path: 'path' in event.listener ? event.listener.path : undefined,
94
+ };
95
+ case 'AfterJunctionUpdateEvent':
96
+ if (event.listener.type !== 'junction') {
97
+ throw new ImplementationException_1.ImplementationException();
98
+ }
99
+ const [id, inverseId] = event.listener.context.type === 'owning'
100
+ ? [event.cause.owningId, event.cause.inverseId]
101
+ : [event.cause.inverseId, event.cause.owningId];
102
+ return {
103
+ operation: event.cause.operation === 'connect' ? 'junction_connect' : 'junction_disconnect',
104
+ entity: event.listener.context.entity.name,
105
+ relation: event.listener.context.relation.name,
106
+ id,
107
+ inverseId,
108
+ path: 'path' in event.listener ? event.listener.path : undefined,
109
+ };
110
+ default:
111
+ (0, assertNever_1.assertNever)(event.cause, it => it.type);
112
+ }
113
+ }
114
+ async fetchSelection(events) {
115
+ const trigger = events[0].listener.trigger;
116
+ if (!trigger.selection) {
117
+ return {};
118
+ }
119
+ const ids = Array.from(new Set(events.filter(it => it.listener.type !== 'delete').map(it => it.primary)));
120
+ if (ids.length === 0) {
121
+ return {};
122
+ }
123
+ const entity = events[0].entity;
124
+ const input = this.convertSelectionNode(trigger.selection).withArg('filter', {
125
+ [entity.primary]: { in: ids },
126
+ });
127
+ return await this.mapper.selectAssoc(entity, input, [], entity.primary);
128
+ }
129
+ convertSelectionNode(node, nodeName = 'root', path = []) {
130
+ return new engine_content_api_1.ObjectNode(nodeName, nodeName, node.map(it => {
131
+ const [field, args, selection] = Array.isArray(it) ? it : [it, undefined, undefined];
132
+ if (selection === undefined || selection.length === 0) {
133
+ return new engine_content_api_1.FieldNode(field, field, {});
134
+ }
135
+ return this.convertSelectionNode(selection, field, [...path, nodeName]).withArgs(args);
136
+ }), {}, {}, path);
137
+ }
138
+ }
139
+ exports.TriggerPayloadBuilder = TriggerPayloadBuilder;
140
+ //# sourceMappingURL=TriggerPayloadBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TriggerPayloadBuilder.js","sourceRoot":"","sources":["../../../src/triggers/TriggerPayloadBuilder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { Actions, Input, Model } from '@contember/schema';
2
+ import { AnyEventPayload } from './Payload';
3
+ import { AnyListener } from './TriggerListenersStore';
4
+ import { EventCause } from './TriggerHandler';
5
+ import { TriggerPayloadBuilder } from './TriggerPayloadBuilder';
6
+ import { TriggerPayloadPersister } from './TriggerPayloadPersister';
7
+ export interface FiredEvent {
8
+ listener: AnyListener;
9
+ cause: EventCause;
10
+ entity: Model.Entity;
11
+ primary: Input.PrimaryValue;
12
+ selection?: any;
13
+ }
14
+ export declare type GroupedPayloads = {
15
+ trigger: Actions.AnyTrigger;
16
+ entity: Model.Entity;
17
+ payloads: AnyEventPayload[];
18
+ };
19
+ export declare class TriggerPayloadManager {
20
+ private readonly triggerPayloadBuilder;
21
+ private readonly triggerPayloadPersister;
22
+ private eventsByTrigger;
23
+ constructor(triggerPayloadBuilder: TriggerPayloadBuilder, triggerPayloadPersister: TriggerPayloadPersister);
24
+ add(firedEvent: FiredEvent): Promise<void>;
25
+ persist(): Promise<void>;
26
+ }
27
+ //# sourceMappingURL=TriggerPayloadManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TriggerPayloadManager.d.ts","sourceRoot":"","sources":["../../../src/triggers/TriggerPayloadManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AAGnE,MAAM,WAAW,UAAU;IAC1B,QAAQ,EAAE,WAAW,CAAA;IACrB,KAAK,EAAE,UAAU,CAAA;IACjB,MAAM,EAAE,KAAK,CAAC,MAAM,CAAA;IACpB,OAAO,EAAE,KAAK,CAAC,YAAY,CAAA;IAC3B,SAAS,CAAC,EAAE,GAAG,CAAA;CACf;AAED,oBAAY,eAAe,GAAG;IAC7B,OAAO,EAAE,OAAO,CAAC,UAAU,CAAA;IAC3B,MAAM,EAAE,KAAK,CAAC,MAAM,CAAA;IACpB,QAAQ,EAAE,eAAe,EAAE,CAAA;CAC3B,CAAA;AAED,qBAAa,qBAAqB;IAIhC,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IACtC,OAAO,CAAC,QAAQ,CAAC,uBAAuB;IAJzC,OAAO,CAAC,eAAe,CAAmC;gBAGxC,qBAAqB,EAAE,qBAAqB,EAC5C,uBAAuB,EAAE,uBAAuB;IAIrD,GAAG,CAAC,UAAU,EAAE,UAAU;IAO1B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAOrC"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TriggerPayloadManager = void 0;
4
+ class TriggerPayloadManager {
5
+ constructor(triggerPayloadBuilder, triggerPayloadPersister) {
6
+ this.triggerPayloadBuilder = triggerPayloadBuilder;
7
+ this.triggerPayloadPersister = triggerPayloadPersister;
8
+ this.eventsByTrigger = {};
9
+ }
10
+ async add(firedEvent) {
11
+ var _a;
12
+ var _b, _c;
13
+ const event = await this.triggerPayloadBuilder.preprocessEvent(firedEvent);
14
+ (_a = (_b = this.eventsByTrigger)[_c = firedEvent.listener.trigger.name]) !== null && _a !== void 0 ? _a : (_b[_c] = []);
15
+ this.eventsByTrigger[firedEvent.listener.trigger.name].push(event);
16
+ }
17
+ async persist() {
18
+ for (const events of Object.values(this.eventsByTrigger)) {
19
+ const payloads = await this.triggerPayloadBuilder.build(events);
20
+ const trigger = events[0].listener.trigger;
21
+ await this.triggerPayloadPersister.persist(trigger, payloads);
22
+ }
23
+ }
24
+ }
25
+ exports.TriggerPayloadManager = TriggerPayloadManager;
26
+ //# sourceMappingURL=TriggerPayloadManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TriggerPayloadManager.js","sourceRoot":"","sources":["../../../src/triggers/TriggerPayloadManager.ts"],"names":[],"mappings":";;;AAsBA,MAAa,qBAAqB;IAGjC,YACkB,qBAA4C,EAC5C,uBAAgD;QADhD,0BAAqB,GAArB,qBAAqB,CAAuB;QAC5C,4BAAuB,GAAvB,uBAAuB,CAAyB;QAJ1D,oBAAe,GAAiC,EAAE,CAAA;IAM1D,CAAC;IAEM,KAAK,CAAC,GAAG,CAAC,UAAsB;;;QACtC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,eAAe,CAAC,UAAU,CAAC,CAAA;QAC1E,YAAA,IAAI,CAAC,eAAe,OAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,8CAAM,EAAE,EAAA;QAC7D,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACnE,CAAC;IAGM,KAAK,CAAC,OAAO;QACnB,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE;YACzD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;YAC/D,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAA;YAC1C,MAAM,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;SAC7D;IACF,CAAC;CACD;AAvBD,sDAuBC"}
@@ -0,0 +1,18 @@
1
+ import { Client } from '@contember/database';
2
+ import { AnyEventPayload } from './Payload';
3
+ import { Mapper } from '@contember/engine-content-api';
4
+ import { Actions } from '@contember/schema';
5
+ export declare const NOTIFY_CHANNEL_NAME = "actions_event";
6
+ export declare class TriggerPayloadPersister {
7
+ private readonly mapper;
8
+ private readonly client;
9
+ private readonly providers;
10
+ private readonly projectSlug;
11
+ private readonly stageId;
12
+ private readonly schemaId;
13
+ constructor(mapper: Mapper, client: Client, providers: {
14
+ uuid: () => string;
15
+ }, projectSlug: string, stageId: string, schemaId: number);
16
+ persist(trigger: Actions.AnyTrigger, payloads: AnyEventPayload[]): Promise<void>;
17
+ }
18
+ //# sourceMappingURL=TriggerPayloadPersister.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TriggerPayloadPersister.d.ts","sourceRoot":"","sources":["../../../src/triggers/TriggerPayloadPersister.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAiB,MAAM,qBAAqB,CAAA;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAA;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAE3C,eAAO,MAAM,mBAAmB,kBAAkB,CAAA;AAClD,qBAAa,uBAAuB;IAElC,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBALR,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,MAAM,CAAA;KAAE,EACjC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM;IAIrB,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAyB7F"}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TriggerPayloadPersister = exports.NOTIFY_CHANNEL_NAME = void 0;
4
+ const database_1 = require("@contember/database");
5
+ exports.NOTIFY_CHANNEL_NAME = 'actions_event';
6
+ class TriggerPayloadPersister {
7
+ constructor(mapper, client, providers, projectSlug, stageId, schemaId) {
8
+ this.mapper = mapper;
9
+ this.client = client;
10
+ this.providers = providers;
11
+ this.projectSlug = projectSlug;
12
+ this.stageId = stageId;
13
+ this.schemaId = schemaId;
14
+ }
15
+ async persist(trigger, payloads) {
16
+ const chunkSize = 100;
17
+ for (let i = 0; i < payloads.length; i += chunkSize) {
18
+ const chunk = payloads.slice(i, i + chunkSize);
19
+ await database_1.InsertBuilder.create()
20
+ .into('actions_event')
21
+ .values(chunk.map(it => {
22
+ var _a;
23
+ return ({
24
+ id: this.providers.uuid(),
25
+ transaction_id: this.mapper.transactionId,
26
+ created_at: 'now',
27
+ visible_at: 'now',
28
+ num_retries: 0,
29
+ state: 'created',
30
+ stage_id: this.stageId,
31
+ schema_id: this.schemaId,
32
+ target: trigger.target,
33
+ trigger: trigger.name,
34
+ priority: (_a = trigger.priority) !== null && _a !== void 0 ? _a : 0,
35
+ payload: it,
36
+ });
37
+ }))
38
+ .execute(this.client);
39
+ }
40
+ await this.client.query('SELECT pg_notify(?, ?)', [exports.NOTIFY_CHANNEL_NAME, this.projectSlug]);
41
+ }
42
+ }
43
+ exports.TriggerPayloadPersister = TriggerPayloadPersister;
44
+ //# sourceMappingURL=TriggerPayloadPersister.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TriggerPayloadPersister.js","sourceRoot":"","sources":["../../../src/triggers/TriggerPayloadPersister.ts"],"names":[],"mappings":";;;AAAA,kDAA2D;AAK9C,QAAA,mBAAmB,GAAG,eAAe,CAAA;AAClD,MAAa,uBAAuB;IACnC,YACkB,MAAc,EACd,MAAc,EACd,SAAiC,EACjC,WAAmB,EACnB,OAAe,EACf,QAAgB;QALhB,WAAM,GAAN,MAAM,CAAQ;QACd,WAAM,GAAN,MAAM,CAAQ;QACd,cAAS,GAAT,SAAS,CAAwB;QACjC,gBAAW,GAAX,WAAW,CAAQ;QACnB,YAAO,GAAP,OAAO,CAAQ;QACf,aAAQ,GAAR,QAAQ,CAAQ;IAElC,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,OAA2B,EAAE,QAA2B;QAC5E,MAAM,SAAS,GAAG,GAAG,CAAA;QACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE;YACpD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAA;YAC9C,MAAM,wBAAa,CAAC,MAAM,EAAE;iBAC1B,IAAI,CAAC,eAAe,CAAC;iBACrB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;;gBAAC,OAAA,CAAC;oBACxB,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;oBACzB,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa;oBACzC,UAAU,EAAE,KAAK;oBACjB,UAAU,EAAE,KAAK;oBACjB,WAAW,EAAE,CAAC;oBACd,KAAK,EAAE,SAAS;oBAChB,QAAQ,EAAE,IAAI,CAAC,OAAO;oBACtB,SAAS,EAAE,IAAI,CAAC,QAAQ;oBACxB,MAAM,EAAE,OAAO,CAAC,MAAM;oBACtB,OAAO,EAAE,OAAO,CAAC,IAAI;oBACrB,QAAQ,EAAE,MAAA,OAAO,CAAC,QAAQ,mCAAI,CAAC;oBAC/B,OAAO,EAAE,EAAE;iBACX,CAAC,CAAA;aAAA,CAAC,CAAC;iBACH,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;SACtB;QAED,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,CAAC,2BAAmB,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAA;IAC3F,CAAC;CACD;AApCD,0DAoCC"}
@@ -0,0 +1,8 @@
1
+ export * from './TriggerIndirectChangesFetcher';
2
+ export * from './TriggerListeners';
3
+ export * from './TriggerListenersBuilder';
4
+ export * from './TriggerListenersFactory';
5
+ export * from './TriggerListenersStore';
6
+ export * from './TriggerHandler';
7
+ export * from './TriggerPayloadManager';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/triggers/index.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAA;AAC/C,cAAc,oBAAoB,CAAA;AAClC,cAAc,2BAA2B,CAAA;AACzC,cAAc,2BAA2B,CAAA;AACzC,cAAc,yBAAyB,CAAA;AACvC,cAAc,kBAAkB,CAAA;AAChC,cAAc,yBAAyB,CAAA"}