@contember/engine-content-api 2.0.0-alpha.19 → 2.0.0-alpha.21

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 (330) hide show
  1. package/dist/development/index.cjs +1 -1
  2. package/dist/development/index.js +1 -1
  3. package/dist/development/src/input-validation/preValidation/InputPreValidator.cjs +1 -1
  4. package/dist/development/src/input-validation/preValidation/InputPreValidator.cjs.map +1 -1
  5. package/dist/development/src/input-validation/preValidation/InputPreValidator.js +1 -1
  6. package/dist/development/src/input-validation/preValidation/InputPreValidator.js.map +1 -1
  7. package/dist/development/src/inputProcessing/CreateInputVisitor.cjs +10 -10
  8. package/dist/development/src/inputProcessing/CreateInputVisitor.cjs.map +1 -1
  9. package/dist/development/src/inputProcessing/CreateInputVisitor.js +10 -10
  10. package/dist/development/src/inputProcessing/CreateInputVisitor.js.map +1 -1
  11. package/dist/development/src/inputProcessing/UpdateInputVisitor.cjs +13 -13
  12. package/dist/development/src/inputProcessing/UpdateInputVisitor.cjs.map +1 -1
  13. package/dist/development/src/inputProcessing/UpdateInputVisitor.js +13 -13
  14. package/dist/development/src/inputProcessing/UpdateInputVisitor.js.map +1 -1
  15. package/dist/development/src/mapper/MutationProcessorHelper.cjs +10 -2
  16. package/dist/development/src/mapper/MutationProcessorHelper.cjs.map +1 -1
  17. package/dist/development/src/mapper/MutationProcessorHelper.js +10 -2
  18. package/dist/development/src/mapper/MutationProcessorHelper.js.map +1 -1
  19. package/dist/development/src/mapper/Result.cjs +10 -27
  20. package/dist/development/src/mapper/Result.cjs.map +1 -1
  21. package/dist/development/src/mapper/Result.js +10 -27
  22. package/dist/development/src/mapper/Result.js.map +1 -1
  23. package/dist/development/src/mapper/insert/InsertBuilder.cjs +1 -13
  24. package/dist/development/src/mapper/insert/InsertBuilder.cjs.map +1 -1
  25. package/dist/development/src/mapper/insert/InsertBuilder.js +1 -13
  26. package/dist/development/src/mapper/insert/InsertBuilder.js.map +1 -1
  27. package/dist/development/src/mapper/insert/Inserter.cjs +43 -21
  28. package/dist/development/src/mapper/insert/Inserter.cjs.map +1 -1
  29. package/dist/development/src/mapper/insert/Inserter.js +45 -23
  30. package/dist/development/src/mapper/insert/Inserter.js.map +1 -1
  31. package/dist/development/src/mapper/insert/SqlCreateInputProcessor.cjs +22 -76
  32. package/dist/development/src/mapper/insert/SqlCreateInputProcessor.cjs.map +1 -1
  33. package/dist/development/src/mapper/insert/SqlCreateInputProcessor.js +22 -76
  34. package/dist/development/src/mapper/insert/SqlCreateInputProcessor.js.map +1 -1
  35. package/dist/development/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.cjs +45 -0
  36. package/dist/development/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.cjs.map +1 -0
  37. package/dist/development/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.js +45 -0
  38. package/dist/development/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.js.map +1 -0
  39. package/dist/development/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.cjs +42 -0
  40. package/dist/development/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.cjs.map +1 -0
  41. package/dist/development/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.js +42 -0
  42. package/dist/development/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.js.map +1 -0
  43. package/dist/development/src/mapper/insert/relations/OneHasManyCreateInputProcessor.cjs +37 -0
  44. package/dist/development/src/mapper/insert/relations/OneHasManyCreateInputProcessor.cjs.map +1 -0
  45. package/dist/development/src/mapper/insert/relations/OneHasManyCreateInputProcessor.js +37 -0
  46. package/dist/development/src/mapper/insert/relations/OneHasManyCreateInputProcessor.js.map +1 -0
  47. package/dist/development/src/mapper/{relations → insert/relations}/OneHasOneInverseCreateInputProcessor.cjs +25 -32
  48. package/dist/development/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.cjs.map +1 -0
  49. package/dist/development/src/mapper/{relations → insert/relations}/OneHasOneInverseCreateInputProcessor.js +25 -32
  50. package/dist/development/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.js.map +1 -0
  51. package/dist/development/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.cjs +67 -0
  52. package/dist/development/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.cjs.map +1 -0
  53. package/dist/development/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.js +67 -0
  54. package/dist/development/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.js.map +1 -0
  55. package/dist/development/src/mapper/select/handlers/FieldsVisitor.cjs +3 -0
  56. package/dist/development/src/mapper/select/handlers/FieldsVisitor.cjs.map +1 -1
  57. package/dist/development/src/mapper/select/handlers/FieldsVisitor.js +3 -0
  58. package/dist/development/src/mapper/select/handlers/FieldsVisitor.js.map +1 -1
  59. package/dist/development/src/mapper/update/SqlUpdateInputProcessor.cjs +36 -36
  60. package/dist/development/src/mapper/update/SqlUpdateInputProcessor.cjs.map +1 -1
  61. package/dist/development/src/mapper/update/SqlUpdateInputProcessor.js +36 -36
  62. package/dist/development/src/mapper/update/SqlUpdateInputProcessor.js.map +1 -1
  63. package/dist/development/src/mapper/update/UpdateBuilder.cjs +2 -14
  64. package/dist/development/src/mapper/update/UpdateBuilder.cjs.map +1 -1
  65. package/dist/development/src/mapper/update/UpdateBuilder.js +2 -14
  66. package/dist/development/src/mapper/update/UpdateBuilder.js.map +1 -1
  67. package/dist/development/src/mapper/update/Updater.cjs +45 -17
  68. package/dist/development/src/mapper/update/Updater.cjs.map +1 -1
  69. package/dist/development/src/mapper/update/Updater.js +47 -19
  70. package/dist/development/src/mapper/update/Updater.js.map +1 -1
  71. package/dist/development/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.cjs +89 -0
  72. package/dist/development/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.cjs.map +1 -0
  73. package/dist/development/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.js +89 -0
  74. package/dist/development/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.js.map +1 -0
  75. package/dist/development/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.cjs +89 -0
  76. package/dist/development/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.cjs.map +1 -0
  77. package/dist/development/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.js +89 -0
  78. package/dist/development/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.js.map +1 -0
  79. package/dist/development/src/mapper/update/relations/OneHasManyUpdateInputProcessor.cjs +86 -0
  80. package/dist/development/src/mapper/update/relations/OneHasManyUpdateInputProcessor.cjs.map +1 -0
  81. package/dist/development/src/mapper/update/relations/OneHasManyUpdateInputProcessor.js +86 -0
  82. package/dist/development/src/mapper/update/relations/OneHasManyUpdateInputProcessor.js.map +1 -0
  83. package/dist/development/src/mapper/{relations → update/relations}/OneHasOneInverseUpdateInputProcessor.cjs +83 -66
  84. package/dist/development/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.cjs.map +1 -0
  85. package/dist/development/src/mapper/{relations → update/relations}/OneHasOneInverseUpdateInputProcessor.js +83 -66
  86. package/dist/development/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.js.map +1 -0
  87. package/dist/development/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.cjs +187 -0
  88. package/dist/development/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.cjs.map +1 -0
  89. package/dist/development/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.js +187 -0
  90. package/dist/development/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.js.map +1 -0
  91. package/dist/development/src/resolvers/MutationResolver.cjs +1 -1
  92. package/dist/development/src/resolvers/MutationResolver.js +1 -1
  93. package/dist/production/index.cjs +1 -1
  94. package/dist/production/index.js +1 -1
  95. package/dist/production/src/input-validation/preValidation/InputPreValidator.cjs +1 -1
  96. package/dist/production/src/input-validation/preValidation/InputPreValidator.cjs.map +1 -1
  97. package/dist/production/src/input-validation/preValidation/InputPreValidator.js +1 -1
  98. package/dist/production/src/input-validation/preValidation/InputPreValidator.js.map +1 -1
  99. package/dist/production/src/inputProcessing/CreateInputVisitor.cjs +10 -10
  100. package/dist/production/src/inputProcessing/CreateInputVisitor.cjs.map +1 -1
  101. package/dist/production/src/inputProcessing/CreateInputVisitor.js +10 -10
  102. package/dist/production/src/inputProcessing/CreateInputVisitor.js.map +1 -1
  103. package/dist/production/src/inputProcessing/UpdateInputVisitor.cjs +13 -13
  104. package/dist/production/src/inputProcessing/UpdateInputVisitor.cjs.map +1 -1
  105. package/dist/production/src/inputProcessing/UpdateInputVisitor.js +13 -13
  106. package/dist/production/src/inputProcessing/UpdateInputVisitor.js.map +1 -1
  107. package/dist/production/src/mapper/MutationProcessorHelper.cjs +10 -2
  108. package/dist/production/src/mapper/MutationProcessorHelper.cjs.map +1 -1
  109. package/dist/production/src/mapper/MutationProcessorHelper.js +10 -2
  110. package/dist/production/src/mapper/MutationProcessorHelper.js.map +1 -1
  111. package/dist/production/src/mapper/Result.cjs +10 -27
  112. package/dist/production/src/mapper/Result.cjs.map +1 -1
  113. package/dist/production/src/mapper/Result.js +10 -27
  114. package/dist/production/src/mapper/Result.js.map +1 -1
  115. package/dist/production/src/mapper/insert/InsertBuilder.cjs +1 -13
  116. package/dist/production/src/mapper/insert/InsertBuilder.cjs.map +1 -1
  117. package/dist/production/src/mapper/insert/InsertBuilder.js +1 -13
  118. package/dist/production/src/mapper/insert/InsertBuilder.js.map +1 -1
  119. package/dist/production/src/mapper/insert/Inserter.cjs +43 -21
  120. package/dist/production/src/mapper/insert/Inserter.cjs.map +1 -1
  121. package/dist/production/src/mapper/insert/Inserter.js +45 -23
  122. package/dist/production/src/mapper/insert/Inserter.js.map +1 -1
  123. package/dist/production/src/mapper/insert/SqlCreateInputProcessor.cjs +22 -76
  124. package/dist/production/src/mapper/insert/SqlCreateInputProcessor.cjs.map +1 -1
  125. package/dist/production/src/mapper/insert/SqlCreateInputProcessor.js +22 -76
  126. package/dist/production/src/mapper/insert/SqlCreateInputProcessor.js.map +1 -1
  127. package/dist/production/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.cjs +45 -0
  128. package/dist/production/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.cjs.map +1 -0
  129. package/dist/production/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.js +45 -0
  130. package/dist/production/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.js.map +1 -0
  131. package/dist/production/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.cjs +42 -0
  132. package/dist/production/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.cjs.map +1 -0
  133. package/dist/production/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.js +42 -0
  134. package/dist/production/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.js.map +1 -0
  135. package/dist/production/src/mapper/insert/relations/OneHasManyCreateInputProcessor.cjs +37 -0
  136. package/dist/production/src/mapper/insert/relations/OneHasManyCreateInputProcessor.cjs.map +1 -0
  137. package/dist/production/src/mapper/insert/relations/OneHasManyCreateInputProcessor.js +37 -0
  138. package/dist/production/src/mapper/insert/relations/OneHasManyCreateInputProcessor.js.map +1 -0
  139. package/dist/production/src/mapper/{relations → insert/relations}/OneHasOneInverseCreateInputProcessor.cjs +25 -32
  140. package/dist/production/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.cjs.map +1 -0
  141. package/dist/production/src/mapper/{relations → insert/relations}/OneHasOneInverseCreateInputProcessor.js +25 -32
  142. package/dist/production/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.js.map +1 -0
  143. package/dist/production/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.cjs +67 -0
  144. package/dist/production/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.cjs.map +1 -0
  145. package/dist/production/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.js +67 -0
  146. package/dist/production/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.js.map +1 -0
  147. package/dist/production/src/mapper/select/handlers/FieldsVisitor.cjs +3 -0
  148. package/dist/production/src/mapper/select/handlers/FieldsVisitor.cjs.map +1 -1
  149. package/dist/production/src/mapper/select/handlers/FieldsVisitor.js +3 -0
  150. package/dist/production/src/mapper/select/handlers/FieldsVisitor.js.map +1 -1
  151. package/dist/production/src/mapper/update/SqlUpdateInputProcessor.cjs +36 -36
  152. package/dist/production/src/mapper/update/SqlUpdateInputProcessor.cjs.map +1 -1
  153. package/dist/production/src/mapper/update/SqlUpdateInputProcessor.js +36 -36
  154. package/dist/production/src/mapper/update/SqlUpdateInputProcessor.js.map +1 -1
  155. package/dist/production/src/mapper/update/UpdateBuilder.cjs +2 -14
  156. package/dist/production/src/mapper/update/UpdateBuilder.cjs.map +1 -1
  157. package/dist/production/src/mapper/update/UpdateBuilder.js +2 -14
  158. package/dist/production/src/mapper/update/UpdateBuilder.js.map +1 -1
  159. package/dist/production/src/mapper/update/Updater.cjs +45 -17
  160. package/dist/production/src/mapper/update/Updater.cjs.map +1 -1
  161. package/dist/production/src/mapper/update/Updater.js +47 -19
  162. package/dist/production/src/mapper/update/Updater.js.map +1 -1
  163. package/dist/production/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.cjs +89 -0
  164. package/dist/production/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.cjs.map +1 -0
  165. package/dist/production/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.js +89 -0
  166. package/dist/production/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.js.map +1 -0
  167. package/dist/production/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.cjs +89 -0
  168. package/dist/production/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.cjs.map +1 -0
  169. package/dist/production/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.js +89 -0
  170. package/dist/production/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.js.map +1 -0
  171. package/dist/production/src/mapper/update/relations/OneHasManyUpdateInputProcessor.cjs +86 -0
  172. package/dist/production/src/mapper/update/relations/OneHasManyUpdateInputProcessor.cjs.map +1 -0
  173. package/dist/production/src/mapper/update/relations/OneHasManyUpdateInputProcessor.js +86 -0
  174. package/dist/production/src/mapper/update/relations/OneHasManyUpdateInputProcessor.js.map +1 -0
  175. package/dist/production/src/mapper/{relations → update/relations}/OneHasOneInverseUpdateInputProcessor.cjs +83 -66
  176. package/dist/production/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.cjs.map +1 -0
  177. package/dist/production/src/mapper/{relations → update/relations}/OneHasOneInverseUpdateInputProcessor.js +83 -66
  178. package/dist/production/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.js.map +1 -0
  179. package/dist/production/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.cjs +187 -0
  180. package/dist/production/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.cjs.map +1 -0
  181. package/dist/production/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.js +187 -0
  182. package/dist/production/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.js.map +1 -0
  183. package/dist/production/src/resolvers/MutationResolver.cjs +1 -1
  184. package/dist/production/src/resolvers/MutationResolver.js +1 -1
  185. package/dist/tests/tsconfig.tsbuildinfo +1 -1
  186. package/dist/types/input-validation/preValidation/InputPreValidator.d.ts.map +1 -1
  187. package/dist/types/inputProcessing/CreateInputVisitor.d.ts +8 -8
  188. package/dist/types/inputProcessing/CreateInputVisitor.d.ts.map +1 -1
  189. package/dist/types/inputProcessing/UpdateInputVisitor.d.ts +8 -8
  190. package/dist/types/inputProcessing/UpdateInputVisitor.d.ts.map +1 -1
  191. package/dist/types/mapper/MutationProcessorHelper.d.ts +2 -2
  192. package/dist/types/mapper/MutationProcessorHelper.d.ts.map +1 -1
  193. package/dist/types/mapper/Result.d.ts +11 -5
  194. package/dist/types/mapper/Result.d.ts.map +1 -1
  195. package/dist/types/mapper/insert/InsertBuilder.d.ts +3 -7
  196. package/dist/types/mapper/insert/InsertBuilder.d.ts.map +1 -1
  197. package/dist/types/mapper/insert/Inserter.d.ts +0 -1
  198. package/dist/types/mapper/insert/Inserter.d.ts.map +1 -1
  199. package/dist/types/mapper/insert/SqlCreateInputProcessor.d.ts +11 -8
  200. package/dist/types/mapper/insert/SqlCreateInputProcessor.d.ts.map +1 -1
  201. package/dist/types/mapper/insert/relations/ManyHasManyCreateInputProcessor.d.ts +24 -0
  202. package/dist/types/mapper/insert/relations/ManyHasManyCreateInputProcessor.d.ts.map +1 -0
  203. package/dist/types/mapper/insert/relations/ManyHasOneCreateInputProcessor.d.ts +23 -0
  204. package/dist/types/mapper/insert/relations/ManyHasOneCreateInputProcessor.d.ts.map +1 -0
  205. package/dist/types/mapper/insert/relations/OneHasManyCreateInputProcessor.d.ts +26 -0
  206. package/dist/types/mapper/insert/relations/OneHasManyCreateInputProcessor.d.ts.map +1 -0
  207. package/dist/types/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.d.ts +29 -0
  208. package/dist/types/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.d.ts.map +1 -0
  209. package/dist/types/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.d.ts +24 -0
  210. package/dist/types/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.d.ts.map +1 -0
  211. package/dist/types/mapper/select/handlers/FieldsVisitor.d.ts.map +1 -1
  212. package/dist/types/mapper/update/SqlUpdateInputProcessor.d.ts +10 -7
  213. package/dist/types/mapper/update/SqlUpdateInputProcessor.d.ts.map +1 -1
  214. package/dist/types/mapper/update/UpdateBuilder.d.ts +2 -6
  215. package/dist/types/mapper/update/UpdateBuilder.d.ts.map +1 -1
  216. package/dist/types/mapper/update/Updater.d.ts +0 -1
  217. package/dist/types/mapper/update/Updater.d.ts.map +1 -1
  218. package/dist/types/mapper/update/relations/ManyHasManyUpdateInputProcessor.d.ts +46 -0
  219. package/dist/types/mapper/update/relations/ManyHasManyUpdateInputProcessor.d.ts.map +1 -0
  220. package/dist/types/mapper/update/relations/ManyHasOneUpdateInputProcessor.d.ts +40 -0
  221. package/dist/types/mapper/update/relations/ManyHasOneUpdateInputProcessor.d.ts.map +1 -0
  222. package/dist/types/mapper/update/relations/OneHasManyUpdateInputProcessor.d.ts +46 -0
  223. package/dist/types/mapper/update/relations/OneHasManyUpdateInputProcessor.d.ts.map +1 -0
  224. package/dist/types/mapper/{relations → update/relations}/OneHasOneInverseUpdateInputProcessor.d.ts +17 -13
  225. package/dist/types/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.d.ts.map +1 -0
  226. package/dist/types/mapper/{relations → update/relations}/OneHasOneOwningUpdateInputProcessor.d.ts +19 -16
  227. package/dist/types/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.d.ts.map +1 -0
  228. package/dist/types/tsconfig.tsbuildinfo +1 -1
  229. package/package.json +11 -11
  230. package/src/input-validation/preValidation/InputPreValidator.ts +3 -5
  231. package/src/inputProcessing/CreateInputVisitor.ts +14 -14
  232. package/src/inputProcessing/UpdateInputVisitor.ts +17 -17
  233. package/src/mapper/MutationProcessorHelper.ts +16 -8
  234. package/src/mapper/Result.ts +11 -47
  235. package/src/mapper/insert/InsertBuilder.ts +8 -22
  236. package/src/mapper/insert/Inserter.ts +53 -40
  237. package/src/mapper/insert/SqlCreateInputProcessor.ts +35 -88
  238. package/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.ts +59 -0
  239. package/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.ts +57 -0
  240. package/src/mapper/insert/relations/OneHasManyCreateInputProcessor.ts +50 -0
  241. package/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.ts +91 -0
  242. package/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.ts +87 -0
  243. package/src/mapper/select/handlers/FieldsVisitor.ts +3 -0
  244. package/src/mapper/update/SqlUpdateInputProcessor.ts +48 -46
  245. package/src/mapper/update/UpdateBuilder.ts +9 -23
  246. package/src/mapper/update/Updater.ts +53 -34
  247. package/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.ts +116 -0
  248. package/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.ts +125 -0
  249. package/src/mapper/update/relations/OneHasManyUpdateInputProcessor.ts +111 -0
  250. package/src/mapper/{relations → update/relations}/OneHasOneInverseUpdateInputProcessor.ts +93 -73
  251. package/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.ts +243 -0
  252. package/tests/cases/integration/graphQlRequests/insert/oneHasMany/create.test.ts +8 -8
  253. package/tests/cases/integration/graphQlRequests/update/oneHasMany/connectOrCreate.test.ts +4 -4
  254. package/dist/development/src/mapper/DataManipulationBuilder.cjs +0 -5
  255. package/dist/development/src/mapper/DataManipulationBuilder.cjs.map +0 -1
  256. package/dist/development/src/mapper/DataManipulationBuilder.js +0 -5
  257. package/dist/development/src/mapper/DataManipulationBuilder.js.map +0 -1
  258. package/dist/development/src/mapper/relations/ManyHasManyInputProcessor.cjs +0 -75
  259. package/dist/development/src/mapper/relations/ManyHasManyInputProcessor.cjs.map +0 -1
  260. package/dist/development/src/mapper/relations/ManyHasManyInputProcessor.js +0 -75
  261. package/dist/development/src/mapper/relations/ManyHasManyInputProcessor.js.map +0 -1
  262. package/dist/development/src/mapper/relations/ManyHasOneInputProcessor.cjs +0 -114
  263. package/dist/development/src/mapper/relations/ManyHasOneInputProcessor.cjs.map +0 -1
  264. package/dist/development/src/mapper/relations/ManyHasOneInputProcessor.js +0 -114
  265. package/dist/development/src/mapper/relations/ManyHasOneInputProcessor.js.map +0 -1
  266. package/dist/development/src/mapper/relations/OneHasManyInputProcessor.cjs +0 -72
  267. package/dist/development/src/mapper/relations/OneHasManyInputProcessor.cjs.map +0 -1
  268. package/dist/development/src/mapper/relations/OneHasManyInputProcessor.js +0 -72
  269. package/dist/development/src/mapper/relations/OneHasManyInputProcessor.js.map +0 -1
  270. package/dist/development/src/mapper/relations/OneHasOneInverseCreateInputProcessor.cjs.map +0 -1
  271. package/dist/development/src/mapper/relations/OneHasOneInverseCreateInputProcessor.js.map +0 -1
  272. package/dist/development/src/mapper/relations/OneHasOneInverseUpdateInputProcessor.cjs.map +0 -1
  273. package/dist/development/src/mapper/relations/OneHasOneInverseUpdateInputProcessor.js.map +0 -1
  274. package/dist/development/src/mapper/relations/OneHasOneOwningCreateInputProcessor.cjs +0 -71
  275. package/dist/development/src/mapper/relations/OneHasOneOwningCreateInputProcessor.cjs.map +0 -1
  276. package/dist/development/src/mapper/relations/OneHasOneOwningCreateInputProcessor.js +0 -71
  277. package/dist/development/src/mapper/relations/OneHasOneOwningCreateInputProcessor.js.map +0 -1
  278. package/dist/development/src/mapper/relations/OneHasOneOwningUpdateInputProcessor.cjs +0 -200
  279. package/dist/development/src/mapper/relations/OneHasOneOwningUpdateInputProcessor.cjs.map +0 -1
  280. package/dist/development/src/mapper/relations/OneHasOneOwningUpdateInputProcessor.js +0 -200
  281. package/dist/development/src/mapper/relations/OneHasOneOwningUpdateInputProcessor.js.map +0 -1
  282. package/dist/production/src/mapper/DataManipulationBuilder.cjs +0 -5
  283. package/dist/production/src/mapper/DataManipulationBuilder.cjs.map +0 -1
  284. package/dist/production/src/mapper/DataManipulationBuilder.js +0 -5
  285. package/dist/production/src/mapper/DataManipulationBuilder.js.map +0 -1
  286. package/dist/production/src/mapper/relations/ManyHasManyInputProcessor.cjs +0 -75
  287. package/dist/production/src/mapper/relations/ManyHasManyInputProcessor.cjs.map +0 -1
  288. package/dist/production/src/mapper/relations/ManyHasManyInputProcessor.js +0 -75
  289. package/dist/production/src/mapper/relations/ManyHasManyInputProcessor.js.map +0 -1
  290. package/dist/production/src/mapper/relations/ManyHasOneInputProcessor.cjs +0 -114
  291. package/dist/production/src/mapper/relations/ManyHasOneInputProcessor.cjs.map +0 -1
  292. package/dist/production/src/mapper/relations/ManyHasOneInputProcessor.js +0 -114
  293. package/dist/production/src/mapper/relations/ManyHasOneInputProcessor.js.map +0 -1
  294. package/dist/production/src/mapper/relations/OneHasManyInputProcessor.cjs +0 -72
  295. package/dist/production/src/mapper/relations/OneHasManyInputProcessor.cjs.map +0 -1
  296. package/dist/production/src/mapper/relations/OneHasManyInputProcessor.js +0 -72
  297. package/dist/production/src/mapper/relations/OneHasManyInputProcessor.js.map +0 -1
  298. package/dist/production/src/mapper/relations/OneHasOneInverseCreateInputProcessor.cjs.map +0 -1
  299. package/dist/production/src/mapper/relations/OneHasOneInverseCreateInputProcessor.js.map +0 -1
  300. package/dist/production/src/mapper/relations/OneHasOneInverseUpdateInputProcessor.cjs.map +0 -1
  301. package/dist/production/src/mapper/relations/OneHasOneInverseUpdateInputProcessor.js.map +0 -1
  302. package/dist/production/src/mapper/relations/OneHasOneOwningCreateInputProcessor.cjs +0 -71
  303. package/dist/production/src/mapper/relations/OneHasOneOwningCreateInputProcessor.cjs.map +0 -1
  304. package/dist/production/src/mapper/relations/OneHasOneOwningCreateInputProcessor.js +0 -71
  305. package/dist/production/src/mapper/relations/OneHasOneOwningCreateInputProcessor.js.map +0 -1
  306. package/dist/production/src/mapper/relations/OneHasOneOwningUpdateInputProcessor.cjs +0 -200
  307. package/dist/production/src/mapper/relations/OneHasOneOwningUpdateInputProcessor.cjs.map +0 -1
  308. package/dist/production/src/mapper/relations/OneHasOneOwningUpdateInputProcessor.js +0 -200
  309. package/dist/production/src/mapper/relations/OneHasOneOwningUpdateInputProcessor.js.map +0 -1
  310. package/dist/types/mapper/DataManipulationBuilder.d.ts +0 -7
  311. package/dist/types/mapper/DataManipulationBuilder.d.ts.map +0 -1
  312. package/dist/types/mapper/relations/ManyHasManyInputProcessor.d.ts +0 -32
  313. package/dist/types/mapper/relations/ManyHasManyInputProcessor.d.ts.map +0 -1
  314. package/dist/types/mapper/relations/ManyHasOneInputProcessor.d.ts +0 -32
  315. package/dist/types/mapper/relations/ManyHasOneInputProcessor.d.ts.map +0 -1
  316. package/dist/types/mapper/relations/OneHasManyInputProcessor.d.ts +0 -29
  317. package/dist/types/mapper/relations/OneHasManyInputProcessor.d.ts.map +0 -1
  318. package/dist/types/mapper/relations/OneHasOneInverseCreateInputProcessor.d.ts +0 -21
  319. package/dist/types/mapper/relations/OneHasOneInverseCreateInputProcessor.d.ts.map +0 -1
  320. package/dist/types/mapper/relations/OneHasOneInverseUpdateInputProcessor.d.ts.map +0 -1
  321. package/dist/types/mapper/relations/OneHasOneOwningCreateInputProcessor.d.ts +0 -21
  322. package/dist/types/mapper/relations/OneHasOneOwningCreateInputProcessor.d.ts.map +0 -1
  323. package/dist/types/mapper/relations/OneHasOneOwningUpdateInputProcessor.d.ts.map +0 -1
  324. package/src/mapper/DataManipulationBuilder.ts +0 -12
  325. package/src/mapper/relations/ManyHasManyInputProcessor.ts +0 -108
  326. package/src/mapper/relations/ManyHasOneInputProcessor.ts +0 -158
  327. package/src/mapper/relations/OneHasManyInputProcessor.ts +0 -101
  328. package/src/mapper/relations/OneHasOneInverseCreateInputProcessor.ts +0 -99
  329. package/src/mapper/relations/OneHasOneOwningCreateInputProcessor.ts +0 -92
  330. package/src/mapper/relations/OneHasOneOwningUpdateInputProcessor.ts +0 -253
@@ -0,0 +1,111 @@
1
+ import { UpdateInputProcessor } from '../../../inputProcessing'
2
+ import { Input, Model } from '@contember/schema'
3
+ import { Mapper } from '../../Mapper'
4
+ import { MutationResultType } from '../../Result'
5
+ import { SqlUpdateInputProcessorResult } from '../SqlUpdateInputProcessor'
6
+
7
+ type Context = Model.OneHasManyContext
8
+
9
+ export class OneHasManyUpdateInputProcessor implements UpdateInputProcessor.HasManyRelationInputProcessor<Context, SqlUpdateInputProcessorResult>{
10
+ constructor(
11
+ private readonly mapper: Mapper,
12
+ ) {
13
+ }
14
+
15
+ public async connect(
16
+ { entity, targetEntity, targetRelation, input }: Context & { input: Input.UniqueWhere },
17
+ ) {
18
+ return async ({ primary }: { primary: Input.PrimaryValue }) => {
19
+ return await this.mapper.update(targetEntity, input, {
20
+ [targetRelation.name]: { connect: { [entity.primary]: primary } },
21
+ })
22
+ }
23
+ }
24
+
25
+ public async create(
26
+ { entity, targetEntity, targetRelation, input }: Context & { input: Input.CreateDataInput },
27
+ ) {
28
+ return async ({ primary }: { primary: Input.PrimaryValue }) => {
29
+ return await this.mapper.insert(targetEntity, {
30
+ ...input,
31
+ [targetRelation.name]: { connect: { [entity.primary]: primary } },
32
+ })
33
+ }
34
+ }
35
+
36
+ public async connectOrCreate(
37
+ { entity, targetRelation, targetEntity, input: { connect, create } }: Context & { input: Input.ConnectOrCreateInput },
38
+ ) {
39
+ return async ({ primary }: { primary: Input.PrimaryValue }) => {
40
+ const connectData = {
41
+ [targetRelation.name]: {
42
+ connect: { [entity.primary]: primary },
43
+ },
44
+ }
45
+ return await this.mapper.upsert(targetEntity, connect, connectData, {
46
+ ...create,
47
+ ...connectData,
48
+ })
49
+ }
50
+ }
51
+
52
+ public async update(
53
+ { entity, targetEntity, targetRelation, input: { data, where } }: Context & { input: UpdateInputProcessor.UpdateManyInput },
54
+ ) {
55
+ return async ({ primary }: { primary: Input.PrimaryValue }) => {
56
+ return await this.mapper.update(
57
+ targetEntity,
58
+ { ...where, [targetRelation.name]: { [entity.primary]: primary } },
59
+ {
60
+ ...data,
61
+ // [targetRelation.name]: {connect: thisPrimary}
62
+ },
63
+ )
64
+ }
65
+ }
66
+
67
+ public async upsert(
68
+ { entity, targetEntity, targetRelation, input: { create, update, where } }: Context & { input: UpdateInputProcessor.UpsertManyInput },
69
+ ) {
70
+ return async ({ primary }: { primary: Input.PrimaryValue }) => {
71
+ const result = await this.mapper.update(
72
+ targetEntity,
73
+ { ...where, [targetRelation.name]: { [entity.primary]: primary } },
74
+ {
75
+ ...update,
76
+ // [targetRelation.name]: {connect: thisPrimary}
77
+ },
78
+ )
79
+ if (result[0].result === MutationResultType.notFoundError) {
80
+ return await this.mapper.insert(targetEntity, {
81
+ ...create,
82
+ [targetRelation.name]: { connect: { [entity.primary]: primary } },
83
+ })
84
+ }
85
+ return result
86
+ }
87
+ }
88
+
89
+ public async disconnect(
90
+ { entity, targetEntity, relation, targetRelation, input }: Context & { input: Input.UniqueWhere },
91
+ ) {
92
+ return async ({ primary }: { primary: Input.PrimaryValue }) => {
93
+ return await this.mapper.update(
94
+ targetEntity,
95
+ { ...input, [targetRelation.name]: { [entity.primary]: primary } },
96
+ { [targetRelation.name]: { disconnect: true } },
97
+ )
98
+ }
99
+ }
100
+
101
+ public async delete(
102
+ { entity, targetEntity, relation, targetRelation, input }: Context & { input: Input.UniqueWhere },
103
+ ) {
104
+ return async ({ primary }: { primary: Input.PrimaryValue }) => {
105
+ return await this.mapper.delete(targetEntity, {
106
+ ...input,
107
+ [targetRelation.name]: { [entity.primary]: primary },
108
+ })
109
+ }
110
+ }
111
+ }
@@ -6,12 +6,15 @@ import {
6
6
  MutationResultList,
7
7
  MutationResultType,
8
8
  NothingToDoReason,
9
- } from '../Result'
10
- import { UpdateInputProcessor } from '../../inputProcessing'
9
+ } from '../../Result'
10
+ import { UpdateInputProcessor } from '../../../inputProcessing'
11
11
  import { Input, Model } from '@contember/schema'
12
- import { Mapper } from '../Mapper'
12
+ import { Mapper } from '../../Mapper'
13
+ import { SqlUpdateInputProcessorResult } from '../SqlUpdateInputProcessor'
13
14
 
14
- export class OneHasOneInverseUpdateInputProcessor {
15
+ type Context = Model.OneHasOneInverseContext
16
+
17
+ export class OneHasOneInverseUpdateInputProcessor implements UpdateInputProcessor.HasOneRelationInputProcessor<Context, SqlUpdateInputProcessorResult>{
15
18
  constructor(
16
19
  private readonly primaryValue: Input.PrimaryValue,
17
20
  private readonly mapper: Mapper,
@@ -19,24 +22,101 @@ export class OneHasOneInverseUpdateInputProcessor {
19
22
  }
20
23
 
21
24
  public async connect({ input, ...ctx }: Model.OneHasOneInverseContext & { input: Input.UniqueWhere }) {
22
- const newOwner = await this.mapper.getPrimaryValue(ctx.targetEntity, input)
23
- if (!newOwner) {
24
- return [new MutationEntryNotFoundError([], input)]
25
+ return async () => {
26
+ const newOwner = await this.mapper.getPrimaryValue(ctx.targetEntity, input)
27
+ if (!newOwner) {
28
+ return [new MutationEntryNotFoundError([], input)]
29
+ }
30
+ return await this.connectInternal(ctx, newOwner)
25
31
  }
26
- return await this.connectInternal(ctx, newOwner)
27
32
  }
28
33
 
29
34
  public async connectOrCreate(
30
35
  { input, ...ctx }: Model.OneHasOneInverseContext & { input: Input.ConnectOrCreateInput },
31
36
  ) {
32
- const newOwner = await this.mapper.getPrimaryValue(ctx.targetEntity, input.connect)
33
- if (newOwner) {
34
- return await this.connectInternal(ctx, newOwner)
37
+ return async () => {
38
+ const newOwner = await this.mapper.getPrimaryValue(ctx.targetEntity, input.connect)
39
+ if (newOwner) {
40
+ return await this.connectInternal(ctx, newOwner)
41
+ }
42
+ return await this.createInternal({ ...ctx, input: input.create })
35
43
  }
36
- return await this.create({ ...ctx, input: input.create })
37
44
  }
38
45
 
39
46
 
47
+ public async create(ctx: Model.OneHasOneInverseContext & { input: Input.CreateDataInput }) {
48
+ return async () => {
49
+ return await this.createInternal(ctx)
50
+ }
51
+ }
52
+
53
+ public async update({ entity, targetEntity, targetRelation, input }: Model.OneHasOneInverseContext & { input: Input.UpdateDataInput }) {
54
+ return async () => {
55
+ return await this.mapper.update(
56
+ targetEntity,
57
+ { [targetRelation.name]: { [entity.primary]: this.primaryValue } },
58
+ input,
59
+ )
60
+ }
61
+ }
62
+ public async upsert(context: Model.OneHasOneInverseContext & { input: UpdateInputProcessor.UpsertInput }) {
63
+ return async () => {
64
+ const { targetEntity, targetRelation, entity, input: { update, create } } = context
65
+ const result = await this.mapper.update(
66
+ targetEntity,
67
+ { [targetRelation.name]: { [entity.primary]: this.primaryValue } },
68
+ update,
69
+ )
70
+ if (result[0].result === MutationResultType.notFoundError) {
71
+ return await this.createInternal({
72
+ ...context,
73
+ input: create,
74
+ })
75
+ }
76
+ return result
77
+ }
78
+ }
79
+
80
+ public async disconnect({ entity, targetEntity, relation, targetRelation }: Model.OneHasOneInverseContext & { input: undefined }) {
81
+ return async () => {
82
+ if (!relation.nullable && !targetRelation.orphanRemoval) {
83
+ return [new MutationConstraintViolationError([], ConstraintType.notNull)]
84
+ }
85
+ const currentOwner = await this.mapper.getPrimaryValue(targetEntity, {
86
+ [targetRelation.name]: { [entity.primary]: this.primaryValue },
87
+ })
88
+ if (!currentOwner) {
89
+ return [new MutationNothingToDo([], NothingToDoReason.emptyRelation)]
90
+ }
91
+ if (currentOwner && !targetRelation.nullable) {
92
+ return [new MutationConstraintViolationError([], ConstraintType.notNull)]
93
+ }
94
+
95
+ const result = await this.mapper.updateInternal(
96
+ targetEntity,
97
+ { [targetEntity.primary]: currentOwner },
98
+ builder => {
99
+ builder.addPredicates([targetRelation.name])
100
+ builder.addFieldValue(targetRelation.name, null)
101
+ },
102
+ )
103
+ if (targetRelation.orphanRemoval) {
104
+ result.push(...(await this.mapper.delete(entity, { [entity.primary]: this.primaryValue })))
105
+ }
106
+ return result
107
+ }
108
+ }
109
+
110
+ public async delete({ entity, targetEntity, relation, targetRelation }: Model.OneHasOneInverseContext & { input: undefined }) {
111
+ return async () => {
112
+ if (!relation.nullable && !targetRelation.orphanRemoval) {
113
+ return [new MutationConstraintViolationError([], ConstraintType.notNull)]
114
+ }
115
+ // orphan removal is handled in mapper.delete
116
+ return await this.mapper.delete(targetEntity, { [targetRelation.name]: { [entity.primary]: this.primaryValue } })
117
+ }
118
+ }
119
+
40
120
  private async connectInternal(
41
121
  { entity, targetEntity, targetRelation }: Model.OneHasOneInverseContext,
42
122
  newOwner: Input.PrimaryValue,
@@ -76,7 +156,7 @@ export class OneHasOneInverseUpdateInputProcessor {
76
156
  return result
77
157
  }
78
158
 
79
- public async create({ entity, targetEntity, targetRelation, input }: Model.OneHasOneInverseContext & { input: Input.CreateDataInput }) {
159
+ private async createInternal({ entity, targetEntity, targetRelation, input }: Model.OneHasOneInverseContext & { input: Input.CreateDataInput }) {
80
160
  const currentOwner = await this.mapper.getPrimaryValue(targetEntity, {
81
161
  [targetRelation.name]: { [entity.primary]: this.primaryValue },
82
162
  })
@@ -101,64 +181,4 @@ export class OneHasOneInverseUpdateInputProcessor {
101
181
 
102
182
  return result
103
183
  }
104
-
105
- public async update({ entity, targetEntity, targetRelation, input }: Model.OneHasOneInverseContext & { input: Input.UpdateDataInput }) {
106
- return await this.mapper.update(
107
- targetEntity,
108
- { [targetRelation.name]: { [entity.primary]: this.primaryValue } },
109
- input,
110
- )
111
- }
112
-
113
- public async upsert(context: Model.OneHasOneInverseContext & { input: UpdateInputProcessor.UpsertInput }) {
114
- const { targetEntity, targetRelation, entity, input: { update, create } } = context
115
- const result = await this.mapper.update(
116
- targetEntity,
117
- { [targetRelation.name]: { [entity.primary]: this.primaryValue } },
118
- update,
119
- )
120
- if (result[0].result === MutationResultType.notFoundError) {
121
- return await this.create({
122
- ...context,
123
- input: create,
124
- })
125
- }
126
- return result
127
- }
128
-
129
- public async disconnect({ entity, targetEntity, relation, targetRelation }: Model.OneHasOneInverseContext & { input: undefined }) {
130
- if (!relation.nullable && !targetRelation.orphanRemoval) {
131
- return [new MutationConstraintViolationError([], ConstraintType.notNull)]
132
- }
133
- const currentOwner = await this.mapper.getPrimaryValue(targetEntity, {
134
- [targetRelation.name]: { [entity.primary]: this.primaryValue },
135
- })
136
- if (!currentOwner) {
137
- return [new MutationNothingToDo([], NothingToDoReason.emptyRelation)]
138
- }
139
- if (currentOwner && !targetRelation.nullable) {
140
- return [new MutationConstraintViolationError([], ConstraintType.notNull)]
141
- }
142
-
143
- const result = await this.mapper.updateInternal(
144
- targetEntity,
145
- { [targetEntity.primary]: currentOwner },
146
- builder => {
147
- builder.addPredicates([targetRelation.name])
148
- builder.addFieldValue(targetRelation.name, null)
149
- },
150
- )
151
- if (targetRelation.orphanRemoval) {
152
- result.push(...(await this.mapper.delete(entity, { [entity.primary]: this.primaryValue })))
153
- }
154
- return result
155
- }
156
-
157
- public async delete({ entity, targetEntity, relation, targetRelation }: Model.OneHasOneInverseContext & { input: undefined }) {
158
- if (!relation.nullable && !targetRelation.orphanRemoval) {
159
- return [new MutationConstraintViolationError([], ConstraintType.notNull)]
160
- }
161
- // orphan removal is handled in mapper.delete
162
- return await this.mapper.delete(targetEntity, { [targetRelation.name]: { [entity.primary]: this.primaryValue } })
163
- }
164
184
  }
@@ -0,0 +1,243 @@
1
+ import { UpdateInputProcessor } from '../../../inputProcessing'
2
+ import { Input, Model } from '@contember/schema'
3
+ import {
4
+ ConstraintType,
5
+ getInsertPrimary,
6
+ MutationConstraintViolationError,
7
+ MutationEntryNotFoundError,
8
+ MutationNothingToDo,
9
+ MutationResultList,
10
+ MutationResultType,
11
+ NothingToDoReason,
12
+ } from '../../Result'
13
+ import { Mapper } from '../../Mapper'
14
+ import { UpdateBuilder } from '../../update/UpdateBuilder'
15
+ import { CheckedPrimary } from '../../CheckedPrimary'
16
+ import { SqlUpdateInputProcessorResult } from '../SqlUpdateInputProcessor'
17
+
18
+ type Context = Model.OneHasOneOwningContext
19
+
20
+ export class OneHasOneOwningUpdateInputProcessor implements UpdateInputProcessor.HasOneRelationInputProcessor<Context, SqlUpdateInputProcessorResult>{
21
+ constructor(
22
+ private readonly primaryValue: Input.PrimaryValue,
23
+ private readonly mapper: Mapper,
24
+ private readonly updateBuilder: UpdateBuilder,
25
+ ) {
26
+ }
27
+
28
+ public async connect(context: Model.OneHasOneOwningContext & { input: Input.UniqueWhere }) {
29
+ const { entity, relation, targetEntity, targetRelation, input } = context
30
+ const newInverseSide = await this.mapper.getPrimaryValue(targetEntity, input)
31
+ if (!newInverseSide) {
32
+ return [new MutationEntryNotFoundError([], input)]
33
+ }
34
+ const currentInverseSide = await this.getCurrentInverseSide(targetRelation, relation, entity)
35
+ const currentOwnerResult = await this.handleStateBeforeConnect(context, currentInverseSide, newInverseSide)
36
+ if (currentOwnerResult.some(it => it.error)
37
+ || (currentOwnerResult.length === 1 && currentOwnerResult[0].result === MutationResultType.nothingToDo)
38
+ ) {
39
+ return currentOwnerResult
40
+ }
41
+
42
+ this.updateBuilder.addFieldValue(relation.name, newInverseSide)
43
+
44
+ return async () => {
45
+ return [
46
+ ...currentOwnerResult,
47
+ ...(await this.cleanupOrphan(relation, targetEntity, currentInverseSide)),
48
+ ]
49
+ }
50
+ }
51
+
52
+ public async create(context: Model.OneHasOneOwningContext & { input: Input.CreateDataInput }) {
53
+ const { entity, relation, targetEntity, targetRelation } = context
54
+ const currentInverseSide = await this.getCurrentInverseSide(targetRelation, relation, entity)
55
+ const createResult = await this.createInternal(context, currentInverseSide)
56
+ const newInverseSide = getInsertPrimary(createResult)
57
+ if (!newInverseSide) {
58
+ return createResult
59
+ }
60
+ this.updateBuilder.addFieldValue(relation.name, newInverseSide)
61
+
62
+ return async () => {
63
+ return [
64
+ ...createResult,
65
+ ...(await this.cleanupOrphan(relation, targetEntity, currentInverseSide)),
66
+ ]
67
+ }
68
+ }
69
+
70
+ public async connectOrCreate({ input: { connect, create }, ...context }: Model.OneHasOneOwningContext & { input: Input.ConnectOrCreateInput }) {
71
+ const { relation, targetRelation, targetEntity, entity } = context
72
+ const currentInverseSide = await this.getCurrentInverseSide(targetRelation, relation, entity)
73
+ const newInverseSide = await this.mapper.getPrimaryValue(targetEntity, connect)
74
+
75
+ if (newInverseSide) {
76
+ const currentOwnerResult = await this.handleStateBeforeConnect(context, currentInverseSide, newInverseSide)
77
+ if (currentOwnerResult.some(it => it.error)
78
+ || (currentOwnerResult.length === 1 && currentOwnerResult[0].result === MutationResultType.nothingToDo)
79
+ ) {
80
+ return currentOwnerResult
81
+ }
82
+ this.updateBuilder.addFieldValue(relation.name, newInverseSide)
83
+ return async () => {
84
+ return [
85
+ ...currentOwnerResult,
86
+ ...(await this.cleanupOrphan(relation, targetEntity, currentInverseSide)),
87
+ ]
88
+ }
89
+
90
+ }
91
+
92
+ const createResult = await this.createInternal({ ...context, input: create }, currentInverseSide)
93
+ const newInverseSideCreate = getInsertPrimary(createResult)
94
+ if (!newInverseSideCreate) {
95
+ return createResult
96
+ }
97
+ this.updateBuilder.addFieldValue(relation.name, newInverseSideCreate)
98
+ return async () => {
99
+ return [
100
+ ...createResult,
101
+ ...(await this.cleanupOrphan(relation, targetEntity, currentInverseSide)),
102
+ ]
103
+ }
104
+ }
105
+
106
+ public async update({ entity, relation, targetEntity, input }: Model.OneHasOneOwningContext & { input: Input.UpdateDataInput }) {
107
+ return async () => {
108
+ const inversePrimary = await this.mapper.selectField(
109
+ entity,
110
+ { [entity.primary]: this.primaryValue },
111
+ relation.name,
112
+ )
113
+ if (!inversePrimary) {
114
+ return [new MutationNothingToDo([], NothingToDoReason.emptyRelation)]
115
+ }
116
+ return await this.mapper.update(targetEntity, { [targetEntity.primary]: inversePrimary }, input)
117
+ }
118
+ }
119
+
120
+ public async upsert({ entity, relation, targetEntity, input: { create, update } }: Model.OneHasOneOwningContext & { input: UpdateInputProcessor.UpsertInput }) {
121
+ const primary = await this.mapper.selectField(entity, { [entity.primary]: this.primaryValue }, relation.name)
122
+ if (!primary) {
123
+ const insertResult = await this.mapper.insert(targetEntity, create)
124
+ const insertPrimary = getInsertPrimary(insertResult)
125
+ if (!insertPrimary) {
126
+ return insertResult
127
+ }
128
+ this.updateBuilder.addFieldValue(relation.name, insertPrimary)
129
+ return []
130
+ }
131
+
132
+ return async () => {
133
+ return await this.mapper.update(targetEntity, { [targetEntity.primary]: primary }, update)
134
+ }
135
+ }
136
+
137
+ public async disconnect({ entity, targetEntity, relation, targetRelation }: Model.OneHasOneOwningContext & { input: undefined }) {
138
+ if (!relation.nullable) {
139
+ return [new MutationConstraintViolationError([], ConstraintType.notNull)]
140
+ }
141
+
142
+ const inversePrimary = (targetRelation && !targetRelation.nullable) || relation.orphanRemoval
143
+ ? await this.mapper.selectField(entity, { [entity.primary]: this.primaryValue }, relation.name)
144
+ : undefined
145
+ if (inversePrimary && targetRelation && !targetRelation.nullable && !relation.orphanRemoval) {
146
+ return [new MutationConstraintViolationError([], ConstraintType.notNull)]
147
+ }
148
+ this.updateBuilder.addFieldValue(relation.name, null)
149
+
150
+ if (relation.orphanRemoval && inversePrimary) {
151
+ return async () => {
152
+ return await this.mapper.delete(targetEntity, { [targetEntity.primary]: inversePrimary })
153
+ }
154
+ }
155
+
156
+ return []
157
+ }
158
+
159
+ public async delete({ entity, targetEntity, relation, targetRelation }: Model.OneHasOneOwningContext & { input: undefined }) {
160
+ if (!relation.nullable && relation.joiningColumn.onDelete !== Model.OnDelete.cascade) {
161
+ return [new MutationConstraintViolationError([], ConstraintType.notNull)]
162
+ }
163
+
164
+ return async () => {
165
+ const targetPrimary = await this.mapper.selectField(
166
+ entity,
167
+ { [entity.primary]: this.primaryValue },
168
+ relation.name,
169
+ )
170
+ if (!targetPrimary) {
171
+ return [new MutationNothingToDo([], NothingToDoReason.emptyRelation)]
172
+ }
173
+ return await this.mapper.delete(targetEntity, new CheckedPrimary(targetPrimary))
174
+ }
175
+ }
176
+
177
+ private async createInternal(
178
+ { targetEntity, targetRelation, relation, input }: Model.OneHasOneOwningContext & { input: Input.CreateDataInput },
179
+ currentInverseSide: Input.PrimaryValue | undefined,
180
+ ): Promise<MutationResultList> {
181
+ if (targetRelation && !targetRelation.nullable && !relation.orphanRemoval && currentInverseSide) {
182
+ return [new MutationConstraintViolationError([], ConstraintType.notNull)]
183
+ }
184
+
185
+ return await this.mapper.insert(targetEntity, input)
186
+ }
187
+
188
+ private async getCurrentInverseSide(targetRelation: Model.OneHasOneInverseRelation | null, relation: Model.OneHasOneOwningRelation, entity: Model.Entity) {
189
+ if ((targetRelation && !targetRelation.nullable) || relation.orphanRemoval) {
190
+ return this.mapper.selectField(entity, { [entity.primary]: this.primaryValue }, relation.name)
191
+ }
192
+ return undefined
193
+ }
194
+
195
+ private async cleanupOrphan(relation: Model.OneHasOneOwningRelation, targetEntity: Model.Entity, currentInverseSide: Input.PrimaryValue | undefined) {
196
+ if (relation.orphanRemoval && currentInverseSide) {
197
+ return await this.mapper.delete(targetEntity, { [targetEntity.primary]: currentInverseSide })
198
+ }
199
+ return []
200
+ }
201
+
202
+ private async handleStateBeforeConnect(
203
+ { targetEntity, targetRelation, relation, entity }: Model.OneHasOneOwningContext,
204
+ currentInverseSide: Input.PrimaryValue | undefined,
205
+ newInverseSide: Input.PrimaryValue,
206
+ ): Promise<MutationResultList> {
207
+
208
+ if (currentInverseSide === newInverseSide) {
209
+ return [new MutationNothingToDo([], NothingToDoReason.alreadyExists)]
210
+ }
211
+
212
+ const currentOwnerOfNewInverseSide = await this.mapper.getPrimaryValue(entity, {
213
+ [relation.name]: { [targetEntity.primary]: newInverseSide },
214
+ })
215
+
216
+ if (currentOwnerOfNewInverseSide === this.primaryValue) {
217
+ return [new MutationNothingToDo([], NothingToDoReason.alreadyExists)]
218
+ }
219
+
220
+ // orphan removal handled bellow
221
+ if (targetRelation && !targetRelation.nullable && !relation.orphanRemoval && currentInverseSide) {
222
+ return [new MutationConstraintViolationError([], ConstraintType.notNull)]
223
+ }
224
+
225
+ if (currentOwnerOfNewInverseSide) {
226
+ if (!relation.nullable) {
227
+ return [new MutationConstraintViolationError([], ConstraintType.notNull)]
228
+ }
229
+
230
+ return await this.mapper.updateInternal(
231
+ entity,
232
+ {
233
+ [entity.primary]: currentOwnerOfNewInverseSide,
234
+ },
235
+ builder => {
236
+ builder.addPredicates([relation.name])
237
+ builder.addFieldValue(relation.name, null)
238
+ },
239
+ )
240
+ }
241
+ return []
242
+ }
243
+ }
@@ -49,22 +49,22 @@ test('insert posts with locales (one has many)', async () => {
49
49
  },
50
50
  {
51
51
  sql: SQL`with "root_" as
52
- (select ? :: uuid as "post_id", ? :: uuid as "id", ? :: text as "locale", ? :: text as "title")
53
- insert into "public"."post_locale" ("post_id", "id", "locale", "title")
54
- select "root_"."post_id", "root_"."id", "root_"."locale", "root_"."title"
52
+ (select ? :: uuid as "id", ? :: text as "locale", ? :: text as "title", ? :: uuid as "post_id")
53
+ insert into "public"."post_locale" ("id", "locale", "title", "post_id")
54
+ select "root_"."id", "root_"."locale", "root_"."title", "root_"."post_id"
55
55
  from "root_"
56
56
  returning "id"`,
57
- parameters: [testUuid(1), testUuid(2), 'cs', 'Ahoj svete'],
57
+ parameters: [testUuid(2), 'cs', 'Ahoj svete', testUuid(1)],
58
58
  response: { rows: [{ id: testUuid(2) }] },
59
59
  },
60
60
  {
61
61
  sql: SQL`with "root_" as
62
- (select ? :: uuid as "post_id", ? :: uuid as "id", ? :: text as "locale", ? :: text as "title")
63
- insert into "public"."post_locale" ("post_id", "id", "locale", "title")
64
- select "root_"."post_id", "root_"."id", "root_"."locale", "root_"."title"
62
+ (select ? :: uuid as "id", ? :: text as "locale", ? :: text as "title", ? :: uuid as "post_id")
63
+ insert into "public"."post_locale" ("id", "locale", "title", "post_id")
64
+ select "root_"."id", "root_"."locale", "root_"."title", "root_"."post_id"
65
65
  from "root_"
66
66
  returning "id"`,
67
- parameters: [testUuid(1), testUuid(3), 'en', 'Hello world'],
67
+ parameters: [testUuid(3), 'en', 'Hello world', testUuid(1)],
68
68
  response: { rows: [{ id: testUuid(3) }] },
69
69
  },
70
70
  {
@@ -68,12 +68,12 @@ test('upsert - not exists (composed unique)', async () => {
68
68
  },
69
69
  {
70
70
  sql: SQL`with "root_" as
71
- (select ? :: uuid as "id", ? :: text as "title", ? :: text as "locale", ? :: uuid as "post_id")
72
- insert into "public"."post_locale" ("id", "title", "locale", "post_id")
73
- select "root_"."id", "root_"."title", "root_"."locale", "root_"."post_id"
71
+ (select ? :: uuid as "id", ? :: text as "title", ? :: uuid as "post_id", ? :: text as "locale")
72
+ insert into "public"."post_locale" ("id", "title", "post_id", "locale")
73
+ select "root_"."id", "root_"."title", "root_"."post_id", "root_"."locale"
74
74
  from "root_"
75
75
  returning "id"`,
76
- parameters: [testUuid(1), 'World', null, testUuid(2)],
76
+ parameters: [testUuid(1), 'World', testUuid(2), null],
77
77
  response: { rows: [{ id: testUuid(1) }] },
78
78
  },
79
79
  ]),
@@ -1,5 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const AbortDataManipulation = Symbol("AbortDataManipulation");
4
- exports.AbortDataManipulation = AbortDataManipulation;
5
- //# sourceMappingURL=DataManipulationBuilder.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DataManipulationBuilder.cjs","sources":["../../../../../packages/engine-content-api/src/mapper/DataManipulationBuilder.ts"],"sourcesContent":["import { Value } from '@contember/schema'\n\nexport interface DataManipulationBuilder {\n\taddFieldValue(\n\t\tfieldName: string,\n\t\tvalue: Value.GenericValueLike<Value.AtomicValue<AbortDataManipulation | undefined>>,\n\t): Promise<Value.AtomicValue<AbortDataManipulation | undefined>>\n}\n\n\nexport const AbortDataManipulation = Symbol('AbortDataManipulation')\nexport type AbortDataManipulation = typeof AbortDataManipulation\n"],"names":[],"mappings":";;AAUa,MAAA,wBAAwB,OAAO,uBAAuB;;"}
@@ -1,5 +0,0 @@
1
- const AbortDataManipulation = Symbol("AbortDataManipulation");
2
- export {
3
- AbortDataManipulation
4
- };
5
- //# sourceMappingURL=DataManipulationBuilder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DataManipulationBuilder.js","sources":["../../../../../packages/engine-content-api/src/mapper/DataManipulationBuilder.ts"],"sourcesContent":["import { Value } from '@contember/schema'\n\nexport interface DataManipulationBuilder {\n\taddFieldValue(\n\t\tfieldName: string,\n\t\tvalue: Value.GenericValueLike<Value.AtomicValue<AbortDataManipulation | undefined>>,\n\t): Promise<Value.AtomicValue<AbortDataManipulation | undefined>>\n}\n\n\nexport const AbortDataManipulation = Symbol('AbortDataManipulation')\nexport type AbortDataManipulation = typeof AbortDataManipulation\n"],"names":[],"mappings":"AAUa,MAAA,wBAAwB,OAAO,uBAAuB;"}