@contember/engine-content-api 1.2.1 → 1.3.0-alpha.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (608) hide show
  1. package/dist/src/ExecutionContainer.d.ts +144 -0
  2. package/dist/src/ExecutionContainer.d.ts.map +1 -0
  3. package/dist/src/ExecutionContainer.js +85 -0
  4. package/dist/src/ExecutionContainer.js.map +1 -0
  5. package/dist/src/acl/PermissionFactory.d.ts +5 -4
  6. package/dist/src/acl/PermissionFactory.d.ts.map +1 -1
  7. package/dist/src/acl/PermissionFactory.js +10 -13
  8. package/dist/src/acl/PermissionFactory.js.map +1 -1
  9. package/dist/src/acl/index.d.ts +0 -1
  10. package/dist/src/acl/index.d.ts.map +1 -1
  11. package/dist/src/acl/index.js +0 -1
  12. package/dist/src/acl/index.js.map +1 -1
  13. package/dist/src/index.d.ts +2 -1
  14. package/dist/src/index.d.ts.map +1 -1
  15. package/dist/src/index.js +18 -2
  16. package/dist/src/index.js.map +1 -1
  17. package/dist/src/input-validation/preValidation/CreateInputPreValidationProcessor.d.ts.map +1 -1
  18. package/dist/src/input-validation/preValidation/CreateInputPreValidationProcessor.js +6 -0
  19. package/dist/src/input-validation/preValidation/CreateInputPreValidationProcessor.js.map +1 -1
  20. package/dist/src/input-validation/preValidation/UpdateInputPreValidationProcessor.d.ts.map +1 -1
  21. package/dist/src/input-validation/preValidation/UpdateInputPreValidationProcessor.js +6 -0
  22. package/dist/src/input-validation/preValidation/UpdateInputPreValidationProcessor.js.map +1 -1
  23. package/dist/src/inputProcessing/CreateInputProcessor.d.ts +27 -9
  24. package/dist/src/inputProcessing/CreateInputProcessor.d.ts.map +1 -1
  25. package/dist/src/inputProcessing/CreateInputVisitor.d.ts.map +1 -1
  26. package/dist/src/inputProcessing/CreateInputVisitor.js +10 -2
  27. package/dist/src/inputProcessing/CreateInputVisitor.js.map +1 -1
  28. package/dist/src/inputProcessing/UniqueWhereExpander.d.ts +2 -1
  29. package/dist/src/inputProcessing/UniqueWhereExpander.d.ts.map +1 -1
  30. package/dist/src/inputProcessing/UniqueWhereExpander.js +4 -0
  31. package/dist/src/inputProcessing/UniqueWhereExpander.js.map +1 -1
  32. package/dist/src/inputProcessing/UpdateInputProcessor.d.ts +41 -16
  33. package/dist/src/inputProcessing/UpdateInputProcessor.d.ts.map +1 -1
  34. package/dist/src/inputProcessing/UpdateInputVisitor.d.ts.map +1 -1
  35. package/dist/src/inputProcessing/UpdateInputVisitor.js +7 -2
  36. package/dist/src/inputProcessing/UpdateInputVisitor.js.map +1 -1
  37. package/dist/src/mapper/ColumnValue.d.ts +2 -2
  38. package/dist/src/mapper/ColumnValue.d.ts.map +1 -1
  39. package/dist/src/mapper/DataManipulationBuilder.d.ts +7 -0
  40. package/dist/src/mapper/DataManipulationBuilder.d.ts.map +1 -0
  41. package/dist/src/mapper/DataManipulationBuilder.js +5 -0
  42. package/dist/src/mapper/DataManipulationBuilder.js.map +1 -0
  43. package/dist/src/mapper/ErrorUtils.d.ts +3 -2
  44. package/dist/src/mapper/ErrorUtils.d.ts.map +1 -1
  45. package/dist/src/mapper/ErrorUtils.js +55 -35
  46. package/dist/src/mapper/ErrorUtils.js.map +1 -1
  47. package/dist/src/mapper/EventManager.d.ts +86 -0
  48. package/dist/src/mapper/EventManager.d.ts.map +1 -0
  49. package/dist/src/mapper/EventManager.js +118 -0
  50. package/dist/src/mapper/EventManager.js.map +1 -0
  51. package/dist/src/mapper/JunctionTableManager.d.ts +12 -11
  52. package/dist/src/mapper/JunctionTableManager.d.ts.map +1 -1
  53. package/dist/src/mapper/JunctionTableManager.js +20 -8
  54. package/dist/src/mapper/JunctionTableManager.js.map +1 -1
  55. package/dist/src/mapper/Mapper.d.ts +21 -19
  56. package/dist/src/mapper/Mapper.d.ts.map +1 -1
  57. package/dist/src/mapper/Mapper.js +78 -25
  58. package/dist/src/mapper/Mapper.js.map +1 -1
  59. package/dist/src/mapper/MapperFactory.d.ts +34 -0
  60. package/dist/src/mapper/MapperFactory.d.ts.map +1 -0
  61. package/dist/src/mapper/MapperFactory.js +41 -0
  62. package/dist/src/mapper/MapperFactory.js.map +1 -0
  63. package/dist/src/mapper/Result.d.ts +7 -5
  64. package/dist/src/mapper/Result.d.ts.map +1 -1
  65. package/dist/src/mapper/Result.js +4 -3
  66. package/dist/src/mapper/Result.js.map +1 -1
  67. package/dist/src/mapper/delete/DeleteExecutor.d.ts +12 -5
  68. package/dist/src/mapper/delete/DeleteExecutor.d.ts.map +1 -1
  69. package/dist/src/mapper/delete/DeleteExecutor.js +183 -77
  70. package/dist/src/mapper/delete/DeleteExecutor.js.map +1 -1
  71. package/dist/src/mapper/delete/DeleteState.d.ts +22 -0
  72. package/dist/src/mapper/delete/DeleteState.d.ts.map +1 -0
  73. package/dist/src/mapper/delete/DeleteState.js +68 -0
  74. package/dist/src/mapper/delete/DeleteState.js.map +1 -0
  75. package/dist/src/mapper/delete/DeletedEntitiesStorage.d.ts +1 -0
  76. package/dist/src/mapper/delete/DeletedEntitiesStorage.d.ts.map +1 -1
  77. package/dist/src/mapper/delete/DeletedEntitiesStorage.js +5 -0
  78. package/dist/src/mapper/delete/DeletedEntitiesStorage.js.map +1 -1
  79. package/dist/src/mapper/delete/helpers.d.ts +11 -0
  80. package/dist/src/mapper/delete/helpers.d.ts.map +1 -0
  81. package/dist/src/mapper/delete/helpers.js +49 -0
  82. package/dist/src/mapper/delete/helpers.js.map +1 -0
  83. package/dist/src/mapper/index.d.ts +3 -1
  84. package/dist/src/mapper/index.d.ts.map +1 -1
  85. package/dist/src/mapper/index.js +3 -1
  86. package/dist/src/mapper/index.js.map +1 -1
  87. package/dist/src/mapper/insert/InsertBuilder.d.ts +10 -7
  88. package/dist/src/mapper/insert/InsertBuilder.d.ts.map +1 -1
  89. package/dist/src/mapper/insert/InsertBuilder.js +24 -11
  90. package/dist/src/mapper/insert/InsertBuilder.js.map +1 -1
  91. package/dist/src/mapper/insert/InsertBuilderFactory.d.ts +3 -1
  92. package/dist/src/mapper/insert/InsertBuilderFactory.d.ts.map +1 -1
  93. package/dist/src/mapper/insert/InsertBuilderFactory.js +3 -2
  94. package/dist/src/mapper/insert/InsertBuilderFactory.js.map +1 -1
  95. package/dist/src/mapper/insert/Inserter.d.ts +5 -7
  96. package/dist/src/mapper/insert/Inserter.d.ts.map +1 -1
  97. package/dist/src/mapper/insert/Inserter.js +12 -14
  98. package/dist/src/mapper/insert/Inserter.js.map +1 -1
  99. package/dist/src/mapper/insert/SqlCreateInputProcessor.d.ts +5 -0
  100. package/dist/src/mapper/insert/SqlCreateInputProcessor.d.ts.map +1 -1
  101. package/dist/src/mapper/insert/SqlCreateInputProcessor.js +54 -120
  102. package/dist/src/mapper/insert/SqlCreateInputProcessor.js.map +1 -1
  103. package/dist/src/mapper/relations/ManyHasManyInputProcessor.d.ts +32 -0
  104. package/dist/src/mapper/relations/ManyHasManyInputProcessor.d.ts.map +1 -0
  105. package/dist/src/mapper/relations/ManyHasManyInputProcessor.js +77 -0
  106. package/dist/src/mapper/relations/ManyHasManyInputProcessor.js.map +1 -0
  107. package/dist/src/mapper/relations/ManyHasOneInputProcessor.d.ts +32 -0
  108. package/dist/src/mapper/relations/ManyHasOneInputProcessor.d.ts.map +1 -0
  109. package/dist/src/mapper/relations/ManyHasOneInputProcessor.js +108 -0
  110. package/dist/src/mapper/relations/ManyHasOneInputProcessor.js.map +1 -0
  111. package/dist/src/mapper/relations/OneHasManyInputProcessor.d.ts +29 -0
  112. package/dist/src/mapper/relations/OneHasManyInputProcessor.d.ts.map +1 -0
  113. package/dist/src/mapper/relations/OneHasManyInputProcessor.js +61 -0
  114. package/dist/src/mapper/relations/OneHasManyInputProcessor.js.map +1 -0
  115. package/dist/src/mapper/relations/OneHasOneInverseCreateInputProcessor.d.ts +21 -0
  116. package/dist/src/mapper/relations/OneHasOneInverseCreateInputProcessor.d.ts.map +1 -0
  117. package/dist/src/mapper/relations/OneHasOneInverseCreateInputProcessor.js +74 -0
  118. package/dist/src/mapper/relations/OneHasOneInverseCreateInputProcessor.js.map +1 -0
  119. package/dist/src/mapper/relations/OneHasOneInverseUpdateInputProcessor.d.ts +32 -0
  120. package/dist/src/mapper/relations/OneHasOneInverseUpdateInputProcessor.d.ts.map +1 -0
  121. package/dist/src/mapper/relations/OneHasOneInverseUpdateInputProcessor.js +125 -0
  122. package/dist/src/mapper/relations/OneHasOneInverseUpdateInputProcessor.js.map +1 -0
  123. package/dist/src/mapper/relations/OneHasOneOwningCreateInputProcessor.d.ts +21 -0
  124. package/dist/src/mapper/relations/OneHasOneOwningCreateInputProcessor.d.ts.map +1 -0
  125. package/dist/src/mapper/relations/OneHasOneOwningCreateInputProcessor.js +72 -0
  126. package/dist/src/mapper/relations/OneHasOneOwningCreateInputProcessor.js.map +1 -0
  127. package/dist/src/mapper/relations/OneHasOneOwningUpdateInputProcessor.d.ts +37 -0
  128. package/dist/src/mapper/relations/OneHasOneOwningUpdateInputProcessor.d.ts.map +1 -0
  129. package/dist/src/mapper/relations/OneHasOneOwningUpdateInputProcessor.js +193 -0
  130. package/dist/src/mapper/relations/OneHasOneOwningUpdateInputProcessor.js.map +1 -0
  131. package/dist/src/mapper/select/JoinBuilder.d.ts +1 -1
  132. package/dist/src/mapper/select/JoinBuilder.d.ts.map +1 -1
  133. package/dist/src/mapper/select/JoinBuilder.js.map +1 -1
  134. package/dist/src/mapper/select/OrderByHelper.d.ts +1 -1
  135. package/dist/src/mapper/select/OrderByHelper.d.ts.map +1 -1
  136. package/dist/src/mapper/select/OrderByHelper.js +3 -1
  137. package/dist/src/mapper/select/OrderByHelper.js.map +1 -1
  138. package/dist/src/mapper/select/RelationFetcher.js +2 -2
  139. package/dist/src/mapper/select/RelationFetcher.js.map +1 -1
  140. package/dist/src/mapper/select/WhereBuilder.d.ts +2 -2
  141. package/dist/src/mapper/select/WhereBuilder.d.ts.map +1 -1
  142. package/dist/src/mapper/select/WhereBuilder.js.map +1 -1
  143. package/dist/src/mapper/update/SqlUpdateInputProcessor.d.ts +5 -0
  144. package/dist/src/mapper/update/SqlUpdateInputProcessor.d.ts.map +1 -1
  145. package/dist/src/mapper/update/SqlUpdateInputProcessor.js +52 -389
  146. package/dist/src/mapper/update/SqlUpdateInputProcessor.js.map +1 -1
  147. package/dist/src/mapper/update/UpdateBuilder.d.ts +10 -7
  148. package/dist/src/mapper/update/UpdateBuilder.d.ts.map +1 -1
  149. package/dist/src/mapper/update/UpdateBuilder.js +43 -19
  150. package/dist/src/mapper/update/UpdateBuilder.js.map +1 -1
  151. package/dist/src/mapper/update/UpdateBuilderFactory.d.ts +4 -2
  152. package/dist/src/mapper/update/UpdateBuilderFactory.d.ts.map +1 -1
  153. package/dist/src/mapper/update/UpdateBuilderFactory.js +4 -3
  154. package/dist/src/mapper/update/UpdateBuilderFactory.js.map +1 -1
  155. package/dist/src/mapper/update/Updater.d.ts +4 -5
  156. package/dist/src/mapper/update/Updater.d.ts.map +1 -1
  157. package/dist/src/mapper/update/Updater.js +19 -24
  158. package/dist/src/mapper/update/Updater.js.map +1 -1
  159. package/dist/src/resolvers/GraphQlQueryAstFactory.d.ts +1 -3
  160. package/dist/src/resolvers/GraphQlQueryAstFactory.d.ts.map +1 -1
  161. package/dist/src/resolvers/GraphQlQueryAstFactory.js +1 -4
  162. package/dist/src/resolvers/GraphQlQueryAstFactory.js.map +1 -1
  163. package/dist/src/resolvers/MutationResolver.d.ts +3 -4
  164. package/dist/src/resolvers/MutationResolver.d.ts.map +1 -1
  165. package/dist/src/resolvers/MutationResolver.js +12 -13
  166. package/dist/src/resolvers/MutationResolver.js.map +1 -1
  167. package/dist/src/resolvers/ReadResolver.d.ts +1 -3
  168. package/dist/src/resolvers/ReadResolver.d.ts.map +1 -1
  169. package/dist/src/resolvers/ReadResolver.js +6 -10
  170. package/dist/src/resolvers/ReadResolver.js.map +1 -1
  171. package/dist/src/resolvers/ValidationResolver.d.ts +1 -3
  172. package/dist/src/resolvers/ValidationResolver.d.ts.map +1 -1
  173. package/dist/src/resolvers/ValidationResolver.js +3 -4
  174. package/dist/src/resolvers/ValidationResolver.js.map +1 -1
  175. package/dist/src/resolvers/index.d.ts +0 -1
  176. package/dist/src/resolvers/index.d.ts.map +1 -1
  177. package/dist/src/resolvers/index.js +0 -1
  178. package/dist/src/resolvers/index.js.map +1 -1
  179. package/dist/src/schema/CustomTypesProvider.d.ts.map +1 -1
  180. package/dist/src/schema/CustomTypesProvider.js +1 -23
  181. package/dist/src/schema/CustomTypesProvider.js.map +1 -1
  182. package/dist/src/schema/GraphQlSchemaBuilderFactory.d.ts +3 -0
  183. package/dist/src/schema/GraphQlSchemaBuilderFactory.d.ts.map +1 -1
  184. package/dist/src/schema/GraphQlSchemaBuilderFactory.js +4 -2
  185. package/dist/src/schema/GraphQlSchemaBuilderFactory.js.map +1 -1
  186. package/dist/src/schema/MutationProvider.js +4 -4
  187. package/dist/src/schema/MutationProvider.js.map +1 -1
  188. package/dist/src/schema/QueryProvider.js +3 -3
  189. package/dist/src/schema/QueryProvider.js.map +1 -1
  190. package/dist/src/schema/mutations/ConnectOrCreateRelationInputProvider.d.ts +15 -0
  191. package/dist/src/schema/mutations/ConnectOrCreateRelationInputProvider.d.ts.map +1 -0
  192. package/dist/src/schema/mutations/ConnectOrCreateRelationInputProvider.js +43 -0
  193. package/dist/src/schema/mutations/ConnectOrCreateRelationInputProvider.js.map +1 -0
  194. package/dist/src/schema/mutations/CreateEntityInputFieldVisitor.d.ts.map +1 -1
  195. package/dist/src/schema/mutations/CreateEntityInputFieldVisitor.js +2 -6
  196. package/dist/src/schema/mutations/CreateEntityInputFieldVisitor.js.map +1 -1
  197. package/dist/src/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.d.ts.map +1 -1
  198. package/dist/src/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.js +3 -0
  199. package/dist/src/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.js.map +1 -1
  200. package/dist/src/schema/mutations/CreateEntityRelationInputFieldVisitor.d.ts +3 -1
  201. package/dist/src/schema/mutations/CreateEntityRelationInputFieldVisitor.d.ts.map +1 -1
  202. package/dist/src/schema/mutations/CreateEntityRelationInputFieldVisitor.js +15 -8
  203. package/dist/src/schema/mutations/CreateEntityRelationInputFieldVisitor.js.map +1 -1
  204. package/dist/src/schema/mutations/EntityInputProvider.d.ts.map +1 -1
  205. package/dist/src/schema/mutations/EntityInputProvider.js +0 -3
  206. package/dist/src/schema/mutations/EntityInputProvider.js.map +1 -1
  207. package/dist/src/schema/mutations/UpdateEntityInputFieldVisitor.d.ts.map +1 -1
  208. package/dist/src/schema/mutations/UpdateEntityInputFieldVisitor.js +2 -6
  209. package/dist/src/schema/mutations/UpdateEntityInputFieldVisitor.js.map +1 -1
  210. package/dist/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.d.ts.map +1 -1
  211. package/dist/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.js +3 -0
  212. package/dist/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.js.map +1 -1
  213. package/dist/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.d.ts +3 -1
  214. package/dist/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.d.ts.map +1 -1
  215. package/dist/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.js +11 -22
  216. package/dist/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.js.map +1 -1
  217. package/dist/src/tsconfig.tsbuildinfo +1 -1
  218. package/dist/src/types.d.ts +3 -4
  219. package/dist/src/types.d.ts.map +1 -1
  220. package/dist/src/utils/index.d.ts +0 -1
  221. package/dist/src/utils/index.d.ts.map +1 -1
  222. package/dist/src/utils/index.js +0 -1
  223. package/dist/src/utils/index.js.map +1 -1
  224. package/dist/src/utils/uniqueWhereFields.js +1 -1
  225. package/dist/src/utils/uniqueWhereFields.js.map +1 -1
  226. package/dist/tests/cases/bugs/bug-update-by-nested-unique.test.js +3 -5
  227. package/dist/tests/cases/bugs/bug-update-by-nested-unique.test.js.map +1 -1
  228. package/dist/tests/cases/integration/graphQlDb/insert/insertSequence.test.js +2 -2
  229. package/dist/tests/cases/integration/graphQlDb/insert/insertSequence.test.js.map +1 -1
  230. package/dist/tests/cases/integration/graphQlDb/update/bug-freeze-connect-missing-one.test.js +1 -1
  231. package/dist/tests/cases/integration/graphQlDb/update/bug-freeze-connect-missing-one.test.js.map +1 -1
  232. package/dist/tests/cases/integration/graphQlDb/update/deferedConstraints.test.js +45 -45
  233. package/dist/tests/cases/integration/graphQlDb/update/deferedConstraints.test.js.map +1 -1
  234. package/dist/tests/cases/integration/graphQlDb/update/failedDelete.test.js +5 -5
  235. package/dist/tests/cases/integration/graphQlDb/update/failedDelete.test.js.map +1 -1
  236. package/dist/tests/cases/integration/graphQlDb/update/invalidInput.test.js +2 -2
  237. package/dist/tests/cases/integration/graphQlDb/update/invalidInput.test.js.map +1 -1
  238. package/dist/tests/cases/integration/graphQlDb/update/nullChecksNotNull.test.js +8 -8
  239. package/dist/tests/cases/integration/graphQlDb/update/nullChecksNotNull.test.js.map +1 -1
  240. package/dist/tests/cases/integration/graphQlDb/update/nullChecksNullable.test.js +7 -10
  241. package/dist/tests/cases/integration/graphQlDb/update/nullChecksNullable.test.js.map +1 -1
  242. package/dist/tests/cases/integration/graphQlDb/update/uniqueConstraint.test.js +2 -2
  243. package/dist/tests/cases/integration/graphQlDb/update/uniqueConstraint.test.js.map +1 -1
  244. package/dist/tests/cases/integration/graphQlRequests/delete/aclDelete.test.js +13 -32
  245. package/dist/tests/cases/integration/graphQlRequests/delete/aclDelete.test.js.map +1 -1
  246. package/dist/tests/cases/integration/graphQlRequests/delete/additionalDeleteFilter.test.js +11 -30
  247. package/dist/tests/cases/integration/graphQlRequests/delete/additionalDeleteFilter.test.js.map +1 -1
  248. package/dist/tests/cases/integration/graphQlRequests/delete/cascadeDelete.test.js +62 -45
  249. package/dist/tests/cases/integration/graphQlRequests/delete/cascadeDelete.test.js.map +1 -1
  250. package/dist/tests/cases/integration/graphQlRequests/delete/deleteById.test.js +10 -11
  251. package/dist/tests/cases/integration/graphQlRequests/delete/deleteById.test.js.map +1 -1
  252. package/dist/tests/cases/integration/graphQlRequests/delete/orphanRemoval.test.js +29 -18
  253. package/dist/tests/cases/integration/graphQlRequests/delete/orphanRemoval.test.js.map +1 -1
  254. package/dist/tests/cases/integration/graphQlRequests/delete/restrictOnDelete.test.d.ts +2 -0
  255. package/dist/tests/cases/integration/graphQlRequests/delete/restrictOnDelete.test.d.ts.map +1 -0
  256. package/dist/tests/cases/integration/graphQlRequests/delete/restrictOnDelete.test.js +97 -0
  257. package/dist/tests/cases/integration/graphQlRequests/delete/restrictOnDelete.test.js.map +1 -0
  258. package/dist/tests/cases/integration/graphQlRequests/delete/setNullOnDelete.test.js +58 -22
  259. package/dist/tests/cases/integration/graphQlRequests/delete/setNullOnDelete.test.js.map +1 -1
  260. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyInverse/create.test.d.ts +2 -0
  261. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyInverse/create.test.d.ts.map +1 -0
  262. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyInverse/{insertRelationCreate.test.js → create.test.js} +1 -1
  263. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyInverse/create.test.js.map +1 -0
  264. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyOwning/create.test.d.ts +2 -0
  265. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyOwning/create.test.d.ts.map +1 -0
  266. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyOwning/{insertRelationCreate.test.js → create.test.js} +1 -1
  267. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyOwning/create.test.js.map +1 -0
  268. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasOne/connectOrCreate.test.d.ts +2 -0
  269. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasOne/connectOrCreate.test.d.ts.map +1 -0
  270. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasOne/connectOrCreate.test.js +99 -0
  271. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasOne/connectOrCreate.test.js.map +1 -0
  272. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasOne/create.test.d.ts +2 -0
  273. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasOne/create.test.d.ts.map +1 -0
  274. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasOne/{insertRelationCreate.test.js → create.test.js} +1 -1
  275. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasOne/create.test.js.map +1 -0
  276. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/connect.test.d.ts +2 -0
  277. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/connect.test.d.ts.map +1 -0
  278. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/{insertRelationConnect.test.js → connect.test.js} +4 -4
  279. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/connect.test.js.map +1 -0
  280. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/create.test.d.ts +2 -0
  281. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/create.test.d.ts.map +1 -0
  282. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/{insertRelationCreate.test.js → create.test.js} +1 -1
  283. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/create.test.js.map +1 -0
  284. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneInverse/create.test.d.ts +2 -0
  285. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneInverse/create.test.d.ts.map +1 -0
  286. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneInverse/{insertRelationCreate.test.js → create.test.js} +1 -1
  287. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneInverse/create.test.js.map +1 -0
  288. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/create.test.d.ts +2 -0
  289. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/create.test.d.ts.map +1 -0
  290. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/{insertRelationCreate.test.js → create.test.js} +1 -1
  291. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/create.test.js.map +1 -0
  292. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/empty.test.d.ts +2 -0
  293. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/empty.test.d.ts.map +1 -0
  294. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/{insertRelationEmpty.test.js → empty.test.js} +1 -1
  295. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/empty.test.js.map +1 -0
  296. package/dist/tests/cases/integration/graphQlRequests/query/acl/isNullAcl.test.d.ts +2 -0
  297. package/dist/tests/cases/integration/graphQlRequests/query/acl/isNullAcl.test.d.ts.map +1 -0
  298. package/dist/tests/cases/integration/graphQlRequests/query/acl/isNullAcl.test.js +91 -0
  299. package/dist/tests/cases/integration/graphQlRequests/query/acl/isNullAcl.test.js.map +1 -0
  300. package/dist/tests/cases/integration/graphQlRequests/query/acl/rowPredicateSubset.test.js +1 -1
  301. package/dist/tests/cases/integration/graphQlRequests/query/acl/rowPredicateSubset.test.js.map +1 -1
  302. package/dist/tests/cases/integration/graphQlRequests/query/sorting/orderBy.test.d.ts +2 -0
  303. package/dist/tests/cases/integration/graphQlRequests/query/sorting/orderBy.test.d.ts.map +1 -0
  304. package/dist/tests/cases/integration/graphQlRequests/query/sorting/orderBy.test.js +67 -0
  305. package/dist/tests/cases/integration/graphQlRequests/query/sorting/orderBy.test.js.map +1 -0
  306. package/dist/tests/cases/integration/graphQlRequests/update/acl/aclUpdate.test.js +6 -18
  307. package/dist/tests/cases/integration/graphQlRequests/update/acl/aclUpdate.test.js.map +1 -1
  308. package/dist/tests/cases/integration/graphQlRequests/update/additionalFilter.test.js +3 -4
  309. package/dist/tests/cases/integration/graphQlRequests/update/additionalFilter.test.js.map +1 -1
  310. package/dist/tests/cases/integration/graphQlRequests/update/basic/columnUpdate.test.js +3 -8
  311. package/dist/tests/cases/integration/graphQlRequests/update/basic/columnUpdate.test.js.map +1 -1
  312. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/delete.test.js +49 -11
  313. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/delete.test.js.map +1 -1
  314. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/update.test.js +3 -9
  315. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/update.test.js.map +1 -1
  316. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/upsert.test.js +3 -9
  317. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/upsert.test.js.map +1 -1
  318. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/delete.test.js +49 -11
  319. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/delete.test.js.map +1 -1
  320. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/update.test.js +3 -9
  321. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/update.test.js.map +1 -1
  322. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/upsert.test.js +3 -9
  323. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/upsert.test.js.map +1 -1
  324. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/connect.test.js +3 -10
  325. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/connect.test.js.map +1 -1
  326. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/create.test.js +3 -10
  327. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/create.test.js.map +1 -1
  328. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/delete.test.js +83 -49
  329. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/delete.test.js.map +1 -1
  330. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/disconnect.test.js +3 -9
  331. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/disconnect.test.js.map +1 -1
  332. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/update.test.js +3 -9
  333. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/update.test.js.map +1 -1
  334. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/upsert.test.js +6 -18
  335. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/upsert.test.js.map +1 -1
  336. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/combination.test.js +10 -11
  337. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/combination.test.js.map +1 -1
  338. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/connect.test.js +3 -11
  339. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/connect.test.js.map +1 -1
  340. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/delete.test.js +49 -11
  341. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/delete.test.js.map +1 -1
  342. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/disconnect.test.js +3 -8
  343. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/disconnect.test.js.map +1 -1
  344. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/update.test.js +3 -6
  345. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/update.test.js.map +1 -1
  346. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/upsert.test.js +3 -6
  347. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/upsert.test.js.map +1 -1
  348. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/connect.test.js +97 -29
  349. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/connect.test.js.map +1 -1
  350. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/create.test.js +14 -15
  351. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/create.test.js.map +1 -1
  352. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/delete.test.js +101 -11
  353. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/delete.test.js.map +1 -1
  354. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/disconnect.test.js +11 -12
  355. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/disconnect.test.js.map +1 -1
  356. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/schema.d.ts +1 -0
  357. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/schema.d.ts.map +1 -1
  358. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/schema.js +9 -1
  359. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/schema.js.map +1 -1
  360. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/update.test.js +3 -6
  361. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/update.test.js.map +1 -1
  362. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/upsert.test.js +11 -13
  363. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/upsert.test.js.map +1 -1
  364. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/connect.test.js +85 -29
  365. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/connect.test.js.map +1 -1
  366. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/connectOrCreate.test.d.ts +2 -0
  367. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/connectOrCreate.test.d.ts.map +1 -0
  368. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/connectOrCreate.test.js +53 -0
  369. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/connectOrCreate.test.js.map +1 -0
  370. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/create.test.js +75 -9
  371. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/create.test.js.map +1 -1
  372. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/delete.test.js +66 -25
  373. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/delete.test.js.map +1 -1
  374. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/disconnect.test.js +3 -10
  375. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/disconnect.test.js.map +1 -1
  376. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/schema.d.ts +1 -0
  377. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/schema.d.ts.map +1 -1
  378. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/schema.js +10 -2
  379. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/schema.js.map +1 -1
  380. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/update.test.js +3 -9
  381. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/update.test.js.map +1 -1
  382. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/upsert.test.js +6 -19
  383. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/upsert.test.js.map +1 -1
  384. package/dist/tests/cases/integration/graphQlRequests/update/queryPortal.test.js +6 -8
  385. package/dist/tests/cases/integration/graphQlRequests/update/queryPortal.test.js.map +1 -1
  386. package/dist/tests/cases/integration/graphQlRequests/update/transaction.test.js +9 -24
  387. package/dist/tests/cases/integration/graphQlRequests/update/transaction.test.js.map +1 -1
  388. package/dist/tests/cases/integration/graphQlRequests/upsert/basicUpsert.test.js +3 -7
  389. package/dist/tests/cases/integration/graphQlRequests/upsert/basicUpsert.test.js.map +1 -1
  390. package/dist/tests/cases/unit/orderbyHelper.test.js +13 -2
  391. package/dist/tests/cases/unit/orderbyHelper.test.js.map +1 -1
  392. package/dist/tests/cases/unit/permissionMerger.test.js +8 -3
  393. package/dist/tests/cases/unit/permissionMerger.test.js.map +1 -1
  394. package/dist/tests/cases/unit/predicatesInjector.test.js +1 -1
  395. package/dist/tests/cases/unit/predicatesInjector.test.js.map +1 -1
  396. package/dist/tests/src/test.d.ts +1 -1
  397. package/dist/tests/src/test.d.ts.map +1 -1
  398. package/dist/tests/src/test.js +35 -32
  399. package/dist/tests/src/test.js.map +1 -1
  400. package/dist/tests/src/testGraphql.js +1 -1
  401. package/dist/tests/src/testGraphql.js.map +1 -1
  402. package/dist/tests/tsconfig.tsbuildinfo +1 -1
  403. package/package.json +16 -13
  404. package/src/ExecutionContainer.ts +208 -0
  405. package/src/acl/PermissionFactory.ts +15 -13
  406. package/src/acl/index.ts +0 -1
  407. package/src/index.ts +24 -1
  408. package/src/input-validation/preValidation/CreateInputPreValidationProcessor.ts +6 -0
  409. package/src/input-validation/preValidation/UpdateInputPreValidationProcessor.ts +6 -0
  410. package/src/inputProcessing/CreateInputProcessor.ts +8 -11
  411. package/src/inputProcessing/CreateInputVisitor.ts +11 -2
  412. package/src/inputProcessing/UniqueWhereExpander.ts +5 -1
  413. package/src/inputProcessing/UpdateInputProcessor.ts +18 -18
  414. package/src/inputProcessing/UpdateInputVisitor.ts +6 -2
  415. package/src/mapper/ColumnValue.ts +2 -2
  416. package/src/mapper/DataManipulationBuilder.ts +12 -0
  417. package/src/mapper/ErrorUtils.ts +66 -41
  418. package/src/mapper/EventManager.ts +158 -0
  419. package/src/mapper/JunctionTableManager.ts +50 -32
  420. package/src/mapper/Mapper.ts +109 -60
  421. package/src/mapper/MapperFactory.ts +69 -0
  422. package/src/mapper/Result.ts +6 -3
  423. package/src/mapper/delete/DeleteExecutor.ts +262 -95
  424. package/src/mapper/delete/DeleteState.ts +80 -0
  425. package/src/mapper/delete/DeletedEntitiesStorage.ts +6 -0
  426. package/src/mapper/delete/helpers.ts +68 -0
  427. package/src/mapper/index.ts +3 -1
  428. package/src/mapper/insert/InsertBuilder.ts +35 -14
  429. package/src/mapper/insert/InsertBuilderFactory.ts +3 -1
  430. package/src/mapper/insert/Inserter.ts +13 -17
  431. package/src/mapper/insert/SqlCreateInputProcessor.ts +61 -139
  432. package/src/mapper/relations/ManyHasManyInputProcessor.ts +108 -0
  433. package/src/mapper/relations/ManyHasOneInputProcessor.ts +158 -0
  434. package/src/mapper/relations/OneHasManyInputProcessor.ts +101 -0
  435. package/src/mapper/relations/OneHasOneInverseCreateInputProcessor.ts +99 -0
  436. package/src/mapper/relations/OneHasOneInverseUpdateInputProcessor.ts +164 -0
  437. package/src/mapper/relations/OneHasOneOwningCreateInputProcessor.ts +92 -0
  438. package/src/mapper/relations/OneHasOneOwningUpdateInputProcessor.ts +253 -0
  439. package/src/mapper/select/JoinBuilder.ts +4 -4
  440. package/src/mapper/select/OrderByHelper.ts +2 -1
  441. package/src/mapper/select/RelationFetcher.ts +2 -2
  442. package/src/mapper/select/WhereBuilder.ts +11 -11
  443. package/src/mapper/update/SqlUpdateInputProcessor.ts +55 -484
  444. package/src/mapper/update/UpdateBuilder.ts +52 -22
  445. package/src/mapper/update/UpdateBuilderFactory.ts +11 -2
  446. package/src/mapper/update/Updater.ts +18 -31
  447. package/src/resolvers/GraphQlQueryAstFactory.ts +1 -2
  448. package/src/resolvers/MutationResolver.ts +16 -15
  449. package/src/resolvers/ReadResolver.ts +5 -9
  450. package/src/resolvers/ValidationResolver.ts +2 -4
  451. package/src/resolvers/index.ts +0 -1
  452. package/src/schema/CustomTypesProvider.ts +2 -27
  453. package/src/schema/GraphQlSchemaBuilderFactory.ts +7 -4
  454. package/src/schema/MutationProvider.ts +4 -4
  455. package/src/schema/QueryProvider.ts +3 -3
  456. package/src/schema/mutations/ConnectOrCreateRelationInputProvider.ts +54 -0
  457. package/src/schema/mutations/CreateEntityInputFieldVisitor.ts +2 -6
  458. package/src/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.ts +3 -1
  459. package/src/schema/mutations/CreateEntityRelationInputFieldVisitor.ts +20 -15
  460. package/src/schema/mutations/EntityInputProvider.ts +0 -3
  461. package/src/schema/mutations/UpdateEntityInputFieldVisitor.ts +2 -6
  462. package/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.ts +3 -1
  463. package/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.ts +52 -57
  464. package/src/tsconfig.json +7 -21
  465. package/src/types.ts +3 -4
  466. package/src/utils/index.ts +0 -1
  467. package/src/utils/uniqueWhereFields.ts +1 -1
  468. package/tests/cases/bugs/bug-update-by-nested-unique.test.ts +3 -5
  469. package/tests/cases/integration/graphQlDb/insert/insertSequence.test.ts +2 -2
  470. package/tests/cases/integration/graphQlDb/update/bug-freeze-connect-missing-one.test.ts +1 -1
  471. package/tests/cases/integration/graphQlDb/update/deferedConstraints.test.ts +9 -9
  472. package/tests/cases/integration/graphQlDb/update/failedDelete.test.ts +3 -3
  473. package/tests/cases/integration/graphQlDb/update/invalidInput.test.ts +2 -2
  474. package/tests/cases/integration/graphQlDb/update/nullChecksNotNull.test.ts +8 -8
  475. package/tests/cases/integration/graphQlDb/update/nullChecksNullable.test.ts +7 -10
  476. package/tests/cases/integration/graphQlDb/update/uniqueConstraint.test.ts +2 -2
  477. package/tests/cases/integration/graphQlRequests/delete/aclDelete.test.ts +15 -34
  478. package/tests/cases/integration/graphQlRequests/delete/additionalDeleteFilter.test.ts +12 -31
  479. package/tests/cases/integration/graphQlRequests/delete/cascadeDelete.test.ts +68 -46
  480. package/tests/cases/integration/graphQlRequests/delete/deleteById.test.ts +11 -12
  481. package/tests/cases/integration/graphQlRequests/delete/orphanRemoval.test.ts +30 -19
  482. package/tests/cases/integration/graphQlRequests/delete/restrictOnDelete.test.ts +102 -0
  483. package/tests/cases/integration/graphQlRequests/delete/setNullOnDelete.test.ts +63 -23
  484. package/tests/cases/integration/graphQlRequests/insert/manyHasOne/connectOrCreate.test.ts +106 -0
  485. package/tests/cases/integration/graphQlRequests/insert/oneHasMany/{insertRelationConnect.test.ts → connect.test.ts} +3 -3
  486. package/tests/cases/integration/graphQlRequests/query/acl/isNullAcl.test.ts +77 -0
  487. package/tests/cases/integration/graphQlRequests/query/acl/rowPredicateSubset.test.ts +1 -1
  488. package/tests/cases/integration/graphQlRequests/query/sorting/orderBy.test.ts +67 -0
  489. package/tests/cases/integration/graphQlRequests/update/acl/aclUpdate.test.ts +6 -18
  490. package/tests/cases/integration/graphQlRequests/update/additionalFilter.test.ts +3 -4
  491. package/tests/cases/integration/graphQlRequests/update/basic/columnUpdate.test.ts +3 -8
  492. package/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/delete.test.ts +51 -12
  493. package/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/update.test.ts +3 -9
  494. package/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/upsert.test.ts +3 -9
  495. package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/delete.test.ts +51 -12
  496. package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/update.test.ts +3 -9
  497. package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/upsert.test.ts +3 -9
  498. package/tests/cases/integration/graphQlRequests/update/manyHasOne/connect.test.ts +3 -10
  499. package/tests/cases/integration/graphQlRequests/update/manyHasOne/create.test.ts +3 -10
  500. package/tests/cases/integration/graphQlRequests/update/manyHasOne/delete.test.ts +86 -50
  501. package/tests/cases/integration/graphQlRequests/update/manyHasOne/disconnect.test.ts +3 -9
  502. package/tests/cases/integration/graphQlRequests/update/manyHasOne/update.test.ts +3 -9
  503. package/tests/cases/integration/graphQlRequests/update/manyHasOne/upsert.test.ts +6 -18
  504. package/tests/cases/integration/graphQlRequests/update/oneHasMany/combination.test.ts +11 -12
  505. package/tests/cases/integration/graphQlRequests/update/oneHasMany/connect.test.ts +3 -11
  506. package/tests/cases/integration/graphQlRequests/update/oneHasMany/delete.test.ts +51 -12
  507. package/tests/cases/integration/graphQlRequests/update/oneHasMany/disconnect.test.ts +3 -8
  508. package/tests/cases/integration/graphQlRequests/update/oneHasMany/update.test.ts +3 -6
  509. package/tests/cases/integration/graphQlRequests/update/oneHasMany/upsert.test.ts +3 -6
  510. package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/connect.test.ts +101 -31
  511. package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/create.test.ts +14 -15
  512. package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/delete.test.ts +106 -12
  513. package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/disconnect.test.ts +11 -12
  514. package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/schema.ts +13 -0
  515. package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/update.test.ts +3 -6
  516. package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/upsert.test.ts +11 -13
  517. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/connect.test.ts +89 -30
  518. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/connectOrCreate.test.ts +51 -0
  519. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/create.test.ts +77 -11
  520. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/delete.test.ts +69 -26
  521. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/disconnect.test.ts +3 -10
  522. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/schema.ts +14 -1
  523. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/update.test.ts +3 -9
  524. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/upsert.test.ts +6 -19
  525. package/tests/cases/integration/graphQlRequests/update/queryPortal.test.ts +6 -8
  526. package/tests/cases/integration/graphQlRequests/update/transaction.test.ts +9 -24
  527. package/tests/cases/integration/graphQlRequests/upsert/basicUpsert.test.ts +3 -7
  528. package/tests/cases/integration/graphQlSchema/schema-acl-allowed.gql +14 -1
  529. package/tests/cases/integration/graphQlSchema/schema-acl-restricted-create.gql +5 -5
  530. package/tests/cases/integration/graphQlSchema/schema-acl-restricted-delete.gql +14 -1
  531. package/tests/cases/integration/graphQlSchema/schema-acl-restricted-update.gql +12 -0
  532. package/tests/cases/integration/graphQlSchema/schema-basic.gql +40 -2
  533. package/tests/cases/integration/graphQlSchema/schema-bug-66.gql +30 -3
  534. package/tests/cases/integration/graphQlSchema/schema-custom-primary.gql +40 -2
  535. package/tests/cases/integration/graphQlSchema/schema-has-many-reduction.gql +14 -1
  536. package/tests/cases/integration/graphQlSchema/schema-new-builder.gql +40 -2
  537. package/tests/cases/unit/orderbyHelper.test.ts +15 -2
  538. package/tests/cases/unit/permissionMerger.test.ts +9 -4
  539. package/tests/cases/unit/predicatesInjector.test.ts +1 -1
  540. package/tests/src/test.ts +40 -41
  541. package/tests/src/testGraphql.ts +1 -1
  542. package/tests/tsconfig.json +3 -9
  543. package/dist/src/acl/PermissionsByIdentityFactory.d.ts +0 -12
  544. package/dist/src/acl/PermissionsByIdentityFactory.d.ts.map +0 -1
  545. package/dist/src/acl/PermissionsByIdentityFactory.js +0 -15
  546. package/dist/src/acl/PermissionsByIdentityFactory.js.map +0 -1
  547. package/dist/src/mapper/MapperContainer.d.ts +0 -18
  548. package/dist/src/mapper/MapperContainer.d.ts.map +0 -1
  549. package/dist/src/mapper/MapperContainer.js +0 -55
  550. package/dist/src/mapper/MapperContainer.js.map +0 -1
  551. package/dist/src/resolvers/ExecutionContainerFactory.d.ts +0 -24
  552. package/dist/src/resolvers/ExecutionContainerFactory.d.ts.map +0 -1
  553. package/dist/src/resolvers/ExecutionContainerFactory.js +0 -45
  554. package/dist/src/resolvers/ExecutionContainerFactory.js.map +0 -1
  555. package/dist/src/utils/arrays.d.ts +0 -3
  556. package/dist/src/utils/arrays.d.ts.map +0 -1
  557. package/dist/src/utils/arrays.js +0 -22
  558. package/dist/src/utils/arrays.js.map +0 -1
  559. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyInverse/insertRelationCreate.test.d.ts +0 -2
  560. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyInverse/insertRelationCreate.test.d.ts.map +0 -1
  561. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyInverse/insertRelationCreate.test.js.map +0 -1
  562. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyOwning/insertRelationCreate.test.d.ts +0 -2
  563. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyOwning/insertRelationCreate.test.d.ts.map +0 -1
  564. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyOwning/insertRelationCreate.test.js.map +0 -1
  565. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasOne/insertRelationCreate.test.d.ts +0 -2
  566. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasOne/insertRelationCreate.test.d.ts.map +0 -1
  567. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasOne/insertRelationCreate.test.js.map +0 -1
  568. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/insertRelationConnect.test.d.ts +0 -2
  569. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/insertRelationConnect.test.d.ts.map +0 -1
  570. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/insertRelationConnect.test.js.map +0 -1
  571. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/insertRelationCreate.test.d.ts +0 -2
  572. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/insertRelationCreate.test.d.ts.map +0 -1
  573. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/insertRelationCreate.test.js.map +0 -1
  574. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneInverse/insertRelationCreate.test.d.ts +0 -2
  575. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneInverse/insertRelationCreate.test.d.ts.map +0 -1
  576. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneInverse/insertRelationCreate.test.js.map +0 -1
  577. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/insertRelationCreate.test.d.ts +0 -2
  578. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/insertRelationCreate.test.d.ts.map +0 -1
  579. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/insertRelationCreate.test.js.map +0 -1
  580. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/insertRelationEmpty.test.d.ts +0 -2
  581. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/insertRelationEmpty.test.d.ts.map +0 -1
  582. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/insertRelationEmpty.test.js.map +0 -1
  583. package/dist/tests/cases/integration/graphQlSchema/schema-acl-allowed.gql +0 -407
  584. package/dist/tests/cases/integration/graphQlSchema/schema-acl-create-only.gql +0 -229
  585. package/dist/tests/cases/integration/graphQlSchema/schema-acl-predicate.gql +0 -112
  586. package/dist/tests/cases/integration/graphQlSchema/schema-acl-predicate2.gql +0 -112
  587. package/dist/tests/cases/integration/graphQlSchema/schema-acl-restricted-create.gql +0 -309
  588. package/dist/tests/cases/integration/graphQlSchema/schema-acl-restricted-delete.gql +0 -389
  589. package/dist/tests/cases/integration/graphQlSchema/schema-acl-restricted-update.gql +0 -326
  590. package/dist/tests/cases/integration/graphQlSchema/schema-acl.gql +0 -221
  591. package/dist/tests/cases/integration/graphQlSchema/schema-aliased-type.gql +0 -226
  592. package/dist/tests/cases/integration/graphQlSchema/schema-basic.gql +0 -803
  593. package/dist/tests/cases/integration/graphQlSchema/schema-bug-66.gql +0 -513
  594. package/dist/tests/cases/integration/graphQlSchema/schema-custom-primary.gql +0 -813
  595. package/dist/tests/cases/integration/graphQlSchema/schema-has-many-reduction.gql +0 -440
  596. package/dist/tests/cases/integration/graphQlSchema/schema-new-builder.gql +0 -874
  597. package/dist/tests/cases/integration/graphQlSchema/schema-view-entity.gql +0 -112
  598. package/src/acl/PermissionsByIdentityFactory.ts +0 -21
  599. package/src/mapper/MapperContainer.ts +0 -138
  600. package/src/resolvers/ExecutionContainerFactory.ts +0 -74
  601. package/src/utils/arrays.ts +0 -19
  602. /package/tests/cases/integration/graphQlRequests/insert/manyHasManyInverse/{insertRelationCreate.test.ts → create.test.ts} +0 -0
  603. /package/tests/cases/integration/graphQlRequests/insert/manyHasManyOwning/{insertRelationCreate.test.ts → create.test.ts} +0 -0
  604. /package/tests/cases/integration/graphQlRequests/insert/manyHasOne/{insertRelationCreate.test.ts → create.test.ts} +0 -0
  605. /package/tests/cases/integration/graphQlRequests/insert/oneHasMany/{insertRelationCreate.test.ts → create.test.ts} +0 -0
  606. /package/tests/cases/integration/graphQlRequests/insert/oneHasOneInverse/{insertRelationCreate.test.ts → create.test.ts} +0 -0
  607. /package/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/{insertRelationCreate.test.ts → create.test.ts} +0 -0
  608. /package/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/{insertRelationEmpty.test.ts → empty.test.ts} +0 -0
package/package.json CHANGED
@@ -1,30 +1,33 @@
1
1
  {
2
2
  "name": "@contember/engine-content-api",
3
- "version": "1.2.1",
3
+ "version": "1.3.0-alpha.13",
4
4
  "license": "Apache-2.0",
5
5
  "main": "dist/src/index.js",
6
6
  "typings": "dist/src/index.d.ts",
7
+ "exports": {
8
+ "typescript": "./src/index.ts",
9
+ "default": "./dist/src/index.js"
10
+ },
7
11
  "scripts": {
8
- "build-copy": "mkdir -p dist && find ./tests/ -name '*.gql' -type f -exec cp --parents {} ./dist \\;",
9
12
  "generate": "gql-gen --config graphql.codegen.yml",
10
13
  "test": "vitest --no-threads"
11
14
  },
12
15
  "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",
16
+ "@contember/database": "1.3.0-alpha.13",
17
+ "@contember/dic": "1.3.0-alpha.13",
18
+ "@contember/graphql-utils": "1.3.0-alpha.13",
19
+ "@contember/logger": "1.3.0-alpha.13",
20
+ "@contember/schema": "1.3.0-alpha.13",
21
+ "@contember/schema-definition": "1.3.0-alpha.13",
22
+ "@contember/schema-utils": "1.3.0-alpha.13",
20
23
  "@graphql-tools/schema": "^8.3.5",
21
24
  "fast-deep-equal": "^3.1.3",
22
25
  "graphql-tag": "^2.12.5"
23
26
  },
24
27
  "devDependencies": {
25
- "@contember/database-tester": "^1.2.1",
26
- "@contember/engine-api-tester": "^1.2.1",
27
- "@contember/schema-definition": "^1.2.1",
28
+ "@contember/database-tester": "1.3.0-alpha.13",
29
+ "@contember/engine-api-tester": "1.3.0-alpha.13",
30
+ "@contember/schema-definition": "1.3.0-alpha.13",
28
31
  "@graphql-codegen/cli": "^2.6.2",
29
32
  "@graphql-codegen/typescript": "^2.5.1",
30
33
  "@graphql-codegen/typescript-operations": "^2.4.2",
@@ -37,4 +40,4 @@
37
40
  "graphql": ">= 14.6.0",
38
41
  "pg": "^8.9.0"
39
42
  }
40
- }
43
+ }
@@ -0,0 +1,208 @@
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, SchemaDatabaseMetadata } 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
+ schemaDatabaseMetadata: SchemaDatabaseMetadata
48
+ db: Client
49
+ identityId: string
50
+ identityVariables: Acl.VariablesMap
51
+ permissions: Acl.Permissions
52
+ systemSchema: string
53
+ project: { slug: string }
54
+ stage: { id: string; slug: string }
55
+ }
56
+
57
+ export interface ExecutionContainer {
58
+ readResolver: ReadResolver
59
+ mutationResolver: MutationResolver
60
+ validationResolver: ValidationResolver
61
+ }
62
+
63
+ export type ExecutionContainerBuilder = ReturnType<ExecutionContainerFactory['createBuilderInternal']>
64
+ export type ExecutionContainerHook = (builder: ExecutionContainerBuilder) => ExecutionContainerBuilder
65
+
66
+ export class ExecutionContainerFactory {
67
+ public readonly hooks: ExecutionContainerHook[] = []
68
+
69
+ constructor(
70
+ private readonly providers: Providers,
71
+ ) {
72
+ }
73
+
74
+ createBuilder(args: ExecutionContainerArgs): ExecutionContainerBuilder {
75
+ const builder = this.createBuilderInternal(args)
76
+ return this.hooks.reduce((acc, cb) => cb(acc), builder)
77
+ }
78
+
79
+ createBuilderInternal({ permissions, identityVariables, identityId, db, schema, systemSchema, stage, project, schemaDatabaseMetadata }: ExecutionContainerArgs) {
80
+ return new Builder({})
81
+ .addService('systemSchema', () =>
82
+ systemSchema)
83
+ .addService('db', () =>
84
+ db)
85
+ .addService('project', () =>
86
+ project)
87
+ .addService('stage', () =>
88
+ stage)
89
+ .addService('schema', () =>
90
+ schema)
91
+ .addService('schemaDatabaseMetadata', () =>
92
+ schemaDatabaseMetadata)
93
+ .addService('providers', () =>
94
+ this.providers)
95
+ .addService('variableInjector', ({ schema }) =>
96
+ new VariableInjector(schema.model, identityVariables))
97
+ .addService('predicateFactory', ({ variableInjector, schema }) =>
98
+ new PredicateFactory(permissions, schema.model, variableInjector))
99
+ .addService('predicatesInjector', ({ predicateFactory, schema }) =>
100
+ new PredicatesInjector(schema.model, predicateFactory))
101
+ .addService('joinBuilder', ({ schema }) =>
102
+ new JoinBuilder(schema.model))
103
+ .addService('conditionBuilder', () =>
104
+ new ConditionBuilder())
105
+ .addService('pathFactory', () =>
106
+ new PathFactory())
107
+ .addService('whereOptimized', ({ schema }) =>
108
+ new WhereOptimizer(schema.model, new ConditionOptimizer()))
109
+ .addService('whereBuilder', ({ joinBuilder, conditionBuilder, pathFactory, whereOptimized, schema }) =>
110
+ new WhereBuilder(schema.model, joinBuilder, conditionBuilder, pathFactory, whereOptimized, schema.settings.useExistsInHasManyFilter === true))
111
+ .addService('orderByBuilder', ({ joinBuilder, schema }) =>
112
+ new OrderByBuilder(schema.model, joinBuilder))
113
+ .addService('relationFetcher', ({ whereBuilder, orderByBuilder, predicatesInjector, pathFactory }) =>
114
+ new RelationFetcher(whereBuilder, orderByBuilder, predicatesInjector, pathFactory))
115
+ .addService('fieldsVisitorFactory', ({ relationFetcher, predicateFactory, whereBuilder, schema }) =>
116
+ new FieldsVisitorFactory(schema.model, relationFetcher, predicateFactory, whereBuilder))
117
+ .addService('metaHandler', ({ whereBuilder, predicateFactory }) =>
118
+ new MetaHandler(whereBuilder, predicateFactory))
119
+ .addService('uniqueWhereExpander', ({ schema }) =>
120
+ new UniqueWhereExpander(schema.model))
121
+ .addService('hasManyToHasOneReducer', ({ uniqueWhereExpander, schema }) =>
122
+ new HasManyToHasOneReducerExecutionHandler(schema.model, uniqueWhereExpander))
123
+ .addService('paginatedHasManyExecutionHandler', ({ relationFetcher, schema }) =>
124
+ new PaginatedHasManyExecutionHandler(schema.model, relationFetcher))
125
+ .addService('selectHandlers', ({ hasManyToHasOneReducer, paginatedHasManyExecutionHandler }) => ({
126
+ [HasManyToHasOneReducer.extensionName]: hasManyToHasOneReducer,
127
+ [PaginatedHasManyFieldProvider.extensionName]: paginatedHasManyExecutionHandler,
128
+ }))
129
+ .addService('selectBuilderFactory', ({ whereBuilder, orderByBuilder, fieldsVisitorFactory, metaHandler, selectHandlers, pathFactory, predicateFactory, schema }) =>
130
+ new (class implements SelectBuilderFactory {
131
+ create(qb: DbSelectBuilder, hydrator: SelectHydrator, relationPath: Model.AnyRelationContext[]): SelectBuilder {
132
+ return new SelectBuilder(
133
+ schema.model,
134
+ whereBuilder,
135
+ orderByBuilder,
136
+ metaHandler,
137
+ qb,
138
+ hydrator,
139
+ fieldsVisitorFactory,
140
+ selectHandlers,
141
+ pathFactory,
142
+ relationPath,
143
+ predicateFactory,
144
+ )
145
+ }
146
+ })())
147
+ .addService('insertBuilderFactory', ({ whereBuilder, pathFactory, schema, predicateFactory }) =>
148
+ new InsertBuilderFactory(schema.model, whereBuilder, pathFactory, predicateFactory))
149
+ .addService('updateBuilderFactory', ({ whereBuilder, pathFactory, schema, predicateFactory }) =>
150
+ new UpdateBuilderFactory(schema.model, whereBuilder, pathFactory, predicateFactory))
151
+ .addService('connectJunctionHandler', () =>
152
+ new JunctionConnectHandler())
153
+ .addService('disconnectJunctionHandler', ({}) =>
154
+ new JunctionDisconnectHandler())
155
+ .addService('junctionTableManager', ({ predicateFactory, whereBuilder, connectJunctionHandler, disconnectJunctionHandler, pathFactory, schema }) =>
156
+ new JunctionTableManager(schema.model, predicateFactory, whereBuilder, connectJunctionHandler, disconnectJunctionHandler, pathFactory))
157
+ .addService('deleteExecutor', ({ predicateFactory, updateBuilderFactory, whereBuilder, pathFactory, schema }) =>
158
+ new DeleteExecutor(schema.model, predicateFactory, whereBuilder, updateBuilderFactory, pathFactory))
159
+ .addService('updater', ({ predicateFactory, updateBuilderFactory, schema, schemaDatabaseMetadata }) =>
160
+ new Updater(schema.model, schemaDatabaseMetadata, predicateFactory, updateBuilderFactory))
161
+ .addService('inserter', ({ insertBuilderFactory, providers, schema, schemaDatabaseMetadata }) =>
162
+ new Inserter(schema.model, schemaDatabaseMetadata, insertBuilderFactory, providers))
163
+ .addService('mapperFactory', ({ predicatesInjector, selectBuilderFactory, uniqueWhereExpander, whereBuilder, junctionTableManager, deleteExecutor, updater, inserter, pathFactory, providers, schema, schemaDatabaseMetadata }) => {
164
+ return new MapperFactory(
165
+ db,
166
+ identityId,
167
+ schema.model,
168
+ schemaDatabaseMetadata,
169
+ predicatesInjector,
170
+ selectBuilderFactory,
171
+ uniqueWhereExpander,
172
+ whereBuilder,
173
+ junctionTableManager,
174
+ deleteExecutor,
175
+ updater,
176
+ inserter,
177
+ pathFactory,
178
+ providers,
179
+ )
180
+ })
181
+
182
+ .addService('queryAstFactory', () =>
183
+ new GraphQlQueryAstFactory())
184
+ .addService('readResolver', ({ mapperFactory, queryAstFactory }) =>
185
+ new ReadResolver(mapperFactory, queryAstFactory))
186
+ .addService('validationDependencyCollector', () =>
187
+ new DependencyCollector())
188
+ .addService('validationQueryAstFactory', ({ schema }) =>
189
+ new QueryAstFactory(schema.model))
190
+ .addService('dataSelector', ({ validationQueryAstFactory, schema }) =>
191
+ new ValidationDataSelector(schema.model, validationQueryAstFactory))
192
+ .addService('columnValueResolver', ({ providers }) =>
193
+ new ColumnValueResolver(providers))
194
+ .addService('entityRulesResolver', ({ schema }) =>
195
+ new EntityRulesResolver(schema.validation, schema.model))
196
+ .addService('inputPreValidator', ({ entityRulesResolver, columnValueResolver, dataSelector, schema }) =>
197
+ new InputPreValidator(schema.model, entityRulesResolver, columnValueResolver, dataSelector))
198
+ .addService('mutationResolver', ({ mapperFactory, inputPreValidator, queryAstFactory, schema, schemaDatabaseMetadata }) =>
199
+ new MutationResolver(schema.model, mapperFactory, inputPreValidator, queryAstFactory, schemaDatabaseMetadata))
200
+ .addService('validationResolver', ({ inputPreValidator, mapperFactory }) =>
201
+ new ValidationResolver(mapperFactory, inputPreValidator))
202
+ }
203
+
204
+ public create(args: ExecutionContainerArgs): ExecutionContainer {
205
+ return this.createBuilder(args).build().pick('validationResolver', 'readResolver', 'mutationResolver')
206
+ }
207
+ }
208
+
@@ -1,33 +1,35 @@
1
- import { Acl, Model, Writable } from '@contember/schema'
1
+ import { Acl, Model, Schema, Writable } from '@contember/schema'
2
2
  import { getEntity, PredicateDefinitionProcessor } from '@contember/schema-utils'
3
3
  import { mapObject } from '../utils'
4
4
  import { prefixVariable } from './VariableUtils'
5
5
 
6
- export class PermissionFactory {
7
- constructor(private readonly schema: Model.Schema) {}
6
+ export interface Identity {
7
+ projectRoles: readonly string[]
8
+ }
8
9
 
9
- public create(acl: Acl.Schema, roles: readonly string[], prefix?: string): Acl.Permissions {
10
+ export class PermissionFactory {
11
+ public create(schema: Schema, roles: readonly string[], prefix?: string): Acl.Permissions {
10
12
  let result: Acl.Permissions = {}
11
13
  for (let role of roles) {
12
- const roleDefinition = acl.roles[role] || { entities: {} }
13
- let rolePermissions: Acl.Permissions = this.prefixPredicatesWithRole(roleDefinition.entities, prefix || role)
14
+ const roleDefinition = schema.acl.roles[role] || { entities: {} }
15
+ let rolePermissions: Acl.Permissions = this.prefixPredicatesWithRole(schema.model, roleDefinition.entities, prefix || role)
14
16
  if (roleDefinition.inherits) {
15
- const inheritedPermissions = this.create(acl, roleDefinition.inherits, prefix || role)
17
+ const inheritedPermissions = this.create(schema, roleDefinition.inherits, prefix || role)
16
18
  rolePermissions = this.mergePermissions(inheritedPermissions, rolePermissions)
17
19
  }
18
20
  result = this.mergePermissions(result, rolePermissions)
19
21
  }
20
- result = this.makePrimaryPredicatesUnionOfAllFields(result)
22
+ result = this.makePrimaryPredicatesUnionOfAllFields(schema.model, result)
21
23
 
22
24
  return result
23
25
  }
24
26
 
25
- private prefixPredicatesWithRole(permissions: Acl.Permissions, role: string): Acl.Permissions {
27
+ private prefixPredicatesWithRole(model: Model.Schema, permissions: Acl.Permissions, role: string): Acl.Permissions {
26
28
  return mapObject(permissions, ({ operations, predicates }, entityName) => ({
27
29
  operations,
28
30
  predicates: mapObject(predicates, predicate => {
29
- const predicateDefinitionProcessor = new PredicateDefinitionProcessor(this.schema)
30
- return predicateDefinitionProcessor.process(getEntity(this.schema, entityName), predicate, {
31
+ const predicateDefinitionProcessor = new PredicateDefinitionProcessor(model)
32
+ return predicateDefinitionProcessor.process(getEntity(model, entityName), predicate, {
31
33
  handleColumn: ({ value }) => {
32
34
  if (typeof value === 'string') {
33
35
  return prefixVariable(role, value)
@@ -45,9 +47,9 @@ export class PermissionFactory {
45
47
  }))
46
48
  }
47
49
 
48
- private makePrimaryPredicatesUnionOfAllFields(permissions: Acl.Permissions): Acl.Permissions {
50
+ private makePrimaryPredicatesUnionOfAllFields(model: Model.Schema, permissions: Acl.Permissions): Acl.Permissions {
49
51
  return mapObject(permissions, (permission, entityName): Acl.EntityPermissions => {
50
- const entity = getEntity(this.schema, entityName)
52
+ const entity = getEntity(model, entityName)
51
53
  const entityPredicates: Writable<Acl.PredicateMap> = { ...permission.predicates }
52
54
  const entityOperations: Writable<Acl.EntityOperations> = { ...permission.operations }
53
55
 
package/src/acl/index.ts CHANGED
@@ -1,6 +1,5 @@
1
1
  export * from './Authorizator'
2
2
  export * from './PermissionFactory'
3
- export * from './PermissionsByIdentityFactory'
4
3
  export * from './PredicateFactory'
5
4
  export * from './PredicatesInjector'
6
5
  export * from './VariableInjector'
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> => {