@contember/engine-content-api 1.2.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 (555) 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/input-validation/preValidation/CreateInputPreValidationProcessor.d.ts.map +1 -1
  10. package/dist/src/input-validation/preValidation/CreateInputPreValidationProcessor.js +6 -0
  11. package/dist/src/input-validation/preValidation/CreateInputPreValidationProcessor.js.map +1 -1
  12. package/dist/src/input-validation/preValidation/UpdateInputPreValidationProcessor.d.ts.map +1 -1
  13. package/dist/src/input-validation/preValidation/UpdateInputPreValidationProcessor.js +6 -0
  14. package/dist/src/input-validation/preValidation/UpdateInputPreValidationProcessor.js.map +1 -1
  15. package/dist/src/inputProcessing/CreateInputProcessor.d.ts +27 -9
  16. package/dist/src/inputProcessing/CreateInputProcessor.d.ts.map +1 -1
  17. package/dist/src/inputProcessing/CreateInputVisitor.d.ts.map +1 -1
  18. package/dist/src/inputProcessing/CreateInputVisitor.js +10 -2
  19. package/dist/src/inputProcessing/CreateInputVisitor.js.map +1 -1
  20. package/dist/src/inputProcessing/UniqueWhereExpander.d.ts +2 -1
  21. package/dist/src/inputProcessing/UniqueWhereExpander.d.ts.map +1 -1
  22. package/dist/src/inputProcessing/UniqueWhereExpander.js +4 -0
  23. package/dist/src/inputProcessing/UniqueWhereExpander.js.map +1 -1
  24. package/dist/src/inputProcessing/UpdateInputProcessor.d.ts +41 -16
  25. package/dist/src/inputProcessing/UpdateInputProcessor.d.ts.map +1 -1
  26. package/dist/src/inputProcessing/UpdateInputVisitor.d.ts.map +1 -1
  27. package/dist/src/inputProcessing/UpdateInputVisitor.js +7 -2
  28. package/dist/src/inputProcessing/UpdateInputVisitor.js.map +1 -1
  29. package/dist/src/mapper/ColumnValue.d.ts +2 -2
  30. package/dist/src/mapper/ColumnValue.d.ts.map +1 -1
  31. package/dist/src/mapper/DataManipulationBuilder.d.ts +7 -0
  32. package/dist/src/mapper/DataManipulationBuilder.d.ts.map +1 -0
  33. package/dist/src/mapper/DataManipulationBuilder.js +5 -0
  34. package/dist/src/mapper/DataManipulationBuilder.js.map +1 -0
  35. package/dist/src/mapper/EventManager.d.ts +86 -0
  36. package/dist/src/mapper/EventManager.d.ts.map +1 -0
  37. package/dist/src/mapper/EventManager.js +118 -0
  38. package/dist/src/mapper/EventManager.js.map +1 -0
  39. package/dist/src/mapper/JunctionTableManager.d.ts +12 -11
  40. package/dist/src/mapper/JunctionTableManager.d.ts.map +1 -1
  41. package/dist/src/mapper/JunctionTableManager.js +20 -8
  42. package/dist/src/mapper/JunctionTableManager.js.map +1 -1
  43. package/dist/src/mapper/Mapper.d.ts +19 -19
  44. package/dist/src/mapper/Mapper.d.ts.map +1 -1
  45. package/dist/src/mapper/Mapper.js +71 -21
  46. package/dist/src/mapper/Mapper.js.map +1 -1
  47. package/dist/src/mapper/MapperFactory.d.ts +33 -0
  48. package/dist/src/mapper/MapperFactory.d.ts.map +1 -0
  49. package/dist/src/mapper/MapperFactory.js +40 -0
  50. package/dist/src/mapper/MapperFactory.js.map +1 -0
  51. package/dist/src/mapper/Result.d.ts +5 -4
  52. package/dist/src/mapper/Result.d.ts.map +1 -1
  53. package/dist/src/mapper/Result.js +2 -1
  54. package/dist/src/mapper/Result.js.map +1 -1
  55. package/dist/src/mapper/delete/DeleteExecutor.d.ts +12 -5
  56. package/dist/src/mapper/delete/DeleteExecutor.d.ts.map +1 -1
  57. package/dist/src/mapper/delete/DeleteExecutor.js +183 -77
  58. package/dist/src/mapper/delete/DeleteExecutor.js.map +1 -1
  59. package/dist/src/mapper/delete/DeleteState.d.ts +22 -0
  60. package/dist/src/mapper/delete/DeleteState.d.ts.map +1 -0
  61. package/dist/src/mapper/delete/DeleteState.js +68 -0
  62. package/dist/src/mapper/delete/DeleteState.js.map +1 -0
  63. package/dist/src/mapper/delete/DeletedEntitiesStorage.d.ts +1 -0
  64. package/dist/src/mapper/delete/DeletedEntitiesStorage.d.ts.map +1 -1
  65. package/dist/src/mapper/delete/DeletedEntitiesStorage.js +5 -0
  66. package/dist/src/mapper/delete/DeletedEntitiesStorage.js.map +1 -1
  67. package/dist/src/mapper/delete/helpers.d.ts +11 -0
  68. package/dist/src/mapper/delete/helpers.d.ts.map +1 -0
  69. package/dist/src/mapper/delete/helpers.js +49 -0
  70. package/dist/src/mapper/delete/helpers.js.map +1 -0
  71. package/dist/src/mapper/index.d.ts +3 -1
  72. package/dist/src/mapper/index.d.ts.map +1 -1
  73. package/dist/src/mapper/index.js +3 -1
  74. package/dist/src/mapper/index.js.map +1 -1
  75. package/dist/src/mapper/insert/InsertBuilder.d.ts +10 -7
  76. package/dist/src/mapper/insert/InsertBuilder.d.ts.map +1 -1
  77. package/dist/src/mapper/insert/InsertBuilder.js +24 -11
  78. package/dist/src/mapper/insert/InsertBuilder.js.map +1 -1
  79. package/dist/src/mapper/insert/InsertBuilderFactory.d.ts +3 -1
  80. package/dist/src/mapper/insert/InsertBuilderFactory.d.ts.map +1 -1
  81. package/dist/src/mapper/insert/InsertBuilderFactory.js +3 -2
  82. package/dist/src/mapper/insert/InsertBuilderFactory.js.map +1 -1
  83. package/dist/src/mapper/insert/Inserter.d.ts +3 -6
  84. package/dist/src/mapper/insert/Inserter.d.ts.map +1 -1
  85. package/dist/src/mapper/insert/Inserter.js +9 -12
  86. package/dist/src/mapper/insert/Inserter.js.map +1 -1
  87. package/dist/src/mapper/insert/SqlCreateInputProcessor.d.ts +5 -0
  88. package/dist/src/mapper/insert/SqlCreateInputProcessor.d.ts.map +1 -1
  89. package/dist/src/mapper/insert/SqlCreateInputProcessor.js +54 -120
  90. package/dist/src/mapper/insert/SqlCreateInputProcessor.js.map +1 -1
  91. package/dist/src/mapper/relations/ManyHasManyInputProcessor.d.ts +32 -0
  92. package/dist/src/mapper/relations/ManyHasManyInputProcessor.d.ts.map +1 -0
  93. package/dist/src/mapper/relations/ManyHasManyInputProcessor.js +77 -0
  94. package/dist/src/mapper/relations/ManyHasManyInputProcessor.js.map +1 -0
  95. package/dist/src/mapper/relations/ManyHasOneInputProcessor.d.ts +32 -0
  96. package/dist/src/mapper/relations/ManyHasOneInputProcessor.d.ts.map +1 -0
  97. package/dist/src/mapper/relations/ManyHasOneInputProcessor.js +108 -0
  98. package/dist/src/mapper/relations/ManyHasOneInputProcessor.js.map +1 -0
  99. package/dist/src/mapper/relations/OneHasManyInputProcessor.d.ts +29 -0
  100. package/dist/src/mapper/relations/OneHasManyInputProcessor.d.ts.map +1 -0
  101. package/dist/src/mapper/relations/OneHasManyInputProcessor.js +61 -0
  102. package/dist/src/mapper/relations/OneHasManyInputProcessor.js.map +1 -0
  103. package/dist/src/mapper/relations/OneHasOneInverseCreateInputProcessor.d.ts +21 -0
  104. package/dist/src/mapper/relations/OneHasOneInverseCreateInputProcessor.d.ts.map +1 -0
  105. package/dist/src/mapper/relations/OneHasOneInverseCreateInputProcessor.js +74 -0
  106. package/dist/src/mapper/relations/OneHasOneInverseCreateInputProcessor.js.map +1 -0
  107. package/dist/src/mapper/relations/OneHasOneInverseUpdateInputProcessor.d.ts +32 -0
  108. package/dist/src/mapper/relations/OneHasOneInverseUpdateInputProcessor.d.ts.map +1 -0
  109. package/dist/src/mapper/relations/OneHasOneInverseUpdateInputProcessor.js +125 -0
  110. package/dist/src/mapper/relations/OneHasOneInverseUpdateInputProcessor.js.map +1 -0
  111. package/dist/src/mapper/relations/OneHasOneOwningCreateInputProcessor.d.ts +21 -0
  112. package/dist/src/mapper/relations/OneHasOneOwningCreateInputProcessor.d.ts.map +1 -0
  113. package/dist/src/mapper/relations/OneHasOneOwningCreateInputProcessor.js +72 -0
  114. package/dist/src/mapper/relations/OneHasOneOwningCreateInputProcessor.js.map +1 -0
  115. package/dist/src/mapper/relations/OneHasOneOwningUpdateInputProcessor.d.ts +37 -0
  116. package/dist/src/mapper/relations/OneHasOneOwningUpdateInputProcessor.d.ts.map +1 -0
  117. package/dist/src/mapper/relations/OneHasOneOwningUpdateInputProcessor.js +193 -0
  118. package/dist/src/mapper/relations/OneHasOneOwningUpdateInputProcessor.js.map +1 -0
  119. package/dist/src/mapper/select/JoinBuilder.d.ts +1 -1
  120. package/dist/src/mapper/select/JoinBuilder.d.ts.map +1 -1
  121. package/dist/src/mapper/select/JoinBuilder.js.map +1 -1
  122. package/dist/src/mapper/select/OrderByHelper.d.ts +1 -1
  123. package/dist/src/mapper/select/OrderByHelper.d.ts.map +1 -1
  124. package/dist/src/mapper/select/OrderByHelper.js +3 -1
  125. package/dist/src/mapper/select/OrderByHelper.js.map +1 -1
  126. package/dist/src/mapper/select/RelationFetcher.js +2 -2
  127. package/dist/src/mapper/select/RelationFetcher.js.map +1 -1
  128. package/dist/src/mapper/select/WhereBuilder.d.ts +2 -2
  129. package/dist/src/mapper/select/WhereBuilder.d.ts.map +1 -1
  130. package/dist/src/mapper/select/WhereBuilder.js.map +1 -1
  131. package/dist/src/mapper/update/SqlUpdateInputProcessor.d.ts +5 -0
  132. package/dist/src/mapper/update/SqlUpdateInputProcessor.d.ts.map +1 -1
  133. package/dist/src/mapper/update/SqlUpdateInputProcessor.js +52 -389
  134. package/dist/src/mapper/update/SqlUpdateInputProcessor.js.map +1 -1
  135. package/dist/src/mapper/update/UpdateBuilder.d.ts +10 -7
  136. package/dist/src/mapper/update/UpdateBuilder.d.ts.map +1 -1
  137. package/dist/src/mapper/update/UpdateBuilder.js +43 -19
  138. package/dist/src/mapper/update/UpdateBuilder.js.map +1 -1
  139. package/dist/src/mapper/update/UpdateBuilderFactory.d.ts +4 -2
  140. package/dist/src/mapper/update/UpdateBuilderFactory.d.ts.map +1 -1
  141. package/dist/src/mapper/update/UpdateBuilderFactory.js +4 -3
  142. package/dist/src/mapper/update/UpdateBuilderFactory.js.map +1 -1
  143. package/dist/src/mapper/update/Updater.d.ts +1 -4
  144. package/dist/src/mapper/update/Updater.d.ts.map +1 -1
  145. package/dist/src/mapper/update/Updater.js +17 -23
  146. package/dist/src/mapper/update/Updater.js.map +1 -1
  147. package/dist/src/resolvers/GraphQlQueryAstFactory.d.ts +1 -3
  148. package/dist/src/resolvers/GraphQlQueryAstFactory.d.ts.map +1 -1
  149. package/dist/src/resolvers/GraphQlQueryAstFactory.js +1 -4
  150. package/dist/src/resolvers/GraphQlQueryAstFactory.js.map +1 -1
  151. package/dist/src/resolvers/MutationResolver.d.ts +1 -4
  152. package/dist/src/resolvers/MutationResolver.d.ts.map +1 -1
  153. package/dist/src/resolvers/MutationResolver.js +10 -12
  154. package/dist/src/resolvers/MutationResolver.js.map +1 -1
  155. package/dist/src/resolvers/ReadResolver.d.ts +1 -3
  156. package/dist/src/resolvers/ReadResolver.d.ts.map +1 -1
  157. package/dist/src/resolvers/ReadResolver.js +6 -10
  158. package/dist/src/resolvers/ReadResolver.js.map +1 -1
  159. package/dist/src/resolvers/ValidationResolver.d.ts +1 -3
  160. package/dist/src/resolvers/ValidationResolver.d.ts.map +1 -1
  161. package/dist/src/resolvers/ValidationResolver.js +3 -4
  162. package/dist/src/resolvers/ValidationResolver.js.map +1 -1
  163. package/dist/src/resolvers/index.d.ts +0 -1
  164. package/dist/src/resolvers/index.d.ts.map +1 -1
  165. package/dist/src/resolvers/index.js +0 -1
  166. package/dist/src/resolvers/index.js.map +1 -1
  167. package/dist/src/schema/CustomTypesProvider.d.ts.map +1 -1
  168. package/dist/src/schema/CustomTypesProvider.js +1 -23
  169. package/dist/src/schema/CustomTypesProvider.js.map +1 -1
  170. package/dist/src/schema/GraphQlSchemaBuilderFactory.d.ts +3 -0
  171. package/dist/src/schema/GraphQlSchemaBuilderFactory.d.ts.map +1 -1
  172. package/dist/src/schema/GraphQlSchemaBuilderFactory.js +4 -2
  173. package/dist/src/schema/GraphQlSchemaBuilderFactory.js.map +1 -1
  174. package/dist/src/schema/MutationProvider.js +4 -4
  175. package/dist/src/schema/MutationProvider.js.map +1 -1
  176. package/dist/src/schema/QueryProvider.js +3 -3
  177. package/dist/src/schema/QueryProvider.js.map +1 -1
  178. package/dist/src/schema/mutations/ConnectOrCreateRelationInputProvider.d.ts +15 -0
  179. package/dist/src/schema/mutations/ConnectOrCreateRelationInputProvider.d.ts.map +1 -0
  180. package/dist/src/schema/mutations/ConnectOrCreateRelationInputProvider.js +43 -0
  181. package/dist/src/schema/mutations/ConnectOrCreateRelationInputProvider.js.map +1 -0
  182. package/dist/src/schema/mutations/CreateEntityInputFieldVisitor.d.ts.map +1 -1
  183. package/dist/src/schema/mutations/CreateEntityInputFieldVisitor.js +2 -6
  184. package/dist/src/schema/mutations/CreateEntityInputFieldVisitor.js.map +1 -1
  185. package/dist/src/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.d.ts.map +1 -1
  186. package/dist/src/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.js +3 -0
  187. package/dist/src/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.js.map +1 -1
  188. package/dist/src/schema/mutations/CreateEntityRelationInputFieldVisitor.d.ts +3 -1
  189. package/dist/src/schema/mutations/CreateEntityRelationInputFieldVisitor.d.ts.map +1 -1
  190. package/dist/src/schema/mutations/CreateEntityRelationInputFieldVisitor.js +15 -8
  191. package/dist/src/schema/mutations/CreateEntityRelationInputFieldVisitor.js.map +1 -1
  192. package/dist/src/schema/mutations/EntityInputProvider.d.ts.map +1 -1
  193. package/dist/src/schema/mutations/EntityInputProvider.js +0 -3
  194. package/dist/src/schema/mutations/EntityInputProvider.js.map +1 -1
  195. package/dist/src/schema/mutations/UpdateEntityInputFieldVisitor.d.ts.map +1 -1
  196. package/dist/src/schema/mutations/UpdateEntityInputFieldVisitor.js +2 -6
  197. package/dist/src/schema/mutations/UpdateEntityInputFieldVisitor.js.map +1 -1
  198. package/dist/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.d.ts.map +1 -1
  199. package/dist/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.js +3 -0
  200. package/dist/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.js.map +1 -1
  201. package/dist/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.d.ts +3 -1
  202. package/dist/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.d.ts.map +1 -1
  203. package/dist/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.js +11 -22
  204. package/dist/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.js.map +1 -1
  205. package/dist/src/tsconfig.tsbuildinfo +1 -1
  206. package/dist/src/types.d.ts +2 -3
  207. package/dist/src/types.d.ts.map +1 -1
  208. package/dist/tests/cases/bugs/bug-update-by-nested-unique.test.js +3 -5
  209. package/dist/tests/cases/bugs/bug-update-by-nested-unique.test.js.map +1 -1
  210. package/dist/tests/cases/integration/graphQlDb/insert/insertSequence.test.js +2 -2
  211. package/dist/tests/cases/integration/graphQlDb/insert/insertSequence.test.js.map +1 -1
  212. package/dist/tests/cases/integration/graphQlDb/update/bug-freeze-connect-missing-one.test.js +1 -1
  213. package/dist/tests/cases/integration/graphQlDb/update/bug-freeze-connect-missing-one.test.js.map +1 -1
  214. package/dist/tests/cases/integration/graphQlDb/update/deferedConstraints.test.js +45 -45
  215. package/dist/tests/cases/integration/graphQlDb/update/deferedConstraints.test.js.map +1 -1
  216. package/dist/tests/cases/integration/graphQlDb/update/failedDelete.test.js +5 -5
  217. package/dist/tests/cases/integration/graphQlDb/update/failedDelete.test.js.map +1 -1
  218. package/dist/tests/cases/integration/graphQlDb/update/invalidInput.test.js +2 -2
  219. package/dist/tests/cases/integration/graphQlDb/update/invalidInput.test.js.map +1 -1
  220. package/dist/tests/cases/integration/graphQlDb/update/nullChecksNotNull.test.js +8 -8
  221. package/dist/tests/cases/integration/graphQlDb/update/nullChecksNotNull.test.js.map +1 -1
  222. package/dist/tests/cases/integration/graphQlDb/update/nullChecksNullable.test.js +7 -10
  223. package/dist/tests/cases/integration/graphQlDb/update/nullChecksNullable.test.js.map +1 -1
  224. package/dist/tests/cases/integration/graphQlDb/update/uniqueConstraint.test.js +2 -2
  225. package/dist/tests/cases/integration/graphQlDb/update/uniqueConstraint.test.js.map +1 -1
  226. package/dist/tests/cases/integration/graphQlRequests/delete/aclDelete.test.js +13 -32
  227. package/dist/tests/cases/integration/graphQlRequests/delete/aclDelete.test.js.map +1 -1
  228. package/dist/tests/cases/integration/graphQlRequests/delete/additionalDeleteFilter.test.js +11 -30
  229. package/dist/tests/cases/integration/graphQlRequests/delete/additionalDeleteFilter.test.js.map +1 -1
  230. package/dist/tests/cases/integration/graphQlRequests/delete/cascadeDelete.test.js +62 -45
  231. package/dist/tests/cases/integration/graphQlRequests/delete/cascadeDelete.test.js.map +1 -1
  232. package/dist/tests/cases/integration/graphQlRequests/delete/deleteById.test.js +10 -11
  233. package/dist/tests/cases/integration/graphQlRequests/delete/deleteById.test.js.map +1 -1
  234. package/dist/tests/cases/integration/graphQlRequests/delete/orphanRemoval.test.js +29 -18
  235. package/dist/tests/cases/integration/graphQlRequests/delete/orphanRemoval.test.js.map +1 -1
  236. package/dist/tests/cases/integration/graphQlRequests/delete/restrictOnDelete.test.d.ts +2 -0
  237. package/dist/tests/cases/integration/graphQlRequests/delete/restrictOnDelete.test.d.ts.map +1 -0
  238. package/dist/tests/cases/integration/graphQlRequests/delete/restrictOnDelete.test.js +97 -0
  239. package/dist/tests/cases/integration/graphQlRequests/delete/restrictOnDelete.test.js.map +1 -0
  240. package/dist/tests/cases/integration/graphQlRequests/delete/setNullOnDelete.test.js +58 -22
  241. package/dist/tests/cases/integration/graphQlRequests/delete/setNullOnDelete.test.js.map +1 -1
  242. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyInverse/create.test.d.ts +2 -0
  243. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyInverse/create.test.d.ts.map +1 -0
  244. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyInverse/{insertRelationCreate.test.js → create.test.js} +1 -1
  245. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyInverse/create.test.js.map +1 -0
  246. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyOwning/create.test.d.ts +2 -0
  247. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyOwning/create.test.d.ts.map +1 -0
  248. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyOwning/{insertRelationCreate.test.js → create.test.js} +1 -1
  249. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyOwning/create.test.js.map +1 -0
  250. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasOne/connectOrCreate.test.d.ts +2 -0
  251. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasOne/connectOrCreate.test.d.ts.map +1 -0
  252. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasOne/connectOrCreate.test.js +99 -0
  253. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasOne/connectOrCreate.test.js.map +1 -0
  254. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasOne/create.test.d.ts +2 -0
  255. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasOne/create.test.d.ts.map +1 -0
  256. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasOne/{insertRelationCreate.test.js → create.test.js} +1 -1
  257. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasOne/create.test.js.map +1 -0
  258. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/connect.test.d.ts +2 -0
  259. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/connect.test.d.ts.map +1 -0
  260. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/{insertRelationConnect.test.js → connect.test.js} +4 -4
  261. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/connect.test.js.map +1 -0
  262. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/create.test.d.ts +2 -0
  263. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/create.test.d.ts.map +1 -0
  264. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/{insertRelationCreate.test.js → create.test.js} +1 -1
  265. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/create.test.js.map +1 -0
  266. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneInverse/create.test.d.ts +2 -0
  267. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneInverse/create.test.d.ts.map +1 -0
  268. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneInverse/{insertRelationCreate.test.js → create.test.js} +1 -1
  269. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneInverse/create.test.js.map +1 -0
  270. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/create.test.d.ts +2 -0
  271. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/create.test.d.ts.map +1 -0
  272. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/{insertRelationCreate.test.js → create.test.js} +1 -1
  273. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/create.test.js.map +1 -0
  274. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/empty.test.d.ts +2 -0
  275. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/empty.test.d.ts.map +1 -0
  276. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/{insertRelationEmpty.test.js → empty.test.js} +1 -1
  277. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/empty.test.js.map +1 -0
  278. package/dist/tests/cases/integration/graphQlRequests/query/sorting/orderBy.test.d.ts +2 -0
  279. package/dist/tests/cases/integration/graphQlRequests/query/sorting/orderBy.test.d.ts.map +1 -0
  280. package/dist/tests/cases/integration/graphQlRequests/query/sorting/orderBy.test.js +67 -0
  281. package/dist/tests/cases/integration/graphQlRequests/query/sorting/orderBy.test.js.map +1 -0
  282. package/dist/tests/cases/integration/graphQlRequests/update/acl/aclUpdate.test.js +6 -18
  283. package/dist/tests/cases/integration/graphQlRequests/update/acl/aclUpdate.test.js.map +1 -1
  284. package/dist/tests/cases/integration/graphQlRequests/update/additionalFilter.test.js +3 -4
  285. package/dist/tests/cases/integration/graphQlRequests/update/additionalFilter.test.js.map +1 -1
  286. package/dist/tests/cases/integration/graphQlRequests/update/basic/columnUpdate.test.js +3 -8
  287. package/dist/tests/cases/integration/graphQlRequests/update/basic/columnUpdate.test.js.map +1 -1
  288. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/delete.test.js +49 -11
  289. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/delete.test.js.map +1 -1
  290. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/update.test.js +3 -9
  291. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/update.test.js.map +1 -1
  292. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/upsert.test.js +3 -9
  293. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/upsert.test.js.map +1 -1
  294. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/delete.test.js +49 -11
  295. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/delete.test.js.map +1 -1
  296. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/update.test.js +3 -9
  297. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/update.test.js.map +1 -1
  298. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/upsert.test.js +3 -9
  299. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/upsert.test.js.map +1 -1
  300. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/connect.test.js +3 -10
  301. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/connect.test.js.map +1 -1
  302. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/create.test.js +3 -10
  303. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/create.test.js.map +1 -1
  304. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/delete.test.js +83 -49
  305. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/delete.test.js.map +1 -1
  306. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/disconnect.test.js +3 -9
  307. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/disconnect.test.js.map +1 -1
  308. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/update.test.js +3 -9
  309. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/update.test.js.map +1 -1
  310. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/upsert.test.js +6 -18
  311. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/upsert.test.js.map +1 -1
  312. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/combination.test.js +10 -11
  313. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/combination.test.js.map +1 -1
  314. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/connect.test.js +3 -11
  315. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/connect.test.js.map +1 -1
  316. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/delete.test.js +49 -11
  317. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/delete.test.js.map +1 -1
  318. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/disconnect.test.js +3 -8
  319. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/disconnect.test.js.map +1 -1
  320. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/update.test.js +3 -6
  321. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/update.test.js.map +1 -1
  322. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/upsert.test.js +3 -6
  323. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/upsert.test.js.map +1 -1
  324. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/connect.test.js +97 -29
  325. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/connect.test.js.map +1 -1
  326. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/create.test.js +14 -15
  327. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/create.test.js.map +1 -1
  328. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/delete.test.js +101 -11
  329. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/delete.test.js.map +1 -1
  330. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/disconnect.test.js +11 -12
  331. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/disconnect.test.js.map +1 -1
  332. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/schema.d.ts +1 -0
  333. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/schema.d.ts.map +1 -1
  334. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/schema.js +9 -1
  335. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/schema.js.map +1 -1
  336. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/update.test.js +3 -6
  337. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/update.test.js.map +1 -1
  338. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/upsert.test.js +11 -13
  339. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/upsert.test.js.map +1 -1
  340. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/connect.test.js +85 -29
  341. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/connect.test.js.map +1 -1
  342. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/connectOrCreate.test.d.ts +2 -0
  343. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/connectOrCreate.test.d.ts.map +1 -0
  344. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/connectOrCreate.test.js +53 -0
  345. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/connectOrCreate.test.js.map +1 -0
  346. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/create.test.js +75 -9
  347. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/create.test.js.map +1 -1
  348. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/delete.test.js +66 -25
  349. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/delete.test.js.map +1 -1
  350. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/disconnect.test.js +3 -10
  351. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/disconnect.test.js.map +1 -1
  352. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/schema.d.ts +1 -0
  353. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/schema.d.ts.map +1 -1
  354. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/schema.js +10 -2
  355. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/schema.js.map +1 -1
  356. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/update.test.js +3 -9
  357. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/update.test.js.map +1 -1
  358. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/upsert.test.js +6 -19
  359. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/upsert.test.js.map +1 -1
  360. package/dist/tests/cases/integration/graphQlRequests/update/queryPortal.test.js +6 -8
  361. package/dist/tests/cases/integration/graphQlRequests/update/queryPortal.test.js.map +1 -1
  362. package/dist/tests/cases/integration/graphQlRequests/update/transaction.test.js +9 -24
  363. package/dist/tests/cases/integration/graphQlRequests/update/transaction.test.js.map +1 -1
  364. package/dist/tests/cases/integration/graphQlRequests/upsert/basicUpsert.test.js +3 -7
  365. package/dist/tests/cases/integration/graphQlRequests/upsert/basicUpsert.test.js.map +1 -1
  366. package/dist/tests/cases/integration/graphQlSchema/schema-acl-allowed.gql +14 -1
  367. package/dist/tests/cases/integration/graphQlSchema/schema-acl-restricted-create.gql +5 -5
  368. package/dist/tests/cases/integration/graphQlSchema/schema-acl-restricted-delete.gql +14 -1
  369. package/dist/tests/cases/integration/graphQlSchema/schema-acl-restricted-update.gql +12 -0
  370. package/dist/tests/cases/integration/graphQlSchema/schema-basic.gql +40 -2
  371. package/dist/tests/cases/integration/graphQlSchema/schema-bug-66.gql +30 -3
  372. package/dist/tests/cases/integration/graphQlSchema/schema-custom-primary.gql +40 -2
  373. package/dist/tests/cases/integration/graphQlSchema/schema-has-many-reduction.gql +14 -1
  374. package/dist/tests/cases/integration/graphQlSchema/schema-new-builder.gql +40 -2
  375. package/dist/tests/cases/unit/orderbyHelper.test.js +11 -0
  376. package/dist/tests/cases/unit/orderbyHelper.test.js.map +1 -1
  377. package/dist/tests/src/test.d.ts +1 -1
  378. package/dist/tests/src/test.d.ts.map +1 -1
  379. package/dist/tests/src/test.js +34 -32
  380. package/dist/tests/src/test.js.map +1 -1
  381. package/dist/tests/src/testGraphql.js +1 -1
  382. package/dist/tests/src/testGraphql.js.map +1 -1
  383. package/dist/tests/tsconfig.tsbuildinfo +1 -1
  384. package/package.json +11 -11
  385. package/src/ExecutionContainer.ts +204 -0
  386. package/src/index.ts +24 -1
  387. package/src/input-validation/preValidation/CreateInputPreValidationProcessor.ts +6 -0
  388. package/src/input-validation/preValidation/UpdateInputPreValidationProcessor.ts +6 -0
  389. package/src/inputProcessing/CreateInputProcessor.ts +8 -11
  390. package/src/inputProcessing/CreateInputVisitor.ts +11 -2
  391. package/src/inputProcessing/UniqueWhereExpander.ts +5 -1
  392. package/src/inputProcessing/UpdateInputProcessor.ts +18 -18
  393. package/src/inputProcessing/UpdateInputVisitor.ts +6 -2
  394. package/src/mapper/ColumnValue.ts +2 -2
  395. package/src/mapper/DataManipulationBuilder.ts +12 -0
  396. package/src/mapper/EventManager.ts +158 -0
  397. package/src/mapper/JunctionTableManager.ts +50 -32
  398. package/src/mapper/Mapper.ts +101 -55
  399. package/src/mapper/MapperFactory.ts +67 -0
  400. package/src/mapper/Result.ts +3 -2
  401. package/src/mapper/delete/DeleteExecutor.ts +262 -95
  402. package/src/mapper/delete/DeleteState.ts +80 -0
  403. package/src/mapper/delete/DeletedEntitiesStorage.ts +6 -0
  404. package/src/mapper/delete/helpers.ts +68 -0
  405. package/src/mapper/index.ts +3 -1
  406. package/src/mapper/insert/InsertBuilder.ts +35 -14
  407. package/src/mapper/insert/InsertBuilderFactory.ts +3 -1
  408. package/src/mapper/insert/Inserter.ts +9 -13
  409. package/src/mapper/insert/SqlCreateInputProcessor.ts +61 -139
  410. package/src/mapper/relations/ManyHasManyInputProcessor.ts +108 -0
  411. package/src/mapper/relations/ManyHasOneInputProcessor.ts +158 -0
  412. package/src/mapper/relations/OneHasManyInputProcessor.ts +101 -0
  413. package/src/mapper/relations/OneHasOneInverseCreateInputProcessor.ts +99 -0
  414. package/src/mapper/relations/OneHasOneInverseUpdateInputProcessor.ts +164 -0
  415. package/src/mapper/relations/OneHasOneOwningCreateInputProcessor.ts +92 -0
  416. package/src/mapper/relations/OneHasOneOwningUpdateInputProcessor.ts +253 -0
  417. package/src/mapper/select/JoinBuilder.ts +4 -4
  418. package/src/mapper/select/OrderByHelper.ts +2 -1
  419. package/src/mapper/select/RelationFetcher.ts +2 -2
  420. package/src/mapper/select/WhereBuilder.ts +11 -11
  421. package/src/mapper/update/SqlUpdateInputProcessor.ts +55 -484
  422. package/src/mapper/update/UpdateBuilder.ts +52 -22
  423. package/src/mapper/update/UpdateBuilderFactory.ts +11 -2
  424. package/src/mapper/update/Updater.ts +16 -30
  425. package/src/resolvers/GraphQlQueryAstFactory.ts +1 -2
  426. package/src/resolvers/MutationResolver.ts +13 -14
  427. package/src/resolvers/ReadResolver.ts +5 -9
  428. package/src/resolvers/ValidationResolver.ts +2 -4
  429. package/src/resolvers/index.ts +0 -1
  430. package/src/schema/CustomTypesProvider.ts +2 -27
  431. package/src/schema/GraphQlSchemaBuilderFactory.ts +7 -4
  432. package/src/schema/MutationProvider.ts +4 -4
  433. package/src/schema/QueryProvider.ts +3 -3
  434. package/src/schema/mutations/ConnectOrCreateRelationInputProvider.ts +54 -0
  435. package/src/schema/mutations/CreateEntityInputFieldVisitor.ts +2 -6
  436. package/src/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.ts +3 -1
  437. package/src/schema/mutations/CreateEntityRelationInputFieldVisitor.ts +20 -15
  438. package/src/schema/mutations/EntityInputProvider.ts +0 -3
  439. package/src/schema/mutations/UpdateEntityInputFieldVisitor.ts +2 -6
  440. package/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.ts +3 -1
  441. package/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.ts +52 -57
  442. package/src/tsconfig.json +7 -21
  443. package/src/types.ts +2 -3
  444. package/tests/cases/bugs/bug-update-by-nested-unique.test.ts +3 -5
  445. package/tests/cases/integration/graphQlDb/insert/insertSequence.test.ts +2 -2
  446. package/tests/cases/integration/graphQlDb/update/bug-freeze-connect-missing-one.test.ts +1 -1
  447. package/tests/cases/integration/graphQlDb/update/deferedConstraints.test.ts +9 -9
  448. package/tests/cases/integration/graphQlDb/update/failedDelete.test.ts +3 -3
  449. package/tests/cases/integration/graphQlDb/update/invalidInput.test.ts +2 -2
  450. package/tests/cases/integration/graphQlDb/update/nullChecksNotNull.test.ts +8 -8
  451. package/tests/cases/integration/graphQlDb/update/nullChecksNullable.test.ts +7 -10
  452. package/tests/cases/integration/graphQlDb/update/uniqueConstraint.test.ts +2 -2
  453. package/tests/cases/integration/graphQlRequests/delete/aclDelete.test.ts +15 -34
  454. package/tests/cases/integration/graphQlRequests/delete/additionalDeleteFilter.test.ts +12 -31
  455. package/tests/cases/integration/graphQlRequests/delete/cascadeDelete.test.ts +68 -46
  456. package/tests/cases/integration/graphQlRequests/delete/deleteById.test.ts +11 -12
  457. package/tests/cases/integration/graphQlRequests/delete/orphanRemoval.test.ts +30 -19
  458. package/tests/cases/integration/graphQlRequests/delete/restrictOnDelete.test.ts +102 -0
  459. package/tests/cases/integration/graphQlRequests/delete/setNullOnDelete.test.ts +63 -23
  460. package/tests/cases/integration/graphQlRequests/insert/manyHasOne/connectOrCreate.test.ts +106 -0
  461. package/tests/cases/integration/graphQlRequests/insert/oneHasMany/{insertRelationConnect.test.ts → connect.test.ts} +3 -3
  462. package/tests/cases/integration/graphQlRequests/query/sorting/orderBy.test.ts +67 -0
  463. package/tests/cases/integration/graphQlRequests/update/acl/aclUpdate.test.ts +6 -18
  464. package/tests/cases/integration/graphQlRequests/update/additionalFilter.test.ts +3 -4
  465. package/tests/cases/integration/graphQlRequests/update/basic/columnUpdate.test.ts +3 -8
  466. package/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/delete.test.ts +51 -12
  467. package/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/update.test.ts +3 -9
  468. package/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/upsert.test.ts +3 -9
  469. package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/delete.test.ts +51 -12
  470. package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/update.test.ts +3 -9
  471. package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/upsert.test.ts +3 -9
  472. package/tests/cases/integration/graphQlRequests/update/manyHasOne/connect.test.ts +3 -10
  473. package/tests/cases/integration/graphQlRequests/update/manyHasOne/create.test.ts +3 -10
  474. package/tests/cases/integration/graphQlRequests/update/manyHasOne/delete.test.ts +86 -50
  475. package/tests/cases/integration/graphQlRequests/update/manyHasOne/disconnect.test.ts +3 -9
  476. package/tests/cases/integration/graphQlRequests/update/manyHasOne/update.test.ts +3 -9
  477. package/tests/cases/integration/graphQlRequests/update/manyHasOne/upsert.test.ts +6 -18
  478. package/tests/cases/integration/graphQlRequests/update/oneHasMany/combination.test.ts +11 -12
  479. package/tests/cases/integration/graphQlRequests/update/oneHasMany/connect.test.ts +3 -11
  480. package/tests/cases/integration/graphQlRequests/update/oneHasMany/delete.test.ts +51 -12
  481. package/tests/cases/integration/graphQlRequests/update/oneHasMany/disconnect.test.ts +3 -8
  482. package/tests/cases/integration/graphQlRequests/update/oneHasMany/update.test.ts +3 -6
  483. package/tests/cases/integration/graphQlRequests/update/oneHasMany/upsert.test.ts +3 -6
  484. package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/connect.test.ts +101 -31
  485. package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/create.test.ts +14 -15
  486. package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/delete.test.ts +106 -12
  487. package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/disconnect.test.ts +11 -12
  488. package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/schema.ts +13 -0
  489. package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/update.test.ts +3 -6
  490. package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/upsert.test.ts +11 -13
  491. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/connect.test.ts +89 -30
  492. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/connectOrCreate.test.ts +51 -0
  493. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/create.test.ts +77 -11
  494. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/delete.test.ts +69 -26
  495. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/disconnect.test.ts +3 -10
  496. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/schema.ts +14 -1
  497. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/update.test.ts +3 -9
  498. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/upsert.test.ts +6 -19
  499. package/tests/cases/integration/graphQlRequests/update/queryPortal.test.ts +6 -8
  500. package/tests/cases/integration/graphQlRequests/update/transaction.test.ts +9 -24
  501. package/tests/cases/integration/graphQlRequests/upsert/basicUpsert.test.ts +3 -7
  502. package/tests/cases/integration/graphQlSchema/schema-acl-allowed.gql +14 -1
  503. package/tests/cases/integration/graphQlSchema/schema-acl-restricted-create.gql +5 -5
  504. package/tests/cases/integration/graphQlSchema/schema-acl-restricted-delete.gql +14 -1
  505. package/tests/cases/integration/graphQlSchema/schema-acl-restricted-update.gql +12 -0
  506. package/tests/cases/integration/graphQlSchema/schema-basic.gql +40 -2
  507. package/tests/cases/integration/graphQlSchema/schema-bug-66.gql +30 -3
  508. package/tests/cases/integration/graphQlSchema/schema-custom-primary.gql +40 -2
  509. package/tests/cases/integration/graphQlSchema/schema-has-many-reduction.gql +14 -1
  510. package/tests/cases/integration/graphQlSchema/schema-new-builder.gql +40 -2
  511. package/tests/cases/unit/orderbyHelper.test.ts +13 -0
  512. package/tests/src/test.ts +38 -40
  513. package/tests/src/testGraphql.ts +1 -1
  514. package/tests/tsconfig.json +3 -9
  515. package/dist/src/mapper/MapperContainer.d.ts +0 -18
  516. package/dist/src/mapper/MapperContainer.d.ts.map +0 -1
  517. package/dist/src/mapper/MapperContainer.js +0 -55
  518. package/dist/src/mapper/MapperContainer.js.map +0 -1
  519. package/dist/src/resolvers/ExecutionContainerFactory.d.ts +0 -24
  520. package/dist/src/resolvers/ExecutionContainerFactory.d.ts.map +0 -1
  521. package/dist/src/resolvers/ExecutionContainerFactory.js +0 -45
  522. package/dist/src/resolvers/ExecutionContainerFactory.js.map +0 -1
  523. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyInverse/insertRelationCreate.test.d.ts +0 -2
  524. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyInverse/insertRelationCreate.test.d.ts.map +0 -1
  525. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyInverse/insertRelationCreate.test.js.map +0 -1
  526. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyOwning/insertRelationCreate.test.d.ts +0 -2
  527. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyOwning/insertRelationCreate.test.d.ts.map +0 -1
  528. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyOwning/insertRelationCreate.test.js.map +0 -1
  529. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasOne/insertRelationCreate.test.d.ts +0 -2
  530. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasOne/insertRelationCreate.test.d.ts.map +0 -1
  531. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasOne/insertRelationCreate.test.js.map +0 -1
  532. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/insertRelationConnect.test.d.ts +0 -2
  533. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/insertRelationConnect.test.d.ts.map +0 -1
  534. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/insertRelationConnect.test.js.map +0 -1
  535. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/insertRelationCreate.test.d.ts +0 -2
  536. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/insertRelationCreate.test.d.ts.map +0 -1
  537. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/insertRelationCreate.test.js.map +0 -1
  538. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneInverse/insertRelationCreate.test.d.ts +0 -2
  539. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneInverse/insertRelationCreate.test.d.ts.map +0 -1
  540. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneInverse/insertRelationCreate.test.js.map +0 -1
  541. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/insertRelationCreate.test.d.ts +0 -2
  542. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/insertRelationCreate.test.d.ts.map +0 -1
  543. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/insertRelationCreate.test.js.map +0 -1
  544. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/insertRelationEmpty.test.d.ts +0 -2
  545. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/insertRelationEmpty.test.d.ts.map +0 -1
  546. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/insertRelationEmpty.test.js.map +0 -1
  547. package/src/mapper/MapperContainer.ts +0 -138
  548. package/src/resolvers/ExecutionContainerFactory.ts +0 -74
  549. /package/tests/cases/integration/graphQlRequests/insert/manyHasManyInverse/{insertRelationCreate.test.ts → create.test.ts} +0 -0
  550. /package/tests/cases/integration/graphQlRequests/insert/manyHasManyOwning/{insertRelationCreate.test.ts → create.test.ts} +0 -0
  551. /package/tests/cases/integration/graphQlRequests/insert/manyHasOne/{insertRelationCreate.test.ts → create.test.ts} +0 -0
  552. /package/tests/cases/integration/graphQlRequests/insert/oneHasMany/{insertRelationCreate.test.ts → create.test.ts} +0 -0
  553. /package/tests/cases/integration/graphQlRequests/insert/oneHasOneInverse/{insertRelationCreate.test.ts → create.test.ts} +0 -0
  554. /package/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/{insertRelationCreate.test.ts → create.test.ts} +0 -0
  555. /package/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/{insertRelationEmpty.test.ts → empty.test.ts} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@contember/engine-content-api",
3
- "version": "1.2.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.2.1",
14
- "@contember/dic": "^1.2.1",
15
- "@contember/logger": "^1.2.1",
16
- "@contember/graphql-utils": "^1.2.1",
17
- "@contember/schema": "^1.2.1",
18
- "@contember/schema-definition": "^1.2.1",
19
- "@contember/schema-utils": "^1.2.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.2.1",
26
- "@contember/engine-api-tester": "^1.2.1",
27
- "@contember/schema-definition": "^1.2.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'
@@ -17,29 +17,35 @@ export class CreateInputPreValidationProcessor implements CreateInputProcessor<R
17
17
  manyHasManyInverse: CreateInputProcessor.HasManyRelationProcessor<Model.ManyHasManyInverseContext, Result> = {
18
18
  connect: NoResult,
19
19
  create: context => this.validateCreate(context),
20
+ connectOrCreate: context => this.validateCreate({ ...context, input: context.input.create }),
20
21
  }
21
22
 
22
23
  manyHasManyOwning: CreateInputProcessor.HasManyRelationProcessor<Model.ManyHasManyOwningContext, Result> = {
23
24
  connect: NoResult,
24
25
  create: context => this.validateCreate(context),
26
+ connectOrCreate: context => this.validateCreate({ ...context, input: context.input.create }),
25
27
  }
26
28
 
27
29
  manyHasOne: CreateInputProcessor.HasOneRelationProcessor<Model.ManyHasOneContext, Result> = {
28
30
  connect: NoResult,
29
31
  create: context => this.validateCreate(context),
32
+ connectOrCreate: context => this.validateCreate({ ...context, input: context.input.create }),
30
33
  }
31
34
 
32
35
  oneHasMany: CreateInputProcessor.HasManyRelationProcessor<Model.OneHasManyContext, Result> = {
33
36
  connect: NoResult,
34
37
  create: context => this.validateCreate(context),
38
+ connectOrCreate: context => this.validateCreate({ ...context, input: context.input.create }),
35
39
  }
36
40
  oneHasOneInverse: CreateInputProcessor.HasOneRelationProcessor<Model.OneHasOneInverseContext, Result> = {
37
41
  connect: NoResult,
38
42
  create: context => this.validateCreate(context),
43
+ connectOrCreate: context => this.validateCreate({ ...context, input: context.input.create }),
39
44
  }
40
45
  oneHasOneOwning: CreateInputProcessor.HasOneRelationProcessor<Model.OneHasOneOwningContext, Result> = {
41
46
  connect: NoResult,
42
47
  create: context => this.validateCreate(context),
48
+ connectOrCreate: context => this.validateCreate({ ...context, input: context.input.create }),
43
49
  }
44
50
 
45
51
  async validateCreate(context: {
@@ -23,6 +23,7 @@ export class UpdateInputPreValidationProcessor implements UpdateInputProcessor<R
23
23
  create: ctx => this.processCreate(ctx),
24
24
  update: ctx => this.processUpdate({ ...ctx, input: ctx.input.data }),
25
25
  upsert: ctx => this.processUpsert(ctx),
26
+ connectOrCreate: ctx => this.processCreate({ ...ctx, input: ctx.input.create }),
26
27
  connect: NoResult,
27
28
  disconnect: NoResult,
28
29
  ['delete']: NoResult,
@@ -31,6 +32,7 @@ export class UpdateInputPreValidationProcessor implements UpdateInputProcessor<R
31
32
  create: ctx => this.processCreate(ctx),
32
33
  update: ctx => this.processUpdate({ ...ctx, input: ctx.input.data }),
33
34
  upsert: ctx => this.processUpsert(ctx),
35
+ connectOrCreate: ctx => this.processCreate({ ...ctx, input: ctx.input.create }),
34
36
  connect: NoResult,
35
37
  disconnect: NoResult,
36
38
  ['delete']: NoResult,
@@ -39,6 +41,7 @@ export class UpdateInputPreValidationProcessor implements UpdateInputProcessor<R
39
41
  create: ctx => this.processCreate(ctx),
40
42
  update: ctx => this.processUpdate(ctx),
41
43
  upsert: ctx => this.processUpsert(ctx),
44
+ connectOrCreate: ctx => this.processCreate({ ...ctx, input: ctx.input.create }),
42
45
  connect: NoResult,
43
46
  disconnect: NoResult,
44
47
  ['delete']: NoResult,
@@ -47,6 +50,7 @@ export class UpdateInputPreValidationProcessor implements UpdateInputProcessor<R
47
50
  create: ctx => this.processCreate(ctx),
48
51
  update: ctx => this.processUpdate({ ...ctx, input: ctx.input.data }),
49
52
  upsert: ctx => this.processUpsert(ctx),
53
+ connectOrCreate: ctx => this.processCreate({ ...ctx, input: ctx.input.create }),
50
54
  connect: NoResult,
51
55
  disconnect: NoResult,
52
56
  ['delete']: NoResult,
@@ -55,6 +59,7 @@ export class UpdateInputPreValidationProcessor implements UpdateInputProcessor<R
55
59
  create: ctx => this.processCreate(ctx),
56
60
  update: ctx => this.processUpdate(ctx),
57
61
  upsert: ctx => this.processUpsert(ctx),
62
+ connectOrCreate: ctx => this.processCreate({ ...ctx, input: ctx.input.create }),
58
63
  connect: NoResult,
59
64
  disconnect: NoResult,
60
65
  ['delete']: NoResult,
@@ -64,6 +69,7 @@ export class UpdateInputPreValidationProcessor implements UpdateInputProcessor<R
64
69
  create: ctx => this.processCreate(ctx),
65
70
  update: ctx => this.processUpdate(ctx),
66
71
  upsert: ctx => this.processUpsert(ctx),
72
+ connectOrCreate: ctx => this.processCreate({ ...ctx, input: ctx.input.create }),
67
73
  connect: NoResult,
68
74
  disconnect: NoResult,
69
75
  ['delete']: NoResult,
@@ -1,7 +1,7 @@
1
1
  import { Input, Model } from '@contember/schema'
2
2
 
3
3
  interface CreateInputProcessor<Result = void> {
4
- column(context: CreateInputProcessor.ContextWithInput<Model.ColumnContext, Input.ColumnValue | undefined>): Promise<Result>
4
+ column(context: Model.ColumnContext & { input: Input.ColumnValue | undefined }): Promise<Result>
5
5
 
6
6
  manyHasManyInverse: CreateInputProcessor.HasManyRelationProcessor<Model.ManyHasManyInverseContext, Result>
7
7
  manyHasManyOwning: CreateInputProcessor.HasManyRelationProcessor<Model.ManyHasManyOwningContext, Result>
@@ -14,21 +14,18 @@ interface CreateInputProcessor<Result = void> {
14
14
  }
15
15
 
16
16
  namespace CreateInputProcessor {
17
- export type ContextWithInput<Context, Input> = Context & { input: Input }
18
17
 
19
18
  export interface HasOneRelationProcessor<Context, Result> {
20
- nothing?: (context: ContextWithInput<Context, undefined>) => Promise<Result>
21
- connect: (context: ContextWithInput<Context, Input.UniqueWhere>) => Promise<Result>
22
- create: (context: ContextWithInput<Context, Input.CreateDataInput>) => Promise<Result>
19
+ nothing?: (context: Context & { input: undefined }) => Promise<Result>
20
+ connect: (context: Context & { input: Input.UniqueWhere }) => Promise<Result>
21
+ create: (context: Context & { input: Input.CreateDataInput }) => Promise<Result>
22
+ connectOrCreate: (context: Context & { input: Input.ConnectOrCreateInput }) => Promise<Result>
23
23
  }
24
24
 
25
25
  export interface HasManyRelationProcessor<Context, Result> {
26
- connect: (
27
- context: ContextWithInput<Context, Input.UniqueWhere> & { index: number; alias?: string },
28
- ) => Promise<Result>
29
- create: (
30
- context: ContextWithInput<Context, Input.CreateDataInput> & { index: number; alias?: string },
31
- ) => Promise<Result>
26
+ connect: (context: Context & { input: Input.UniqueWhere } & { index: number; alias?: string }) => Promise<Result>
27
+ create: (context: Context & { input: Input.CreateDataInput } & { index: number; alias?: string }) => Promise<Result>
28
+ connectOrCreate: (context: Context & { input: Input.ConnectOrCreateInput } & { index: number; alias?: string }) => Promise<Result>
32
29
  }
33
30
  }
34
31
 
@@ -89,6 +89,9 @@ export class CreateInputVisitor<Result> implements
89
89
  if (isIt<Input.CreateRelationInput>(input, 'create')) {
90
90
  return processor.create({ ...context, input: input.create })
91
91
  }
92
+ if (isIt<Input.ConnectOrCreateRelationInput>(input, 'connectOrCreate')) {
93
+ return processor.connectOrCreate({ ...context, input: input.connectOrCreate })
94
+ }
92
95
  throw new ImplementationException()
93
96
  }
94
97
 
@@ -113,6 +116,9 @@ export class CreateInputVisitor<Result> implements
113
116
  if (isIt<Input.CreateRelationInput>(element, 'create')) {
114
117
  result = processor.create({ ...context, input: element.create, index: i++, alias })
115
118
  }
119
+ if (isIt<Input.ConnectOrCreateRelationInput>(element, 'connectOrCreate')) {
120
+ result = processor.connectOrCreate({ ...context, input: element.connectOrCreate, index: i++, alias })
121
+ }
116
122
  if (result !== undefined) {
117
123
  results.push(await result)
118
124
  }
@@ -122,9 +128,12 @@ export class CreateInputVisitor<Result> implements
122
128
 
123
129
  private verifyOperations(input: object) {
124
130
  const keys = Object.keys(input).filter(it => it !== 'alias')
125
- if (keys.length !== 1 || !['create', 'connect'].includes(keys[0])) {
131
+ const ops = Object.values(Input.CreateRelationOperation) as string[]
132
+ if (keys.length !== 1 || !ops.includes(keys[0])) {
126
133
  const found = keys.length === 0 ? 'none' : keys.join(', ')
127
- throw new UserError(`Expected either "create" or "connect". ${found} found.`)
134
+ throw new UserError(
135
+ `Expected exactly one of: ${ops.join(', ')}. ${found} found.`,
136
+ )
128
137
  }
129
138
  }
130
139
  }
@@ -2,13 +2,17 @@ import { Input, Model, Writable } from '@contember/schema'
2
2
  import { getTargetEntity } from '@contember/schema-utils'
3
3
  import { UserError } from '../exception'
4
4
  import { getFieldsForUniqueWhere } from '../utils'
5
+ import { CheckedPrimary } from '../mapper/CheckedPrimary'
5
6
 
6
7
  type ExtendedUniqueWhere = Input.UniqueWhere<Input.PrimaryValue[]>
7
8
 
8
9
  export class UniqueWhereExpander {
9
10
  constructor(private readonly schema: Model.Schema) {}
10
11
 
11
- expand(entity: Model.Entity, where: ExtendedUniqueWhere, path: string[] = []): Input.Where {
12
+ expand(entity: Model.Entity, where: ExtendedUniqueWhere | CheckedPrimary, path: string[] = []): Input.Where {
13
+ if (where instanceof CheckedPrimary) {
14
+ return { [entity.primary]: { eq: where.primaryValue } }
15
+ }
12
16
  const isFilled = (field: string) => where[field] !== undefined && where[field] !== null
13
17
 
14
18
  const isUnique = (() => {
@@ -1,7 +1,8 @@
1
1
  import { Input, Model } from '@contember/schema'
2
2
 
3
+
3
4
  interface UpdateInputProcessor<Result = void> {
4
- column(context: UpdateInputProcessor.ContextWithInput<Model.ColumnContext, Input.ColumnValue | undefined>): Promise<Result>
5
+ column(context: Model.ColumnContext & { input: Input.ColumnValue | undefined }): Promise<Result>
5
6
 
6
7
  manyHasManyInverse: UpdateInputProcessor.HasManyRelationInputProcessor<Model.ManyHasManyInverseContext, Result>
7
8
 
@@ -17,7 +18,6 @@ interface UpdateInputProcessor<Result = void> {
17
18
  }
18
19
 
19
20
  namespace UpdateInputProcessor {
20
- export type ContextWithInput<Context, Input> = Context & { input: Input }
21
21
  export type UpsertInput = { update: Input.UpdateDataInput; create: Input.CreateDataInput }
22
22
  export type UpdateManyInput = { where: Input.UniqueWhere; data: Input.UpdateDataInput }
23
23
  export type UpsertManyInput = {
@@ -27,35 +27,35 @@ namespace UpdateInputProcessor {
27
27
  }
28
28
 
29
29
  export interface HasOneRelationInputProcessor<Context, Result> {
30
- connect(context: ContextWithInput<Context, Input.UniqueWhere>): Promise<Result>
30
+ connect(context: Context & { input: Input.UniqueWhere }): Promise<Result>
31
+
32
+ create(context: Context & { input: Input.CreateDataInput }): Promise<Result>
31
33
 
32
- create(context: ContextWithInput<Context, Input.CreateDataInput>): Promise<Result>
34
+ connectOrCreate(context: Context & { input: Input.ConnectOrCreateInput }): Promise<Result>
33
35
 
34
- update(context: ContextWithInput<Context, Input.UpdateDataInput>): Promise<Result>
36
+ update(context: Context & { input: Input.UpdateDataInput }): Promise<Result>
35
37
 
36
- upsert(context: ContextWithInput<Context, UpsertInput>): Promise<Result>
38
+ upsert(context: Context & { input: UpdateInputProcessor.UpsertInput }): Promise<Result>
37
39
 
38
- disconnect(context: ContextWithInput<Context, undefined>): Promise<Result>
40
+ disconnect(context: Context & { input: undefined }): Promise<Result>
39
41
 
40
- delete(context: ContextWithInput<Context, undefined>): Promise<Result>
42
+ delete(context: Context & { input: undefined }): Promise<Result>
41
43
  }
42
44
 
43
45
  export interface HasManyRelationInputProcessor<Context, Result> {
44
- connect(context: ContextWithInput<Context, Input.UniqueWhere> & { index: number; alias?: string }): Promise<Result>
46
+ connect(context: Context & { input: Input.UniqueWhere; index: number; alias?: string }): Promise<Result>
47
+
48
+ create(context: Context & { input: Input.CreateDataInput; index: number; alias?: string }): Promise<Result>
45
49
 
46
- create(
47
- context: ContextWithInput<Context, Input.CreateDataInput> & { index: number; alias?: string },
48
- ): Promise<Result>
50
+ connectOrCreate(context: Context & { input: Input.ConnectOrCreateInput; index: number; alias?: string }): Promise<Result>
49
51
 
50
- update(context: ContextWithInput<Context, UpdateManyInput> & { index: number; alias?: string }): Promise<Result>
52
+ update(context: Context & { input: UpdateInputProcessor.UpdateManyInput; index: number; alias?: string }): Promise<Result>
51
53
 
52
- upsert(context: ContextWithInput<Context, UpsertManyInput> & { index: number; alias?: string }): Promise<Result>
54
+ upsert(context: Context & { input: UpdateInputProcessor.UpsertManyInput; index: number; alias?: string }): Promise<Result>
53
55
 
54
- disconnect(
55
- context: ContextWithInput<Context, Input.UniqueWhere> & { index: number; alias?: string },
56
- ): Promise<Result>
56
+ disconnect(context: Context & { input: Input.UniqueWhere; index: number; alias?: string }): Promise<Result>
57
57
 
58
- delete(context: ContextWithInput<Context, Input.UniqueWhere> & { index: number; alias?: string }): Promise<Result>
58
+ delete(context: Context & { input: Input.UniqueWhere; index: number; alias?: string }): Promise<Result>
59
59
  }
60
60
  }
61
61
 
@@ -85,6 +85,9 @@ export class UpdateInputVisitor<Result> implements
85
85
  if (isIt<Input.CreateRelationInput>(input, 'create')) {
86
86
  return processor.create({ ...context, input: input.create })
87
87
  }
88
+ if (isIt<Input.ConnectOrCreateRelationInput>(input, 'connectOrCreate')) {
89
+ return processor.connectOrCreate({ ...context, input: input.connectOrCreate })
90
+ }
88
91
  if (isIt<Input.DeleteRelationInput>(input, 'delete')) {
89
92
  return processor.delete({ ...context, input: undefined })
90
93
  }
@@ -153,10 +156,11 @@ export class UpdateInputVisitor<Result> implements
153
156
 
154
157
  private verifyOperations(input: object) {
155
158
  const keys = Object.keys(input).filter(it => it !== 'alias')
156
- if (keys.length !== 1 || !['create', 'connect', 'delete', 'disconnect', 'update', 'upsert'].includes(keys[0])) {
159
+ const ops = Object.values(Input.UpdateRelationOperation) as string[]
160
+ if (keys.length !== 1 || !ops.includes(keys[0])) {
157
161
  const found = keys.length === 0 ? 'none' : keys.join(', ')
158
162
  throw new UserError(
159
- `Expected exactly one of: "create", "connect", "delete", "disconnect", "update" or "upsert". ${found} found.`,
163
+ `Expected exactly one of: ${ops.join(', ')}. ${found} found.`,
160
164
  )
161
165
  }
162
166
  }
@@ -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,12 @@
1
+ import { Value } from '@contember/schema'
2
+
3
+ export interface DataManipulationBuilder {
4
+ addFieldValue(
5
+ fieldName: string,
6
+ value: Value.GenericValueLike<Value.AtomicValue<AbortDataManipulation | undefined>>,
7
+ ): Promise<Value.AtomicValue<AbortDataManipulation | undefined>>
8
+ }
9
+
10
+
11
+ export const AbortDataManipulation = Symbol('AbortDataManipulation')
12
+ export type AbortDataManipulation = typeof AbortDataManipulation