@contember/engine-content-api 1.3.0-alpha.1 → 1.3.0-alpha.2

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 (263) hide show
  1. package/dist/src/ExecutionContainer.d.ts +141 -0
  2. package/dist/src/ExecutionContainer.d.ts.map +1 -0
  3. package/dist/src/ExecutionContainer.js +84 -0
  4. package/dist/src/ExecutionContainer.js.map +1 -0
  5. package/dist/src/index.d.ts +2 -1
  6. package/dist/src/index.d.ts.map +1 -1
  7. package/dist/src/index.js +18 -2
  8. package/dist/src/index.js.map +1 -1
  9. package/dist/src/mapper/ColumnValue.d.ts +2 -2
  10. package/dist/src/mapper/ColumnValue.d.ts.map +1 -1
  11. package/dist/src/mapper/EventManager.d.ts +86 -0
  12. package/dist/src/mapper/EventManager.d.ts.map +1 -0
  13. package/dist/src/mapper/EventManager.js +118 -0
  14. package/dist/src/mapper/EventManager.js.map +1 -0
  15. package/dist/src/mapper/JunctionTableManager.d.ts +12 -11
  16. package/dist/src/mapper/JunctionTableManager.d.ts.map +1 -1
  17. package/dist/src/mapper/JunctionTableManager.js +20 -8
  18. package/dist/src/mapper/JunctionTableManager.js.map +1 -1
  19. package/dist/src/mapper/Mapper.d.ts +11 -6
  20. package/dist/src/mapper/Mapper.d.ts.map +1 -1
  21. package/dist/src/mapper/Mapper.js +34 -17
  22. package/dist/src/mapper/Mapper.js.map +1 -1
  23. package/dist/src/mapper/MapperFactory.d.ts +33 -0
  24. package/dist/src/mapper/MapperFactory.d.ts.map +1 -0
  25. package/dist/src/mapper/MapperFactory.js +40 -0
  26. package/dist/src/mapper/MapperFactory.js.map +1 -0
  27. package/dist/src/mapper/Result.d.ts +3 -2
  28. package/dist/src/mapper/Result.d.ts.map +1 -1
  29. package/dist/src/mapper/Result.js +2 -1
  30. package/dist/src/mapper/Result.js.map +1 -1
  31. package/dist/src/mapper/delete/DeleteExecutor.d.ts.map +1 -1
  32. package/dist/src/mapper/delete/DeleteExecutor.js +41 -1
  33. package/dist/src/mapper/delete/DeleteExecutor.js.map +1 -1
  34. package/dist/src/mapper/index.d.ts +3 -1
  35. package/dist/src/mapper/index.d.ts.map +1 -1
  36. package/dist/src/mapper/index.js +3 -1
  37. package/dist/src/mapper/index.js.map +1 -1
  38. package/dist/src/mapper/insert/InsertBuilder.d.ts +2 -2
  39. package/dist/src/mapper/insert/InsertBuilder.d.ts.map +1 -1
  40. package/dist/src/mapper/insert/InsertBuilder.js +8 -2
  41. package/dist/src/mapper/insert/InsertBuilder.js.map +1 -1
  42. package/dist/src/mapper/insert/Inserter.js +3 -3
  43. package/dist/src/mapper/insert/Inserter.js.map +1 -1
  44. package/dist/src/mapper/select/OrderByHelper.d.ts +1 -1
  45. package/dist/src/mapper/select/OrderByHelper.d.ts.map +1 -1
  46. package/dist/src/mapper/select/OrderByHelper.js +3 -1
  47. package/dist/src/mapper/select/OrderByHelper.js.map +1 -1
  48. package/dist/src/mapper/select/RelationFetcher.js +2 -2
  49. package/dist/src/mapper/select/RelationFetcher.js.map +1 -1
  50. package/dist/src/mapper/update/UpdateBuilder.d.ts +4 -4
  51. package/dist/src/mapper/update/UpdateBuilder.d.ts.map +1 -1
  52. package/dist/src/mapper/update/UpdateBuilder.js +26 -8
  53. package/dist/src/mapper/update/UpdateBuilder.js.map +1 -1
  54. package/dist/src/mapper/update/UpdateBuilderFactory.d.ts +1 -1
  55. package/dist/src/mapper/update/UpdateBuilderFactory.d.ts.map +1 -1
  56. package/dist/src/mapper/update/UpdateBuilderFactory.js +2 -2
  57. package/dist/src/mapper/update/UpdateBuilderFactory.js.map +1 -1
  58. package/dist/src/mapper/update/Updater.d.ts.map +1 -1
  59. package/dist/src/mapper/update/Updater.js +6 -10
  60. package/dist/src/mapper/update/Updater.js.map +1 -1
  61. package/dist/src/resolvers/GraphQlQueryAstFactory.d.ts +1 -3
  62. package/dist/src/resolvers/GraphQlQueryAstFactory.d.ts.map +1 -1
  63. package/dist/src/resolvers/GraphQlQueryAstFactory.js +1 -4
  64. package/dist/src/resolvers/GraphQlQueryAstFactory.js.map +1 -1
  65. package/dist/src/resolvers/MutationResolver.d.ts +1 -4
  66. package/dist/src/resolvers/MutationResolver.d.ts.map +1 -1
  67. package/dist/src/resolvers/MutationResolver.js +9 -11
  68. package/dist/src/resolvers/MutationResolver.js.map +1 -1
  69. package/dist/src/resolvers/ReadResolver.d.ts +1 -3
  70. package/dist/src/resolvers/ReadResolver.d.ts.map +1 -1
  71. package/dist/src/resolvers/ReadResolver.js +6 -10
  72. package/dist/src/resolvers/ReadResolver.js.map +1 -1
  73. package/dist/src/resolvers/ValidationResolver.d.ts +1 -3
  74. package/dist/src/resolvers/ValidationResolver.d.ts.map +1 -1
  75. package/dist/src/resolvers/ValidationResolver.js +3 -4
  76. package/dist/src/resolvers/ValidationResolver.js.map +1 -1
  77. package/dist/src/resolvers/index.d.ts +0 -1
  78. package/dist/src/resolvers/index.d.ts.map +1 -1
  79. package/dist/src/resolvers/index.js +0 -1
  80. package/dist/src/resolvers/index.js.map +1 -1
  81. package/dist/src/schema/CustomTypesProvider.d.ts.map +1 -1
  82. package/dist/src/schema/CustomTypesProvider.js +1 -23
  83. package/dist/src/schema/CustomTypesProvider.js.map +1 -1
  84. package/dist/src/schema/MutationProvider.js +4 -4
  85. package/dist/src/schema/MutationProvider.js.map +1 -1
  86. package/dist/src/schema/QueryProvider.js +3 -3
  87. package/dist/src/schema/QueryProvider.js.map +1 -1
  88. package/dist/src/tsconfig.tsbuildinfo +1 -1
  89. package/dist/src/types.d.ts +2 -3
  90. package/dist/src/types.d.ts.map +1 -1
  91. package/dist/tests/cases/bugs/bug-update-by-nested-unique.test.js +3 -5
  92. package/dist/tests/cases/bugs/bug-update-by-nested-unique.test.js.map +1 -1
  93. package/dist/tests/cases/integration/graphQlDb/insert/insertSequence.test.js +2 -2
  94. package/dist/tests/cases/integration/graphQlDb/insert/insertSequence.test.js.map +1 -1
  95. package/dist/tests/cases/integration/graphQlDb/update/bug-freeze-connect-missing-one.test.js +1 -1
  96. package/dist/tests/cases/integration/graphQlDb/update/bug-freeze-connect-missing-one.test.js.map +1 -1
  97. package/dist/tests/cases/integration/graphQlDb/update/deferedConstraints.test.js +45 -45
  98. package/dist/tests/cases/integration/graphQlDb/update/deferedConstraints.test.js.map +1 -1
  99. package/dist/tests/cases/integration/graphQlDb/update/failedDelete.test.js +5 -5
  100. package/dist/tests/cases/integration/graphQlDb/update/failedDelete.test.js.map +1 -1
  101. package/dist/tests/cases/integration/graphQlDb/update/invalidInput.test.js +2 -2
  102. package/dist/tests/cases/integration/graphQlDb/update/invalidInput.test.js.map +1 -1
  103. package/dist/tests/cases/integration/graphQlDb/update/nullChecksNotNull.test.js +7 -7
  104. package/dist/tests/cases/integration/graphQlDb/update/nullChecksNotNull.test.js.map +1 -1
  105. package/dist/tests/cases/integration/graphQlDb/update/nullChecksNullable.test.js +7 -7
  106. package/dist/tests/cases/integration/graphQlDb/update/nullChecksNullable.test.js.map +1 -1
  107. package/dist/tests/cases/integration/graphQlDb/update/uniqueConstraint.test.js +2 -2
  108. package/dist/tests/cases/integration/graphQlDb/update/uniqueConstraint.test.js.map +1 -1
  109. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/connect.test.js +3 -3
  110. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/connect.test.js.map +1 -1
  111. package/dist/tests/cases/integration/graphQlRequests/query/sorting/orderBy.test.d.ts +2 -0
  112. package/dist/tests/cases/integration/graphQlRequests/query/sorting/orderBy.test.d.ts.map +1 -0
  113. package/dist/tests/cases/integration/graphQlRequests/query/sorting/orderBy.test.js +67 -0
  114. package/dist/tests/cases/integration/graphQlRequests/query/sorting/orderBy.test.js.map +1 -0
  115. package/dist/tests/cases/integration/graphQlRequests/update/acl/aclUpdate.test.js +6 -18
  116. package/dist/tests/cases/integration/graphQlRequests/update/acl/aclUpdate.test.js.map +1 -1
  117. package/dist/tests/cases/integration/graphQlRequests/update/additionalFilter.test.js +3 -4
  118. package/dist/tests/cases/integration/graphQlRequests/update/additionalFilter.test.js.map +1 -1
  119. package/dist/tests/cases/integration/graphQlRequests/update/basic/columnUpdate.test.js +3 -8
  120. package/dist/tests/cases/integration/graphQlRequests/update/basic/columnUpdate.test.js.map +1 -1
  121. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/update.test.js +3 -9
  122. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/update.test.js.map +1 -1
  123. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/upsert.test.js +3 -9
  124. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/upsert.test.js.map +1 -1
  125. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/update.test.js +3 -9
  126. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/update.test.js.map +1 -1
  127. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/upsert.test.js +3 -9
  128. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/upsert.test.js.map +1 -1
  129. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/connect.test.js +3 -10
  130. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/connect.test.js.map +1 -1
  131. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/create.test.js +3 -10
  132. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/create.test.js.map +1 -1
  133. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/disconnect.test.js +3 -9
  134. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/disconnect.test.js.map +1 -1
  135. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/update.test.js +3 -9
  136. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/update.test.js.map +1 -1
  137. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/upsert.test.js +6 -18
  138. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/upsert.test.js.map +1 -1
  139. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/connect.test.js +3 -11
  140. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/connect.test.js.map +1 -1
  141. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/disconnect.test.js +3 -8
  142. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/disconnect.test.js.map +1 -1
  143. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/update.test.js +3 -6
  144. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/update.test.js.map +1 -1
  145. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/upsert.test.js +3 -6
  146. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/upsert.test.js.map +1 -1
  147. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/connect.test.js +15 -50
  148. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/connect.test.js.map +1 -1
  149. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/create.test.js +3 -10
  150. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/create.test.js.map +1 -1
  151. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/disconnect.test.js +3 -10
  152. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/disconnect.test.js.map +1 -1
  153. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/update.test.js +3 -6
  154. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/update.test.js.map +1 -1
  155. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/upsert.test.js +3 -7
  156. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/upsert.test.js.map +1 -1
  157. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/connect.test.js +12 -32
  158. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/connect.test.js.map +1 -1
  159. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/connectOrCreate.test.js +3 -3
  160. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/connectOrCreate.test.js.map +1 -1
  161. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/create.test.js +6 -20
  162. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/create.test.js.map +1 -1
  163. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/disconnect.test.js +3 -10
  164. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/disconnect.test.js.map +1 -1
  165. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/update.test.js +3 -9
  166. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/update.test.js.map +1 -1
  167. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/upsert.test.js +6 -19
  168. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/upsert.test.js.map +1 -1
  169. package/dist/tests/cases/integration/graphQlRequests/update/queryPortal.test.js +6 -8
  170. package/dist/tests/cases/integration/graphQlRequests/update/queryPortal.test.js.map +1 -1
  171. package/dist/tests/cases/integration/graphQlRequests/update/transaction.test.js +9 -24
  172. package/dist/tests/cases/integration/graphQlRequests/update/transaction.test.js.map +1 -1
  173. package/dist/tests/cases/integration/graphQlRequests/upsert/basicUpsert.test.js +3 -7
  174. package/dist/tests/cases/integration/graphQlRequests/upsert/basicUpsert.test.js.map +1 -1
  175. package/dist/tests/cases/unit/orderbyHelper.test.js +11 -0
  176. package/dist/tests/cases/unit/orderbyHelper.test.js.map +1 -1
  177. package/dist/tests/src/test.d.ts +1 -0
  178. package/dist/tests/src/test.d.ts.map +1 -1
  179. package/dist/tests/src/test.js +34 -6
  180. package/dist/tests/src/test.js.map +1 -1
  181. package/dist/tests/tsconfig.tsbuildinfo +1 -1
  182. package/package.json +11 -11
  183. package/src/ExecutionContainer.ts +204 -0
  184. package/src/index.ts +24 -1
  185. package/src/mapper/ColumnValue.ts +2 -2
  186. package/src/mapper/EventManager.ts +158 -0
  187. package/src/mapper/JunctionTableManager.ts +50 -32
  188. package/src/mapper/Mapper.ts +39 -21
  189. package/src/mapper/MapperFactory.ts +67 -0
  190. package/src/mapper/Result.ts +2 -1
  191. package/src/mapper/delete/DeleteExecutor.ts +42 -1
  192. package/src/mapper/index.ts +3 -1
  193. package/src/mapper/insert/InsertBuilder.ts +12 -2
  194. package/src/mapper/insert/Inserter.ts +3 -3
  195. package/src/mapper/select/OrderByHelper.ts +2 -1
  196. package/src/mapper/select/RelationFetcher.ts +2 -2
  197. package/src/mapper/update/UpdateBuilder.ts +30 -7
  198. package/src/mapper/update/UpdateBuilderFactory.ts +2 -2
  199. package/src/mapper/update/Updater.ts +6 -11
  200. package/src/resolvers/GraphQlQueryAstFactory.ts +1 -2
  201. package/src/resolvers/MutationResolver.ts +12 -13
  202. package/src/resolvers/ReadResolver.ts +5 -9
  203. package/src/resolvers/ValidationResolver.ts +2 -4
  204. package/src/resolvers/index.ts +0 -1
  205. package/src/schema/CustomTypesProvider.ts +2 -27
  206. package/src/schema/MutationProvider.ts +4 -4
  207. package/src/schema/QueryProvider.ts +3 -3
  208. package/src/tsconfig.json +7 -21
  209. package/src/types.ts +2 -3
  210. package/tests/cases/bugs/bug-update-by-nested-unique.test.ts +3 -5
  211. package/tests/cases/integration/graphQlDb/insert/insertSequence.test.ts +2 -2
  212. package/tests/cases/integration/graphQlDb/update/bug-freeze-connect-missing-one.test.ts +1 -1
  213. package/tests/cases/integration/graphQlDb/update/deferedConstraints.test.ts +9 -9
  214. package/tests/cases/integration/graphQlDb/update/failedDelete.test.ts +3 -3
  215. package/tests/cases/integration/graphQlDb/update/invalidInput.test.ts +2 -2
  216. package/tests/cases/integration/graphQlDb/update/nullChecksNotNull.test.ts +7 -7
  217. package/tests/cases/integration/graphQlDb/update/nullChecksNullable.test.ts +7 -7
  218. package/tests/cases/integration/graphQlDb/update/uniqueConstraint.test.ts +2 -2
  219. package/tests/cases/integration/graphQlRequests/insert/oneHasMany/connect.test.ts +3 -3
  220. package/tests/cases/integration/graphQlRequests/query/sorting/orderBy.test.ts +67 -0
  221. package/tests/cases/integration/graphQlRequests/update/acl/aclUpdate.test.ts +6 -18
  222. package/tests/cases/integration/graphQlRequests/update/additionalFilter.test.ts +3 -4
  223. package/tests/cases/integration/graphQlRequests/update/basic/columnUpdate.test.ts +3 -8
  224. package/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/update.test.ts +3 -9
  225. package/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/upsert.test.ts +3 -9
  226. package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/update.test.ts +3 -9
  227. package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/upsert.test.ts +3 -9
  228. package/tests/cases/integration/graphQlRequests/update/manyHasOne/connect.test.ts +3 -10
  229. package/tests/cases/integration/graphQlRequests/update/manyHasOne/create.test.ts +3 -10
  230. package/tests/cases/integration/graphQlRequests/update/manyHasOne/disconnect.test.ts +3 -9
  231. package/tests/cases/integration/graphQlRequests/update/manyHasOne/update.test.ts +3 -9
  232. package/tests/cases/integration/graphQlRequests/update/manyHasOne/upsert.test.ts +6 -18
  233. package/tests/cases/integration/graphQlRequests/update/oneHasMany/connect.test.ts +3 -11
  234. package/tests/cases/integration/graphQlRequests/update/oneHasMany/disconnect.test.ts +3 -8
  235. package/tests/cases/integration/graphQlRequests/update/oneHasMany/update.test.ts +3 -6
  236. package/tests/cases/integration/graphQlRequests/update/oneHasMany/upsert.test.ts +3 -6
  237. package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/connect.test.ts +15 -50
  238. package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/create.test.ts +3 -10
  239. package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/disconnect.test.ts +3 -10
  240. package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/update.test.ts +3 -6
  241. package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/upsert.test.ts +3 -7
  242. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/connect.test.ts +12 -32
  243. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/connectOrCreate.test.ts +3 -3
  244. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/create.test.ts +6 -20
  245. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/disconnect.test.ts +3 -10
  246. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/update.test.ts +3 -9
  247. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/upsert.test.ts +6 -19
  248. package/tests/cases/integration/graphQlRequests/update/queryPortal.test.ts +6 -8
  249. package/tests/cases/integration/graphQlRequests/update/transaction.test.ts +9 -24
  250. package/tests/cases/integration/graphQlRequests/upsert/basicUpsert.test.ts +3 -7
  251. package/tests/cases/unit/orderbyHelper.test.ts +13 -0
  252. package/tests/src/test.ts +38 -15
  253. package/tests/tsconfig.json +3 -9
  254. package/dist/src/mapper/MapperContainer.d.ts +0 -18
  255. package/dist/src/mapper/MapperContainer.d.ts.map +0 -1
  256. package/dist/src/mapper/MapperContainer.js +0 -55
  257. package/dist/src/mapper/MapperContainer.js.map +0 -1
  258. package/dist/src/resolvers/ExecutionContainerFactory.d.ts +0 -24
  259. package/dist/src/resolvers/ExecutionContainerFactory.d.ts.map +0 -1
  260. package/dist/src/resolvers/ExecutionContainerFactory.js +0 -45
  261. package/dist/src/resolvers/ExecutionContainerFactory.js.map +0 -1
  262. package/src/mapper/MapperContainer.ts +0 -142
  263. package/src/resolvers/ExecutionContainerFactory.ts +0 -74
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@contember/engine-content-api",
3
- "version": "1.3.0-alpha.1",
3
+ "version": "1.3.0-alpha.2",
4
4
  "license": "Apache-2.0",
5
5
  "main": "dist/src/index.js",
6
6
  "typings": "dist/src/index.d.ts",
@@ -10,21 +10,21 @@
10
10
  "test": "vitest --no-threads"
11
11
  },
12
12
  "dependencies": {
13
- "@contember/database": "^1.3.0-alpha.1",
14
- "@contember/dic": "^1.3.0-alpha.1",
15
- "@contember/logger": "^1.3.0-alpha.1",
16
- "@contember/graphql-utils": "^1.3.0-alpha.1",
17
- "@contember/schema": "^1.3.0-alpha.1",
18
- "@contember/schema-definition": "^1.3.0-alpha.1",
19
- "@contember/schema-utils": "^1.3.0-alpha.1",
13
+ "@contember/database": "^1.3.0-alpha.2",
14
+ "@contember/dic": "^1.3.0-alpha.2",
15
+ "@contember/logger": "^1.3.0-alpha.2",
16
+ "@contember/graphql-utils": "^1.3.0-alpha.2",
17
+ "@contember/schema": "^1.3.0-alpha.2",
18
+ "@contember/schema-definition": "^1.3.0-alpha.2",
19
+ "@contember/schema-utils": "^1.3.0-alpha.2",
20
20
  "@graphql-tools/schema": "^8.3.5",
21
21
  "fast-deep-equal": "^3.1.3",
22
22
  "graphql-tag": "^2.12.5"
23
23
  },
24
24
  "devDependencies": {
25
- "@contember/database-tester": "^1.3.0-alpha.1",
26
- "@contember/engine-api-tester": "^1.3.0-alpha.1",
27
- "@contember/schema-definition": "^1.3.0-alpha.1",
25
+ "@contember/database-tester": "^1.3.0-alpha.2",
26
+ "@contember/engine-api-tester": "^1.3.0-alpha.2",
27
+ "@contember/schema-definition": "^1.3.0-alpha.2",
28
28
  "@graphql-codegen/cli": "^2.6.2",
29
29
  "@graphql-codegen/typescript": "^2.5.1",
30
30
  "@graphql-codegen/typescript-operations": "^2.4.2",
@@ -0,0 +1,204 @@
1
+ import { PredicateFactory, PredicatesInjector, VariableInjector } from './acl'
2
+ import {
3
+ ConditionBuilder,
4
+ FieldsVisitorFactory,
5
+ JoinBuilder,
6
+ MetaHandler,
7
+ OrderByBuilder,
8
+ RelationFetcher,
9
+ WhereBuilder,
10
+ } from './mapper/select'
11
+ import { UniqueWhereExpander } from './inputProcessing'
12
+ import { HasManyToHasOneReducer, HasManyToHasOneReducerExecutionHandler } from './extensions'
13
+ import {
14
+ DeleteExecutor,
15
+ InsertBuilderFactory,
16
+ Inserter,
17
+ JunctionConnectHandler,
18
+ JunctionDisconnectHandler,
19
+ JunctionTableManager,
20
+ MapperFactory,
21
+ PathFactory,
22
+ SelectBuilder,
23
+ SelectBuilderFactory,
24
+ SelectHydrator,
25
+ UpdateBuilderFactory,
26
+ Updater,
27
+ } from './mapper'
28
+ import { Builder } from '@contember/dic'
29
+ import { Acl, Model, Schema } from '@contember/schema'
30
+ import { Client, SelectBuilder as DbSelectBuilder } from '@contember/database'
31
+ import { Providers } from '@contember/schema-utils'
32
+ import { PaginatedHasManyExecutionHandler } from './extensions/paginatedHasMany/PaginatedHasManyExecutionHandler'
33
+ import { PaginatedHasManyFieldProvider } from './extensions/paginatedHasMany/PaginatedHasManyFieldProvider'
34
+ import { WhereOptimizer } from './mapper/select/optimizer/WhereOptimizer'
35
+ import { ConditionOptimizer } from './mapper/select/optimizer/ConditionOptimizer'
36
+ import { GraphQlQueryAstFactory, MutationResolver, ReadResolver, ValidationResolver } from './resolvers'
37
+ import {
38
+ ColumnValueResolver,
39
+ DependencyCollector,
40
+ EntityRulesResolver, InputPreValidator,
41
+ QueryAstFactory,
42
+ ValidationDataSelector,
43
+ } from './input-validation'
44
+
45
+ export type ExecutionContainerArgs = {
46
+ schema: Schema & { id: number }
47
+ db: Client
48
+ identityId: string
49
+ identityVariables: Acl.VariablesMap
50
+ permissions: Acl.Permissions
51
+ systemSchema: string
52
+ project: { slug: string }
53
+ stage: { id: string; slug: string }
54
+ }
55
+
56
+ export interface ExecutionContainer {
57
+ readResolver: ReadResolver
58
+ mutationResolver: MutationResolver
59
+ validationResolver: ValidationResolver
60
+ }
61
+
62
+ export type ExecutionContainerBuilder = ReturnType<ExecutionContainerFactory['createBuilderInternal']>
63
+ export type ExecutionContainerHook = (builder: ExecutionContainerBuilder) => ExecutionContainerBuilder
64
+
65
+ export class ExecutionContainerFactory {
66
+ public readonly hooks: ExecutionContainerHook[] = []
67
+
68
+ constructor(
69
+ private readonly providers: Providers,
70
+ ) {
71
+ }
72
+
73
+ createBuilder(args: ExecutionContainerArgs): ExecutionContainerBuilder {
74
+ const builder = this.createBuilderInternal(args)
75
+ return this.hooks.reduce((acc, cb) => cb(acc), builder)
76
+ }
77
+
78
+ createBuilderInternal({ permissions, identityVariables, identityId, db, schema, systemSchema, stage, project }: ExecutionContainerArgs) {
79
+ return new Builder({})
80
+ .addService('systemSchema', () =>
81
+ systemSchema)
82
+ .addService('db', () =>
83
+ db)
84
+ .addService('project', () =>
85
+ project)
86
+ .addService('stage', () =>
87
+ stage)
88
+ .addService('schema', () =>
89
+ schema)
90
+ .addService('providers', () =>
91
+ this.providers)
92
+ .addService('variableInjector', ({ schema }) =>
93
+ new VariableInjector(schema.model, identityVariables))
94
+ .addService('predicateFactory', ({ variableInjector, schema }) =>
95
+ new PredicateFactory(permissions, schema.model, variableInjector))
96
+ .addService('predicatesInjector', ({ predicateFactory, schema }) =>
97
+ new PredicatesInjector(schema.model, predicateFactory))
98
+ .addService('joinBuilder', ({ schema }) =>
99
+ new JoinBuilder(schema.model))
100
+ .addService('conditionBuilder', () =>
101
+ new ConditionBuilder())
102
+ .addService('pathFactory', () =>
103
+ new PathFactory())
104
+ .addService('whereOptimized', ({ schema }) =>
105
+ new WhereOptimizer(schema.model, new ConditionOptimizer()))
106
+ .addService('whereBuilder', ({ joinBuilder, conditionBuilder, pathFactory, whereOptimized, schema }) =>
107
+ new WhereBuilder(schema.model, joinBuilder, conditionBuilder, pathFactory, whereOptimized, schema.settings.useExistsInHasManyFilter === true))
108
+ .addService('orderByBuilder', ({ joinBuilder, schema }) =>
109
+ new OrderByBuilder(schema.model, joinBuilder))
110
+ .addService('relationFetcher', ({ whereBuilder, orderByBuilder, predicatesInjector, pathFactory }) =>
111
+ new RelationFetcher(whereBuilder, orderByBuilder, predicatesInjector, pathFactory))
112
+ .addService('fieldsVisitorFactory', ({ relationFetcher, predicateFactory, whereBuilder, schema }) =>
113
+ new FieldsVisitorFactory(schema.model, relationFetcher, predicateFactory, whereBuilder))
114
+ .addService('metaHandler', ({ whereBuilder, predicateFactory }) =>
115
+ new MetaHandler(whereBuilder, predicateFactory))
116
+ .addService('uniqueWhereExpander', ({ schema }) =>
117
+ new UniqueWhereExpander(schema.model))
118
+ .addService('hasManyToHasOneReducer', ({ uniqueWhereExpander, schema }) =>
119
+ new HasManyToHasOneReducerExecutionHandler(schema.model, uniqueWhereExpander))
120
+ .addService('paginatedHasManyExecutionHandler', ({ relationFetcher, schema }) =>
121
+ new PaginatedHasManyExecutionHandler(schema.model, relationFetcher))
122
+ .addService('selectHandlers', ({ hasManyToHasOneReducer, paginatedHasManyExecutionHandler }) => ({
123
+ [HasManyToHasOneReducer.extensionName]: hasManyToHasOneReducer,
124
+ [PaginatedHasManyFieldProvider.extensionName]: paginatedHasManyExecutionHandler,
125
+ }))
126
+ .addService('selectBuilderFactory', ({ whereBuilder, orderByBuilder, fieldsVisitorFactory, metaHandler, selectHandlers, pathFactory, predicateFactory, schema }) =>
127
+ new (class implements SelectBuilderFactory {
128
+ create(qb: DbSelectBuilder, hydrator: SelectHydrator, relationPath: Model.AnyRelationContext[]): SelectBuilder {
129
+ return new SelectBuilder(
130
+ schema.model,
131
+ whereBuilder,
132
+ orderByBuilder,
133
+ metaHandler,
134
+ qb,
135
+ hydrator,
136
+ fieldsVisitorFactory,
137
+ selectHandlers,
138
+ pathFactory,
139
+ relationPath,
140
+ predicateFactory,
141
+ )
142
+ }
143
+ })())
144
+ .addService('insertBuilderFactory', ({ whereBuilder, pathFactory, schema, predicateFactory }) =>
145
+ new InsertBuilderFactory(schema.model, whereBuilder, pathFactory, predicateFactory))
146
+ .addService('updateBuilderFactory', ({ whereBuilder, pathFactory, schema, predicateFactory }) =>
147
+ new UpdateBuilderFactory(schema.model, whereBuilder, pathFactory, predicateFactory))
148
+ .addService('connectJunctionHandler', () =>
149
+ new JunctionConnectHandler())
150
+ .addService('disconnectJunctionHandler', ({}) =>
151
+ new JunctionDisconnectHandler())
152
+ .addService('junctionTableManager', ({ predicateFactory, whereBuilder, connectJunctionHandler, disconnectJunctionHandler, pathFactory, schema }) =>
153
+ new JunctionTableManager(schema.model, predicateFactory, whereBuilder, connectJunctionHandler, disconnectJunctionHandler, pathFactory))
154
+ .addService('deleteExecutor', ({ predicateFactory, updateBuilderFactory, whereBuilder, pathFactory, schema }) =>
155
+ new DeleteExecutor(schema.model, predicateFactory, whereBuilder, updateBuilderFactory, pathFactory))
156
+ .addService('updater', ({ predicateFactory, updateBuilderFactory, schema }) =>
157
+ new Updater(schema.model, predicateFactory, updateBuilderFactory))
158
+ .addService('inserter', ({ insertBuilderFactory, providers, schema }) =>
159
+ new Inserter(schema.model, insertBuilderFactory, providers))
160
+ .addService('mapperFactory', ({ predicatesInjector, selectBuilderFactory, uniqueWhereExpander, whereBuilder, junctionTableManager, deleteExecutor, updater, inserter, pathFactory, providers, schema }) => {
161
+ return new MapperFactory(
162
+ db,
163
+ identityId,
164
+ schema.model,
165
+ predicatesInjector,
166
+ selectBuilderFactory,
167
+ uniqueWhereExpander,
168
+ whereBuilder,
169
+ junctionTableManager,
170
+ deleteExecutor,
171
+ updater,
172
+ inserter,
173
+ pathFactory,
174
+ providers,
175
+ )
176
+ })
177
+
178
+ .addService('queryAstFactory', () =>
179
+ new GraphQlQueryAstFactory())
180
+ .addService('readResolver', ({ mapperFactory, queryAstFactory }) =>
181
+ new ReadResolver(mapperFactory, queryAstFactory))
182
+ .addService('validationDependencyCollector', () =>
183
+ new DependencyCollector())
184
+ .addService('validationQueryAstFactory', ({ schema }) =>
185
+ new QueryAstFactory(schema.model))
186
+ .addService('dataSelector', ({ validationQueryAstFactory, schema }) =>
187
+ new ValidationDataSelector(schema.model, validationQueryAstFactory))
188
+ .addService('columnValueResolver', ({ providers }) =>
189
+ new ColumnValueResolver(providers))
190
+ .addService('entityRulesResolver', ({ schema }) =>
191
+ new EntityRulesResolver(schema.validation, schema.model))
192
+ .addService('inputPreValidator', ({ entityRulesResolver, columnValueResolver, dataSelector, schema }) =>
193
+ new InputPreValidator(schema.model, entityRulesResolver, columnValueResolver, dataSelector))
194
+ .addService('mutationResolver', ({ mapperFactory, inputPreValidator, queryAstFactory, schema }) =>
195
+ new MutationResolver(schema.model, mapperFactory, inputPreValidator, queryAstFactory))
196
+ .addService('validationResolver', ({ inputPreValidator, mapperFactory }) =>
197
+ new ValidationResolver(mapperFactory, inputPreValidator))
198
+ }
199
+
200
+ public create(args: ExecutionContainerArgs): ExecutionContainer {
201
+ return this.createBuilder(args).build().pick('validationResolver', 'readResolver', 'mutationResolver')
202
+ }
203
+ }
204
+
package/src/index.ts CHANGED
@@ -5,6 +5,29 @@ export * from './schema'
5
5
  export * from './inputProcessing'
6
6
  export { EntityRulesResolver } from './input-validation'
7
7
  export * from './types'
8
+ export * from './ExecutionContainer'
8
9
  export { graphql } from 'graphql'
9
10
  export { UserError } from './exception'
10
- export { createMapperContainer } from './mapper'
11
+ export {
12
+ DataModificationEvent,
13
+ AfterCommitEvent,
14
+ AfterInsertEvent,
15
+ AfterJunctionUpdateEvent,
16
+ AfterUpdateEvent,
17
+ BeforeCommitEvent,
18
+ BeforeDeleteEvent,
19
+ BeforeInsertEvent,
20
+ BeforeJunctionUpdateEvent,
21
+ BeforeUpdateEvent,
22
+ EventManager,
23
+ Mapper,
24
+ MapperFactory,
25
+ ExecutionContainer,
26
+ ExecutionContainerBuilder,
27
+ Path,
28
+ WhereBuilder,
29
+ PathFactory,
30
+ ExecutionContainerFactory,
31
+ ExecutionContainerHook,
32
+ ExecutionContainerArgs,
33
+ } from './mapper'
@@ -2,14 +2,14 @@ import { Value } from '@contember/schema'
2
2
  import { getFulfilledValues, getRejections } from '../utils'
3
3
 
4
4
  export type ColumnValue<E = never> = {
5
- value: PromiseLike<Value.AtomicValue<E> | undefined>
5
+ value: PromiseLike<Value.FieldValue<E> | undefined>
6
6
  fieldName: string
7
7
  columnName: string
8
8
  columnType: string
9
9
  }
10
10
 
11
11
  export type ResolvedColumnValue<E = never> = ColumnValue<E> & {
12
- resolvedValue: Value.AtomicValue<E>
12
+ resolvedValue: Value.FieldValue<E>
13
13
  }
14
14
 
15
15
  export const resolveGenericValue = <T>(value: Value.GenericValueLike<T>): Promise<T> => {
@@ -0,0 +1,158 @@
1
+ import { Input, Model, Value } from '@contember/schema'
2
+ import { ResolvedColumnValue } from './ColumnValue'
3
+ import { Mapper } from './Mapper'
4
+ import { logger } from '@contember/logger'
5
+
6
+ export class BeforeInsertEvent {
7
+ public type = 'BeforeInsertEvent' as const
8
+
9
+ public afterEvent: AfterInsertEvent | undefined = undefined
10
+
11
+ constructor(
12
+ public readonly entity: Model.Entity,
13
+ public readonly data: ResolvedColumnValue[],
14
+ ) {
15
+ }
16
+ }
17
+
18
+ export class AfterInsertEvent {
19
+ public type = 'AfterInsertEvent' as const
20
+
21
+ constructor(
22
+ public readonly entity: Model.Entity,
23
+ public readonly data: ResolvedColumnValue[],
24
+ public readonly id: Input.PrimaryValue,
25
+ ) {
26
+ }
27
+ }
28
+
29
+
30
+ export class BeforeUpdateEvent {
31
+ public type = 'BeforeUpdateEvent' as const
32
+
33
+ public afterEvent: AfterUpdateEvent | undefined = undefined
34
+
35
+ constructor(
36
+ public readonly entity: Model.Entity,
37
+ public readonly data: ResolvedColumnValue[],
38
+ public readonly id: Input.PrimaryValue,
39
+ ) {
40
+ }
41
+ }
42
+
43
+ export class AfterUpdateEvent {
44
+ public type = 'AfterUpdateEvent' as const
45
+
46
+ private _hasChanges: boolean | undefined
47
+
48
+ constructor(
49
+ public readonly entity: Model.Entity,
50
+ public readonly data: (ResolvedColumnValue & { old: Value.FieldValue })[],
51
+ public readonly id: Input.PrimaryValue,
52
+ ) {
53
+ }
54
+ get hasChanges() {
55
+ // todo: deep equals
56
+ return this._hasChanges = this.data.some(it => it.resolvedValue !== it.old)
57
+ }
58
+ }
59
+
60
+ export class BeforeDeleteEvent {
61
+ public type = 'BeforeDeleteEvent' as const
62
+
63
+ constructor(
64
+ public readonly entity: Model.Entity,
65
+ public readonly id: Input.PrimaryValue,
66
+ ) {
67
+ }
68
+ }
69
+
70
+ export class BeforeJunctionUpdateEvent {
71
+ public type = 'BeforeJunctionUpdateEvent' as const
72
+
73
+ public afterEvent: AfterJunctionUpdateEvent | undefined = undefined
74
+
75
+ constructor(
76
+ public readonly owningEntity: Model.Entity,
77
+ public readonly owningRelation: Model.ManyHasManyOwningRelation,
78
+ public readonly owningId: Input.PrimaryValue,
79
+ public readonly inverseId: Input.PrimaryValue,
80
+ public readonly operation: 'connect' | 'disconnect',
81
+ ) {
82
+ }
83
+ }
84
+
85
+
86
+ export class AfterJunctionUpdateEvent {
87
+ public type = 'AfterJunctionUpdateEvent' as const
88
+
89
+ constructor(
90
+ public readonly owningEntity: Model.Entity,
91
+ public readonly owningRelation: Model.ManyHasManyOwningRelation,
92
+ public readonly owningId: Input.PrimaryValue,
93
+ public readonly inverseId: Input.PrimaryValue,
94
+ public readonly operation: 'connect' | 'disconnect',
95
+ public readonly hasChanges: boolean,
96
+ ) {
97
+ }
98
+ }
99
+
100
+ export class BeforeCommitEvent {
101
+ public type = 'BeforeCommitEvent' as const
102
+ }
103
+
104
+ export class AfterCommitEvent {
105
+ public type = 'AfterCommitEvent' as const
106
+ }
107
+
108
+ export type DataModificationEvent =
109
+ | BeforeInsertEvent
110
+ | AfterInsertEvent
111
+ | BeforeUpdateEvent
112
+ | AfterUpdateEvent
113
+ | BeforeJunctionUpdateEvent
114
+ | AfterJunctionUpdateEvent
115
+ | BeforeDeleteEvent
116
+
117
+ export type AnyEvent =
118
+ | DataModificationEvent
119
+ | BeforeCommitEvent
120
+ | AfterCommitEvent
121
+
122
+ export type EventMap<E extends AnyEvent = AnyEvent> = {
123
+ [K in E['type']]: E extends { type: K } ? E : never
124
+ }
125
+
126
+ export type EventListener<K extends keyof EventMap> = (event: EventMap[K], mapper: Mapper) => Promise<void>
127
+
128
+ export class EventManager {
129
+ private listeners: { [K in keyof EventMap]: EventListener<K>[] } = {
130
+ BeforeInsertEvent: [],
131
+ AfterInsertEvent: [],
132
+ BeforeUpdateEvent: [],
133
+ AfterUpdateEvent: [],
134
+ BeforeDeleteEvent: [],
135
+ BeforeCommitEvent: [],
136
+ AfterCommitEvent: [],
137
+ BeforeJunctionUpdateEvent: [],
138
+ AfterJunctionUpdateEvent: [],
139
+ }
140
+
141
+ constructor(
142
+ private readonly mapper: Mapper,
143
+ ) {
144
+ }
145
+
146
+ public listen<K extends keyof EventMap>(type: K, cb: EventListener<K>) {
147
+ this.listeners[type].push(cb)
148
+ }
149
+
150
+ public async fire<K extends keyof EventMap>(event: EventMap[K]) {
151
+ (await Promise.allSettled(this.listeners[event.type].map(it => (it as EventListener<K>)(event, this.mapper))))
152
+ .map(it => {
153
+ if (it.status === 'rejected') {
154
+ logger.error(it.reason)
155
+ }
156
+ })
157
+ }
158
+ }
@@ -1,6 +1,5 @@
1
1
  import { getEntity } from '@contember/schema-utils'
2
- import { PathFactory } from './select'
3
- import { WhereBuilder } from './select'
2
+ import { PathFactory, WhereBuilder } from './select'
4
3
  import { PredicateFactory } from '../acl'
5
4
  import {
6
5
  Client,
@@ -16,14 +15,21 @@ import {
16
15
  MutationJunctionUpdateOk,
17
16
  MutationNoResultError,
18
17
  MutationNothingToDo,
19
- MutationResult,
20
18
  MutationResultList,
19
+ MutationResultType,
21
20
  NothingToDoReason,
22
21
  } from './Result'
23
22
  import { ImplementationException } from '../exception'
23
+ import { AfterJunctionUpdateEvent, BeforeJunctionUpdateEvent } from './EventManager'
24
+ import { Mapper } from './Mapper'
24
25
 
25
26
  type OkResultFactory = () => MutationJunctionUpdateOk
26
27
 
28
+ type JunctionMutationResult =
29
+ | MutationJunctionUpdateOk
30
+ | MutationNothingToDo
31
+ | MutationNoResultError
32
+
27
33
  export class JunctionTableManager {
28
34
  constructor(
29
35
  private readonly schema: Model.Schema,
@@ -35,43 +41,55 @@ export class JunctionTableManager {
35
41
  ) {}
36
42
 
37
43
  public async connectJunction(
38
- db: Client,
44
+ mapper: Mapper,
39
45
  owningEntity: Model.Entity,
40
46
  relation: Model.ManyHasManyOwningRelation,
41
47
  owningUnique: Input.PrimaryValue,
42
48
  inverseUnique: Input.PrimaryValue,
43
49
  ): Promise<MutationResultList> {
44
- return [
45
- await this.executeJunctionModification(
46
- db,
47
- owningEntity,
48
- relation,
49
- owningUnique,
50
- inverseUnique,
51
- this.connectJunctionHandler,
52
- ),
53
- ]
50
+ const beforeEvent = new BeforeJunctionUpdateEvent(owningEntity, relation, owningUnique, inverseUnique, 'connect')
51
+ await mapper.eventManager.fire(beforeEvent)
52
+ const result = await this.executeJunctionModification(
53
+ mapper.db,
54
+ owningEntity,
55
+ relation,
56
+ owningUnique,
57
+ inverseUnique,
58
+ this.connectJunctionHandler,
59
+ )
60
+ if (result.result !== MutationResultType.noResultError) {
61
+ const afterEvent = new AfterJunctionUpdateEvent(owningEntity, relation, owningUnique, inverseUnique, 'connect', result.result === MutationResultType.ok)
62
+ await mapper.eventManager.fire(afterEvent)
63
+ }
64
+ return [result]
54
65
  }
55
66
 
56
67
  public async disconnectJunction(
57
- db: Client,
68
+ mapper: Mapper,
58
69
  owningEntity: Model.Entity,
59
70
  relation: Model.ManyHasManyOwningRelation,
60
71
  owningUnique: Input.PrimaryValue,
61
72
  inverseUnique: Input.PrimaryValue,
62
73
  ): Promise<MutationResultList> {
63
- return [
64
- await this.executeJunctionModification(
65
- db,
66
- owningEntity,
67
- relation,
68
- owningUnique,
69
- inverseUnique,
70
- this.disconnectJunctionHandler,
71
- ),
72
- ]
74
+ const beforeEvent = new BeforeJunctionUpdateEvent(owningEntity, relation, owningUnique, inverseUnique, 'connect')
75
+ await mapper.eventManager.fire(beforeEvent)
76
+ const result = await this.executeJunctionModification(
77
+ mapper.db,
78
+ owningEntity,
79
+ relation,
80
+ owningUnique,
81
+ inverseUnique,
82
+ this.disconnectJunctionHandler,
83
+ )
84
+ if (result.result !== MutationResultType.noResultError) {
85
+ const afterEvent = new AfterJunctionUpdateEvent(owningEntity, relation, owningUnique, inverseUnique, 'disconnect', result.result === MutationResultType.ok)
86
+ beforeEvent.afterEvent = afterEvent
87
+ await mapper.eventManager.fire(afterEvent)
88
+ }
89
+ return [result]
73
90
  }
74
91
 
92
+
75
93
  private async executeJunctionModification(
76
94
  db: Client,
77
95
  owningEntity: Model.Entity,
@@ -79,7 +97,7 @@ export class JunctionTableManager {
79
97
  owningPrimary: Input.PrimaryValue,
80
98
  inversePrimary: Input.PrimaryValue,
81
99
  handler: JunctionHandler,
82
- ): Promise<MutationResult> {
100
+ ): Promise<JunctionMutationResult> {
83
101
  const joiningTable = relation.joiningTable
84
102
  const inverseEntity = getEntity(this.schema, relation.target)
85
103
  if (inverseEntity.view || owningEntity.view) {
@@ -145,9 +163,9 @@ interface JunctionComplexExecutionArgs {
145
163
  }
146
164
 
147
165
  interface JunctionHandler {
148
- executeSimple(args: JunctionSimpleExecutionArgs): Promise<MutationResult>
166
+ executeSimple(args: JunctionSimpleExecutionArgs): Promise<JunctionMutationResult>
149
167
 
150
- executeComplex(args: JunctionComplexExecutionArgs): Promise<MutationResult>
168
+ executeComplex(args: JunctionComplexExecutionArgs): Promise<JunctionMutationResult>
151
169
  }
152
170
 
153
171
  export class JunctionConnectHandler implements JunctionHandler {
@@ -157,7 +175,7 @@ export class JunctionConnectHandler implements JunctionHandler {
157
175
  owningPrimary,
158
176
  inversePrimary,
159
177
  okResultFactory,
160
- }: JunctionSimpleExecutionArgs): Promise<MutationResult> {
178
+ }: JunctionSimpleExecutionArgs): Promise<JunctionMutationResult> {
161
179
  const result = await InsertBuilder.create()
162
180
  .into(joiningTable.tableName)
163
181
  .values({
@@ -177,7 +195,7 @@ export class JunctionConnectHandler implements JunctionHandler {
177
195
  joiningTable,
178
196
  dataCallback,
179
197
  okResultFactory,
180
- }: JunctionComplexExecutionArgs): Promise<MutationResult> {
198
+ }: JunctionComplexExecutionArgs): Promise<JunctionMutationResult> {
181
199
  const insert = InsertBuilder.create()
182
200
  .into(joiningTable.tableName)
183
201
  .values({
@@ -216,7 +234,7 @@ export class JunctionDisconnectHandler implements JunctionHandler {
216
234
  owningPrimary,
217
235
  inversePrimary,
218
236
  okResultFactory,
219
- }: JunctionSimpleExecutionArgs): Promise<MutationResult> {
237
+ }: JunctionSimpleExecutionArgs): Promise<JunctionMutationResult> {
220
238
  const qb = DeleteBuilder.create()
221
239
  .from(joiningTable.tableName)
222
240
  .where(cond => cond.compare(joiningTable.joiningColumn.columnName, Operator.eq, owningPrimary))
@@ -234,7 +252,7 @@ export class JunctionDisconnectHandler implements JunctionHandler {
234
252
  joiningTable,
235
253
  dataCallback,
236
254
  okResultFactory,
237
- }: JunctionComplexExecutionArgs): Promise<MutationResult> {
255
+ }: JunctionComplexExecutionArgs): Promise<JunctionMutationResult> {
238
256
  const deleteQb = DeleteBuilder.create()
239
257
  .from(joiningTable.tableName)
240
258
  .using('data')