@contember/engine-system-api 0.12.0-beta.2 → 1.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (296) hide show
  1. package/dist/src/SystemContainer.d.ts +15 -14
  2. package/dist/src/SystemContainer.d.ts.map +1 -1
  3. package/dist/src/SystemContainer.js +7 -11
  4. package/dist/src/SystemContainer.js.map +1 -1
  5. package/dist/src/index.d.ts +1 -1
  6. package/dist/src/index.d.ts.map +1 -1
  7. package/dist/src/index.js +1 -2
  8. package/dist/src/index.js.map +1 -1
  9. package/dist/src/model/ProjectInitializer.d.ts.map +1 -1
  10. package/dist/src/model/ProjectInitializer.js +7 -17
  11. package/dist/src/model/ProjectInitializer.js.map +1 -1
  12. package/dist/src/model/ProjectTruncateExecutor.js +3 -3
  13. package/dist/src/model/ProjectTruncateExecutor.js.map +1 -1
  14. package/dist/src/model/authorization/AuthorizationActions.d.ts +0 -20
  15. package/dist/src/model/authorization/AuthorizationActions.d.ts.map +1 -1
  16. package/dist/src/model/authorization/AuthorizationActions.js +0 -5
  17. package/dist/src/model/authorization/AuthorizationActions.js.map +1 -1
  18. package/dist/src/model/authorization/StagePermissionsFactory.d.ts.map +1 -1
  19. package/dist/src/model/authorization/StagePermissionsFactory.js +1 -21
  20. package/dist/src/model/authorization/StagePermissionsFactory.js.map +1 -1
  21. package/dist/src/model/commands/migrations/ModifyMigrationCommand.js +1 -1
  22. package/dist/src/model/commands/migrations/ModifyMigrationCommand.js.map +1 -1
  23. package/dist/src/model/commands/migrations/SaveMigrationCommand.js +1 -1
  24. package/dist/src/model/commands/migrations/SaveMigrationCommand.js.map +1 -1
  25. package/dist/src/model/commands/stages/CreateOrUpdateStageCommand.d.ts.map +1 -1
  26. package/dist/src/model/commands/stages/CreateOrUpdateStageCommand.js +2 -3
  27. package/dist/src/model/commands/stages/CreateOrUpdateStageCommand.js.map +1 -1
  28. package/dist/src/model/commands/stages/index.d.ts +0 -1
  29. package/dist/src/model/commands/stages/index.d.ts.map +1 -1
  30. package/dist/src/model/commands/stages/index.js +0 -1
  31. package/dist/src/model/commands/stages/index.js.map +1 -1
  32. package/dist/src/model/database/DatabaseContext.js +1 -1
  33. package/dist/src/model/database/DatabaseContext.js.map +1 -1
  34. package/dist/src/model/dependencies/content/index.d.ts +0 -1
  35. package/dist/src/model/dependencies/content/index.d.ts.map +1 -1
  36. package/dist/src/model/dependencies/content/index.js +0 -1
  37. package/dist/src/model/dependencies/content/index.js.map +1 -1
  38. package/dist/src/model/dependencies/index.d.ts +1 -0
  39. package/dist/src/model/dependencies/index.d.ts.map +1 -1
  40. package/dist/src/model/dependencies/index.js +1 -0
  41. package/dist/src/model/dependencies/index.js.map +1 -1
  42. package/dist/src/model/dependencies/tenant/IdentityFetcher.d.ts +2 -1
  43. package/dist/src/model/dependencies/tenant/IdentityFetcher.d.ts.map +1 -1
  44. package/dist/src/model/dependencies/tenant/index.d.ts +2 -0
  45. package/dist/src/model/dependencies/tenant/index.d.ts.map +1 -0
  46. package/dist/src/model/{events/dependency → dependencies/tenant}/index.js +1 -5
  47. package/dist/src/model/dependencies/tenant/index.js.map +1 -0
  48. package/dist/src/model/events/EventResponseBuilder.d.ts +11 -0
  49. package/dist/src/model/events/EventResponseBuilder.d.ts.map +1 -0
  50. package/dist/src/model/events/{HistoryEventResponseBuilder.js → EventResponseBuilder.js} +19 -18
  51. package/dist/src/model/events/EventResponseBuilder.js.map +1 -0
  52. package/dist/src/model/events/EventResponseHelper.d.ts +3 -3
  53. package/dist/src/model/events/EventResponseHelper.js +3 -3
  54. package/dist/src/model/events/EventResponseHelper.js.map +1 -1
  55. package/dist/src/model/events/identityUtils.js +1 -1
  56. package/dist/src/model/events/identityUtils.js.map +1 -1
  57. package/dist/src/model/events/index.d.ts +1 -5
  58. package/dist/src/model/events/index.d.ts.map +1 -1
  59. package/dist/src/model/events/index.js +1 -5
  60. package/dist/src/model/events/index.js.map +1 -1
  61. package/dist/src/model/helpers/modelHelpers.js +1 -1
  62. package/dist/src/model/helpers/modelHelpers.js.map +1 -1
  63. package/dist/src/model/migrations/MigrationExecutor.d.ts.map +1 -1
  64. package/dist/src/model/migrations/MigrationExecutor.js +2 -2
  65. package/dist/src/model/migrations/MigrationExecutor.js.map +1 -1
  66. package/dist/src/model/migrations/ProjectMigrator.d.ts.map +1 -1
  67. package/dist/src/model/migrations/ProjectMigrator.js +6 -12
  68. package/dist/src/model/migrations/ProjectMigrator.js.map +1 -1
  69. package/dist/src/model/migrations/SchemaVersionBuilder.js +2 -2
  70. package/dist/src/model/migrations/SchemaVersionBuilder.js.map +1 -1
  71. package/dist/src/model/queries/events/EventQueryHelpers.d.ts +4 -3
  72. package/dist/src/model/queries/events/EventQueryHelpers.d.ts.map +1 -1
  73. package/dist/src/model/queries/events/EventQueryHelpers.js +4 -5
  74. package/dist/src/model/queries/events/EventQueryHelpers.js.map +1 -1
  75. package/dist/src/model/queries/events/EventsQuery.d.ts +12 -0
  76. package/dist/src/model/queries/events/EventsQuery.d.ts.map +1 -0
  77. package/dist/src/model/queries/events/EventsQuery.js +88 -0
  78. package/dist/src/model/queries/events/EventsQuery.js.map +1 -0
  79. package/dist/src/model/queries/events/OldValuesQuery.d.ts +7 -0
  80. package/dist/src/model/queries/events/OldValuesQuery.d.ts.map +1 -0
  81. package/dist/src/model/queries/events/OldValuesQuery.js +25 -0
  82. package/dist/src/model/queries/events/OldValuesQuery.js.map +1 -0
  83. package/dist/src/model/queries/events/index.d.ts +2 -0
  84. package/dist/src/model/queries/events/index.d.ts.map +1 -1
  85. package/dist/src/model/queries/events/index.js +2 -0
  86. package/dist/src/model/queries/events/index.js.map +1 -1
  87. package/dist/src/model/queries/migrations/ExecutedMigrationByVersionQuery.js +2 -2
  88. package/dist/src/model/queries/migrations/ExecutedMigrationByVersionQuery.js.map +1 -1
  89. package/dist/src/model/queries/migrations/ExecutedMigrationsQuery.js +1 -1
  90. package/dist/src/model/queries/migrations/ExecutedMigrationsQuery.js.map +1 -1
  91. package/dist/src/model/queries/stages/StageBySlugQuery.js +1 -1
  92. package/dist/src/model/queries/stages/StageBySlugQuery.js.map +1 -1
  93. package/dist/src/model/queries/stages/StageQueryFactory.d.ts.map +1 -1
  94. package/dist/src/model/queries/stages/StageQueryFactory.js +0 -1
  95. package/dist/src/model/queries/stages/StageQueryFactory.js.map +1 -1
  96. package/dist/src/model/stages/StageCreator.d.ts +1 -2
  97. package/dist/src/model/stages/StageCreator.d.ts.map +1 -1
  98. package/dist/src/model/stages/StageCreator.js +2 -10
  99. package/dist/src/model/stages/StageCreator.js.map +1 -1
  100. package/dist/src/model/stages/index.d.ts +0 -1
  101. package/dist/src/model/stages/index.d.ts.map +1 -1
  102. package/dist/src/model/stages/index.js +0 -1
  103. package/dist/src/model/stages/index.js.map +1 -1
  104. package/dist/src/resolvers/ResolverContext.d.ts +3 -1
  105. package/dist/src/resolvers/ResolverContext.d.ts.map +1 -1
  106. package/dist/src/resolvers/ResolverContext.js +2 -1
  107. package/dist/src/resolvers/ResolverContext.js.map +1 -1
  108. package/dist/src/resolvers/ResolverFactory.d.ts +7 -11
  109. package/dist/src/resolvers/ResolverFactory.d.ts.map +1 -1
  110. package/dist/src/resolvers/ResolverFactory.js +21 -14
  111. package/dist/src/resolvers/ResolverFactory.js.map +1 -1
  112. package/dist/src/resolvers/mutation/MigrateMutationResolver.d.ts.map +1 -1
  113. package/dist/src/resolvers/mutation/MigrateMutationResolver.js +3 -2
  114. package/dist/src/resolvers/mutation/MigrateMutationResolver.js.map +1 -1
  115. package/dist/src/resolvers/mutation/index.d.ts +1 -0
  116. package/dist/src/resolvers/mutation/index.d.ts.map +1 -1
  117. package/dist/src/resolvers/mutation/index.js +1 -0
  118. package/dist/src/resolvers/mutation/index.js.map +1 -1
  119. package/dist/src/resolvers/query/EventsQueryResolver.d.ts +11 -0
  120. package/dist/src/resolvers/query/EventsQueryResolver.d.ts.map +1 -0
  121. package/dist/src/resolvers/query/EventsQueryResolver.js +26 -0
  122. package/dist/src/resolvers/query/EventsQueryResolver.js.map +1 -0
  123. package/dist/src/resolvers/query/index.d.ts +1 -0
  124. package/dist/src/resolvers/query/index.d.ts.map +1 -1
  125. package/dist/src/resolvers/query/index.js +1 -0
  126. package/dist/src/resolvers/query/index.js.map +1 -1
  127. package/dist/src/resolvers/types/EventOldValuesResolver.d.ts +6 -0
  128. package/dist/src/resolvers/types/EventOldValuesResolver.d.ts.map +1 -0
  129. package/dist/src/resolvers/types/EventOldValuesResolver.js +11 -0
  130. package/dist/src/resolvers/types/EventOldValuesResolver.js.map +1 -0
  131. package/dist/src/resolvers/types/OldValuesHelpers.d.ts +3 -0
  132. package/dist/src/resolvers/types/OldValuesHelpers.d.ts.map +1 -0
  133. package/dist/src/resolvers/types/OldValuesHelpers.js +10 -0
  134. package/dist/src/resolvers/types/OldValuesHelpers.js.map +1 -0
  135. package/dist/src/resolvers/types/index.d.ts +2 -0
  136. package/dist/src/resolvers/types/index.d.ts.map +1 -0
  137. package/dist/src/resolvers/types/index.js +14 -0
  138. package/dist/src/resolvers/types/index.js.map +1 -0
  139. package/dist/src/schema/dev.graphql.js +1 -1
  140. package/dist/src/schema/dev.graphql.js.map +1 -1
  141. package/dist/src/schema/system.graphql.d.ts.map +1 -1
  142. package/dist/src/schema/system.graphql.js +47 -43
  143. package/dist/src/schema/system.graphql.js.map +1 -1
  144. package/dist/src/schema/types.d.ts +146 -170
  145. package/dist/src/schema/types.d.ts.map +1 -1
  146. package/dist/src/schema/types.js +14 -12
  147. package/dist/src/schema/types.js.map +1 -1
  148. package/dist/src/tsconfig.tsbuildinfo +1 -1
  149. package/dist/src/types.d.ts +0 -1
  150. package/dist/src/types.d.ts.map +1 -1
  151. package/dist/src/utils/batchQuery.js +1 -1
  152. package/dist/src/utils/batchQuery.js.map +1 -1
  153. package/dist/tests/cases/integration/systemApi/projectInitializer.test.js +1 -1
  154. package/dist/tests/cases/integration/systemApi/projectInitializer.test.js.map +1 -1
  155. package/dist/tests/src/asserts.js +1 -1
  156. package/dist/tests/src/asserts.js.map +1 -1
  157. package/dist/tests/tsconfig.tsbuildinfo +1 -1
  158. package/migrations/2020-05-06-150000-composed-primary.js +4 -4
  159. package/migrations/2020-05-06-150000-composed-primary.test.js +3 -3
  160. package/migrations/2020-06-01-103000-event-trigger-perf.js +1 -1
  161. package/migrations/2020-06-01-103000-event-trigger-perf.test.js +3 -3
  162. package/migrations/2021-05-07-155800-event-log-rework.js +1 -1
  163. package/migrations/2021-05-19-1232000-event-log-fix-constraint.js +1 -1
  164. package/migrations/2021-12-21-155500-events-up.sql +6 -0
  165. package/migrations/index.js +1 -1
  166. package/migrations/tsconfig.tsbuildinfo +1 -1
  167. package/package.json +14 -14
  168. package/src/SystemContainer.ts +18 -26
  169. package/src/index.ts +0 -1
  170. package/src/model/ProjectInitializer.ts +5 -16
  171. package/src/model/authorization/AuthorizationActions.ts +0 -8
  172. package/src/model/authorization/StagePermissionsFactory.ts +0 -21
  173. package/src/model/commands/stages/CreateOrUpdateStageCommand.ts +1 -2
  174. package/src/model/commands/stages/index.ts +0 -1
  175. package/src/model/dependencies/content/index.ts +0 -1
  176. package/src/model/dependencies/index.ts +1 -0
  177. package/src/model/dependencies/tenant/IdentityFetcher.ts +3 -1
  178. package/src/model/dependencies/tenant/index.ts +1 -0
  179. package/src/model/events/{HistoryEventResponseBuilder.ts → EventResponseBuilder.ts} +13 -17
  180. package/src/model/events/EventResponseHelper.ts +3 -3
  181. package/src/model/events/index.ts +1 -5
  182. package/src/model/migrations/MigrationExecutor.ts +0 -2
  183. package/src/model/migrations/ProjectMigrator.ts +5 -11
  184. package/src/model/migrations/SchemaVersionBuilder.ts +1 -1
  185. package/src/model/queries/events/EventQueryHelpers.ts +15 -12
  186. package/src/model/queries/events/EventsQuery.ts +105 -0
  187. package/src/model/queries/events/OldValuesQuery.ts +23 -0
  188. package/src/model/queries/events/index.ts +2 -0
  189. package/src/model/queries/stages/StageQueryFactory.ts +0 -1
  190. package/src/model/stages/StageCreator.ts +1 -12
  191. package/src/model/stages/index.ts +0 -1
  192. package/src/resolvers/ResolverContext.ts +4 -0
  193. package/src/resolvers/ResolverFactory.ts +27 -37
  194. package/src/resolvers/mutation/MigrateMutationResolver.ts +4 -3
  195. package/src/resolvers/mutation/index.ts +1 -0
  196. package/src/resolvers/query/EventsQueryResolver.ts +42 -0
  197. package/src/resolvers/query/index.ts +1 -0
  198. package/src/resolvers/types/EventOldValuesResolver.ts +13 -0
  199. package/src/resolvers/types/OldValuesHelpers.ts +11 -0
  200. package/src/resolvers/types/index.ts +1 -0
  201. package/src/schema/system.graphql.ts +46 -42
  202. package/src/schema/types.ts +148 -175
  203. package/src/types.ts +0 -1
  204. package/tests/src/asserts.ts +1 -1
  205. package/dist/src/model/commands/stages/UpdateStageEventCommand.d.ts +0 -8
  206. package/dist/src/model/commands/stages/UpdateStageEventCommand.d.ts.map +0 -1
  207. package/dist/src/model/commands/stages/UpdateStageEventCommand.js +0 -21
  208. package/dist/src/model/commands/stages/UpdateStageEventCommand.js.map +0 -1
  209. package/dist/src/model/dependencies/content/ContentEventsApplier.d.ts +0 -23
  210. package/dist/src/model/dependencies/content/ContentEventsApplier.d.ts.map +0 -1
  211. package/dist/src/model/dependencies/content/ContentEventsApplier.js +0 -3
  212. package/dist/src/model/dependencies/content/ContentEventsApplier.js.map +0 -1
  213. package/dist/src/model/events/DependencyBuilder.d.ts +0 -8
  214. package/dist/src/model/events/DependencyBuilder.d.ts.map +0 -1
  215. package/dist/src/model/events/DependencyBuilder.js +0 -3
  216. package/dist/src/model/events/DependencyBuilder.js.map +0 -1
  217. package/dist/src/model/events/DiffBuilder.d.ts +0 -48
  218. package/dist/src/model/events/DiffBuilder.d.ts.map +0 -1
  219. package/dist/src/model/events/DiffBuilder.js +0 -95
  220. package/dist/src/model/events/DiffBuilder.js.map +0 -1
  221. package/dist/src/model/events/EventFilterValidator.d.ts +0 -12
  222. package/dist/src/model/events/EventFilterValidator.d.ts.map +0 -1
  223. package/dist/src/model/events/EventFilterValidator.js +0 -50
  224. package/dist/src/model/events/EventFilterValidator.js.map +0 -1
  225. package/dist/src/model/events/HistoryEventResponseBuilder.d.ts +0 -10
  226. package/dist/src/model/events/HistoryEventResponseBuilder.d.ts.map +0 -1
  227. package/dist/src/model/events/HistoryEventResponseBuilder.js.map +0 -1
  228. package/dist/src/model/events/TableReferencingResolver.d.ts +0 -8
  229. package/dist/src/model/events/TableReferencingResolver.d.ts.map +0 -1
  230. package/dist/src/model/events/TableReferencingResolver.js +0 -31
  231. package/dist/src/model/events/TableReferencingResolver.js.map +0 -1
  232. package/dist/src/model/events/dependency/CreatedRowReferenceDependencyBuilder.d.ts +0 -19
  233. package/dist/src/model/events/dependency/CreatedRowReferenceDependencyBuilder.d.ts.map +0 -1
  234. package/dist/src/model/events/dependency/CreatedRowReferenceDependencyBuilder.js +0 -79
  235. package/dist/src/model/events/dependency/CreatedRowReferenceDependencyBuilder.js.map +0 -1
  236. package/dist/src/model/events/dependency/DeletedRowReferenceDependencyBuilder.d.ts +0 -17
  237. package/dist/src/model/events/dependency/DeletedRowReferenceDependencyBuilder.d.ts.map +0 -1
  238. package/dist/src/model/events/dependency/DeletedRowReferenceDependencyBuilder.js +0 -76
  239. package/dist/src/model/events/dependency/DeletedRowReferenceDependencyBuilder.js.map +0 -1
  240. package/dist/src/model/events/dependency/DependencyBuilderList.d.ts +0 -9
  241. package/dist/src/model/events/dependency/DependencyBuilderList.d.ts.map +0 -1
  242. package/dist/src/model/events/dependency/DependencyBuilderList.js +0 -20
  243. package/dist/src/model/events/dependency/DependencyBuilderList.js.map +0 -1
  244. package/dist/src/model/events/dependency/SameRowDependencyBuilder.d.ts +0 -16
  245. package/dist/src/model/events/dependency/SameRowDependencyBuilder.d.ts.map +0 -1
  246. package/dist/src/model/events/dependency/SameRowDependencyBuilder.js +0 -38
  247. package/dist/src/model/events/dependency/SameRowDependencyBuilder.js.map +0 -1
  248. package/dist/src/model/events/dependency/TransactionDependencyBuilder.d.ts +0 -15
  249. package/dist/src/model/events/dependency/TransactionDependencyBuilder.d.ts.map +0 -1
  250. package/dist/src/model/events/dependency/TransactionDependencyBuilder.js +0 -30
  251. package/dist/src/model/events/dependency/TransactionDependencyBuilder.js.map +0 -1
  252. package/dist/src/model/events/dependency/index.d.ts +0 -6
  253. package/dist/src/model/events/dependency/index.d.ts.map +0 -1
  254. package/dist/src/model/events/dependency/index.js.map +0 -1
  255. package/dist/src/model/stages/StageTree.d.ts +0 -14
  256. package/dist/src/model/stages/StageTree.d.ts.map +0 -1
  257. package/dist/src/model/stages/StageTree.js +0 -38
  258. package/dist/src/model/stages/StageTree.js.map +0 -1
  259. package/dist/src/resolvers/helpers/StageFetchHelper.d.ts +0 -22
  260. package/dist/src/resolvers/helpers/StageFetchHelper.d.ts.map +0 -1
  261. package/dist/src/resolvers/helpers/StageFetchHelper.js +0 -45
  262. package/dist/src/resolvers/helpers/StageFetchHelper.js.map +0 -1
  263. package/dist/tests/cases/unit/events/createdRowReference.test.d.ts +0 -2
  264. package/dist/tests/cases/unit/events/createdRowReference.test.d.ts.map +0 -1
  265. package/dist/tests/cases/unit/events/createdRowReference.test.js +0 -138
  266. package/dist/tests/cases/unit/events/createdRowReference.test.js.map +0 -1
  267. package/dist/tests/cases/unit/events/deletedRowReference.test.d.ts +0 -2
  268. package/dist/tests/cases/unit/events/deletedRowReference.test.d.ts.map +0 -1
  269. package/dist/tests/cases/unit/events/deletedRowReference.test.js +0 -103
  270. package/dist/tests/cases/unit/events/deletedRowReference.test.js.map +0 -1
  271. package/dist/tests/cases/unit/events/sameRowDependency.test.d.ts +0 -2
  272. package/dist/tests/cases/unit/events/sameRowDependency.test.d.ts.map +0 -1
  273. package/dist/tests/cases/unit/events/sameRowDependency.test.js +0 -63
  274. package/dist/tests/cases/unit/events/sameRowDependency.test.js.map +0 -1
  275. package/dist/tests/cases/unit/events/transactionDependency.test.d.ts +0 -2
  276. package/dist/tests/cases/unit/events/transactionDependency.test.d.ts.map +0 -1
  277. package/dist/tests/cases/unit/events/transactionDependency.test.js +0 -62
  278. package/dist/tests/cases/unit/events/transactionDependency.test.js.map +0 -1
  279. package/src/model/commands/stages/UpdateStageEventCommand.ts +0 -16
  280. package/src/model/dependencies/content/ContentEventsApplier.ts +0 -27
  281. package/src/model/events/DependencyBuilder.ts +0 -9
  282. package/src/model/events/DiffBuilder.ts +0 -150
  283. package/src/model/events/EventFilterValidator.ts +0 -52
  284. package/src/model/events/TableReferencingResolver.ts +0 -45
  285. package/src/model/events/dependency/CreatedRowReferenceDependencyBuilder.ts +0 -80
  286. package/src/model/events/dependency/DeletedRowReferenceDependencyBuilder.ts +0 -75
  287. package/src/model/events/dependency/DependencyBuilderList.ts +0 -18
  288. package/src/model/events/dependency/SameRowDependencyBuilder.ts +0 -36
  289. package/src/model/events/dependency/TransactionDependencyBuilder.ts +0 -31
  290. package/src/model/events/dependency/index.ts +0 -5
  291. package/src/model/stages/StageTree.ts +0 -36
  292. package/src/resolvers/helpers/StageFetchHelper.ts +0 -48
  293. package/tests/cases/unit/events/createdRowReference.test.ts +0 -131
  294. package/tests/cases/unit/events/deletedRowReference.test.ts +0 -95
  295. package/tests/cases/unit/events/sameRowDependency.test.ts +0 -48
  296. package/tests/cases/unit/events/transactionDependency.test.ts +0 -47
@@ -1,62 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
- }) : (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- o[k2] = m[k];
8
- }));
9
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
- Object.defineProperty(o, "default", { enumerable: true, value: v });
11
- }) : function(o, v) {
12
- o["default"] = v;
13
- });
14
- var __importStar = (this && this.__importStar) || function (mod) {
15
- if (mod && mod.__esModule) return mod;
16
- var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
- __setModuleDefault(result, mod);
19
- return result;
20
- };
21
- Object.defineProperty(exports, "__esModule", { value: true });
22
- const uvu_1 = require("uvu");
23
- const dependency_1 = require("../../../../src/model/events/dependency");
24
- const schema_definition_1 = require("@contember/schema-definition");
25
- const schema_utils_1 = require("@contember/schema-utils");
26
- const engine_common_1 = require("@contember/engine-common");
27
- const engine_api_tester_1 = require("@contember/engine-api-tester");
28
- const src_1 = require("../../../../src");
29
- const assert = __importStar(require("../../../src/asserts"));
30
- const test = uvu_1.suite('Same transaction dependency builder');
31
- const now = new Date('2020-10-28 10:00');
32
- test('basic deps', async () => {
33
- const model = new schema_definition_1.SchemaBuilder().entity('Author', e => e.column('name')).buildSchema();
34
- const dependencyBuilder = new dependency_1.TransactionDependencyBuilder();
35
- const event1 = engine_api_tester_1.testUuid(30);
36
- const event2 = engine_api_tester_1.testUuid(31);
37
- const event3 = engine_api_tester_1.testUuid(32);
38
- const authorEntityId = engine_api_tester_1.testUuid(10);
39
- const trxId1 = engine_api_tester_1.testUuid(500);
40
- const trxId2 = engine_api_tester_1.testUuid(501);
41
- const events = [
42
- new engine_common_1.UpdateEvent(event1, now, src_1.unnamedIdentity, trxId1, [authorEntityId], 'author', {}),
43
- new engine_common_1.UpdateEvent(event2, now, src_1.unnamedIdentity, trxId1, [authorEntityId], 'author', {}),
44
- new engine_common_1.UpdateEvent(event3, now, src_1.unnamedIdentity, trxId2, [authorEntityId], 'author', {}),
45
- ];
46
- const deps = await dependencyBuilder.build({ ...schema_utils_1.emptySchema, model }, events);
47
- assert.is(deps.size, 3);
48
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
49
- const event1deps = deps.get(event1);
50
- // it also includes self-dep
51
- assert.is(event1deps.size, 2);
52
- assert.ok(event1deps.has(event2));
53
- const event2deps = deps.get(event2);
54
- assert.is(event2deps.size, 2);
55
- assert.ok(event2deps.has(event1));
56
- const event3deps = deps.get(event3);
57
- assert.is(event3deps.size, 1);
58
- assert.not.ok(event3deps.has(event1));
59
- assert.not.ok(event3deps.has(event2));
60
- });
61
- test.run();
62
- //# sourceMappingURL=transactionDependency.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transactionDependency.test.js","sourceRoot":"","sources":["../../../../../tests/cases/unit/events/transactionDependency.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,6BAA2B;AAC3B,wEAAsF;AACtF,oEAA4D;AAC5D,0DAAqD;AACrD,4DAAsD;AACtD,oEAAuD;AACvD,yCAAiD;AACjD,6DAA8C;AAE9C,MAAM,IAAI,GAAG,WAAK,CAAC,qCAAqC,CAAC,CAAA;AAEzD,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,kBAAkB,CAAC,CAAA;AAExC,IAAI,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE;IAC7B,MAAM,KAAK,GAAG,IAAI,iCAAa,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;IAEvF,MAAM,iBAAiB,GAAG,IAAI,yCAA4B,EAAE,CAAA;IAC5D,MAAM,MAAM,GAAG,4BAAQ,CAAC,EAAE,CAAC,CAAA;IAC3B,MAAM,MAAM,GAAG,4BAAQ,CAAC,EAAE,CAAC,CAAA;IAC3B,MAAM,MAAM,GAAG,4BAAQ,CAAC,EAAE,CAAC,CAAA;IAC3B,MAAM,cAAc,GAAG,4BAAQ,CAAC,EAAE,CAAC,CAAA;IAEnC,MAAM,MAAM,GAAG,4BAAQ,CAAC,GAAG,CAAC,CAAA;IAC5B,MAAM,MAAM,GAAG,4BAAQ,CAAC,GAAG,CAAC,CAAA;IAC5B,MAAM,MAAM,GAAG;QACd,IAAI,2BAAW,CAAC,MAAM,EAAE,GAAG,EAAE,qBAAe,EAAE,MAAM,EAAE,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC;QACrF,IAAI,2BAAW,CAAC,MAAM,EAAE,GAAG,EAAE,qBAAe,EAAE,MAAM,EAAE,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC;QACrF,IAAI,2BAAW,CAAC,MAAM,EAAE,GAAG,EAAE,qBAAe,EAAE,MAAM,EAAE,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC;KACrF,CAAA;IACD,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,EAAE,GAAG,0BAAW,EAAE,KAAK,EAAE,EAAE,MAAM,CAAC,CAAA;IAC7E,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IACvB,oEAAoE;IACpE,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAE,CAAA;IACpC,4BAA4B;IAC5B,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IAC7B,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;IACjC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAE,CAAA;IACpC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IAC7B,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;IAEjC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAE,CAAA;IACpC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IAC7B,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;IACrC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;AACtC,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,GAAG,EAAE,CAAA"}
@@ -1,16 +0,0 @@
1
- import { UpdateBuilder } from '@contember/database'
2
- import { Command } from '../Command'
3
-
4
- export class UpdateStageEventCommand implements Command<void> {
5
- constructor(private readonly stageSlug: string, private readonly eventId: string) {}
6
-
7
- public async execute({ db }: Command.Args) {
8
- await UpdateBuilder.create()
9
- .table('stage')
10
- .where({ slug: this.stageSlug })
11
- .values({
12
- event_id: this.eventId,
13
- })
14
- .execute(db)
15
- }
16
- }
@@ -1,27 +0,0 @@
1
- import { ContentEvent } from '@contember/engine-common'
2
- import { Client } from '@contember/database'
3
- import { Acl, Schema } from '@contember/schema'
4
-
5
- export interface ContentEventApplyOkResult {
6
- readonly ok: true
7
- readonly appliedEvents: ContentEvent[]
8
- }
9
-
10
- export interface ContentEventApplyErrorResult {
11
- readonly ok: false
12
- readonly appliedEvents: ContentEvent[]
13
- readonly failedEvent: ContentEvent
14
- }
15
-
16
- export interface ContentEventApplierContext {
17
- db: Client
18
- schema: Schema
19
- identityVariables: Acl.VariablesMap
20
- roles: string[]
21
- }
22
-
23
- export type ContentEventApplyResult = ContentEventApplyOkResult | ContentEventApplyErrorResult
24
-
25
- export interface ContentEventsApplier {
26
- apply(context: ContentEventApplierContext, events: ContentEvent[]): Promise<ContentEventApplyResult>
27
- }
@@ -1,9 +0,0 @@
1
- import { ContentEvent } from '@contember/engine-common'
2
- import { Schema } from '@contember/schema'
3
- import { MapSet } from '../../utils'
4
-
5
- export interface DependencyBuilder {
6
- build(schema: Schema, events: ContentEvent[]): Promise<EventsDependencies>
7
- }
8
-
9
- export type EventsDependencies = MapSet<string, string>
@@ -1,150 +0,0 @@
1
- import { DependencyBuilder, EventsDependencies } from './DependencyBuilder'
2
- import { Stage } from '../dtos'
3
- import { ContentEvent } from '@contember/engine-common'
4
- import { DatabaseContext } from '../database'
5
- import { SchemaVersionBuilder } from '../migrations'
6
- import { EntitiesRelationsInput, EntitiesResult, EntitiesSelector } from '../dependencies'
7
- import { Acl, Input, Schema } from '@contember/schema'
8
- import { formatSchemaName } from '../helpers'
9
- import { filterSchemaByStage, getEntity } from '@contember/schema-utils'
10
- import { Identity } from '../authorization'
11
- import { ImmutableSet } from '../../utils/set'
12
- import { StagingDisabledError } from '../../StagingDisabledError'
13
-
14
- export type EventsPermissionsVerifierContext = {
15
- variables: Acl.VariablesMap
16
- identity: Identity
17
- }
18
-
19
- export class DiffBuilder {
20
- constructor(
21
- private readonly dependencyBuilder: DependencyBuilder,
22
- private readonly schemaVersionBuilder: SchemaVersionBuilder,
23
- private readonly entitiesSelector: EntitiesSelector,
24
- ) {}
25
-
26
- public async build(
27
- db: DatabaseContext,
28
- permissionContext: EventsPermissionsVerifierContext,
29
- baseStage: Stage,
30
- headStage: Stage,
31
- filter: ReadonlyArray<EventFilter> | null,
32
- ): Promise<DiffBuilderResponse> {
33
- throw new StagingDisabledError()
34
- }
35
-
36
- private async filterEvents(
37
- events: ContentEvent[],
38
- eventDependencies: EventsDependencies,
39
- permissionContext: EventsPermissionsVerifierContext,
40
- db: DatabaseContext,
41
- schema: Schema,
42
- baseStage: Stage,
43
- headStage: Stage,
44
- filter: ReadonlyArray<EventFilter>,
45
- ): Promise<ContentEvent[]> {
46
- if (filter.length === 0) {
47
- return []
48
- }
49
- const baseEntities = await this.fetchAffectedEntities(db, permissionContext, schema, baseStage, filter)
50
- const headEntities = await this.fetchAffectedEntities(db, permissionContext, schema, headStage, filter)
51
- const allIds = [...baseEntities, ...headEntities]
52
-
53
- const rootEvents: ContentEvent[] = events.filter(it => it.rowId.some(id => allIds.includes(id)))
54
- const eventIds = new Set<string>([])
55
-
56
- const collectDependencies = (ids: ImmutableSet<string>) => {
57
- ids.forEach(id => {
58
- if (eventIds.has(id)) {
59
- return
60
- }
61
- eventIds.add(id)
62
- const deps = eventDependencies.get(id)
63
- if (deps) {
64
- collectDependencies(deps)
65
- }
66
- })
67
- }
68
- const rootEventIds = new Set(rootEvents.map(it => it.id))
69
- collectDependencies(rootEventIds)
70
-
71
- return events.filter(it => eventIds.has(it.id))
72
- }
73
-
74
- private async fetchAffectedEntities(
75
- db: DatabaseContext,
76
- permissionContext: EventsPermissionsVerifierContext,
77
- schema: Schema,
78
- stage: Stage,
79
- filter: readonly EventFilter[],
80
- ): Promise<string[]> {
81
- const affectedEntities = (
82
- await Promise.all(
83
- filter.map(
84
- async it =>
85
- await this.entitiesSelector.getEntities(
86
- {
87
- db: db.client.forSchema(formatSchemaName(stage)),
88
- schema: filterSchemaByStage(schema, stage.slug),
89
- identityVariables: permissionContext.variables,
90
- roles: permissionContext.identity.roles,
91
- },
92
- {
93
- entity: it.entity,
94
- relations: it.relations,
95
- filter: it.id
96
- ? {
97
- [getEntity(schema.model, it.entity).primary]: { eq: it.id },
98
- }
99
- : it.filter || {},
100
- },
101
- ),
102
- ),
103
- )
104
- ).flatMap(it => it)
105
- const collectIds = (result: EntitiesResult): string[] => {
106
- const { id, ...rest } = result
107
- return [
108
- id,
109
- ...Object.values(rest).flatMap(it => {
110
- if (!it) {
111
- return []
112
- }
113
- if (Array.isArray(it)) {
114
- return it.flatMap(collectIds)
115
- }
116
- return collectIds(it)
117
- }),
118
- ]
119
- }
120
- return affectedEntities.flatMap(it => (it ? collectIds(it) : [])).filter(it => it !== null)
121
- }
122
- }
123
-
124
- export type DiffBuilderResponse = DiffBuilderOkResponse | DiffBuilderErrorResponse
125
-
126
- export enum DiffBuilderErrorCode {
127
- notRebased = 'notRebased',
128
- invalidFilter = 'invalidFilter',
129
- }
130
-
131
- export class DiffBuilderErrorResponse {
132
- public readonly ok: false = false
133
-
134
- constructor(public readonly error: DiffBuilderErrorCode, public readonly message: string) {}
135
- }
136
-
137
- export type EventWithDependencies = ContentEvent & { dependencies: ImmutableSet<string> }
138
-
139
- export class DiffBuilderOkResponse {
140
- public readonly ok: true = true
141
-
142
- constructor(public readonly events: EventWithDependencies[]) {}
143
- }
144
-
145
- export type EventFilter = {
146
- entity: string
147
- id?: string
148
- filter?: Input.Where
149
- relations: EntitiesRelationsInput
150
- }
@@ -1,52 +0,0 @@
1
- import { Model } from '@contember/schema'
2
- import { EventFilter } from './DiffBuilder'
3
- import { acceptFieldVisitor, getEntity, ModelError, ModelErrorCode } from '@contember/schema-utils'
4
- import { EntitiesRelationsInput } from '../dependencies/content'
5
-
6
- export class InvalidFilterError {
7
- constructor(public readonly message: string) {}
8
- }
9
-
10
- export class EventFilterValidator {
11
- public static validateFilter(model: Model.Schema, filter: EventFilter): void {
12
- const entity = EventFilterValidator.getEntity(model, filter.entity)
13
- EventFilterValidator.validateRelations(model, entity, filter.relations, [entity.name])
14
- }
15
-
16
- private static getEntity(model: Model.Schema, entityName: string): Model.Entity {
17
- try {
18
- return getEntity(model, entityName)
19
- } catch (e) {
20
- if (e instanceof ModelError && e.code === ModelErrorCode.ENTITY_NOT_FOUND) {
21
- throw new InvalidFilterError(`${entityName}: entity not found`)
22
- }
23
- throw e
24
- }
25
- }
26
-
27
- private static validateRelations(
28
- model: Model.Schema,
29
- entity: Model.Entity,
30
- relations: EntitiesRelationsInput,
31
- path: string[],
32
- ): void {
33
- for (const relation of relations) {
34
- const newPath = [...path, relation.name]
35
- try {
36
- const targetEntity = acceptFieldVisitor(model, entity, relation.name, {
37
- visitColumn: () => {
38
- throw new InvalidFilterError(`${newPath.join('.')}: not a relation`)
39
- },
40
- visitRelation: ({}, {}, targetEntity) => {
41
- return targetEntity
42
- },
43
- })
44
- EventFilterValidator.validateRelations(model, targetEntity, relation.relations, newPath)
45
- } catch (e) {
46
- if (e instanceof ModelError && e.code === ModelErrorCode.FIELD_NOT_FOUND) {
47
- throw new InvalidFilterError(`${newPath.join('.')}: field not found`)
48
- }
49
- }
50
- }
51
- }
52
- }
@@ -1,45 +0,0 @@
1
- import { Model } from '@contember/schema'
2
- import { acceptEveryFieldVisitor } from '@contember/schema-utils'
3
-
4
- export const getTableReferencing = (schema: Model.Schema): TableReferencingResolverResult => {
5
- const result: TableReferencingResolverResult = {}
6
-
7
- for (let entity of Object.values(schema.entities)) {
8
- result[entity.tableName] = {}
9
- acceptEveryFieldVisitor(
10
- schema,
11
- entity,
12
- new (class implements Model.RelationByTypeVisitor<void> {
13
- visitManyHasOne({}, relation: Model.ManyHasOneRelation, targetEntity: Model.Entity) {
14
- result[entity.tableName][relation.joiningColumn.columnName] = targetEntity.tableName
15
- }
16
-
17
- visitOneHasOneOwning({}, relation: Model.OneHasOneOwningRelation, targetEntity: Model.Entity) {
18
- result[entity.tableName][relation.joiningColumn.columnName] = targetEntity.tableName
19
- }
20
-
21
- visitManyHasManyOwning(
22
- entity: Model.Entity,
23
- relation: Model.ManyHasManyOwningRelation,
24
- targetEntity: Model.Entity,
25
- ) {
26
- result[relation.joiningTable.tableName] = {
27
- [relation.joiningTable.joiningColumn.columnName]: entity.tableName,
28
- [relation.joiningTable.inverseJoiningColumn.columnName]: targetEntity.tableName,
29
- }
30
- }
31
-
32
- visitColumn() {}
33
-
34
- visitManyHasManyInverse() {}
35
-
36
- visitOneHasMany() {}
37
-
38
- visitOneHasOneInverse() {}
39
- })(),
40
- )
41
- }
42
- return result
43
- }
44
-
45
- export type TableReferencingResolverResult = { [tableName: string]: { [column: string]: string } }
@@ -1,80 +0,0 @@
1
- import { ContentEvent, EventType } from '@contember/engine-common'
2
- import { DependencyBuilder, EventsDependencies } from '../DependencyBuilder'
3
- import { getTableReferencing, TableReferencingResolverResult } from '../TableReferencingResolver'
4
- import { Schema } from '@contember/schema'
5
- import { getJunctionTables } from '../../helpers'
6
- import assert from 'assert'
7
- import { MapSet, tuple } from '../../../utils'
8
-
9
- /**
10
- * Events that references a row depends on creation of such event (or its following update)
11
- *
12
- * A1 - A row creation
13
- * A2 - A row update
14
- * B1 - some update on B row
15
- * B2 - some update on B row that references A row
16
- *
17
- * v----\
18
- * A1 A2 B1 B2
19
- *
20
- */
21
- export class CreatedRowReferenceDependencyBuilder implements DependencyBuilder {
22
- async build(schema: Schema, events: ContentEvent[]): Promise<EventsDependencies> {
23
- if (events.length === 0) {
24
- return new MapSet()
25
- }
26
-
27
- const tableReferencing: TableReferencingResolverResult = getTableReferencing(schema.model)
28
-
29
- const dependencies: EventsDependencies = new MapSet()
30
- const formatRef = (id: string, table: string) => `${table}#${id}`
31
- const createdRows = new Map<string, string>()
32
- const junctionTables = getJunctionTables(schema.model)
33
- const junctionTableMap = new Map(junctionTables.map(it => tuple(it.tableName, it)))
34
-
35
- for (const event of events) {
36
- const junctionTable = junctionTableMap.get(event.tableName)
37
- if (!junctionTable) {
38
- assert.strictEqual(event.rowId.length, 1)
39
- const ref = formatRef(event.rowId[0], event.tableName)
40
- if (event.type === EventType.create) {
41
- createdRows.set(ref, event.id)
42
- } else if (createdRows.has(ref)) {
43
- // update event reference to latest event
44
- createdRows.set(ref, event.id)
45
- }
46
- }
47
-
48
- if (event.type !== EventType.create && event.type !== EventType.update) {
49
- continue
50
- }
51
-
52
- for (let column in event.values) {
53
- const referencedTable = tableReferencing[event.tableName][column]
54
- if (!referencedTable) {
55
- continue
56
- }
57
- const ref = formatRef(event.values[column], referencedTable)
58
- const createEventId = createdRows.get(ref)
59
- if (createEventId !== undefined) {
60
- dependencies.add(event.id, createEventId)
61
- }
62
- }
63
- if (junctionTable) {
64
- event.rowId.forEach((id, index) => {
65
- assert.ok(index === 0 || index === 1)
66
- const columnName =
67
- index === 0 ? junctionTable.joiningColumn.columnName : junctionTable.inverseJoiningColumn.columnName
68
- const table = tableReferencing[junctionTable.tableName][columnName]
69
- const ref = formatRef(id, table)
70
- const createdEventId = createdRows.get(ref)
71
- if (createdEventId) {
72
- dependencies.add(event.id, createdEventId)
73
- }
74
- })
75
- }
76
- }
77
-
78
- return dependencies
79
- }
80
- }
@@ -1,75 +0,0 @@
1
- import { ContentEvent, EventType } from '@contember/engine-common'
2
- import { DependencyBuilder, EventsDependencies } from '../DependencyBuilder'
3
- import { getTableReferencing, TableReferencingResolverResult } from '../TableReferencingResolver'
4
- import { Schema } from '@contember/schema'
5
- import { getJunctionTables } from '../../helpers'
6
- import assert from 'assert'
7
- import { MapSet, tuple } from '../../../utils'
8
-
9
- /**
10
- * Delete event depends on all previous events which references this row
11
- *
12
- * A1 - update event which references X row
13
- * A2 - another event which does not reference X row
14
- *
15
- * v----\
16
- * A1 A2 X1
17
- *
18
- */
19
- export class DeletedRowReferenceDependencyBuilder implements DependencyBuilder {
20
- async build(schema: Schema, events: ContentEvent[]): Promise<EventsDependencies> {
21
- if (events.length === 0) {
22
- return new MapSet()
23
- }
24
-
25
- const tableReferencing: TableReferencingResolverResult = getTableReferencing(schema.model)
26
- const formatRef = (id: string, table: string) => `${table}#${id}`
27
- const dependencies: EventsDependencies = new MapSet()
28
- const deletedRows = new Map()
29
- const junctionTables = getJunctionTables(schema.model)
30
- const junctionTableMap = new Map(junctionTables.map(it => tuple(it.tableName, it)))
31
-
32
- for (const event of events) {
33
- if (!junctionTableMap.has(event.tableName)) {
34
- assert.strictEqual(event.rowId.length, 1)
35
- if (event.type === EventType.delete) {
36
- deletedRows.set(formatRef(event.rowId[0], event.tableName), event.id)
37
- }
38
- }
39
- }
40
-
41
- for (const event of events) {
42
- if (event.type !== EventType.create && event.type !== EventType.update) {
43
- continue
44
- }
45
- const junctionTable = junctionTableMap.get(event.tableName)
46
- if (junctionTable) {
47
- event.rowId.forEach((id, index) => {
48
- assert.ok(index === 0 || index === 1)
49
- const columnName =
50
- index === 0 ? junctionTable.joiningColumn.columnName : junctionTable.inverseJoiningColumn.columnName
51
- const table = tableReferencing[junctionTable.tableName][columnName]
52
- const ref = formatRef(id, table)
53
- const deleteEventId = deletedRows.get(ref)
54
- if (deleteEventId) {
55
- dependencies.add(deleteEventId, event.id)
56
- }
57
- })
58
- } else {
59
- for (let column in event.values) {
60
- const referencedTable = tableReferencing[event.tableName][column]
61
- if (!referencedTable) {
62
- continue
63
- }
64
- const ref = formatRef(event.values[column], referencedTable)
65
- const deleteEventId = deletedRows.get(ref)
66
- if (deleteEventId) {
67
- dependencies.add(deleteEventId, event.id)
68
- }
69
- }
70
- }
71
- }
72
-
73
- return dependencies
74
- }
75
- }
@@ -1,18 +0,0 @@
1
- import { DependencyBuilder, EventsDependencies } from '../DependencyBuilder'
2
- import { ContentEvent } from '@contember/engine-common'
3
- import { Schema } from '@contember/schema'
4
- import { MapSet } from '../../../utils'
5
-
6
- export class DependencyBuilderList implements DependencyBuilder {
7
- constructor(private readonly builders: DependencyBuilder[]) {}
8
-
9
- async build(schema: Schema, events: ContentEvent[]): Promise<EventsDependencies> {
10
- const deps: EventsDependencies = new MapSet()
11
- for (const event of events) {
12
- deps.add(event.id)
13
- }
14
- const buildersDeps = await Promise.all(this.builders.map(builder => builder.build(schema, events)))
15
- deps.merge(...buildersDeps)
16
- return deps
17
- }
18
- }
@@ -1,36 +0,0 @@
1
- import { ContentEvent } from '@contember/engine-common'
2
- import { DependencyBuilder, EventsDependencies } from '../DependencyBuilder'
3
- import { Schema } from '@contember/schema'
4
- import { getJunctionTables } from '../../helpers'
5
- import assert from 'assert'
6
- import { MapSet } from '../../../utils'
7
-
8
- /**
9
- * Events on a same row are depending on each other. Meaning that
10
- * a) all previous events has to be executed
11
- * b) all following events has to be executed (todo rethink)
12
- *
13
- * v-----v-----v
14
- * A1 B1 A2 B2 A3
15
- * ^-----^
16
- */
17
- export class SameRowDependencyBuilder implements DependencyBuilder {
18
- async build(schema: Schema, events: ContentEvent[]): Promise<EventsDependencies> {
19
- const rows = new MapSet<string, string>()
20
- const dependencies: EventsDependencies = new MapSet()
21
- const junctionTables = new Set(getJunctionTables(schema.model).map(it => it.tableName))
22
- const formatRef = (id: string, table: string) => `${table}#${id}`
23
- for (const event of events) {
24
- if (junctionTables.has(event.tableName)) {
25
- continue
26
- }
27
- assert.strictEqual(event.rowId.length, 1)
28
- const ref = formatRef(event.rowId[0], event.tableName)
29
-
30
- const events = rows.add(ref, event.id)
31
- dependencies.set(event.id, events)
32
- }
33
-
34
- return dependencies
35
- }
36
- }
@@ -1,31 +0,0 @@
1
- import { ContentEvent } from '@contember/engine-common'
2
- import { DependencyBuilder, EventsDependencies } from '../DependencyBuilder'
3
- import { Schema } from '@contember/schema'
4
- import { MapSet } from '../../../utils'
5
-
6
- /**
7
- * Events in transaction are dependent on each other (meaning you have to execute whole transaction at once)
8
- * todo this has to be optimized that only "dangerous" operations are dependent
9
- *
10
- * v--v v--v--v
11
- * A1 A2 B1 B2 B3
12
- *
13
- */
14
- export class TransactionDependencyBuilder implements DependencyBuilder {
15
- async build(schema: Schema, events: ContentEvent[]): Promise<EventsDependencies> {
16
- let trxId = null
17
- let eventsInTrx: Set<string> = new Set()
18
- let dependencies: EventsDependencies = new MapSet()
19
-
20
- for (const event of events) {
21
- if (trxId !== event.transactionId) {
22
- trxId = event.transactionId
23
- eventsInTrx = new Set()
24
- }
25
- eventsInTrx.add(event.id)
26
- dependencies.set(event.id, eventsInTrx)
27
- }
28
-
29
- return dependencies
30
- }
31
- }
@@ -1,5 +0,0 @@
1
- export * from './CreatedRowReferenceDependencyBuilder'
2
- export * from './DeletedRowReferenceDependencyBuilder'
3
- export * from './DependencyBuilderList'
4
- export * from './SameRowDependencyBuilder'
5
- export * from './TransactionDependencyBuilder'
@@ -1,36 +0,0 @@
1
- import { StageWithoutEvent } from '../dtos'
2
- import { ProjectConfig, StageConfig } from '../../types'
3
- import { ImplementationException } from '../../utils'
4
-
5
- export class StageTree {
6
- constructor(private readonly root: StageConfig, private readonly childMap: StageTreeMap) {}
7
-
8
- public getRoot(): StageConfig {
9
- return this.root
10
- }
11
-
12
- public getChildren(stage: StageWithoutEvent): StageConfig[] {
13
- return this.childMap[stage.slug] || []
14
- }
15
- }
16
-
17
- export const createStageTree = (project: Pick<ProjectConfig, 'stages'>): StageTree => {
18
- const rootStages = project.stages.filter(it => !it.base)
19
- if (rootStages.length !== 1) {
20
- throw new Error(`Exactly 1 root stage expected, ${rootStages.length} found`)
21
- }
22
- const rootStage = rootStages[0]
23
- const stages = project.stages
24
- .filter(it => it.base)
25
- .reduce<StageTreeMap>((acc, stage) => {
26
- if (!stage.base) {
27
- throw new ImplementationException()
28
- }
29
- return {
30
- ...acc,
31
- [stage.base]: [...(acc[stage.base] || []), stage],
32
- }
33
- }, {})
34
- return new StageTree(rootStage, stages)
35
- }
36
- export type StageTreeMap = { [parent: string]: StageConfig[] }