@contember/engine-content-api 2.0.0-alpha.36 → 2.0.0-alpha.38

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 (306) hide show
  1. package/dist/development/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.cjs +31 -6
  2. package/dist/development/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.cjs.map +1 -1
  3. package/dist/development/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.js +31 -6
  4. package/dist/development/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.js.map +1 -1
  5. package/dist/development/src/input-validation/ColumnValueResolver.cjs.map +1 -1
  6. package/dist/development/src/input-validation/ColumnValueResolver.js.map +1 -1
  7. package/dist/development/src/input-validation/preValidation/CreateInputPreValidationProcessor.cjs.map +1 -1
  8. package/dist/development/src/input-validation/preValidation/CreateInputPreValidationProcessor.js.map +1 -1
  9. package/dist/development/src/input-validation/preValidation/InputPreValidator.cjs.map +1 -1
  10. package/dist/development/src/input-validation/preValidation/InputPreValidator.js.map +1 -1
  11. package/dist/development/src/input-validation/preValidation/UpdateInputPreValidationProcessor.cjs.map +1 -1
  12. package/dist/development/src/input-validation/preValidation/UpdateInputPreValidationProcessor.js.map +1 -1
  13. package/dist/development/src/inputProcessing/CreateInputVisitor.cjs +6 -7
  14. package/dist/development/src/inputProcessing/CreateInputVisitor.cjs.map +1 -1
  15. package/dist/development/src/inputProcessing/CreateInputVisitor.js +6 -7
  16. package/dist/development/src/inputProcessing/CreateInputVisitor.js.map +1 -1
  17. package/dist/development/src/inputProcessing/UpdateInputVisitor.cjs +14 -15
  18. package/dist/development/src/inputProcessing/UpdateInputVisitor.cjs.map +1 -1
  19. package/dist/development/src/inputProcessing/UpdateInputVisitor.js +14 -15
  20. package/dist/development/src/inputProcessing/UpdateInputVisitor.js.map +1 -1
  21. package/dist/development/src/mapper/ColumnValue.cjs +8 -18
  22. package/dist/development/src/mapper/ColumnValue.cjs.map +1 -1
  23. package/dist/development/src/mapper/ColumnValue.js +8 -18
  24. package/dist/development/src/mapper/ColumnValue.js.map +1 -1
  25. package/dist/development/src/mapper/EventManager.cjs +1 -1
  26. package/dist/development/src/mapper/EventManager.cjs.map +1 -1
  27. package/dist/development/src/mapper/EventManager.js +1 -1
  28. package/dist/development/src/mapper/EventManager.js.map +1 -1
  29. package/dist/development/src/mapper/Mapper.cjs +8 -28
  30. package/dist/development/src/mapper/Mapper.cjs.map +1 -1
  31. package/dist/development/src/mapper/Mapper.js +8 -28
  32. package/dist/development/src/mapper/Mapper.js.map +1 -1
  33. package/dist/development/src/mapper/Result.cjs.map +1 -1
  34. package/dist/development/src/mapper/Result.js.map +1 -1
  35. package/dist/development/src/mapper/delete/DeleteExecutor.cjs +4 -8
  36. package/dist/development/src/mapper/delete/DeleteExecutor.cjs.map +1 -1
  37. package/dist/development/src/mapper/delete/DeleteExecutor.js +5 -9
  38. package/dist/development/src/mapper/delete/DeleteExecutor.js.map +1 -1
  39. package/dist/development/src/mapper/insert/InsertBuilder.cjs +12 -8
  40. package/dist/development/src/mapper/insert/InsertBuilder.cjs.map +1 -1
  41. package/dist/development/src/mapper/insert/InsertBuilder.js +13 -9
  42. package/dist/development/src/mapper/insert/InsertBuilder.js.map +1 -1
  43. package/dist/development/src/mapper/insert/Inserter.cjs.map +1 -1
  44. package/dist/development/src/mapper/insert/Inserter.js.map +1 -1
  45. package/dist/development/src/mapper/insert/SqlCreateInputProcessor.cjs +1 -3
  46. package/dist/development/src/mapper/insert/SqlCreateInputProcessor.cjs.map +1 -1
  47. package/dist/development/src/mapper/insert/SqlCreateInputProcessor.js +1 -3
  48. package/dist/development/src/mapper/insert/SqlCreateInputProcessor.js.map +1 -1
  49. package/dist/development/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.cjs +3 -5
  50. package/dist/development/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.cjs.map +1 -1
  51. package/dist/development/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.js +4 -6
  52. package/dist/development/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.js.map +1 -1
  53. package/dist/development/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.cjs +3 -5
  54. package/dist/development/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.cjs.map +1 -1
  55. package/dist/development/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.js +4 -6
  56. package/dist/development/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.js.map +1 -1
  57. package/dist/development/src/mapper/insert/relations/OneHasManyCreateInputProcessor.cjs +4 -3
  58. package/dist/development/src/mapper/insert/relations/OneHasManyCreateInputProcessor.cjs.map +1 -1
  59. package/dist/development/src/mapper/insert/relations/OneHasManyCreateInputProcessor.js +4 -3
  60. package/dist/development/src/mapper/insert/relations/OneHasManyCreateInputProcessor.js.map +1 -1
  61. package/dist/development/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.cjs +3 -5
  62. package/dist/development/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.cjs.map +1 -1
  63. package/dist/development/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.js +4 -6
  64. package/dist/development/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.js.map +1 -1
  65. package/dist/development/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.cjs +4 -6
  66. package/dist/development/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.cjs.map +1 -1
  67. package/dist/development/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.js +5 -7
  68. package/dist/development/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.js.map +1 -1
  69. package/dist/development/src/mapper/update/SqlUpdateInputProcessor.cjs.map +1 -1
  70. package/dist/development/src/mapper/update/SqlUpdateInputProcessor.js.map +1 -1
  71. package/dist/development/src/mapper/update/UpdateBuilder.cjs +12 -5
  72. package/dist/development/src/mapper/update/UpdateBuilder.cjs.map +1 -1
  73. package/dist/development/src/mapper/update/UpdateBuilder.js +13 -6
  74. package/dist/development/src/mapper/update/UpdateBuilder.js.map +1 -1
  75. package/dist/development/src/mapper/update/Updater.cjs.map +1 -1
  76. package/dist/development/src/mapper/update/Updater.js.map +1 -1
  77. package/dist/development/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.cjs +11 -16
  78. package/dist/development/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.cjs.map +1 -1
  79. package/dist/development/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.js +12 -17
  80. package/dist/development/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.js.map +1 -1
  81. package/dist/development/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.cjs +6 -7
  82. package/dist/development/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.cjs.map +1 -1
  83. package/dist/development/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.js +7 -8
  84. package/dist/development/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.js.map +1 -1
  85. package/dist/development/src/mapper/update/relations/OneHasManyUpdateInputProcessor.cjs +5 -4
  86. package/dist/development/src/mapper/update/relations/OneHasManyUpdateInputProcessor.cjs.map +1 -1
  87. package/dist/development/src/mapper/update/relations/OneHasManyUpdateInputProcessor.js +5 -4
  88. package/dist/development/src/mapper/update/relations/OneHasManyUpdateInputProcessor.js.map +1 -1
  89. package/dist/development/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.cjs +11 -12
  90. package/dist/development/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.cjs.map +1 -1
  91. package/dist/development/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.js +12 -13
  92. package/dist/development/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.js.map +1 -1
  93. package/dist/development/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.cjs +8 -12
  94. package/dist/development/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.cjs.map +1 -1
  95. package/dist/development/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.js +9 -13
  96. package/dist/development/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.js.map +1 -1
  97. package/dist/production/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.cjs +31 -6
  98. package/dist/production/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.cjs.map +1 -1
  99. package/dist/production/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.js +31 -6
  100. package/dist/production/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.js.map +1 -1
  101. package/dist/production/src/input-validation/ColumnValueResolver.cjs.map +1 -1
  102. package/dist/production/src/input-validation/ColumnValueResolver.js.map +1 -1
  103. package/dist/production/src/input-validation/preValidation/CreateInputPreValidationProcessor.cjs.map +1 -1
  104. package/dist/production/src/input-validation/preValidation/CreateInputPreValidationProcessor.js.map +1 -1
  105. package/dist/production/src/input-validation/preValidation/InputPreValidator.cjs.map +1 -1
  106. package/dist/production/src/input-validation/preValidation/InputPreValidator.js.map +1 -1
  107. package/dist/production/src/input-validation/preValidation/UpdateInputPreValidationProcessor.cjs.map +1 -1
  108. package/dist/production/src/input-validation/preValidation/UpdateInputPreValidationProcessor.js.map +1 -1
  109. package/dist/production/src/inputProcessing/CreateInputVisitor.cjs +6 -7
  110. package/dist/production/src/inputProcessing/CreateInputVisitor.cjs.map +1 -1
  111. package/dist/production/src/inputProcessing/CreateInputVisitor.js +6 -7
  112. package/dist/production/src/inputProcessing/CreateInputVisitor.js.map +1 -1
  113. package/dist/production/src/inputProcessing/UpdateInputVisitor.cjs +14 -15
  114. package/dist/production/src/inputProcessing/UpdateInputVisitor.cjs.map +1 -1
  115. package/dist/production/src/inputProcessing/UpdateInputVisitor.js +14 -15
  116. package/dist/production/src/inputProcessing/UpdateInputVisitor.js.map +1 -1
  117. package/dist/production/src/mapper/ColumnValue.cjs +8 -18
  118. package/dist/production/src/mapper/ColumnValue.cjs.map +1 -1
  119. package/dist/production/src/mapper/ColumnValue.js +8 -18
  120. package/dist/production/src/mapper/ColumnValue.js.map +1 -1
  121. package/dist/production/src/mapper/EventManager.cjs +1 -1
  122. package/dist/production/src/mapper/EventManager.cjs.map +1 -1
  123. package/dist/production/src/mapper/EventManager.js +1 -1
  124. package/dist/production/src/mapper/EventManager.js.map +1 -1
  125. package/dist/production/src/mapper/Mapper.cjs +8 -28
  126. package/dist/production/src/mapper/Mapper.cjs.map +1 -1
  127. package/dist/production/src/mapper/Mapper.js +8 -28
  128. package/dist/production/src/mapper/Mapper.js.map +1 -1
  129. package/dist/production/src/mapper/Result.cjs.map +1 -1
  130. package/dist/production/src/mapper/Result.js.map +1 -1
  131. package/dist/production/src/mapper/delete/DeleteExecutor.cjs +4 -8
  132. package/dist/production/src/mapper/delete/DeleteExecutor.cjs.map +1 -1
  133. package/dist/production/src/mapper/delete/DeleteExecutor.js +5 -9
  134. package/dist/production/src/mapper/delete/DeleteExecutor.js.map +1 -1
  135. package/dist/production/src/mapper/insert/InsertBuilder.cjs +12 -8
  136. package/dist/production/src/mapper/insert/InsertBuilder.cjs.map +1 -1
  137. package/dist/production/src/mapper/insert/InsertBuilder.js +13 -9
  138. package/dist/production/src/mapper/insert/InsertBuilder.js.map +1 -1
  139. package/dist/production/src/mapper/insert/Inserter.cjs.map +1 -1
  140. package/dist/production/src/mapper/insert/Inserter.js.map +1 -1
  141. package/dist/production/src/mapper/insert/SqlCreateInputProcessor.cjs +1 -3
  142. package/dist/production/src/mapper/insert/SqlCreateInputProcessor.cjs.map +1 -1
  143. package/dist/production/src/mapper/insert/SqlCreateInputProcessor.js +1 -3
  144. package/dist/production/src/mapper/insert/SqlCreateInputProcessor.js.map +1 -1
  145. package/dist/production/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.cjs +3 -5
  146. package/dist/production/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.cjs.map +1 -1
  147. package/dist/production/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.js +4 -6
  148. package/dist/production/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.js.map +1 -1
  149. package/dist/production/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.cjs +3 -5
  150. package/dist/production/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.cjs.map +1 -1
  151. package/dist/production/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.js +4 -6
  152. package/dist/production/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.js.map +1 -1
  153. package/dist/production/src/mapper/insert/relations/OneHasManyCreateInputProcessor.cjs +4 -3
  154. package/dist/production/src/mapper/insert/relations/OneHasManyCreateInputProcessor.cjs.map +1 -1
  155. package/dist/production/src/mapper/insert/relations/OneHasManyCreateInputProcessor.js +4 -3
  156. package/dist/production/src/mapper/insert/relations/OneHasManyCreateInputProcessor.js.map +1 -1
  157. package/dist/production/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.cjs +3 -5
  158. package/dist/production/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.cjs.map +1 -1
  159. package/dist/production/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.js +4 -6
  160. package/dist/production/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.js.map +1 -1
  161. package/dist/production/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.cjs +4 -6
  162. package/dist/production/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.cjs.map +1 -1
  163. package/dist/production/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.js +5 -7
  164. package/dist/production/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.js.map +1 -1
  165. package/dist/production/src/mapper/update/SqlUpdateInputProcessor.cjs.map +1 -1
  166. package/dist/production/src/mapper/update/SqlUpdateInputProcessor.js.map +1 -1
  167. package/dist/production/src/mapper/update/UpdateBuilder.cjs +12 -5
  168. package/dist/production/src/mapper/update/UpdateBuilder.cjs.map +1 -1
  169. package/dist/production/src/mapper/update/UpdateBuilder.js +13 -6
  170. package/dist/production/src/mapper/update/UpdateBuilder.js.map +1 -1
  171. package/dist/production/src/mapper/update/Updater.cjs.map +1 -1
  172. package/dist/production/src/mapper/update/Updater.js.map +1 -1
  173. package/dist/production/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.cjs +11 -16
  174. package/dist/production/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.cjs.map +1 -1
  175. package/dist/production/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.js +12 -17
  176. package/dist/production/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.js.map +1 -1
  177. package/dist/production/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.cjs +6 -7
  178. package/dist/production/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.cjs.map +1 -1
  179. package/dist/production/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.js +7 -8
  180. package/dist/production/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.js.map +1 -1
  181. package/dist/production/src/mapper/update/relations/OneHasManyUpdateInputProcessor.cjs +5 -4
  182. package/dist/production/src/mapper/update/relations/OneHasManyUpdateInputProcessor.cjs.map +1 -1
  183. package/dist/production/src/mapper/update/relations/OneHasManyUpdateInputProcessor.js +5 -4
  184. package/dist/production/src/mapper/update/relations/OneHasManyUpdateInputProcessor.js.map +1 -1
  185. package/dist/production/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.cjs +11 -12
  186. package/dist/production/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.cjs.map +1 -1
  187. package/dist/production/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.js +12 -13
  188. package/dist/production/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.js.map +1 -1
  189. package/dist/production/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.cjs +8 -12
  190. package/dist/production/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.cjs.map +1 -1
  191. package/dist/production/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.js +9 -13
  192. package/dist/production/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.js.map +1 -1
  193. package/dist/tests/cases/integration/graphQlRequests/insert/jsonInsert.test.d.ts +2 -0
  194. package/dist/tests/cases/integration/graphQlRequests/insert/jsonInsert.test.d.ts.map +1 -0
  195. package/dist/tests/tsconfig.tsbuildinfo +1 -1
  196. package/dist/types/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.d.ts.map +1 -1
  197. package/dist/types/input-validation/ColumnValueResolver.d.ts +1 -1
  198. package/dist/types/input-validation/ColumnValueResolver.d.ts.map +1 -1
  199. package/dist/types/input-validation/ValidationDataSelector.d.ts +1 -1
  200. package/dist/types/input-validation/preValidation/CreateInputPreValidationProcessor.d.ts +3 -3
  201. package/dist/types/input-validation/preValidation/CreateInputPreValidationProcessor.d.ts.map +1 -1
  202. package/dist/types/input-validation/preValidation/InputPreValidator.d.ts +3 -3
  203. package/dist/types/input-validation/preValidation/InputPreValidator.d.ts.map +1 -1
  204. package/dist/types/input-validation/preValidation/UpdateInputPreValidationProcessor.d.ts +4 -4
  205. package/dist/types/input-validation/preValidation/UpdateInputPreValidationProcessor.d.ts.map +1 -1
  206. package/dist/types/inputProcessing/CreateInputProcessor.d.ts +8 -6
  207. package/dist/types/inputProcessing/CreateInputProcessor.d.ts.map +1 -1
  208. package/dist/types/inputProcessing/CreateInputVisitor.d.ts +3 -2
  209. package/dist/types/inputProcessing/CreateInputVisitor.d.ts.map +1 -1
  210. package/dist/types/inputProcessing/UpdateInputProcessor.d.ts +14 -12
  211. package/dist/types/inputProcessing/UpdateInputProcessor.d.ts.map +1 -1
  212. package/dist/types/inputProcessing/UpdateInputVisitor.d.ts +3 -2
  213. package/dist/types/inputProcessing/UpdateInputVisitor.d.ts.map +1 -1
  214. package/dist/types/mapper/ColumnValue.d.ts +4 -8
  215. package/dist/types/mapper/ColumnValue.d.ts.map +1 -1
  216. package/dist/types/mapper/EventManager.d.ts +9 -9
  217. package/dist/types/mapper/EventManager.d.ts.map +1 -1
  218. package/dist/types/mapper/Mapper.d.ts +6 -7
  219. package/dist/types/mapper/Mapper.d.ts.map +1 -1
  220. package/dist/types/mapper/Result.d.ts +5 -4
  221. package/dist/types/mapper/Result.d.ts.map +1 -1
  222. package/dist/types/mapper/delete/DeleteExecutor.d.ts.map +1 -1
  223. package/dist/types/mapper/insert/InsertBuilder.d.ts +3 -4
  224. package/dist/types/mapper/insert/InsertBuilder.d.ts.map +1 -1
  225. package/dist/types/mapper/insert/Inserter.d.ts +3 -2
  226. package/dist/types/mapper/insert/Inserter.d.ts.map +1 -1
  227. package/dist/types/mapper/insert/SqlCreateInputProcessor.d.ts.map +1 -1
  228. package/dist/types/mapper/insert/relations/ManyHasManyCreateInputProcessor.d.ts +5 -3
  229. package/dist/types/mapper/insert/relations/ManyHasManyCreateInputProcessor.d.ts.map +1 -1
  230. package/dist/types/mapper/insert/relations/ManyHasOneCreateInputProcessor.d.ts +5 -3
  231. package/dist/types/mapper/insert/relations/ManyHasOneCreateInputProcessor.d.ts.map +1 -1
  232. package/dist/types/mapper/insert/relations/OneHasManyCreateInputProcessor.d.ts +5 -3
  233. package/dist/types/mapper/insert/relations/OneHasManyCreateInputProcessor.d.ts.map +1 -1
  234. package/dist/types/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.d.ts +5 -3
  235. package/dist/types/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.d.ts.map +1 -1
  236. package/dist/types/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.d.ts +5 -3
  237. package/dist/types/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.d.ts.map +1 -1
  238. package/dist/types/mapper/types.d.ts +84 -1
  239. package/dist/types/mapper/types.d.ts.map +1 -1
  240. package/dist/types/mapper/update/SqlUpdateInputProcessor.d.ts +2 -1
  241. package/dist/types/mapper/update/SqlUpdateInputProcessor.d.ts.map +1 -1
  242. package/dist/types/mapper/update/UpdateBuilder.d.ts +3 -3
  243. package/dist/types/mapper/update/UpdateBuilder.d.ts.map +1 -1
  244. package/dist/types/mapper/update/Updater.d.ts +2 -1
  245. package/dist/types/mapper/update/Updater.d.ts.map +1 -1
  246. package/dist/types/mapper/update/relations/ManyHasManyUpdateInputProcessor.d.ts +5 -3
  247. package/dist/types/mapper/update/relations/ManyHasManyUpdateInputProcessor.d.ts.map +1 -1
  248. package/dist/types/mapper/update/relations/ManyHasOneUpdateInputProcessor.d.ts +6 -4
  249. package/dist/types/mapper/update/relations/ManyHasOneUpdateInputProcessor.d.ts.map +1 -1
  250. package/dist/types/mapper/update/relations/OneHasManyUpdateInputProcessor.d.ts +5 -3
  251. package/dist/types/mapper/update/relations/OneHasManyUpdateInputProcessor.d.ts.map +1 -1
  252. package/dist/types/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.d.ts +6 -4
  253. package/dist/types/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.d.ts.map +1 -1
  254. package/dist/types/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.d.ts +6 -4
  255. package/dist/types/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.d.ts.map +1 -1
  256. package/dist/types/tsconfig.tsbuildinfo +1 -1
  257. package/package.json +10 -10
  258. package/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.ts +35 -2
  259. package/src/input-validation/ColumnValueResolver.ts +1 -1
  260. package/src/input-validation/preValidation/CreateInputPreValidationProcessor.ts +2 -2
  261. package/src/input-validation/preValidation/InputPreValidator.ts +7 -7
  262. package/src/input-validation/preValidation/UpdateInputPreValidationProcessor.ts +3 -3
  263. package/src/inputProcessing/CreateInputProcessor.ts +8 -6
  264. package/src/inputProcessing/CreateInputVisitor.ts +18 -19
  265. package/src/inputProcessing/UpdateInputProcessor.ts +13 -11
  266. package/src/inputProcessing/UpdateInputVisitor.ts +25 -24
  267. package/src/mapper/ColumnValue.ts +11 -25
  268. package/src/mapper/EventManager.ts +6 -6
  269. package/src/mapper/Mapper.ts +19 -37
  270. package/src/mapper/Result.ts +3 -2
  271. package/src/mapper/delete/DeleteExecutor.ts +4 -8
  272. package/src/mapper/insert/InsertBuilder.ts +20 -17
  273. package/src/mapper/insert/Inserter.ts +4 -3
  274. package/src/mapper/insert/SqlCreateInputProcessor.ts +1 -3
  275. package/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.ts +8 -8
  276. package/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.ts +8 -8
  277. package/src/mapper/insert/relations/OneHasManyCreateInputProcessor.ts +8 -6
  278. package/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.ts +8 -9
  279. package/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.ts +9 -9
  280. package/src/mapper/types.ts +115 -1
  281. package/src/mapper/update/SqlUpdateInputProcessor.ts +2 -1
  282. package/src/mapper/update/UpdateBuilder.ts +20 -12
  283. package/src/mapper/update/Updater.ts +3 -2
  284. package/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.ts +15 -19
  285. package/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.ts +11 -11
  286. package/src/mapper/update/relations/OneHasManyUpdateInputProcessor.ts +9 -7
  287. package/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.ts +18 -18
  288. package/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.ts +14 -17
  289. package/tests/cases/integration/graphQlRequests/insert/jsonInsert.test.ts +37 -0
  290. package/tests/cases/integration/graphQlRequests/query/misc/reducedHasMany.test.ts +69 -0
  291. package/tests/cases/integration/graphQlRequests/update/manyHasOne/update.test.ts +0 -5
  292. package/tests/cases/integration/graphQlRequests/update/manyHasOne/upsert.test.ts +0 -5
  293. package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/upsert.test.ts +9 -0
  294. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/update.test.ts +0 -5
  295. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/upsert.test.ts +0 -5
  296. package/tests/cases/integration/graphQlSchema/schema-acl-allowed.gql +5 -0
  297. package/tests/cases/integration/graphQlSchema/schema-acl-restricted-create.gql +5 -0
  298. package/tests/cases/integration/graphQlSchema/schema-acl-restricted-delete.gql +5 -0
  299. package/tests/cases/integration/graphQlSchema/schema-acl-restricted-update.gql +5 -0
  300. package/tests/cases/integration/graphQlSchema/schema-basic.gql +11 -0
  301. package/tests/cases/integration/graphQlSchema/schema-bug-66.gql +6 -0
  302. package/tests/cases/integration/graphQlSchema/schema-custom-primary.gql +11 -0
  303. package/tests/cases/integration/graphQlSchema/schema-has-many-reduction.gql +6 -0
  304. package/tests/cases/integration/graphQlSchema/schema-new-builder.gql +12 -0
  305. package/tests/cases/unit/inputPreValidator.test.ts +1 -1
  306. package/tests/src/testGraphql.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"SqlUpdateInputProcessor.js","sources":["../../../../../../packages/engine-content-api/src/mapper/update/SqlUpdateInputProcessor.ts"],"sourcesContent":["import { Input, Model, Value } from '@contember/schema'\nimport { Mapper } from '../Mapper'\nimport { UpdateBuilder } from './UpdateBuilder'\nimport { hasManyProcessor, hasOneProcessor } from '../MutationProcessorHelper'\nimport { OneHasOneInverseUpdateInputProcessor } from './relations/OneHasOneInverseUpdateInputProcessor'\nimport { OneHasOneOwningUpdateInputProcessor } from './relations/OneHasOneOwningUpdateInputProcessor'\nimport { OneHasManyUpdateInputProcessor } from './relations/OneHasManyUpdateInputProcessor'\nimport { ManyHasManyUpdateInputProcessor } from './relations/ManyHasManyUpdateInputProcessor'\nimport { UpdateInputProcessor } from '../../inputProcessing'\nimport { MutationResultList } from '../Result'\nimport { ManyHasOneUpdateInputProcessor } from './relations/ManyHasOneUpdateInputProcessor'\n\nexport type SqlUpdateInputProcessorResult = MutationResultList | ((ctx: { primary: Input.PrimaryValue}) => Promise<MutationResultList>)\n\nexport class SqlUpdateInputProcessor implements UpdateInputProcessor<SqlUpdateInputProcessorResult> {\n\tprivate oneHasOneInverseUpdateInputProcessor: OneHasOneInverseUpdateInputProcessor\n\tprivate oneHasOneOwningUpdateInputProcessor: OneHasOneOwningUpdateInputProcessor\n\tprivate oneHasManyUpdateInputProcessor: OneHasManyUpdateInputProcessor\n\tprivate manyHasOneUpdateInputProcessor: ManyHasOneUpdateInputProcessor\n\tprivate manyHasManyUpdateInputProcessor: ManyHasManyUpdateInputProcessor\n\n\tconstructor(\n\t\tprivate readonly primaryValue: Input.PrimaryValue,\n\t\tprivate readonly data: Input.UpdateDataInput,\n\t\tprivate readonly updateBuilder: UpdateBuilder,\n\t\tprivate readonly mapper: Mapper,\n\t) {\n\t\tthis.oneHasOneInverseUpdateInputProcessor = new OneHasOneInverseUpdateInputProcessor(this.primaryValue, this.mapper)\n\t\tthis.oneHasOneOwningUpdateInputProcessor = new OneHasOneOwningUpdateInputProcessor(this.primaryValue, this.mapper, this.updateBuilder)\n\t\tthis.oneHasManyUpdateInputProcessor = new OneHasManyUpdateInputProcessor(this.mapper)\n\t\tthis.manyHasOneUpdateInputProcessor = new ManyHasOneUpdateInputProcessor(this.mapper, this.updateBuilder, this.primaryValue)\n\t\tthis.manyHasManyUpdateInputProcessor = new ManyHasManyUpdateInputProcessor(this.mapper)\n\t}\n\n\tpublic column({ entity, column }: Model.ColumnContext) {\n\t\tif (this.data[column.name] !== undefined) {\n\t\t\tthis.updateBuilder.addFieldValue(column.name, this.data[column.name] as Value.AtomicValue)\n\t\t}\n\t\treturn Promise.resolve([])\n\t}\n\n\tmanyHasManyInverse: UpdateInputProcessor<SqlUpdateInputProcessorResult>['manyHasManyInverse'] = {\n\t\tconnect: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.connect(ctx)),\n\t\tcreate: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.create(ctx)),\n\t\tconnectOrCreate: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.connectOrCreate(ctx)),\n\t\tupdate: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.update(ctx)),\n\t\tupsert: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.upsert(ctx)),\n\t\tdelete: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.delete(ctx)),\n\t\tdisconnect: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.disconnect(ctx)),\n\t}\n\n\tmanyHasManyOwning: UpdateInputProcessor<SqlUpdateInputProcessorResult>['manyHasManyOwning'] = {\n\t\tconnect: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.connect(ctx)),\n\t\tcreate: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.create(ctx)),\n\t\tconnectOrCreate: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.connectOrCreate(ctx)),\n\t\tupdate: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.update(ctx)),\n\t\tupsert: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.upsert(ctx)),\n\t\tdelete: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.delete(ctx)),\n\t\tdisconnect: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.disconnect(ctx)),\n\t}\n\n\tmanyHasOne: UpdateInputProcessor<SqlUpdateInputProcessorResult>['manyHasOne'] = {\n\t\tconnect: hasOneProcessor(ctx => this.manyHasOneUpdateInputProcessor.connect(ctx)),\n\t\tcreate: hasOneProcessor(ctx => this.manyHasOneUpdateInputProcessor.create(ctx)),\n\t\tconnectOrCreate: hasOneProcessor(ctx => this.manyHasOneUpdateInputProcessor.connectOrCreate(ctx)),\n\t\tupdate: hasOneProcessor(ctx => this.manyHasOneUpdateInputProcessor.update(ctx)),\n\t\tupsert: hasOneProcessor(ctx => this.manyHasOneUpdateInputProcessor.upsert(ctx)),\n\t\tdelete: hasOneProcessor(ctx => this.manyHasOneUpdateInputProcessor.delete(ctx)),\n\t\tdisconnect: hasOneProcessor(ctx => this.manyHasOneUpdateInputProcessor.disconnect(ctx)),\n\t}\n\n\toneHasMany: UpdateInputProcessor<SqlUpdateInputProcessorResult>['oneHasMany'] = {\n\t\tconnect: hasManyProcessor(ctx => this.oneHasManyUpdateInputProcessor.connect(ctx)),\n\t\tcreate: hasManyProcessor(ctx => this.oneHasManyUpdateInputProcessor.create(ctx)),\n\t\tconnectOrCreate: hasManyProcessor(ctx => this.oneHasManyUpdateInputProcessor.connectOrCreate(ctx)),\n\t\tupdate: hasManyProcessor(ctx => this.oneHasManyUpdateInputProcessor.update(ctx)),\n\t\tupsert: hasManyProcessor(ctx => this.oneHasManyUpdateInputProcessor.upsert(ctx)),\n\t\tdelete: hasManyProcessor(ctx => this.oneHasManyUpdateInputProcessor.delete(ctx)),\n\t\tdisconnect: hasManyProcessor(ctx => this.oneHasManyUpdateInputProcessor.disconnect(ctx)),\n\t}\n\n\toneHasOneInverse: UpdateInputProcessor<SqlUpdateInputProcessorResult>['oneHasOneInverse'] = {\n\t\tconnect: hasOneProcessor(ctx => this.oneHasOneInverseUpdateInputProcessor.connect(ctx)),\n\t\tcreate: hasOneProcessor(ctx => this.oneHasOneInverseUpdateInputProcessor.create(ctx)),\n\t\tconnectOrCreate: hasOneProcessor(ctx => this.oneHasOneInverseUpdateInputProcessor.connectOrCreate(ctx)),\n\t\tupdate: hasOneProcessor(ctx => this.oneHasOneInverseUpdateInputProcessor.update(ctx)),\n\t\tupsert: hasOneProcessor(ctx => this.oneHasOneInverseUpdateInputProcessor.upsert(ctx)),\n\t\tdelete: hasOneProcessor(ctx => this.oneHasOneInverseUpdateInputProcessor.delete(ctx)),\n\t\tdisconnect: hasOneProcessor(ctx => this.oneHasOneInverseUpdateInputProcessor.disconnect(ctx)),\n\t}\n\n\toneHasOneOwning: UpdateInputProcessor<SqlUpdateInputProcessorResult>['oneHasOneOwning'] = {\n\t\tconnect: hasOneProcessor(ctx => this.oneHasOneOwningUpdateInputProcessor.connect(ctx)),\n\t\tcreate: hasOneProcessor(ctx => this.oneHasOneOwningUpdateInputProcessor.create(ctx)),\n\t\tconnectOrCreate: hasOneProcessor(ctx => this.oneHasOneOwningUpdateInputProcessor.connectOrCreate(ctx)),\n\t\tupdate: hasOneProcessor(ctx => this.oneHasOneOwningUpdateInputProcessor.update(ctx)),\n\t\tupsert: hasOneProcessor(ctx => this.oneHasOneOwningUpdateInputProcessor.upsert(ctx)),\n\t\tdelete: hasOneProcessor(ctx => this.oneHasOneOwningUpdateInputProcessor.delete(ctx)),\n\t\tdisconnect: hasOneProcessor(ctx => this.oneHasOneOwningUpdateInputProcessor.disconnect(ctx)),\n\t}\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SqlUpdateInputProcessor.js","sources":["../../../../../../packages/engine-content-api/src/mapper/update/SqlUpdateInputProcessor.ts"],"sourcesContent":["import { Input, Model, Value } from '@contember/schema'\nimport { Mapper } from '../Mapper'\nimport { UpdateBuilder } from './UpdateBuilder'\nimport { hasManyProcessor, hasOneProcessor } from '../MutationProcessorHelper'\nimport { OneHasOneInverseUpdateInputProcessor } from './relations/OneHasOneInverseUpdateInputProcessor'\nimport { OneHasOneOwningUpdateInputProcessor } from './relations/OneHasOneOwningUpdateInputProcessor'\nimport { OneHasManyUpdateInputProcessor } from './relations/OneHasManyUpdateInputProcessor'\nimport { ManyHasManyUpdateInputProcessor } from './relations/ManyHasManyUpdateInputProcessor'\nimport { UpdateInputProcessor } from '../../inputProcessing'\nimport { MutationResultList } from '../Result'\nimport { ManyHasOneUpdateInputProcessor } from './relations/ManyHasOneUpdateInputProcessor'\nimport { MapperInput } from '../types'\n\nexport type SqlUpdateInputProcessorResult = MutationResultList | ((ctx: { primary: Input.PrimaryValue}) => Promise<MutationResultList>)\n\nexport class SqlUpdateInputProcessor implements UpdateInputProcessor<SqlUpdateInputProcessorResult> {\n\tprivate oneHasOneInverseUpdateInputProcessor: OneHasOneInverseUpdateInputProcessor\n\tprivate oneHasOneOwningUpdateInputProcessor: OneHasOneOwningUpdateInputProcessor\n\tprivate oneHasManyUpdateInputProcessor: OneHasManyUpdateInputProcessor\n\tprivate manyHasOneUpdateInputProcessor: ManyHasOneUpdateInputProcessor\n\tprivate manyHasManyUpdateInputProcessor: ManyHasManyUpdateInputProcessor\n\n\tconstructor(\n\t\tprivate readonly primaryValue: Input.PrimaryValue,\n\t\tprivate readonly data: MapperInput.UpdateDataInput,\n\t\tprivate readonly updateBuilder: UpdateBuilder,\n\t\tprivate readonly mapper: Mapper,\n\t) {\n\t\tthis.oneHasOneInverseUpdateInputProcessor = new OneHasOneInverseUpdateInputProcessor(this.primaryValue, this.mapper)\n\t\tthis.oneHasOneOwningUpdateInputProcessor = new OneHasOneOwningUpdateInputProcessor(this.primaryValue, this.mapper, this.updateBuilder)\n\t\tthis.oneHasManyUpdateInputProcessor = new OneHasManyUpdateInputProcessor(this.mapper)\n\t\tthis.manyHasOneUpdateInputProcessor = new ManyHasOneUpdateInputProcessor(this.mapper, this.updateBuilder, this.primaryValue)\n\t\tthis.manyHasManyUpdateInputProcessor = new ManyHasManyUpdateInputProcessor(this.mapper)\n\t}\n\n\tpublic column({ entity, column }: Model.ColumnContext) {\n\t\tif (this.data[column.name] !== undefined) {\n\t\t\tthis.updateBuilder.addFieldValue(column.name, this.data[column.name] as Value.AtomicValue)\n\t\t}\n\t\treturn Promise.resolve([])\n\t}\n\n\tmanyHasManyInverse: UpdateInputProcessor<SqlUpdateInputProcessorResult>['manyHasManyInverse'] = {\n\t\tconnect: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.connect(ctx)),\n\t\tcreate: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.create(ctx)),\n\t\tconnectOrCreate: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.connectOrCreate(ctx)),\n\t\tupdate: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.update(ctx)),\n\t\tupsert: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.upsert(ctx)),\n\t\tdelete: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.delete(ctx)),\n\t\tdisconnect: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.disconnect(ctx)),\n\t}\n\n\tmanyHasManyOwning: UpdateInputProcessor<SqlUpdateInputProcessorResult>['manyHasManyOwning'] = {\n\t\tconnect: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.connect(ctx)),\n\t\tcreate: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.create(ctx)),\n\t\tconnectOrCreate: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.connectOrCreate(ctx)),\n\t\tupdate: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.update(ctx)),\n\t\tupsert: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.upsert(ctx)),\n\t\tdelete: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.delete(ctx)),\n\t\tdisconnect: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.disconnect(ctx)),\n\t}\n\n\tmanyHasOne: UpdateInputProcessor<SqlUpdateInputProcessorResult>['manyHasOne'] = {\n\t\tconnect: hasOneProcessor(ctx => this.manyHasOneUpdateInputProcessor.connect(ctx)),\n\t\tcreate: hasOneProcessor(ctx => this.manyHasOneUpdateInputProcessor.create(ctx)),\n\t\tconnectOrCreate: hasOneProcessor(ctx => this.manyHasOneUpdateInputProcessor.connectOrCreate(ctx)),\n\t\tupdate: hasOneProcessor(ctx => this.manyHasOneUpdateInputProcessor.update(ctx)),\n\t\tupsert: hasOneProcessor(ctx => this.manyHasOneUpdateInputProcessor.upsert(ctx)),\n\t\tdelete: hasOneProcessor(ctx => this.manyHasOneUpdateInputProcessor.delete(ctx)),\n\t\tdisconnect: hasOneProcessor(ctx => this.manyHasOneUpdateInputProcessor.disconnect(ctx)),\n\t}\n\n\toneHasMany: UpdateInputProcessor<SqlUpdateInputProcessorResult>['oneHasMany'] = {\n\t\tconnect: hasManyProcessor(ctx => this.oneHasManyUpdateInputProcessor.connect(ctx)),\n\t\tcreate: hasManyProcessor(ctx => this.oneHasManyUpdateInputProcessor.create(ctx)),\n\t\tconnectOrCreate: hasManyProcessor(ctx => this.oneHasManyUpdateInputProcessor.connectOrCreate(ctx)),\n\t\tupdate: hasManyProcessor(ctx => this.oneHasManyUpdateInputProcessor.update(ctx)),\n\t\tupsert: hasManyProcessor(ctx => this.oneHasManyUpdateInputProcessor.upsert(ctx)),\n\t\tdelete: hasManyProcessor(ctx => this.oneHasManyUpdateInputProcessor.delete(ctx)),\n\t\tdisconnect: hasManyProcessor(ctx => this.oneHasManyUpdateInputProcessor.disconnect(ctx)),\n\t}\n\n\toneHasOneInverse: UpdateInputProcessor<SqlUpdateInputProcessorResult>['oneHasOneInverse'] = {\n\t\tconnect: hasOneProcessor(ctx => this.oneHasOneInverseUpdateInputProcessor.connect(ctx)),\n\t\tcreate: hasOneProcessor(ctx => this.oneHasOneInverseUpdateInputProcessor.create(ctx)),\n\t\tconnectOrCreate: hasOneProcessor(ctx => this.oneHasOneInverseUpdateInputProcessor.connectOrCreate(ctx)),\n\t\tupdate: hasOneProcessor(ctx => this.oneHasOneInverseUpdateInputProcessor.update(ctx)),\n\t\tupsert: hasOneProcessor(ctx => this.oneHasOneInverseUpdateInputProcessor.upsert(ctx)),\n\t\tdelete: hasOneProcessor(ctx => this.oneHasOneInverseUpdateInputProcessor.delete(ctx)),\n\t\tdisconnect: hasOneProcessor(ctx => this.oneHasOneInverseUpdateInputProcessor.disconnect(ctx)),\n\t}\n\n\toneHasOneOwning: UpdateInputProcessor<SqlUpdateInputProcessorResult>['oneHasOneOwning'] = {\n\t\tconnect: hasOneProcessor(ctx => this.oneHasOneOwningUpdateInputProcessor.connect(ctx)),\n\t\tcreate: hasOneProcessor(ctx => this.oneHasOneOwningUpdateInputProcessor.create(ctx)),\n\t\tconnectOrCreate: hasOneProcessor(ctx => this.oneHasOneOwningUpdateInputProcessor.connectOrCreate(ctx)),\n\t\tupdate: hasOneProcessor(ctx => this.oneHasOneOwningUpdateInputProcessor.update(ctx)),\n\t\tupsert: hasOneProcessor(ctx => this.oneHasOneOwningUpdateInputProcessor.upsert(ctx)),\n\t\tdelete: hasOneProcessor(ctx => this.oneHasOneOwningUpdateInputProcessor.delete(ctx)),\n\t\tdisconnect: hasOneProcessor(ctx => this.oneHasOneOwningUpdateInputProcessor.disconnect(ctx)),\n\t}\n}\n"],"names":[],"mappings":"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"}
@@ -22,11 +22,12 @@ class UpdateBuilder {
22
22
  __publicField(this, "oldWhere", { and: [] });
23
23
  }
24
24
  addFieldValue(fieldName, value) {
25
+ if (value === void 0) {
26
+ return;
27
+ }
25
28
  const columnName = schemaUtils.getColumnName(this.schema, this.entity, fieldName);
26
29
  const columnType = schemaUtils.getColumnType(this.schema, this.entity, fieldName);
27
- const resolvedValue = ColumnValue.resolveGenericValue(value);
28
- this.rowData.set(columnName, { columnName, value: resolvedValue, columnType, fieldName });
29
- return resolvedValue;
30
+ this.rowData.set(columnName, { columnName, value, columnType, fieldName });
30
31
  }
31
32
  addNewWhere(where) {
32
33
  this.newWhere.and.push(where);
@@ -41,14 +42,20 @@ class UpdateBuilder {
41
42
  }
42
43
  async execute(mapper) {
43
44
  try {
44
- const resolvedData = await ColumnValue.resolveRowData([...this.rowData.values()]);
45
+ const resolvedData = [...this.rowData.values()];
45
46
  if (Object.keys(resolvedData).length === 0) {
46
47
  return { values: [], affectedRows: null, executed: false };
47
48
  }
48
49
  const oldColSuffix = "_old__";
49
50
  const qb = Database.UpdateBuilder.create().with("newData_", (qb2) => {
50
51
  qb2 = resolvedData.reduce(
51
- (qb3, value) => qb3.select((expr) => expr.selectValue(value.resolvedValue, value.columnType), value.columnName).select(["root_", value.columnName], value.columnName + oldColSuffix),
52
+ (qb3, value) => qb3.select(
53
+ (expr) => expr.selectValue(
54
+ ColumnValue.normalizeDbValue(value.value, value.columnType),
55
+ value.columnType
56
+ ),
57
+ value.columnName
58
+ ).select(["root_", value.columnName], value.columnName + oldColSuffix),
52
59
  qb2
53
60
  );
54
61
  const columns = new Set(resolvedData.map((it) => it.columnName));
@@ -1 +1 @@
1
- {"version":3,"file":"UpdateBuilder.cjs","sources":["../../../../../../packages/engine-content-api/src/mapper/update/UpdateBuilder.ts"],"sourcesContent":["import { tuple } from '../../utils'\nimport { Acl, Input, Model, Value } from '@contember/schema'\nimport { acceptEveryFieldVisitor, getColumnName, getColumnType } from '@contember/schema-utils'\nimport { Operator, QueryBuilder, UpdateBuilder as DbUpdateBuilder, Value as DbValue } from '@contember/database'\nimport { PathFactory, WhereBuilder } from '../select'\nimport { ColumnValue, ResolvedColumnValue, resolveGenericValue, resolveRowData } from '../ColumnValue'\nimport { PredicateFactory } from '../../acl'\nimport { AfterUpdateEvent, BeforeUpdateEvent } from '../EventManager'\nimport { Mapper } from '../Mapper'\n\nexport interface UpdateResult {\n\tvalues: ResolvedColumnValue[]\n\texecuted: boolean\n\taffectedRows: number | null\n}\n\nexport class UpdateBuilder {\n\tprivate rowData: Map<string, ColumnValue> = new Map()\n\n\tprivate newWhere: { and: Input.OptionalWhere[] } = { and: [] }\n\tprivate oldWhere: { and: Input.OptionalWhere[] } = { and: [] }\n\n\tconstructor(\n\t\tprivate readonly schema: Model.Schema,\n\t\tprivate readonly entity: Model.Entity,\n\t\tprivate readonly whereBuilder: WhereBuilder,\n\t\tprivate readonly primary: Input.PrimaryValue,\n\t\tprivate readonly pathFactory: PathFactory,\n\t\tprivate readonly predicateFactory: PredicateFactory,\n\t) {}\n\n\tpublic addFieldValue(\n\t\tfieldName: string,\n\t\tvalue: Value.GenericValueLike<Value.AtomicValue<undefined>>,\n\t): Promise<Value.AtomicValue<undefined>> {\n\t\tconst columnName = getColumnName(this.schema, this.entity, fieldName)\n\t\tconst columnType = getColumnType(this.schema, this.entity, fieldName)\n\t\tconst resolvedValue = resolveGenericValue(value)\n\t\tthis.rowData.set(columnName, { columnName, value: resolvedValue, columnType, fieldName })\n\t\treturn resolvedValue\n\t}\n\n\tpublic addNewWhere(where: Input.OptionalWhere): void {\n\t\tthis.newWhere.and.push(where)\n\t}\n\n\tpublic addOldWhere(where: Input.OptionalWhere): void {\n\t\tthis.oldWhere.and.push(where)\n\t}\n\n\tpublic addPredicates(fields: string[]): void {\n\t\tconst predicate = this.predicateFactory.create(this.entity, Acl.Operation.update, fields)\n\t\tthis.addNewWhere(predicate)\n\t\tthis.addOldWhere(predicate)\n\t}\n\n\tpublic async execute(mapper: Mapper): Promise<UpdateResult> {\n\t\ttry {\n\t\t\tconst resolvedData = await resolveRowData([...this.rowData.values()])\n\t\t\tif (Object.keys(resolvedData).length === 0) {\n\t\t\t\treturn { values: [], affectedRows: null, executed: false }\n\t\t\t}\n\t\t\tconst oldColSuffix = '_old__'\n\n\t\t\tconst qb = DbUpdateBuilder.create()\n\t\t\t\t.with('newData_', qb => {\n\t\t\t\t\tqb = resolvedData.reduce(\n\t\t\t\t\t\t(qb, value) =>\n\t\t\t\t\t\t\tqb\n\t\t\t\t\t\t\t\t.select(expr => expr.selectValue(value.resolvedValue as DbValue, value.columnType), value.columnName)\n\t\t\t\t\t\t\t\t.select(['root_', value.columnName], value.columnName + oldColSuffix),\n\t\t\t\t\t\tqb,\n\t\t\t\t\t)\n\t\t\t\t\tconst columns = new Set(resolvedData.map(it => it.columnName))\n\t\t\t\t\tconst allColumns: string[] = Object.values(\n\t\t\t\t\t\tacceptEveryFieldVisitor(this.schema, this.entity, {\n\t\t\t\t\t\t\tvisitColumn: ({ column }) => column.columnName,\n\t\t\t\t\t\t\tvisitManyHasOne: ({ relation }) => relation.joiningColumn.columnName,\n\t\t\t\t\t\t\tvisitOneHasOneOwning: ({ relation }) => relation.joiningColumn.columnName,\n\t\t\t\t\t\t\tvisitManyHasManyInverse: () => null,\n\t\t\t\t\t\t\tvisitManyHasManyOwning: () => null,\n\t\t\t\t\t\t\tvisitOneHasOneInverse: () => null,\n\t\t\t\t\t\t\tvisitOneHasMany: () => null,\n\t\t\t\t\t\t}),\n\t\t\t\t\t).filter((it): it is string => it !== null)\n\n\t\t\t\t\tconst remainingColumns = allColumns.filter(it => !columns.has(it))\n\t\t\t\t\tqb = qb.from(this.entity.tableName, 'root_')\n\n\t\t\t\t\tqb = remainingColumns.reduce((qb, columnName) => qb.select(['root_', columnName]), qb)\n\n\t\t\t\t\tqb = this.whereBuilder.build(qb, this.entity, this.pathFactory.create([]), {\n\t\t\t\t\t\tand: [{\n\t\t\t\t\t\t\t[this.entity.primary]: { eq: this.primary },\n\t\t\t\t\t\t}, this.oldWhere],\n\t\t\t\t\t})\n\n\t\t\t\t\treturn qb\n\t\t\t\t})\n\t\t\t\t.table(this.entity.tableName)\n\t\t\t\t.values(\n\t\t\t\t\tresolvedData.reduce<QueryBuilder.ColumnExpressionMap>(\n\t\t\t\t\t\t(result: object, item) => ({\n\t\t\t\t\t\t\t...result,\n\t\t\t\t\t\t\t[item.columnName]: expr => expr.select(['newData_', item.columnName]),\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t{},\n\t\t\t\t\t),\n\t\t\t\t)\n\t\t\t\t.returning(...resolvedData.map(it => it.columnName + oldColSuffix))\n\t\t\t\t.from(qb => {\n\t\t\t\t\tqb = qb.from('newData_')\n\t\t\t\t\tconst col1 = tuple(this.entity.tableName, this.entity.primaryColumn)\n\t\t\t\t\tconst col2 = tuple('newData_', this.entity.primaryColumn)\n\t\t\t\t\tqb = qb.where(expr => expr.compareColumns(col1, Operator.eq, col2))\n\t\t\t\t\tqb = this.whereBuilder.build(qb, this.entity, this.pathFactory.create([], 'newData_'), this.newWhere)\n\t\t\t\t\treturn qb\n\t\t\t\t})\n\n\n\t\t\tconst beforeEvent = new BeforeUpdateEvent(this.entity, resolvedData as ResolvedColumnValue[], this.primary)\n\t\t\tawait mapper.eventManager.fire(beforeEvent)\n\n\t\t\tconst result = await qb.execute(mapper.db)\n\n\t\t\tif (result.length === 1) {\n\t\t\t\tconst eventData = (resolvedData as ResolvedColumnValue[]).map(it => ({\n\t\t\t\t\t...it,\n\t\t\t\t\told: result[0][it.columnName + oldColSuffix],\n\t\t\t\t}))\n\t\t\t\tconst afterUpdateEvent = new AfterUpdateEvent(this.entity, eventData, this.primary)\n\t\t\t\tbeforeEvent.afterEvent = afterUpdateEvent\n\t\t\t\tawait mapper.eventManager.fire(afterUpdateEvent)\n\t\t\t}\n\n\t\t\treturn { values: resolvedData as ResolvedColumnValue[], affectedRows: result.length, executed: true }\n\t\t} catch (e) {\n\t\t\tthrow e\n\t\t}\n\t}\n}\n"],"names":["schema","getColumnName","getColumnType","resolveGenericValue","Acl","resolveRowData","DbUpdateBuilder","qb","acceptEveryFieldVisitor","result","tuple","Operator","BeforeUpdateEvent","AfterUpdateEvent"],"mappings":"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"}
1
+ {"version":3,"file":"UpdateBuilder.cjs","sources":["../../../../../../packages/engine-content-api/src/mapper/update/UpdateBuilder.ts"],"sourcesContent":["import { tuple } from '../../utils'\nimport { Acl, Input, Model, Value } from '@contember/schema'\nimport { acceptEveryFieldVisitor, getColumnName, getColumnType } from '@contember/schema-utils'\nimport { Operator, QueryBuilder, UpdateBuilder as DbUpdateBuilder, Value as DbValue } from '@contember/database'\nimport { PathFactory, WhereBuilder } from '../select'\nimport { ColumnValue, normalizeDbValue } from '../ColumnValue'\nimport { PredicateFactory } from '../../acl'\nimport { AfterUpdateEvent, BeforeUpdateEvent } from '../EventManager'\nimport { Mapper } from '../Mapper'\n\nexport interface UpdateResult {\n\tvalues: ColumnValue[]\n\texecuted: boolean\n\taffectedRows: number | null\n}\n\nexport class UpdateBuilder {\n\tprivate rowData: Map<string, ColumnValue> = new Map()\n\n\tprivate newWhere: { and: Input.OptionalWhere[] } = { and: [] }\n\tprivate oldWhere: { and: Input.OptionalWhere[] } = { and: [] }\n\n\tconstructor(\n\t\tprivate readonly schema: Model.Schema,\n\t\tprivate readonly entity: Model.Entity,\n\t\tprivate readonly whereBuilder: WhereBuilder,\n\t\tprivate readonly primary: Input.PrimaryValue,\n\t\tprivate readonly pathFactory: PathFactory,\n\t\tprivate readonly predicateFactory: PredicateFactory,\n\t) {}\n\n\tpublic addFieldValue(\n\t\tfieldName: string,\n\t\tvalue: Value.FieldValue | undefined,\n\t): void {\n\t\tif (value === undefined) {\n\t\t\treturn\n\t\t}\n\t\tconst columnName = getColumnName(this.schema, this.entity, fieldName)\n\t\tconst columnType = getColumnType(this.schema, this.entity, fieldName)\n\n\t\tthis.rowData.set(columnName, { columnName, value, columnType, fieldName })\n\t}\n\n\tpublic addNewWhere(where: Input.OptionalWhere): void {\n\t\tthis.newWhere.and.push(where)\n\t}\n\n\tpublic addOldWhere(where: Input.OptionalWhere): void {\n\t\tthis.oldWhere.and.push(where)\n\t}\n\n\tpublic addPredicates(fields: string[]): void {\n\t\tconst predicate = this.predicateFactory.create(this.entity, Acl.Operation.update, fields)\n\t\tthis.addNewWhere(predicate)\n\t\tthis.addOldWhere(predicate)\n\t}\n\n\tpublic async execute(mapper: Mapper): Promise<UpdateResult> {\n\t\ttry {\n\t\t\tconst resolvedData = [...this.rowData.values()]\n\t\t\tif (Object.keys(resolvedData).length === 0) {\n\t\t\t\treturn { values: [], affectedRows: null, executed: false }\n\t\t\t}\n\t\t\tconst oldColSuffix = '_old__'\n\n\t\t\tconst qb = DbUpdateBuilder.create()\n\t\t\t\t.with('newData_', qb => {\n\t\t\t\t\tqb = resolvedData.reduce(\n\t\t\t\t\t\t(qb, value) =>\n\t\t\t\t\t\t\tqb\n\t\t\t\t\t\t\t\t.select(\n\t\t\t\t\t\t\t\t\texpr => expr.selectValue(\n\t\t\t\t\t\t\t\t\t\tnormalizeDbValue(value.value, value.columnType),\n\t\t\t\t\t\t\t\t\t\tvalue.columnType,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\tvalue.columnName,\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t.select(['root_', value.columnName], value.columnName + oldColSuffix),\n\t\t\t\t\t\tqb,\n\t\t\t\t\t)\n\t\t\t\t\tconst columns = new Set(resolvedData.map(it => it.columnName))\n\t\t\t\t\tconst allColumns: string[] = Object.values(\n\t\t\t\t\t\tacceptEveryFieldVisitor(this.schema, this.entity, {\n\t\t\t\t\t\t\tvisitColumn: ({ column }) => column.columnName,\n\t\t\t\t\t\t\tvisitManyHasOne: ({ relation }) => relation.joiningColumn.columnName,\n\t\t\t\t\t\t\tvisitOneHasOneOwning: ({ relation }) => relation.joiningColumn.columnName,\n\t\t\t\t\t\t\tvisitManyHasManyInverse: () => null,\n\t\t\t\t\t\t\tvisitManyHasManyOwning: () => null,\n\t\t\t\t\t\t\tvisitOneHasOneInverse: () => null,\n\t\t\t\t\t\t\tvisitOneHasMany: () => null,\n\t\t\t\t\t\t}),\n\t\t\t\t\t).filter((it): it is string => it !== null)\n\n\t\t\t\t\tconst remainingColumns = allColumns.filter(it => !columns.has(it))\n\t\t\t\t\tqb = qb.from(this.entity.tableName, 'root_')\n\n\t\t\t\t\tqb = remainingColumns.reduce((qb, columnName) => qb.select(['root_', columnName]), qb)\n\n\t\t\t\t\tqb = this.whereBuilder.build(qb, this.entity, this.pathFactory.create([]), {\n\t\t\t\t\t\tand: [{\n\t\t\t\t\t\t\t[this.entity.primary]: { eq: this.primary },\n\t\t\t\t\t\t}, this.oldWhere],\n\t\t\t\t\t})\n\n\t\t\t\t\treturn qb\n\t\t\t\t})\n\t\t\t\t.table(this.entity.tableName)\n\t\t\t\t.values(\n\t\t\t\t\tresolvedData.reduce<QueryBuilder.ColumnExpressionMap>(\n\t\t\t\t\t\t(result: object, item) => ({\n\t\t\t\t\t\t\t...result,\n\t\t\t\t\t\t\t[item.columnName]: expr => expr.select(['newData_', item.columnName]),\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t{},\n\t\t\t\t\t),\n\t\t\t\t)\n\t\t\t\t.returning(...resolvedData.map(it => it.columnName + oldColSuffix))\n\t\t\t\t.from(qb => {\n\t\t\t\t\tqb = qb.from('newData_')\n\t\t\t\t\tconst col1 = tuple(this.entity.tableName, this.entity.primaryColumn)\n\t\t\t\t\tconst col2 = tuple('newData_', this.entity.primaryColumn)\n\t\t\t\t\tqb = qb.where(expr => expr.compareColumns(col1, Operator.eq, col2))\n\t\t\t\t\tqb = this.whereBuilder.build(qb, this.entity, this.pathFactory.create([], 'newData_'), this.newWhere)\n\t\t\t\t\treturn qb\n\t\t\t\t})\n\n\n\t\t\tconst beforeEvent = new BeforeUpdateEvent(this.entity, resolvedData, this.primary)\n\t\t\tawait mapper.eventManager.fire(beforeEvent)\n\n\t\t\tconst result = await qb.execute(mapper.db)\n\n\t\t\tif (result.length === 1) {\n\t\t\t\tconst eventData = (resolvedData).map(it => ({\n\t\t\t\t\t...it,\n\t\t\t\t\told: result[0][it.columnName + oldColSuffix],\n\t\t\t\t}))\n\t\t\t\tconst afterUpdateEvent = new AfterUpdateEvent(this.entity, eventData, this.primary)\n\t\t\t\tbeforeEvent.afterEvent = afterUpdateEvent\n\t\t\t\tawait mapper.eventManager.fire(afterUpdateEvent)\n\t\t\t}\n\n\t\t\treturn { values: resolvedData, affectedRows: result.length, executed: true }\n\t\t} catch (e) {\n\t\t\tthrow e\n\t\t}\n\t}\n}\n"],"names":["schema","getColumnName","getColumnType","Acl","DbUpdateBuilder","qb","normalizeDbValue","acceptEveryFieldVisitor","result","tuple","Operator","BeforeUpdateEvent","AfterUpdateEvent"],"mappings":";;;;;;;;;;;AAgBO,MAAM,cAAc;AAAA,EAM1B,YACkBA,SACA,QACA,cACA,SACA,aACA,kBAChB;AANgB,SAAA,SAAAA;AACA,SAAA,SAAA;AACA,SAAA,eAAA;AACA,SAAA,UAAA;AACA,SAAA,cAAA;AACA,SAAA,mBAAA;AAXV,kBAAA,MAAA,+BAAwC,IAAI,CAAA;AAEpD,kBAAA,MAAQ,YAA2C,EAAE,KAAK,CAAG,EAAA,CAAA;AAC7D,kBAAA,MAAQ,YAA2C,EAAE,KAAK,CAAG,EAAA,CAAA;AAAA,EAAA;AAAA,EAWtD,cACN,WACA,OACO;AACP,QAAI,UAAU,QAAW;AACxB;AAAA,IAAA;AAED,UAAM,aAAaC,YAAAA,cAAc,KAAK,QAAQ,KAAK,QAAQ,SAAS;AACpE,UAAM,aAAaC,YAAAA,cAAc,KAAK,QAAQ,KAAK,QAAQ,SAAS;AAE/D,SAAA,QAAQ,IAAI,YAAY,EAAE,YAAY,OAAO,YAAY,WAAW;AAAA,EAAA;AAAA,EAGnE,YAAY,OAAkC;AAC/C,SAAA,SAAS,IAAI,KAAK,KAAK;AAAA,EAAA;AAAA,EAGtB,YAAY,OAAkC;AAC/C,SAAA,SAAS,IAAI,KAAK,KAAK;AAAA,EAAA;AAAA,EAGtB,cAAc,QAAwB;AACtC,UAAA,YAAY,KAAK,iBAAiB,OAAO,KAAK,QAAQC,WAAI,UAAU,QAAQ,MAAM;AACxF,SAAK,YAAY,SAAS;AAC1B,SAAK,YAAY,SAAS;AAAA,EAAA;AAAA,EAG3B,MAAa,QAAQ,QAAuC;AACvD,QAAA;AACH,YAAM,eAAe,CAAC,GAAG,KAAK,QAAQ,QAAQ;AAC9C,UAAI,OAAO,KAAK,YAAY,EAAE,WAAW,GAAG;AAC3C,eAAO,EAAE,QAAQ,IAAI,cAAc,MAAM,UAAU,MAAM;AAAA,MAAA;AAE1D,YAAM,eAAe;AAErB,YAAM,KAAKC,SAAAA,cAAgB,OAAA,EACzB,KAAK,YAAY,CAAAC,QAAM;AACvBA,cAAK,aAAa;AAAA,UACjB,CAACA,KAAI,UACJA,IACE;AAAA,YACA,UAAQ,KAAK;AAAA,cACZC,YAAAA,iBAAiB,MAAM,OAAO,MAAM,UAAU;AAAA,cAC9C,MAAM;AAAA,YACP;AAAA,YACA,MAAM;AAAA,UAAA,EAEN,OAAO,CAAC,SAAS,MAAM,UAAU,GAAG,MAAM,aAAa,YAAY;AAAA,UACtED;AAAAA,QACD;AACM,cAAA,UAAU,IAAI,IAAI,aAAa,IAAI,CAAM,OAAA,GAAG,UAAU,CAAC;AAC7D,cAAM,aAAuB,OAAO;AAAA,UACnCE,YAAAA,wBAAwB,KAAK,QAAQ,KAAK,QAAQ;AAAA,YACjD,aAAa,CAAC,EAAE,aAAa,OAAO;AAAA,YACpC,iBAAiB,CAAC,EAAE,SAAS,MAAM,SAAS,cAAc;AAAA,YAC1D,sBAAsB,CAAC,EAAE,SAAS,MAAM,SAAS,cAAc;AAAA,YAC/D,yBAAyB,MAAM;AAAA,YAC/B,wBAAwB,MAAM;AAAA,YAC9B,uBAAuB,MAAM;AAAA,YAC7B,iBAAiB,MAAM;AAAA,UACvB,CAAA;AAAA,QACA,EAAA,OAAO,CAAC,OAAqB,OAAO,IAAI;AAEpC,cAAA,mBAAmB,WAAW,OAAO,CAAA,OAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;AACjEF,cAAKA,IAAG,KAAK,KAAK,OAAO,WAAW,OAAO;AAE3CA,cAAK,iBAAiB,OAAO,CAACA,KAAI,eAAeA,IAAG,OAAO,CAAC,SAAS,UAAU,CAAC,GAAGA,GAAE;AAErFA,cAAK,KAAK,aAAa,MAAMA,KAAI,KAAK,QAAQ,KAAK,YAAY,OAAO,CAAE,CAAA,GAAG;AAAA,UAC1E,KAAK,CAAC;AAAA,YACL,CAAC,KAAK,OAAO,OAAO,GAAG,EAAE,IAAI,KAAK,QAAQ;AAAA,UAC3C,GAAG,KAAK,QAAQ;AAAA,QAAA,CAChB;AAEMA,eAAAA;AAAAA,MACP,CAAA,EACA,MAAM,KAAK,OAAO,SAAS,EAC3B;AAAA,QACA,aAAa;AAAA,UACZ,CAACG,SAAgB,UAAU;AAAA,YAC1B,GAAGA;AAAAA,YACH,CAAC,KAAK,UAAU,GAAG,CAAA,SAAQ,KAAK,OAAO,CAAC,YAAY,KAAK,UAAU,CAAC;AAAA,UAAA;AAAA,UAErE,CAAA;AAAA,QAAC;AAAA,MAGF,EAAA,UAAU,GAAG,aAAa,IAAI,CAAA,OAAM,GAAG,aAAa,YAAY,CAAC,EACjE,KAAK,CAAAH,QAAM;AACXA,cAAKA,IAAG,KAAK,UAAU;AACvB,cAAM,OAAOI,MAAM,MAAA,KAAK,OAAO,WAAW,KAAK,OAAO,aAAa;AACnE,cAAM,OAAOA,MAAAA,MAAM,YAAY,KAAK,OAAO,aAAa;AACxDJ,cAAKA,IAAG,MAAM,CAAQ,SAAA,KAAK,eAAe,MAAMK,SAAAA,SAAS,IAAI,IAAI,CAAC;AAClEL,cAAK,KAAK,aAAa,MAAMA,KAAI,KAAK,QAAQ,KAAK,YAAY,OAAO,CAAC,GAAG,UAAU,GAAG,KAAK,QAAQ;AAC7FA,eAAAA;AAAAA,MAAA,CACP;AAGF,YAAM,cAAc,IAAIM,+BAAkB,KAAK,QAAQ,cAAc,KAAK,OAAO;AAC3E,YAAA,OAAO,aAAa,KAAK,WAAW;AAE1C,YAAM,SAAS,MAAM,GAAG,QAAQ,OAAO,EAAE;AAErC,UAAA,OAAO,WAAW,GAAG;AAClB,cAAA,YAAa,aAAc,IAAI,CAAO,QAAA;AAAA,UAC3C,GAAG;AAAA,UACH,KAAK,OAAO,CAAC,EAAE,GAAG,aAAa,YAAY;AAAA,QAAA,EAC1C;AACF,cAAM,mBAAmB,IAAIC,8BAAiB,KAAK,QAAQ,WAAW,KAAK,OAAO;AAClF,oBAAY,aAAa;AACnB,cAAA,OAAO,aAAa,KAAK,gBAAgB;AAAA,MAAA;AAGhD,aAAO,EAAE,QAAQ,cAAc,cAAc,OAAO,QAAQ,UAAU,KAAK;AAAA,aACnE,GAAG;AACL,YAAA;AAAA,IAAA;AAAA,EACP;AAEF;;"}
@@ -2,7 +2,7 @@ import { tuple } from "../../utils/tuple.js";
2
2
  import { getColumnName, getColumnType, acceptEveryFieldVisitor } from "@contember/schema-utils";
3
3
  import { Acl } from "@contember/schema";
4
4
  import { UpdateBuilder as UpdateBuilder$1, Operator } from "@contember/database";
5
- import { resolveGenericValue, resolveRowData } from "../ColumnValue.js";
5
+ import { normalizeDbValue } from "../ColumnValue.js";
6
6
  import { BeforeUpdateEvent, AfterUpdateEvent } from "../EventManager.js";
7
7
  var __defProp = Object.defineProperty;
8
8
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
@@ -20,11 +20,12 @@ class UpdateBuilder {
20
20
  __publicField(this, "oldWhere", { and: [] });
21
21
  }
22
22
  addFieldValue(fieldName, value) {
23
+ if (value === void 0) {
24
+ return;
25
+ }
23
26
  const columnName = getColumnName(this.schema, this.entity, fieldName);
24
27
  const columnType = getColumnType(this.schema, this.entity, fieldName);
25
- const resolvedValue = resolveGenericValue(value);
26
- this.rowData.set(columnName, { columnName, value: resolvedValue, columnType, fieldName });
27
- return resolvedValue;
28
+ this.rowData.set(columnName, { columnName, value, columnType, fieldName });
28
29
  }
29
30
  addNewWhere(where) {
30
31
  this.newWhere.and.push(where);
@@ -39,14 +40,20 @@ class UpdateBuilder {
39
40
  }
40
41
  async execute(mapper) {
41
42
  try {
42
- const resolvedData = await resolveRowData([...this.rowData.values()]);
43
+ const resolvedData = [...this.rowData.values()];
43
44
  if (Object.keys(resolvedData).length === 0) {
44
45
  return { values: [], affectedRows: null, executed: false };
45
46
  }
46
47
  const oldColSuffix = "_old__";
47
48
  const qb = UpdateBuilder$1.create().with("newData_", (qb2) => {
48
49
  qb2 = resolvedData.reduce(
49
- (qb3, value) => qb3.select((expr) => expr.selectValue(value.resolvedValue, value.columnType), value.columnName).select(["root_", value.columnName], value.columnName + oldColSuffix),
50
+ (qb3, value) => qb3.select(
51
+ (expr) => expr.selectValue(
52
+ normalizeDbValue(value.value, value.columnType),
53
+ value.columnType
54
+ ),
55
+ value.columnName
56
+ ).select(["root_", value.columnName], value.columnName + oldColSuffix),
50
57
  qb2
51
58
  );
52
59
  const columns = new Set(resolvedData.map((it) => it.columnName));
@@ -1 +1 @@
1
- {"version":3,"file":"UpdateBuilder.js","sources":["../../../../../../packages/engine-content-api/src/mapper/update/UpdateBuilder.ts"],"sourcesContent":["import { tuple } from '../../utils'\nimport { Acl, Input, Model, Value } from '@contember/schema'\nimport { acceptEveryFieldVisitor, getColumnName, getColumnType } from '@contember/schema-utils'\nimport { Operator, QueryBuilder, UpdateBuilder as DbUpdateBuilder, Value as DbValue } from '@contember/database'\nimport { PathFactory, WhereBuilder } from '../select'\nimport { ColumnValue, ResolvedColumnValue, resolveGenericValue, resolveRowData } from '../ColumnValue'\nimport { PredicateFactory } from '../../acl'\nimport { AfterUpdateEvent, BeforeUpdateEvent } from '../EventManager'\nimport { Mapper } from '../Mapper'\n\nexport interface UpdateResult {\n\tvalues: ResolvedColumnValue[]\n\texecuted: boolean\n\taffectedRows: number | null\n}\n\nexport class UpdateBuilder {\n\tprivate rowData: Map<string, ColumnValue> = new Map()\n\n\tprivate newWhere: { and: Input.OptionalWhere[] } = { and: [] }\n\tprivate oldWhere: { and: Input.OptionalWhere[] } = { and: [] }\n\n\tconstructor(\n\t\tprivate readonly schema: Model.Schema,\n\t\tprivate readonly entity: Model.Entity,\n\t\tprivate readonly whereBuilder: WhereBuilder,\n\t\tprivate readonly primary: Input.PrimaryValue,\n\t\tprivate readonly pathFactory: PathFactory,\n\t\tprivate readonly predicateFactory: PredicateFactory,\n\t) {}\n\n\tpublic addFieldValue(\n\t\tfieldName: string,\n\t\tvalue: Value.GenericValueLike<Value.AtomicValue<undefined>>,\n\t): Promise<Value.AtomicValue<undefined>> {\n\t\tconst columnName = getColumnName(this.schema, this.entity, fieldName)\n\t\tconst columnType = getColumnType(this.schema, this.entity, fieldName)\n\t\tconst resolvedValue = resolveGenericValue(value)\n\t\tthis.rowData.set(columnName, { columnName, value: resolvedValue, columnType, fieldName })\n\t\treturn resolvedValue\n\t}\n\n\tpublic addNewWhere(where: Input.OptionalWhere): void {\n\t\tthis.newWhere.and.push(where)\n\t}\n\n\tpublic addOldWhere(where: Input.OptionalWhere): void {\n\t\tthis.oldWhere.and.push(where)\n\t}\n\n\tpublic addPredicates(fields: string[]): void {\n\t\tconst predicate = this.predicateFactory.create(this.entity, Acl.Operation.update, fields)\n\t\tthis.addNewWhere(predicate)\n\t\tthis.addOldWhere(predicate)\n\t}\n\n\tpublic async execute(mapper: Mapper): Promise<UpdateResult> {\n\t\ttry {\n\t\t\tconst resolvedData = await resolveRowData([...this.rowData.values()])\n\t\t\tif (Object.keys(resolvedData).length === 0) {\n\t\t\t\treturn { values: [], affectedRows: null, executed: false }\n\t\t\t}\n\t\t\tconst oldColSuffix = '_old__'\n\n\t\t\tconst qb = DbUpdateBuilder.create()\n\t\t\t\t.with('newData_', qb => {\n\t\t\t\t\tqb = resolvedData.reduce(\n\t\t\t\t\t\t(qb, value) =>\n\t\t\t\t\t\t\tqb\n\t\t\t\t\t\t\t\t.select(expr => expr.selectValue(value.resolvedValue as DbValue, value.columnType), value.columnName)\n\t\t\t\t\t\t\t\t.select(['root_', value.columnName], value.columnName + oldColSuffix),\n\t\t\t\t\t\tqb,\n\t\t\t\t\t)\n\t\t\t\t\tconst columns = new Set(resolvedData.map(it => it.columnName))\n\t\t\t\t\tconst allColumns: string[] = Object.values(\n\t\t\t\t\t\tacceptEveryFieldVisitor(this.schema, this.entity, {\n\t\t\t\t\t\t\tvisitColumn: ({ column }) => column.columnName,\n\t\t\t\t\t\t\tvisitManyHasOne: ({ relation }) => relation.joiningColumn.columnName,\n\t\t\t\t\t\t\tvisitOneHasOneOwning: ({ relation }) => relation.joiningColumn.columnName,\n\t\t\t\t\t\t\tvisitManyHasManyInverse: () => null,\n\t\t\t\t\t\t\tvisitManyHasManyOwning: () => null,\n\t\t\t\t\t\t\tvisitOneHasOneInverse: () => null,\n\t\t\t\t\t\t\tvisitOneHasMany: () => null,\n\t\t\t\t\t\t}),\n\t\t\t\t\t).filter((it): it is string => it !== null)\n\n\t\t\t\t\tconst remainingColumns = allColumns.filter(it => !columns.has(it))\n\t\t\t\t\tqb = qb.from(this.entity.tableName, 'root_')\n\n\t\t\t\t\tqb = remainingColumns.reduce((qb, columnName) => qb.select(['root_', columnName]), qb)\n\n\t\t\t\t\tqb = this.whereBuilder.build(qb, this.entity, this.pathFactory.create([]), {\n\t\t\t\t\t\tand: [{\n\t\t\t\t\t\t\t[this.entity.primary]: { eq: this.primary },\n\t\t\t\t\t\t}, this.oldWhere],\n\t\t\t\t\t})\n\n\t\t\t\t\treturn qb\n\t\t\t\t})\n\t\t\t\t.table(this.entity.tableName)\n\t\t\t\t.values(\n\t\t\t\t\tresolvedData.reduce<QueryBuilder.ColumnExpressionMap>(\n\t\t\t\t\t\t(result: object, item) => ({\n\t\t\t\t\t\t\t...result,\n\t\t\t\t\t\t\t[item.columnName]: expr => expr.select(['newData_', item.columnName]),\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t{},\n\t\t\t\t\t),\n\t\t\t\t)\n\t\t\t\t.returning(...resolvedData.map(it => it.columnName + oldColSuffix))\n\t\t\t\t.from(qb => {\n\t\t\t\t\tqb = qb.from('newData_')\n\t\t\t\t\tconst col1 = tuple(this.entity.tableName, this.entity.primaryColumn)\n\t\t\t\t\tconst col2 = tuple('newData_', this.entity.primaryColumn)\n\t\t\t\t\tqb = qb.where(expr => expr.compareColumns(col1, Operator.eq, col2))\n\t\t\t\t\tqb = this.whereBuilder.build(qb, this.entity, this.pathFactory.create([], 'newData_'), this.newWhere)\n\t\t\t\t\treturn qb\n\t\t\t\t})\n\n\n\t\t\tconst beforeEvent = new BeforeUpdateEvent(this.entity, resolvedData as ResolvedColumnValue[], this.primary)\n\t\t\tawait mapper.eventManager.fire(beforeEvent)\n\n\t\t\tconst result = await qb.execute(mapper.db)\n\n\t\t\tif (result.length === 1) {\n\t\t\t\tconst eventData = (resolvedData as ResolvedColumnValue[]).map(it => ({\n\t\t\t\t\t...it,\n\t\t\t\t\told: result[0][it.columnName + oldColSuffix],\n\t\t\t\t}))\n\t\t\t\tconst afterUpdateEvent = new AfterUpdateEvent(this.entity, eventData, this.primary)\n\t\t\t\tbeforeEvent.afterEvent = afterUpdateEvent\n\t\t\t\tawait mapper.eventManager.fire(afterUpdateEvent)\n\t\t\t}\n\n\t\t\treturn { values: resolvedData as ResolvedColumnValue[], affectedRows: result.length, executed: true }\n\t\t} catch (e) {\n\t\t\tthrow e\n\t\t}\n\t}\n}\n"],"names":["DbUpdateBuilder","qb","result"],"mappings":"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"}
1
+ {"version":3,"file":"UpdateBuilder.js","sources":["../../../../../../packages/engine-content-api/src/mapper/update/UpdateBuilder.ts"],"sourcesContent":["import { tuple } from '../../utils'\nimport { Acl, Input, Model, Value } from '@contember/schema'\nimport { acceptEveryFieldVisitor, getColumnName, getColumnType } from '@contember/schema-utils'\nimport { Operator, QueryBuilder, UpdateBuilder as DbUpdateBuilder, Value as DbValue } from '@contember/database'\nimport { PathFactory, WhereBuilder } from '../select'\nimport { ColumnValue, normalizeDbValue } from '../ColumnValue'\nimport { PredicateFactory } from '../../acl'\nimport { AfterUpdateEvent, BeforeUpdateEvent } from '../EventManager'\nimport { Mapper } from '../Mapper'\n\nexport interface UpdateResult {\n\tvalues: ColumnValue[]\n\texecuted: boolean\n\taffectedRows: number | null\n}\n\nexport class UpdateBuilder {\n\tprivate rowData: Map<string, ColumnValue> = new Map()\n\n\tprivate newWhere: { and: Input.OptionalWhere[] } = { and: [] }\n\tprivate oldWhere: { and: Input.OptionalWhere[] } = { and: [] }\n\n\tconstructor(\n\t\tprivate readonly schema: Model.Schema,\n\t\tprivate readonly entity: Model.Entity,\n\t\tprivate readonly whereBuilder: WhereBuilder,\n\t\tprivate readonly primary: Input.PrimaryValue,\n\t\tprivate readonly pathFactory: PathFactory,\n\t\tprivate readonly predicateFactory: PredicateFactory,\n\t) {}\n\n\tpublic addFieldValue(\n\t\tfieldName: string,\n\t\tvalue: Value.FieldValue | undefined,\n\t): void {\n\t\tif (value === undefined) {\n\t\t\treturn\n\t\t}\n\t\tconst columnName = getColumnName(this.schema, this.entity, fieldName)\n\t\tconst columnType = getColumnType(this.schema, this.entity, fieldName)\n\n\t\tthis.rowData.set(columnName, { columnName, value, columnType, fieldName })\n\t}\n\n\tpublic addNewWhere(where: Input.OptionalWhere): void {\n\t\tthis.newWhere.and.push(where)\n\t}\n\n\tpublic addOldWhere(where: Input.OptionalWhere): void {\n\t\tthis.oldWhere.and.push(where)\n\t}\n\n\tpublic addPredicates(fields: string[]): void {\n\t\tconst predicate = this.predicateFactory.create(this.entity, Acl.Operation.update, fields)\n\t\tthis.addNewWhere(predicate)\n\t\tthis.addOldWhere(predicate)\n\t}\n\n\tpublic async execute(mapper: Mapper): Promise<UpdateResult> {\n\t\ttry {\n\t\t\tconst resolvedData = [...this.rowData.values()]\n\t\t\tif (Object.keys(resolvedData).length === 0) {\n\t\t\t\treturn { values: [], affectedRows: null, executed: false }\n\t\t\t}\n\t\t\tconst oldColSuffix = '_old__'\n\n\t\t\tconst qb = DbUpdateBuilder.create()\n\t\t\t\t.with('newData_', qb => {\n\t\t\t\t\tqb = resolvedData.reduce(\n\t\t\t\t\t\t(qb, value) =>\n\t\t\t\t\t\t\tqb\n\t\t\t\t\t\t\t\t.select(\n\t\t\t\t\t\t\t\t\texpr => expr.selectValue(\n\t\t\t\t\t\t\t\t\t\tnormalizeDbValue(value.value, value.columnType),\n\t\t\t\t\t\t\t\t\t\tvalue.columnType,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\tvalue.columnName,\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t.select(['root_', value.columnName], value.columnName + oldColSuffix),\n\t\t\t\t\t\tqb,\n\t\t\t\t\t)\n\t\t\t\t\tconst columns = new Set(resolvedData.map(it => it.columnName))\n\t\t\t\t\tconst allColumns: string[] = Object.values(\n\t\t\t\t\t\tacceptEveryFieldVisitor(this.schema, this.entity, {\n\t\t\t\t\t\t\tvisitColumn: ({ column }) => column.columnName,\n\t\t\t\t\t\t\tvisitManyHasOne: ({ relation }) => relation.joiningColumn.columnName,\n\t\t\t\t\t\t\tvisitOneHasOneOwning: ({ relation }) => relation.joiningColumn.columnName,\n\t\t\t\t\t\t\tvisitManyHasManyInverse: () => null,\n\t\t\t\t\t\t\tvisitManyHasManyOwning: () => null,\n\t\t\t\t\t\t\tvisitOneHasOneInverse: () => null,\n\t\t\t\t\t\t\tvisitOneHasMany: () => null,\n\t\t\t\t\t\t}),\n\t\t\t\t\t).filter((it): it is string => it !== null)\n\n\t\t\t\t\tconst remainingColumns = allColumns.filter(it => !columns.has(it))\n\t\t\t\t\tqb = qb.from(this.entity.tableName, 'root_')\n\n\t\t\t\t\tqb = remainingColumns.reduce((qb, columnName) => qb.select(['root_', columnName]), qb)\n\n\t\t\t\t\tqb = this.whereBuilder.build(qb, this.entity, this.pathFactory.create([]), {\n\t\t\t\t\t\tand: [{\n\t\t\t\t\t\t\t[this.entity.primary]: { eq: this.primary },\n\t\t\t\t\t\t}, this.oldWhere],\n\t\t\t\t\t})\n\n\t\t\t\t\treturn qb\n\t\t\t\t})\n\t\t\t\t.table(this.entity.tableName)\n\t\t\t\t.values(\n\t\t\t\t\tresolvedData.reduce<QueryBuilder.ColumnExpressionMap>(\n\t\t\t\t\t\t(result: object, item) => ({\n\t\t\t\t\t\t\t...result,\n\t\t\t\t\t\t\t[item.columnName]: expr => expr.select(['newData_', item.columnName]),\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t{},\n\t\t\t\t\t),\n\t\t\t\t)\n\t\t\t\t.returning(...resolvedData.map(it => it.columnName + oldColSuffix))\n\t\t\t\t.from(qb => {\n\t\t\t\t\tqb = qb.from('newData_')\n\t\t\t\t\tconst col1 = tuple(this.entity.tableName, this.entity.primaryColumn)\n\t\t\t\t\tconst col2 = tuple('newData_', this.entity.primaryColumn)\n\t\t\t\t\tqb = qb.where(expr => expr.compareColumns(col1, Operator.eq, col2))\n\t\t\t\t\tqb = this.whereBuilder.build(qb, this.entity, this.pathFactory.create([], 'newData_'), this.newWhere)\n\t\t\t\t\treturn qb\n\t\t\t\t})\n\n\n\t\t\tconst beforeEvent = new BeforeUpdateEvent(this.entity, resolvedData, this.primary)\n\t\t\tawait mapper.eventManager.fire(beforeEvent)\n\n\t\t\tconst result = await qb.execute(mapper.db)\n\n\t\t\tif (result.length === 1) {\n\t\t\t\tconst eventData = (resolvedData).map(it => ({\n\t\t\t\t\t...it,\n\t\t\t\t\told: result[0][it.columnName + oldColSuffix],\n\t\t\t\t}))\n\t\t\t\tconst afterUpdateEvent = new AfterUpdateEvent(this.entity, eventData, this.primary)\n\t\t\t\tbeforeEvent.afterEvent = afterUpdateEvent\n\t\t\t\tawait mapper.eventManager.fire(afterUpdateEvent)\n\t\t\t}\n\n\t\t\treturn { values: resolvedData, affectedRows: result.length, executed: true }\n\t\t} catch (e) {\n\t\t\tthrow e\n\t\t}\n\t}\n}\n"],"names":["DbUpdateBuilder","qb","result"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Updater.cjs","sources":["../../../../../../packages/engine-content-api/src/mapper/update/Updater.ts"],"sourcesContent":["import { SqlUpdateInputProcessor, SqlUpdateInputProcessorResult } from './SqlUpdateInputProcessor'\nimport { UpdateInputVisitor } from '../../inputProcessing'\nimport { Input, Model } from '@contember/schema'\nimport { PredicateFactory } from '../../acl'\nimport { UpdateBuilderFactory } from './UpdateBuilderFactory'\nimport { Mapper } from '../Mapper'\nimport { acceptFieldVisitor } from '@contember/schema-utils'\nimport { MutationNoResultError, MutationNothingToDo, MutationResultList, MutationUpdateOk, NothingToDoReason, RowValues } from '../Result'\nimport { UpdateBuilder } from './UpdateBuilder'\nimport { rowDataToFieldValues } from '../ColumnValue'\nimport { DatabaseMetadata } from '@contember/database'\n\nexport class Updater {\n\tconstructor(\n\t\tprivate readonly schema: Model.Schema,\n\t\tprivate readonly schemaDatabaseMetadata: DatabaseMetadata,\n\t\tprivate readonly predicateFactory: PredicateFactory,\n\t\tprivate readonly updateBuilderFactory: UpdateBuilderFactory,\n\t) {}\n\n\tpublic async update(\n\t\tmapper: Mapper,\n\t\tentity: Model.Entity,\n\t\tprimaryValue: Input.PrimaryValue,\n\t\tdata: Input.UpdateDataInput,\n\t\tfilter?: Input.OptionalWhere,\n\t): Promise<MutationResultList> {\n\t\tconst updateBuilder = this.updateBuilderFactory.create(entity, primaryValue)\n\n\t\tconst predicateFields = Object.keys(data)\n\t\tupdateBuilder.addPredicates(predicateFields)\n\t\tif (filter && Object.keys(filter).length > 0) {\n\t\t\tupdateBuilder.addOldWhere(filter)\n\t\t}\n\n\t\tconst visitor = new UpdateInputVisitor<SqlUpdateInputProcessorResult>(\n\t\t\tnew SqlUpdateInputProcessor(primaryValue, data, updateBuilder, mapper),\n\t\t\tthis.schema,\n\t\t\tdata,\n\t\t)\n\t\tconst resultList: MutationResultList = []\n\t\tconst postUpdates: Exclude<SqlUpdateInputProcessorResult, MutationResultList>[] = []\n\n\t\tfor (const key of Object.keys(data)) {\n\t\t\tconst resultSet = await acceptFieldVisitor(\n\t\t\t\tthis.schema,\n\t\t\t\tentity,\n\t\t\t\tkey,\n\t\t\t\tvisitor,\n\t\t\t)\n\t\t\tfor (const result of resultSet) {\n\t\t\t\tif (typeof result === 'function') {\n\t\t\t\t\tpostUpdates.push(result)\n\t\t\t\t} else {\n\t\t\t\t\tfor (const resultItem of await result) {\n\t\t\t\t\t\tresultList.push(resultItem)\n\t\t\t\t\t\tif (resultItem.error) {\n\t\t\t\t\t\t\treturn resultList\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst result = await updateBuilder.execute(mapper)\n\n\t\tif (!result.executed) {\n\t\t\tresultList.unshift(new MutationNothingToDo([], NothingToDoReason.noData))\n\t\t} else if (result.affectedRows !== 1) {\n\t\t\treturn [new MutationNoResultError([])]\n\t\t} else {\n\t\t\tconst okResult = new MutationUpdateOk([], entity, primaryValue, data, rowDataToFieldValues(result.values))\n\t\t\tresultList.unshift(okResult)\n\t\t}\n\n\t\tfor (const postUpdate of postUpdates) {\n\t\t\tconst postInsertResult = await postUpdate({ primary: primaryValue })\n\t\t\tfor (const result of postInsertResult) {\n\t\t\t\tresultList.push(result)\n\t\t\t\tif (result.error) {\n\t\t\t\t\treturn resultList\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn resultList\n\t}\n\n\tpublic async updateCb(\n\t\tmapper: Mapper,\n\t\tentity: Model.Entity,\n\t\tprimaryValue: Input.PrimaryValue,\n\t\tbuilderCb: (builder: UpdateBuilder) => void,\n\t): Promise<MutationResultList> {\n\t\tconst updateBuilder = this.updateBuilderFactory.create(entity, primaryValue)\n\n\t\tbuilderCb(updateBuilder)\n\n\t\tconst result = await updateBuilder.execute(mapper)\n\n\t\tif (!result.executed) {\n\t\t\treturn [new MutationNothingToDo([], NothingToDoReason.noData)]\n\t\t}\n\t\tif (result.affectedRows !== 1) {\n\t\t\treturn [new MutationNoResultError([])]\n\t\t}\n\t\treturn [new MutationUpdateOk([], entity, primaryValue, {}, rowDataToFieldValues(result.values))]\n\t}\n}\n"],"names":["UpdateInputVisitor","SqlUpdateInputProcessor","acceptFieldVisitor","result","MutationNothingToDo","NothingToDoReason","MutationNoResultError","MutationUpdateOk","rowDataToFieldValues"],"mappings":";;;;;;;;AAYO,MAAM,QAAQ;AAAA,EACpB,YACkB,QACA,wBACA,kBACA,sBAChB;AAJgB,SAAA,SAAA;AACA,SAAA,yBAAA;AACA,SAAA,mBAAA;AACA,SAAA,uBAAA;AAAA,EAAA;AAAA,EAGlB,MAAa,OACZ,QACA,QACA,cACA,MACA,QAC8B;AAC9B,UAAM,gBAAgB,KAAK,qBAAqB,OAAO,QAAQ,YAAY;AAErE,UAAA,kBAAkB,OAAO,KAAK,IAAI;AACxC,kBAAc,cAAc,eAAe;AAC3C,QAAI,UAAU,OAAO,KAAK,MAAM,EAAE,SAAS,GAAG;AAC7C,oBAAc,YAAY,MAAM;AAAA,IAAA;AAGjC,UAAM,UAAU,IAAIA,mBAAA;AAAA,MACnB,IAAIC,wBAAA,wBAAwB,cAAc,MAAM,eAAe,MAAM;AAAA,MACrE,KAAK;AAAA,MACL;AAAA,IACD;AACA,UAAM,aAAiC,CAAC;AACxC,UAAM,cAA4E,CAAC;AAEnF,eAAW,OAAO,OAAO,KAAK,IAAI,GAAG;AACpC,YAAM,YAAY,MAAMC,YAAA;AAAA,QACvB,KAAK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,MACD;AACA,iBAAWC,WAAU,WAAW;AAC3B,YAAA,OAAOA,YAAW,YAAY;AACjC,sBAAY,KAAKA,OAAM;AAAA,QAAA,OACjB;AACK,qBAAA,cAAc,MAAMA,SAAQ;AACtC,uBAAW,KAAK,UAAU;AAC1B,gBAAI,WAAW,OAAO;AACd,qBAAA;AAAA,YAAA;AAAA,UACR;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAGD,UAAM,SAAS,MAAM,cAAc,QAAQ,MAAM;AAE7C,QAAA,CAAC,OAAO,UAAU;AACrB,iBAAW,QAAQ,IAAIC,OAAAA,oBAAoB,CAAA,GAAIC,OAAAA,kBAAkB,MAAM,CAAC;AAAA,IAAA,WAC9D,OAAO,iBAAiB,GAAG;AACrC,aAAO,CAAC,IAAIC,6BAAsB,CAAA,CAAE,CAAC;AAAA,IAAA,OAC/B;AACA,YAAA,WAAW,IAAIC,wBAAiB,CAAA,GAAI,QAAQ,cAAc,MAAMC,YAAA,qBAAqB,OAAO,MAAM,CAAC;AACzG,iBAAW,QAAQ,QAAQ;AAAA,IAAA;AAG5B,eAAW,cAAc,aAAa;AACrC,YAAM,mBAAmB,MAAM,WAAW,EAAE,SAAS,cAAc;AACnE,iBAAWL,WAAU,kBAAkB;AACtC,mBAAW,KAAKA,OAAM;AACtB,YAAIA,QAAO,OAAO;AACV,iBAAA;AAAA,QAAA;AAAA,MACR;AAAA,IACD;AAGM,WAAA;AAAA,EAAA;AAAA,EAGR,MAAa,SACZ,QACA,QACA,cACA,WAC8B;AAC9B,UAAM,gBAAgB,KAAK,qBAAqB,OAAO,QAAQ,YAAY;AAE3E,cAAU,aAAa;AAEvB,UAAM,SAAS,MAAM,cAAc,QAAQ,MAAM;AAE7C,QAAA,CAAC,OAAO,UAAU;AACrB,aAAO,CAAC,IAAIC,OAAA,oBAAoB,CAAI,GAAAC,OAAA,kBAAkB,MAAM,CAAC;AAAA,IAAA;AAE1D,QAAA,OAAO,iBAAiB,GAAG;AAC9B,aAAO,CAAC,IAAIC,6BAAsB,CAAA,CAAE,CAAC;AAAA,IAAA;AAEtC,WAAO,CAAC,IAAIC,OAAAA,iBAAiB,CAAI,GAAA,QAAQ,cAAc,CAAI,GAAAC,iCAAqB,OAAO,MAAM,CAAC,CAAC;AAAA,EAAA;AAEjG;;"}
1
+ {"version":3,"file":"Updater.cjs","sources":["../../../../../../packages/engine-content-api/src/mapper/update/Updater.ts"],"sourcesContent":["import { SqlUpdateInputProcessor, SqlUpdateInputProcessorResult } from './SqlUpdateInputProcessor'\nimport { UpdateInputVisitor } from '../../inputProcessing'\nimport { Input, Model } from '@contember/schema'\nimport { PredicateFactory } from '../../acl'\nimport { UpdateBuilderFactory } from './UpdateBuilderFactory'\nimport { Mapper } from '../Mapper'\nimport { acceptFieldVisitor } from '@contember/schema-utils'\nimport { MutationNoResultError, MutationNothingToDo, MutationResultList, MutationUpdateOk, NothingToDoReason } from '../Result'\nimport { UpdateBuilder } from './UpdateBuilder'\nimport { rowDataToFieldValues } from '../ColumnValue'\nimport { DatabaseMetadata } from '@contember/database'\nimport { MapperInput } from '../types'\n\nexport class Updater {\n\tconstructor(\n\t\tprivate readonly schema: Model.Schema,\n\t\tprivate readonly schemaDatabaseMetadata: DatabaseMetadata,\n\t\tprivate readonly predicateFactory: PredicateFactory,\n\t\tprivate readonly updateBuilderFactory: UpdateBuilderFactory,\n\t) {}\n\n\tpublic async update(\n\t\tmapper: Mapper,\n\t\tentity: Model.Entity,\n\t\tprimaryValue: Input.PrimaryValue,\n\t\tdata: MapperInput.UpdateDataInput,\n\t\tfilter?: Input.OptionalWhere,\n\t): Promise<MutationResultList> {\n\t\tconst updateBuilder = this.updateBuilderFactory.create(entity, primaryValue)\n\n\t\tconst predicateFields = Object.keys(data)\n\t\tupdateBuilder.addPredicates(predicateFields)\n\t\tif (filter && Object.keys(filter).length > 0) {\n\t\t\tupdateBuilder.addOldWhere(filter)\n\t\t}\n\n\t\tconst visitor = new UpdateInputVisitor<SqlUpdateInputProcessorResult>(\n\t\t\tnew SqlUpdateInputProcessor(primaryValue, data, updateBuilder, mapper),\n\t\t\tthis.schema,\n\t\t\tdata,\n\t\t)\n\t\tconst resultList: MutationResultList = []\n\t\tconst postUpdates: Exclude<SqlUpdateInputProcessorResult, MutationResultList>[] = []\n\n\t\tfor (const key of Object.keys(data)) {\n\t\t\tconst resultSet = await acceptFieldVisitor(\n\t\t\t\tthis.schema,\n\t\t\t\tentity,\n\t\t\t\tkey,\n\t\t\t\tvisitor,\n\t\t\t)\n\t\t\tfor (const result of resultSet) {\n\t\t\t\tif (typeof result === 'function') {\n\t\t\t\t\tpostUpdates.push(result)\n\t\t\t\t} else {\n\t\t\t\t\tfor (const resultItem of await result) {\n\t\t\t\t\t\tresultList.push(resultItem)\n\t\t\t\t\t\tif (resultItem.error) {\n\t\t\t\t\t\t\treturn resultList\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst result = await updateBuilder.execute(mapper)\n\n\t\tif (!result.executed) {\n\t\t\tresultList.unshift(new MutationNothingToDo([], NothingToDoReason.noData))\n\t\t} else if (result.affectedRows !== 1) {\n\t\t\treturn [new MutationNoResultError([])]\n\t\t} else {\n\t\t\tconst okResult = new MutationUpdateOk([], entity, primaryValue, data, rowDataToFieldValues(result.values))\n\t\t\tresultList.unshift(okResult)\n\t\t}\n\n\t\tfor (const postUpdate of postUpdates) {\n\t\t\tconst postInsertResult = await postUpdate({ primary: primaryValue })\n\t\t\tfor (const result of postInsertResult) {\n\t\t\t\tresultList.push(result)\n\t\t\t\tif (result.error) {\n\t\t\t\t\treturn resultList\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn resultList\n\t}\n\n\tpublic async updateCb(\n\t\tmapper: Mapper,\n\t\tentity: Model.Entity,\n\t\tprimaryValue: Input.PrimaryValue,\n\t\tbuilderCb: (builder: UpdateBuilder) => void,\n\t): Promise<MutationResultList> {\n\t\tconst updateBuilder = this.updateBuilderFactory.create(entity, primaryValue)\n\n\t\tbuilderCb(updateBuilder)\n\n\t\tconst result = await updateBuilder.execute(mapper)\n\n\t\tif (!result.executed) {\n\t\t\treturn [new MutationNothingToDo([], NothingToDoReason.noData)]\n\t\t}\n\t\tif (result.affectedRows !== 1) {\n\t\t\treturn [new MutationNoResultError([])]\n\t\t}\n\t\treturn [new MutationUpdateOk([], entity, primaryValue, {}, rowDataToFieldValues(result.values))]\n\t}\n}\n"],"names":["UpdateInputVisitor","SqlUpdateInputProcessor","acceptFieldVisitor","result","MutationNothingToDo","NothingToDoReason","MutationNoResultError","MutationUpdateOk","rowDataToFieldValues"],"mappings":";;;;;;;;AAaO,MAAM,QAAQ;AAAA,EACpB,YACkB,QACA,wBACA,kBACA,sBAChB;AAJgB,SAAA,SAAA;AACA,SAAA,yBAAA;AACA,SAAA,mBAAA;AACA,SAAA,uBAAA;AAAA,EAAA;AAAA,EAGlB,MAAa,OACZ,QACA,QACA,cACA,MACA,QAC8B;AAC9B,UAAM,gBAAgB,KAAK,qBAAqB,OAAO,QAAQ,YAAY;AAErE,UAAA,kBAAkB,OAAO,KAAK,IAAI;AACxC,kBAAc,cAAc,eAAe;AAC3C,QAAI,UAAU,OAAO,KAAK,MAAM,EAAE,SAAS,GAAG;AAC7C,oBAAc,YAAY,MAAM;AAAA,IAAA;AAGjC,UAAM,UAAU,IAAIA,mBAAA;AAAA,MACnB,IAAIC,wBAAA,wBAAwB,cAAc,MAAM,eAAe,MAAM;AAAA,MACrE,KAAK;AAAA,MACL;AAAA,IACD;AACA,UAAM,aAAiC,CAAC;AACxC,UAAM,cAA4E,CAAC;AAEnF,eAAW,OAAO,OAAO,KAAK,IAAI,GAAG;AACpC,YAAM,YAAY,MAAMC,YAAA;AAAA,QACvB,KAAK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,MACD;AACA,iBAAWC,WAAU,WAAW;AAC3B,YAAA,OAAOA,YAAW,YAAY;AACjC,sBAAY,KAAKA,OAAM;AAAA,QAAA,OACjB;AACK,qBAAA,cAAc,MAAMA,SAAQ;AACtC,uBAAW,KAAK,UAAU;AAC1B,gBAAI,WAAW,OAAO;AACd,qBAAA;AAAA,YAAA;AAAA,UACR;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAGD,UAAM,SAAS,MAAM,cAAc,QAAQ,MAAM;AAE7C,QAAA,CAAC,OAAO,UAAU;AACrB,iBAAW,QAAQ,IAAIC,OAAAA,oBAAoB,CAAA,GAAIC,OAAAA,kBAAkB,MAAM,CAAC;AAAA,IAAA,WAC9D,OAAO,iBAAiB,GAAG;AACrC,aAAO,CAAC,IAAIC,6BAAsB,CAAA,CAAE,CAAC;AAAA,IAAA,OAC/B;AACA,YAAA,WAAW,IAAIC,wBAAiB,CAAA,GAAI,QAAQ,cAAc,MAAMC,YAAA,qBAAqB,OAAO,MAAM,CAAC;AACzG,iBAAW,QAAQ,QAAQ;AAAA,IAAA;AAG5B,eAAW,cAAc,aAAa;AACrC,YAAM,mBAAmB,MAAM,WAAW,EAAE,SAAS,cAAc;AACnE,iBAAWL,WAAU,kBAAkB;AACtC,mBAAW,KAAKA,OAAM;AACtB,YAAIA,QAAO,OAAO;AACV,iBAAA;AAAA,QAAA;AAAA,MACR;AAAA,IACD;AAGM,WAAA;AAAA,EAAA;AAAA,EAGR,MAAa,SACZ,QACA,QACA,cACA,WAC8B;AAC9B,UAAM,gBAAgB,KAAK,qBAAqB,OAAO,QAAQ,YAAY;AAE3E,cAAU,aAAa;AAEvB,UAAM,SAAS,MAAM,cAAc,QAAQ,MAAM;AAE7C,QAAA,CAAC,OAAO,UAAU;AACrB,aAAO,CAAC,IAAIC,OAAA,oBAAoB,CAAI,GAAAC,OAAA,kBAAkB,MAAM,CAAC;AAAA,IAAA;AAE1D,QAAA,OAAO,iBAAiB,GAAG;AAC9B,aAAO,CAAC,IAAIC,6BAAsB,CAAA,CAAE,CAAC;AAAA,IAAA;AAEtC,WAAO,CAAC,IAAIC,OAAAA,iBAAiB,CAAI,GAAA,QAAQ,cAAc,CAAI,GAAAC,iCAAqB,OAAO,MAAM,CAAC,CAAC;AAAA,EAAA;AAEjG;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Updater.js","sources":["../../../../../../packages/engine-content-api/src/mapper/update/Updater.ts"],"sourcesContent":["import { SqlUpdateInputProcessor, SqlUpdateInputProcessorResult } from './SqlUpdateInputProcessor'\nimport { UpdateInputVisitor } from '../../inputProcessing'\nimport { Input, Model } from '@contember/schema'\nimport { PredicateFactory } from '../../acl'\nimport { UpdateBuilderFactory } from './UpdateBuilderFactory'\nimport { Mapper } from '../Mapper'\nimport { acceptFieldVisitor } from '@contember/schema-utils'\nimport { MutationNoResultError, MutationNothingToDo, MutationResultList, MutationUpdateOk, NothingToDoReason, RowValues } from '../Result'\nimport { UpdateBuilder } from './UpdateBuilder'\nimport { rowDataToFieldValues } from '../ColumnValue'\nimport { DatabaseMetadata } from '@contember/database'\n\nexport class Updater {\n\tconstructor(\n\t\tprivate readonly schema: Model.Schema,\n\t\tprivate readonly schemaDatabaseMetadata: DatabaseMetadata,\n\t\tprivate readonly predicateFactory: PredicateFactory,\n\t\tprivate readonly updateBuilderFactory: UpdateBuilderFactory,\n\t) {}\n\n\tpublic async update(\n\t\tmapper: Mapper,\n\t\tentity: Model.Entity,\n\t\tprimaryValue: Input.PrimaryValue,\n\t\tdata: Input.UpdateDataInput,\n\t\tfilter?: Input.OptionalWhere,\n\t): Promise<MutationResultList> {\n\t\tconst updateBuilder = this.updateBuilderFactory.create(entity, primaryValue)\n\n\t\tconst predicateFields = Object.keys(data)\n\t\tupdateBuilder.addPredicates(predicateFields)\n\t\tif (filter && Object.keys(filter).length > 0) {\n\t\t\tupdateBuilder.addOldWhere(filter)\n\t\t}\n\n\t\tconst visitor = new UpdateInputVisitor<SqlUpdateInputProcessorResult>(\n\t\t\tnew SqlUpdateInputProcessor(primaryValue, data, updateBuilder, mapper),\n\t\t\tthis.schema,\n\t\t\tdata,\n\t\t)\n\t\tconst resultList: MutationResultList = []\n\t\tconst postUpdates: Exclude<SqlUpdateInputProcessorResult, MutationResultList>[] = []\n\n\t\tfor (const key of Object.keys(data)) {\n\t\t\tconst resultSet = await acceptFieldVisitor(\n\t\t\t\tthis.schema,\n\t\t\t\tentity,\n\t\t\t\tkey,\n\t\t\t\tvisitor,\n\t\t\t)\n\t\t\tfor (const result of resultSet) {\n\t\t\t\tif (typeof result === 'function') {\n\t\t\t\t\tpostUpdates.push(result)\n\t\t\t\t} else {\n\t\t\t\t\tfor (const resultItem of await result) {\n\t\t\t\t\t\tresultList.push(resultItem)\n\t\t\t\t\t\tif (resultItem.error) {\n\t\t\t\t\t\t\treturn resultList\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst result = await updateBuilder.execute(mapper)\n\n\t\tif (!result.executed) {\n\t\t\tresultList.unshift(new MutationNothingToDo([], NothingToDoReason.noData))\n\t\t} else if (result.affectedRows !== 1) {\n\t\t\treturn [new MutationNoResultError([])]\n\t\t} else {\n\t\t\tconst okResult = new MutationUpdateOk([], entity, primaryValue, data, rowDataToFieldValues(result.values))\n\t\t\tresultList.unshift(okResult)\n\t\t}\n\n\t\tfor (const postUpdate of postUpdates) {\n\t\t\tconst postInsertResult = await postUpdate({ primary: primaryValue })\n\t\t\tfor (const result of postInsertResult) {\n\t\t\t\tresultList.push(result)\n\t\t\t\tif (result.error) {\n\t\t\t\t\treturn resultList\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn resultList\n\t}\n\n\tpublic async updateCb(\n\t\tmapper: Mapper,\n\t\tentity: Model.Entity,\n\t\tprimaryValue: Input.PrimaryValue,\n\t\tbuilderCb: (builder: UpdateBuilder) => void,\n\t): Promise<MutationResultList> {\n\t\tconst updateBuilder = this.updateBuilderFactory.create(entity, primaryValue)\n\n\t\tbuilderCb(updateBuilder)\n\n\t\tconst result = await updateBuilder.execute(mapper)\n\n\t\tif (!result.executed) {\n\t\t\treturn [new MutationNothingToDo([], NothingToDoReason.noData)]\n\t\t}\n\t\tif (result.affectedRows !== 1) {\n\t\t\treturn [new MutationNoResultError([])]\n\t\t}\n\t\treturn [new MutationUpdateOk([], entity, primaryValue, {}, rowDataToFieldValues(result.values))]\n\t}\n}\n"],"names":["result"],"mappings":";;;;;;AAYO,MAAM,QAAQ;AAAA,EACpB,YACkB,QACA,wBACA,kBACA,sBAChB;AAJgB,SAAA,SAAA;AACA,SAAA,yBAAA;AACA,SAAA,mBAAA;AACA,SAAA,uBAAA;AAAA,EAAA;AAAA,EAGlB,MAAa,OACZ,QACA,QACA,cACA,MACA,QAC8B;AAC9B,UAAM,gBAAgB,KAAK,qBAAqB,OAAO,QAAQ,YAAY;AAErE,UAAA,kBAAkB,OAAO,KAAK,IAAI;AACxC,kBAAc,cAAc,eAAe;AAC3C,QAAI,UAAU,OAAO,KAAK,MAAM,EAAE,SAAS,GAAG;AAC7C,oBAAc,YAAY,MAAM;AAAA,IAAA;AAGjC,UAAM,UAAU,IAAI;AAAA,MACnB,IAAI,wBAAwB,cAAc,MAAM,eAAe,MAAM;AAAA,MACrE,KAAK;AAAA,MACL;AAAA,IACD;AACA,UAAM,aAAiC,CAAC;AACxC,UAAM,cAA4E,CAAC;AAEnF,eAAW,OAAO,OAAO,KAAK,IAAI,GAAG;AACpC,YAAM,YAAY,MAAM;AAAA,QACvB,KAAK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,MACD;AACA,iBAAWA,WAAU,WAAW;AAC3B,YAAA,OAAOA,YAAW,YAAY;AACjC,sBAAY,KAAKA,OAAM;AAAA,QAAA,OACjB;AACK,qBAAA,cAAc,MAAMA,SAAQ;AACtC,uBAAW,KAAK,UAAU;AAC1B,gBAAI,WAAW,OAAO;AACd,qBAAA;AAAA,YAAA;AAAA,UACR;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAGD,UAAM,SAAS,MAAM,cAAc,QAAQ,MAAM;AAE7C,QAAA,CAAC,OAAO,UAAU;AACrB,iBAAW,QAAQ,IAAI,oBAAoB,CAAA,GAAI,kBAAkB,MAAM,CAAC;AAAA,IAAA,WAC9D,OAAO,iBAAiB,GAAG;AACrC,aAAO,CAAC,IAAI,sBAAsB,CAAA,CAAE,CAAC;AAAA,IAAA,OAC/B;AACA,YAAA,WAAW,IAAI,iBAAiB,CAAA,GAAI,QAAQ,cAAc,MAAM,qBAAqB,OAAO,MAAM,CAAC;AACzG,iBAAW,QAAQ,QAAQ;AAAA,IAAA;AAG5B,eAAW,cAAc,aAAa;AACrC,YAAM,mBAAmB,MAAM,WAAW,EAAE,SAAS,cAAc;AACnE,iBAAWA,WAAU,kBAAkB;AACtC,mBAAW,KAAKA,OAAM;AACtB,YAAIA,QAAO,OAAO;AACV,iBAAA;AAAA,QAAA;AAAA,MACR;AAAA,IACD;AAGM,WAAA;AAAA,EAAA;AAAA,EAGR,MAAa,SACZ,QACA,QACA,cACA,WAC8B;AAC9B,UAAM,gBAAgB,KAAK,qBAAqB,OAAO,QAAQ,YAAY;AAE3E,cAAU,aAAa;AAEvB,UAAM,SAAS,MAAM,cAAc,QAAQ,MAAM;AAE7C,QAAA,CAAC,OAAO,UAAU;AACrB,aAAO,CAAC,IAAI,oBAAoB,CAAI,GAAA,kBAAkB,MAAM,CAAC;AAAA,IAAA;AAE1D,QAAA,OAAO,iBAAiB,GAAG;AAC9B,aAAO,CAAC,IAAI,sBAAsB,CAAA,CAAE,CAAC;AAAA,IAAA;AAEtC,WAAO,CAAC,IAAI,iBAAiB,CAAI,GAAA,QAAQ,cAAc,CAAI,GAAA,qBAAqB,OAAO,MAAM,CAAC,CAAC;AAAA,EAAA;AAEjG;"}
1
+ {"version":3,"file":"Updater.js","sources":["../../../../../../packages/engine-content-api/src/mapper/update/Updater.ts"],"sourcesContent":["import { SqlUpdateInputProcessor, SqlUpdateInputProcessorResult } from './SqlUpdateInputProcessor'\nimport { UpdateInputVisitor } from '../../inputProcessing'\nimport { Input, Model } from '@contember/schema'\nimport { PredicateFactory } from '../../acl'\nimport { UpdateBuilderFactory } from './UpdateBuilderFactory'\nimport { Mapper } from '../Mapper'\nimport { acceptFieldVisitor } from '@contember/schema-utils'\nimport { MutationNoResultError, MutationNothingToDo, MutationResultList, MutationUpdateOk, NothingToDoReason } from '../Result'\nimport { UpdateBuilder } from './UpdateBuilder'\nimport { rowDataToFieldValues } from '../ColumnValue'\nimport { DatabaseMetadata } from '@contember/database'\nimport { MapperInput } from '../types'\n\nexport class Updater {\n\tconstructor(\n\t\tprivate readonly schema: Model.Schema,\n\t\tprivate readonly schemaDatabaseMetadata: DatabaseMetadata,\n\t\tprivate readonly predicateFactory: PredicateFactory,\n\t\tprivate readonly updateBuilderFactory: UpdateBuilderFactory,\n\t) {}\n\n\tpublic async update(\n\t\tmapper: Mapper,\n\t\tentity: Model.Entity,\n\t\tprimaryValue: Input.PrimaryValue,\n\t\tdata: MapperInput.UpdateDataInput,\n\t\tfilter?: Input.OptionalWhere,\n\t): Promise<MutationResultList> {\n\t\tconst updateBuilder = this.updateBuilderFactory.create(entity, primaryValue)\n\n\t\tconst predicateFields = Object.keys(data)\n\t\tupdateBuilder.addPredicates(predicateFields)\n\t\tif (filter && Object.keys(filter).length > 0) {\n\t\t\tupdateBuilder.addOldWhere(filter)\n\t\t}\n\n\t\tconst visitor = new UpdateInputVisitor<SqlUpdateInputProcessorResult>(\n\t\t\tnew SqlUpdateInputProcessor(primaryValue, data, updateBuilder, mapper),\n\t\t\tthis.schema,\n\t\t\tdata,\n\t\t)\n\t\tconst resultList: MutationResultList = []\n\t\tconst postUpdates: Exclude<SqlUpdateInputProcessorResult, MutationResultList>[] = []\n\n\t\tfor (const key of Object.keys(data)) {\n\t\t\tconst resultSet = await acceptFieldVisitor(\n\t\t\t\tthis.schema,\n\t\t\t\tentity,\n\t\t\t\tkey,\n\t\t\t\tvisitor,\n\t\t\t)\n\t\t\tfor (const result of resultSet) {\n\t\t\t\tif (typeof result === 'function') {\n\t\t\t\t\tpostUpdates.push(result)\n\t\t\t\t} else {\n\t\t\t\t\tfor (const resultItem of await result) {\n\t\t\t\t\t\tresultList.push(resultItem)\n\t\t\t\t\t\tif (resultItem.error) {\n\t\t\t\t\t\t\treturn resultList\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst result = await updateBuilder.execute(mapper)\n\n\t\tif (!result.executed) {\n\t\t\tresultList.unshift(new MutationNothingToDo([], NothingToDoReason.noData))\n\t\t} else if (result.affectedRows !== 1) {\n\t\t\treturn [new MutationNoResultError([])]\n\t\t} else {\n\t\t\tconst okResult = new MutationUpdateOk([], entity, primaryValue, data, rowDataToFieldValues(result.values))\n\t\t\tresultList.unshift(okResult)\n\t\t}\n\n\t\tfor (const postUpdate of postUpdates) {\n\t\t\tconst postInsertResult = await postUpdate({ primary: primaryValue })\n\t\t\tfor (const result of postInsertResult) {\n\t\t\t\tresultList.push(result)\n\t\t\t\tif (result.error) {\n\t\t\t\t\treturn resultList\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn resultList\n\t}\n\n\tpublic async updateCb(\n\t\tmapper: Mapper,\n\t\tentity: Model.Entity,\n\t\tprimaryValue: Input.PrimaryValue,\n\t\tbuilderCb: (builder: UpdateBuilder) => void,\n\t): Promise<MutationResultList> {\n\t\tconst updateBuilder = this.updateBuilderFactory.create(entity, primaryValue)\n\n\t\tbuilderCb(updateBuilder)\n\n\t\tconst result = await updateBuilder.execute(mapper)\n\n\t\tif (!result.executed) {\n\t\t\treturn [new MutationNothingToDo([], NothingToDoReason.noData)]\n\t\t}\n\t\tif (result.affectedRows !== 1) {\n\t\t\treturn [new MutationNoResultError([])]\n\t\t}\n\t\treturn [new MutationUpdateOk([], entity, primaryValue, {}, rowDataToFieldValues(result.values))]\n\t}\n}\n"],"names":["result"],"mappings":";;;;;;AAaO,MAAM,QAAQ;AAAA,EACpB,YACkB,QACA,wBACA,kBACA,sBAChB;AAJgB,SAAA,SAAA;AACA,SAAA,yBAAA;AACA,SAAA,mBAAA;AACA,SAAA,uBAAA;AAAA,EAAA;AAAA,EAGlB,MAAa,OACZ,QACA,QACA,cACA,MACA,QAC8B;AAC9B,UAAM,gBAAgB,KAAK,qBAAqB,OAAO,QAAQ,YAAY;AAErE,UAAA,kBAAkB,OAAO,KAAK,IAAI;AACxC,kBAAc,cAAc,eAAe;AAC3C,QAAI,UAAU,OAAO,KAAK,MAAM,EAAE,SAAS,GAAG;AAC7C,oBAAc,YAAY,MAAM;AAAA,IAAA;AAGjC,UAAM,UAAU,IAAI;AAAA,MACnB,IAAI,wBAAwB,cAAc,MAAM,eAAe,MAAM;AAAA,MACrE,KAAK;AAAA,MACL;AAAA,IACD;AACA,UAAM,aAAiC,CAAC;AACxC,UAAM,cAA4E,CAAC;AAEnF,eAAW,OAAO,OAAO,KAAK,IAAI,GAAG;AACpC,YAAM,YAAY,MAAM;AAAA,QACvB,KAAK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,MACD;AACA,iBAAWA,WAAU,WAAW;AAC3B,YAAA,OAAOA,YAAW,YAAY;AACjC,sBAAY,KAAKA,OAAM;AAAA,QAAA,OACjB;AACK,qBAAA,cAAc,MAAMA,SAAQ;AACtC,uBAAW,KAAK,UAAU;AAC1B,gBAAI,WAAW,OAAO;AACd,qBAAA;AAAA,YAAA;AAAA,UACR;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAGD,UAAM,SAAS,MAAM,cAAc,QAAQ,MAAM;AAE7C,QAAA,CAAC,OAAO,UAAU;AACrB,iBAAW,QAAQ,IAAI,oBAAoB,CAAA,GAAI,kBAAkB,MAAM,CAAC;AAAA,IAAA,WAC9D,OAAO,iBAAiB,GAAG;AACrC,aAAO,CAAC,IAAI,sBAAsB,CAAA,CAAE,CAAC;AAAA,IAAA,OAC/B;AACA,YAAA,WAAW,IAAI,iBAAiB,CAAA,GAAI,QAAQ,cAAc,MAAM,qBAAqB,OAAO,MAAM,CAAC;AACzG,iBAAW,QAAQ,QAAQ;AAAA,IAAA;AAG5B,eAAW,cAAc,aAAa;AACrC,YAAM,mBAAmB,MAAM,WAAW,EAAE,SAAS,cAAc;AACnE,iBAAWA,WAAU,kBAAkB;AACtC,mBAAW,KAAKA,OAAM;AACtB,YAAIA,QAAO,OAAO;AACV,iBAAA;AAAA,QAAA;AAAA,MACR;AAAA,IACD;AAGM,WAAA;AAAA,EAAA;AAAA,EAGR,MAAa,SACZ,QACA,QACA,cACA,WAC8B;AAC9B,UAAM,gBAAgB,KAAK,qBAAqB,OAAO,QAAQ,YAAY;AAE3E,cAAU,aAAa;AAEvB,UAAM,SAAS,MAAM,cAAc,QAAQ,MAAM;AAE7C,QAAA,CAAC,OAAO,UAAU;AACrB,aAAO,CAAC,IAAI,oBAAoB,CAAI,GAAA,kBAAkB,MAAM,CAAC;AAAA,IAAA;AAE1D,QAAA,OAAO,iBAAiB,GAAG;AAC9B,aAAO,CAAC,IAAI,sBAAsB,CAAA,CAAE,CAAC;AAAA,IAAA;AAEtC,WAAO,CAAC,IAAI,iBAAiB,CAAI,GAAA,QAAQ,cAAc,CAAI,GAAA,qBAAqB,OAAO,MAAM,CAAC,CAAC;AAAA,EAAA;AAEjG;"}
@@ -1,16 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const Result = require("../../Result.cjs");
4
+ const CheckedPrimary = require("../../CheckedPrimary.cjs");
4
5
  class ManyHasManyUpdateInputProcessor {
5
6
  constructor(mapper) {
6
7
  this.mapper = mapper;
7
8
  }
8
9
  async connect({ entity, targetEntity, relation, targetRelation, input }) {
9
10
  return async ({ primary }) => {
10
- const otherPrimary = await this.mapper.getPrimaryValue(targetEntity, input);
11
- if (!otherPrimary) {
12
- return [new Result.MutationEntryNotFoundError([], input)];
13
- }
11
+ const [otherPrimary, err] = await this.mapper.getPrimaryValue(targetEntity, input);
12
+ if (err) return [err];
14
13
  return await this.mapper.connectJunction(entity, relation, primary, otherPrimary);
15
14
  };
16
15
  }
@@ -29,7 +28,7 @@ class ManyHasManyUpdateInputProcessor {
29
28
  }
30
29
  async connectOrCreate(context) {
31
30
  return async ({ primary }) => {
32
- let otherPrimary = await this.mapper.getPrimaryValue(context.targetEntity, context.input.connect);
31
+ let [otherPrimary] = await this.mapper.getPrimaryValue(context.targetEntity, context.input.connect);
33
32
  if (!otherPrimary) {
34
33
  const insertResult = await this.mapper.insert(context.targetEntity, context.input.create);
35
34
  otherPrimary = Result.getInsertPrimary(insertResult);
@@ -42,21 +41,19 @@ class ManyHasManyUpdateInputProcessor {
42
41
  }
43
42
  async update({ entity, targetEntity, relation, input: { where, data } }) {
44
43
  return async ({ primary }) => {
45
- const otherPrimary = await this.mapper.getPrimaryValue(targetEntity, where);
46
- if (!otherPrimary) {
47
- return [new Result.MutationEntryNotFoundError([], where)];
48
- }
44
+ const [otherPrimary, err] = await this.mapper.getPrimaryValue(targetEntity, where);
45
+ if (err) return [err];
49
46
  return [
50
- ...await this.mapper.update(targetEntity, { [targetEntity.primary]: otherPrimary }, data),
47
+ ...await this.mapper.update(targetEntity, new CheckedPrimary.CheckedPrimary(otherPrimary), data),
51
48
  ...await this.mapper.connectJunction(entity, relation, primary, otherPrimary)
52
49
  ];
53
50
  };
54
51
  }
55
52
  async upsert({ entity, relation, targetEntity, input: { create, update, where } }) {
56
53
  return async ({ primary }) => {
57
- const otherPrimary = await this.mapper.getPrimaryValue(targetEntity, where);
54
+ const [otherPrimary] = await this.mapper.getPrimaryValue(targetEntity, where);
58
55
  if (otherPrimary) {
59
- const updateResult = await this.mapper.update(targetEntity, { [targetEntity.primary]: otherPrimary }, update);
56
+ const updateResult = await this.mapper.update(targetEntity, new CheckedPrimary.CheckedPrimary(otherPrimary), update);
60
57
  const connectResult = await this.mapper.connectJunction(entity, relation, primary, otherPrimary);
61
58
  return [...updateResult, ...connectResult];
62
59
  } else {
@@ -72,10 +69,8 @@ class ManyHasManyUpdateInputProcessor {
72
69
  }
73
70
  async disconnect({ entity, targetEntity, relation, input }) {
74
71
  return async ({ primary }) => {
75
- const otherPrimary = await this.mapper.getPrimaryValue(targetEntity, input);
76
- if (!otherPrimary) {
77
- return [new Result.MutationEntryNotFoundError([], input)];
78
- }
72
+ const [otherPrimary, err] = await this.mapper.getPrimaryValue(targetEntity, input);
73
+ if (err) return [err];
79
74
  return await this.mapper.disconnectJunction(entity, relation, primary, otherPrimary);
80
75
  };
81
76
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ManyHasManyUpdateInputProcessor.cjs","sources":["../../../../../../../packages/engine-content-api/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.ts"],"sourcesContent":["import { UpdateInputProcessor } from '../../../inputProcessing'\nimport { Input, Model } from '@contember/schema'\nimport { getInsertPrimary, MutationEntryNotFoundError } from '../../Result'\nimport { Mapper } from '../../Mapper'\nimport { SqlUpdateInputProcessorResult } from '../../update'\n\ntype Context = Model.ManyHasManyOwningContext | Model.ManyHasManyInverseContext\n\nexport class ManyHasManyUpdateInputProcessor implements UpdateInputProcessor.HasManyRelationInputProcessor<Context, SqlUpdateInputProcessorResult> {\n\tconstructor(\n\t\tprivate readonly mapper: Mapper,\n\t) {\n\t}\n\n\tpublic async connect(\n\t\t{ entity, targetEntity, relation, targetRelation, input }: Context & { input: Input.UniqueWhere },\n\t) {\n\t\treturn async ({ primary }: { primary: Input.PrimaryValue }) => {\n\t\t\tconst otherPrimary = await this.mapper.getPrimaryValue(targetEntity, input)\n\t\t\tif (!otherPrimary) {\n\t\t\t\treturn [new MutationEntryNotFoundError([], input)]\n\t\t\t}\n\t\t\treturn await this.mapper.connectJunction(entity, relation, primary, otherPrimary)\n\t\t}\n\t}\n\n\tpublic async create(\n\t\t{ entity, targetEntity, relation, input }: Context & { input: Input.CreateDataInput },\n\t) {\n\t\treturn async ({ primary }: { primary: Input.PrimaryValue }) => {\n\t\t\tconst insertResult = await this.mapper.insert(targetEntity, input)\n\t\t\tconst insertPrimary = getInsertPrimary(insertResult)\n\t\t\tif (!insertPrimary) {\n\t\t\t\treturn insertResult\n\t\t\t}\n\t\t\treturn [\n\t\t\t\t...insertResult,\n\t\t\t\t...(await this.mapper.connectJunction(entity, relation, primary, insertPrimary)),\n\t\t\t]\n\t\t}\n\t}\n\n\tpublic async connectOrCreate(\n\t\tcontext: Context & { input: Input.ConnectOrCreateInput },\n\t) {\n\t\treturn async ({ primary }: { primary: Input.PrimaryValue }) => {\n\t\t\tlet otherPrimary = await this.mapper.getPrimaryValue(context.targetEntity, context.input.connect)\n\t\t\tif (!otherPrimary) {\n\t\t\t\tconst insertResult = await this.mapper.insert(context.targetEntity, context.input.create)\n\t\t\t\totherPrimary = getInsertPrimary(insertResult)\n\t\t\t\tif (!otherPrimary) {\n\t\t\t\t\treturn insertResult\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn await this.mapper.connectJunction(context.entity, context.relation, primary, otherPrimary)\n\t\t}\n\t}\n\n\tpublic async update(\n\t\t{ entity, targetEntity, relation, input: { where, data } }: Context & { input: UpdateInputProcessor.UpdateManyInput },\n\t) {\n\t\treturn async ({ primary }: { primary: Input.PrimaryValue }) => {\n\t\t\tconst otherPrimary = await this.mapper.getPrimaryValue(targetEntity, where)\n\t\t\tif (!otherPrimary) {\n\t\t\t\treturn [new MutationEntryNotFoundError([], where)]\n\t\t\t}\n\t\t\treturn [\n\t\t\t\t...(await this.mapper.update(targetEntity, { [targetEntity.primary]: otherPrimary }, data)),\n\t\t\t\t...(await this.mapper.connectJunction(entity, relation, primary, otherPrimary)),\n\t\t\t]\n\t\t}\n\t}\n\n\tpublic async upsert(\n\t\t{ entity, relation, targetEntity, input: { create, update, where } }: Context & { input: UpdateInputProcessor.UpsertManyInput },\n\t) {\n\t\treturn async ({ primary }: { primary: Input.PrimaryValue }) => {\n\t\t\tconst otherPrimary = await this.mapper.getPrimaryValue(targetEntity, where)\n\t\t\tif (otherPrimary) {\n\t\t\t\tconst updateResult = await this.mapper.update(targetEntity, { [targetEntity.primary]: otherPrimary }, update)\n\t\t\t\tconst connectResult = await this.mapper.connectJunction(entity, relation, primary, otherPrimary)\n\t\t\t\treturn [...updateResult, ...connectResult]\n\t\t\t} else {\n\t\t\t\tconst insertResult = await this.mapper.insert(targetEntity, create)\n\n\t\t\t\tconst primaryValue = getInsertPrimary(insertResult)\n\t\t\t\tif (!primaryValue) {\n\t\t\t\t\treturn insertResult\n\t\t\t\t}\n\t\t\t\tconst connectResult = await this.mapper.connectJunction(entity, relation, primary, primaryValue)\n\t\t\t\treturn [...insertResult, ...connectResult]\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic async disconnect(\n\t\t{ entity, targetEntity, relation, input }: Context & { input: Input.UniqueWhere },\n\t) {\n\t\treturn async ({ primary }: { primary: Input.PrimaryValue }) => {\n\t\t\tconst otherPrimary = await this.mapper.getPrimaryValue(targetEntity, input)\n\t\t\tif (!otherPrimary) {\n\t\t\t\treturn [new MutationEntryNotFoundError([], input)]\n\t\t\t}\n\n\t\t\treturn await this.mapper.disconnectJunction(entity, relation, primary, otherPrimary)\n\t\t}\n\t}\n\n\tpublic async delete(\n\t\t{ entity, targetEntity, relation, targetRelation, input }: Context & { input: Input.UniqueWhere },\n\t) {\n\t\treturn async ({ primary }: { primary: Input.PrimaryValue }) => {\n\t\t\treturn await this.mapper.delete(targetEntity, input)\n\t\t}\n\t}\n}\n"],"names":["MutationEntryNotFoundError","getInsertPrimary"],"mappings":"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"}
1
+ {"version":3,"file":"ManyHasManyUpdateInputProcessor.cjs","sources":["../../../../../../../packages/engine-content-api/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.ts"],"sourcesContent":["import { UpdateInputProcessor } from '../../../inputProcessing'\nimport { Input, Model } from '@contember/schema'\nimport { getInsertPrimary, MutationEntryNotFoundError } from '../../Result'\nimport { Mapper } from '../../Mapper'\nimport { SqlUpdateInputProcessorResult } from '../../update'\nimport { CheckedPrimary } from '../../CheckedPrimary'\nimport { MapperInput } from '../../types'\n\ntype Context = Model.ManyHasManyOwningContext | Model.ManyHasManyInverseContext\n\nexport class ManyHasManyUpdateInputProcessor implements UpdateInputProcessor.HasManyRelationInputProcessor<Context, SqlUpdateInputProcessorResult> {\n\tconstructor(\n\t\tprivate readonly mapper: Mapper,\n\t) {\n\t}\n\n\tpublic async connect(\n\t\t{ entity, targetEntity, relation, targetRelation, input }: Context & { input: Input.UniqueWhere | CheckedPrimary },\n\t) {\n\t\treturn async ({ primary }: { primary: Input.PrimaryValue }) => {\n\t\t\tconst [otherPrimary, err] = await this.mapper.getPrimaryValue(targetEntity, input)\n\t\t\tif (err) return [err]\n\t\t\treturn await this.mapper.connectJunction(entity, relation, primary, otherPrimary)\n\t\t}\n\t}\n\n\tpublic async create(\n\t\t{ entity, targetEntity, relation, input }: Context & { input: MapperInput.CreateDataInput },\n\t) {\n\t\treturn async ({ primary }: { primary: Input.PrimaryValue }) => {\n\t\t\tconst insertResult = await this.mapper.insert(targetEntity, input)\n\t\t\tconst insertPrimary = getInsertPrimary(insertResult)\n\t\t\tif (!insertPrimary) {\n\t\t\t\treturn insertResult\n\t\t\t}\n\t\t\treturn [\n\t\t\t\t...insertResult,\n\t\t\t\t...(await this.mapper.connectJunction(entity, relation, primary, insertPrimary)),\n\t\t\t]\n\t\t}\n\t}\n\n\tpublic async connectOrCreate(\n\t\tcontext: Context & { input: MapperInput.ConnectOrCreateInput },\n\t) {\n\t\treturn async ({ primary }: { primary: Input.PrimaryValue }) => {\n\t\t\tlet [otherPrimary] = await this.mapper.getPrimaryValue(context.targetEntity, context.input.connect)\n\t\t\tif (!otherPrimary) {\n\t\t\t\tconst insertResult = await this.mapper.insert(context.targetEntity, context.input.create)\n\t\t\t\totherPrimary = getInsertPrimary(insertResult)\n\t\t\t\tif (!otherPrimary) {\n\t\t\t\t\treturn insertResult\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn await this.mapper.connectJunction(context.entity, context.relation, primary, otherPrimary)\n\t\t}\n\t}\n\n\tpublic async update(\n\t\t{ entity, targetEntity, relation, input: { where, data } }: Context & { input: UpdateInputProcessor.UpdateManyInput },\n\t) {\n\t\treturn async ({ primary }: { primary: Input.PrimaryValue }) => {\n\t\t\tconst [otherPrimary, err] = await this.mapper.getPrimaryValue(targetEntity, where)\n\t\t\tif (err) return [err]\n\t\t\treturn [\n\t\t\t\t...(await this.mapper.update(targetEntity, new CheckedPrimary(otherPrimary), data)),\n\t\t\t\t...(await this.mapper.connectJunction(entity, relation, primary, otherPrimary)),\n\t\t\t]\n\t\t}\n\t}\n\n\tpublic async upsert(\n\t\t{ entity, relation, targetEntity, input: { create, update, where } }: Context & { input: UpdateInputProcessor.UpsertManyInput },\n\t) {\n\t\treturn async ({ primary }: { primary: Input.PrimaryValue }) => {\n\t\t\tconst [otherPrimary] = await this.mapper.getPrimaryValue(targetEntity, where)\n\t\t\tif (otherPrimary) {\n\t\t\t\tconst updateResult = await this.mapper.update(targetEntity, new CheckedPrimary(otherPrimary), update)\n\t\t\t\tconst connectResult = await this.mapper.connectJunction(entity, relation, primary, otherPrimary)\n\t\t\t\treturn [...updateResult, ...connectResult]\n\t\t\t} else {\n\t\t\t\tconst insertResult = await this.mapper.insert(targetEntity, create)\n\n\t\t\t\tconst primaryValue = getInsertPrimary(insertResult)\n\t\t\t\tif (!primaryValue) {\n\t\t\t\t\treturn insertResult\n\t\t\t\t}\n\t\t\t\tconst connectResult = await this.mapper.connectJunction(entity, relation, primary, primaryValue)\n\t\t\t\treturn [...insertResult, ...connectResult]\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic async disconnect(\n\t\t{ entity, targetEntity, relation, input }: Context & { input: Input.UniqueWhere },\n\t) {\n\t\treturn async ({ primary }: { primary: Input.PrimaryValue }) => {\n\t\t\tconst [otherPrimary, err] = await this.mapper.getPrimaryValue(targetEntity, input)\n\t\t\tif (err) return [err]\n\n\t\t\treturn await this.mapper.disconnectJunction(entity, relation, primary, otherPrimary)\n\t\t}\n\t}\n\n\tpublic async delete(\n\t\t{ entity, targetEntity, relation, targetRelation, input }: Context & { input: Input.UniqueWhere },\n\t) {\n\t\treturn async ({ primary }: { primary: Input.PrimaryValue }) => {\n\t\t\treturn await this.mapper.delete(targetEntity, input)\n\t\t}\n\t}\n}\n"],"names":["getInsertPrimary","CheckedPrimary"],"mappings":"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"}
@@ -1,14 +1,13 @@
1
- import { MutationEntryNotFoundError, getInsertPrimary } from "../../Result.js";
1
+ import { getInsertPrimary } from "../../Result.js";
2
+ import { CheckedPrimary } from "../../CheckedPrimary.js";
2
3
  class ManyHasManyUpdateInputProcessor {
3
4
  constructor(mapper) {
4
5
  this.mapper = mapper;
5
6
  }
6
7
  async connect({ entity, targetEntity, relation, targetRelation, input }) {
7
8
  return async ({ primary }) => {
8
- const otherPrimary = await this.mapper.getPrimaryValue(targetEntity, input);
9
- if (!otherPrimary) {
10
- return [new MutationEntryNotFoundError([], input)];
11
- }
9
+ const [otherPrimary, err] = await this.mapper.getPrimaryValue(targetEntity, input);
10
+ if (err) return [err];
12
11
  return await this.mapper.connectJunction(entity, relation, primary, otherPrimary);
13
12
  };
14
13
  }
@@ -27,7 +26,7 @@ class ManyHasManyUpdateInputProcessor {
27
26
  }
28
27
  async connectOrCreate(context) {
29
28
  return async ({ primary }) => {
30
- let otherPrimary = await this.mapper.getPrimaryValue(context.targetEntity, context.input.connect);
29
+ let [otherPrimary] = await this.mapper.getPrimaryValue(context.targetEntity, context.input.connect);
31
30
  if (!otherPrimary) {
32
31
  const insertResult = await this.mapper.insert(context.targetEntity, context.input.create);
33
32
  otherPrimary = getInsertPrimary(insertResult);
@@ -40,21 +39,19 @@ class ManyHasManyUpdateInputProcessor {
40
39
  }
41
40
  async update({ entity, targetEntity, relation, input: { where, data } }) {
42
41
  return async ({ primary }) => {
43
- const otherPrimary = await this.mapper.getPrimaryValue(targetEntity, where);
44
- if (!otherPrimary) {
45
- return [new MutationEntryNotFoundError([], where)];
46
- }
42
+ const [otherPrimary, err] = await this.mapper.getPrimaryValue(targetEntity, where);
43
+ if (err) return [err];
47
44
  return [
48
- ...await this.mapper.update(targetEntity, { [targetEntity.primary]: otherPrimary }, data),
45
+ ...await this.mapper.update(targetEntity, new CheckedPrimary(otherPrimary), data),
49
46
  ...await this.mapper.connectJunction(entity, relation, primary, otherPrimary)
50
47
  ];
51
48
  };
52
49
  }
53
50
  async upsert({ entity, relation, targetEntity, input: { create, update, where } }) {
54
51
  return async ({ primary }) => {
55
- const otherPrimary = await this.mapper.getPrimaryValue(targetEntity, where);
52
+ const [otherPrimary] = await this.mapper.getPrimaryValue(targetEntity, where);
56
53
  if (otherPrimary) {
57
- const updateResult = await this.mapper.update(targetEntity, { [targetEntity.primary]: otherPrimary }, update);
54
+ const updateResult = await this.mapper.update(targetEntity, new CheckedPrimary(otherPrimary), update);
58
55
  const connectResult = await this.mapper.connectJunction(entity, relation, primary, otherPrimary);
59
56
  return [...updateResult, ...connectResult];
60
57
  } else {
@@ -70,10 +67,8 @@ class ManyHasManyUpdateInputProcessor {
70
67
  }
71
68
  async disconnect({ entity, targetEntity, relation, input }) {
72
69
  return async ({ primary }) => {
73
- const otherPrimary = await this.mapper.getPrimaryValue(targetEntity, input);
74
- if (!otherPrimary) {
75
- return [new MutationEntryNotFoundError([], input)];
76
- }
70
+ const [otherPrimary, err] = await this.mapper.getPrimaryValue(targetEntity, input);
71
+ if (err) return [err];
77
72
  return await this.mapper.disconnectJunction(entity, relation, primary, otherPrimary);
78
73
  };
79
74
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ManyHasManyUpdateInputProcessor.js","sources":["../../../../../../../packages/engine-content-api/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.ts"],"sourcesContent":["import { UpdateInputProcessor } from '../../../inputProcessing'\nimport { Input, Model } from '@contember/schema'\nimport { getInsertPrimary, MutationEntryNotFoundError } from '../../Result'\nimport { Mapper } from '../../Mapper'\nimport { SqlUpdateInputProcessorResult } from '../../update'\n\ntype Context = Model.ManyHasManyOwningContext | Model.ManyHasManyInverseContext\n\nexport class ManyHasManyUpdateInputProcessor implements UpdateInputProcessor.HasManyRelationInputProcessor<Context, SqlUpdateInputProcessorResult> {\n\tconstructor(\n\t\tprivate readonly mapper: Mapper,\n\t) {\n\t}\n\n\tpublic async connect(\n\t\t{ entity, targetEntity, relation, targetRelation, input }: Context & { input: Input.UniqueWhere },\n\t) {\n\t\treturn async ({ primary }: { primary: Input.PrimaryValue }) => {\n\t\t\tconst otherPrimary = await this.mapper.getPrimaryValue(targetEntity, input)\n\t\t\tif (!otherPrimary) {\n\t\t\t\treturn [new MutationEntryNotFoundError([], input)]\n\t\t\t}\n\t\t\treturn await this.mapper.connectJunction(entity, relation, primary, otherPrimary)\n\t\t}\n\t}\n\n\tpublic async create(\n\t\t{ entity, targetEntity, relation, input }: Context & { input: Input.CreateDataInput },\n\t) {\n\t\treturn async ({ primary }: { primary: Input.PrimaryValue }) => {\n\t\t\tconst insertResult = await this.mapper.insert(targetEntity, input)\n\t\t\tconst insertPrimary = getInsertPrimary(insertResult)\n\t\t\tif (!insertPrimary) {\n\t\t\t\treturn insertResult\n\t\t\t}\n\t\t\treturn [\n\t\t\t\t...insertResult,\n\t\t\t\t...(await this.mapper.connectJunction(entity, relation, primary, insertPrimary)),\n\t\t\t]\n\t\t}\n\t}\n\n\tpublic async connectOrCreate(\n\t\tcontext: Context & { input: Input.ConnectOrCreateInput },\n\t) {\n\t\treturn async ({ primary }: { primary: Input.PrimaryValue }) => {\n\t\t\tlet otherPrimary = await this.mapper.getPrimaryValue(context.targetEntity, context.input.connect)\n\t\t\tif (!otherPrimary) {\n\t\t\t\tconst insertResult = await this.mapper.insert(context.targetEntity, context.input.create)\n\t\t\t\totherPrimary = getInsertPrimary(insertResult)\n\t\t\t\tif (!otherPrimary) {\n\t\t\t\t\treturn insertResult\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn await this.mapper.connectJunction(context.entity, context.relation, primary, otherPrimary)\n\t\t}\n\t}\n\n\tpublic async update(\n\t\t{ entity, targetEntity, relation, input: { where, data } }: Context & { input: UpdateInputProcessor.UpdateManyInput },\n\t) {\n\t\treturn async ({ primary }: { primary: Input.PrimaryValue }) => {\n\t\t\tconst otherPrimary = await this.mapper.getPrimaryValue(targetEntity, where)\n\t\t\tif (!otherPrimary) {\n\t\t\t\treturn [new MutationEntryNotFoundError([], where)]\n\t\t\t}\n\t\t\treturn [\n\t\t\t\t...(await this.mapper.update(targetEntity, { [targetEntity.primary]: otherPrimary }, data)),\n\t\t\t\t...(await this.mapper.connectJunction(entity, relation, primary, otherPrimary)),\n\t\t\t]\n\t\t}\n\t}\n\n\tpublic async upsert(\n\t\t{ entity, relation, targetEntity, input: { create, update, where } }: Context & { input: UpdateInputProcessor.UpsertManyInput },\n\t) {\n\t\treturn async ({ primary }: { primary: Input.PrimaryValue }) => {\n\t\t\tconst otherPrimary = await this.mapper.getPrimaryValue(targetEntity, where)\n\t\t\tif (otherPrimary) {\n\t\t\t\tconst updateResult = await this.mapper.update(targetEntity, { [targetEntity.primary]: otherPrimary }, update)\n\t\t\t\tconst connectResult = await this.mapper.connectJunction(entity, relation, primary, otherPrimary)\n\t\t\t\treturn [...updateResult, ...connectResult]\n\t\t\t} else {\n\t\t\t\tconst insertResult = await this.mapper.insert(targetEntity, create)\n\n\t\t\t\tconst primaryValue = getInsertPrimary(insertResult)\n\t\t\t\tif (!primaryValue) {\n\t\t\t\t\treturn insertResult\n\t\t\t\t}\n\t\t\t\tconst connectResult = await this.mapper.connectJunction(entity, relation, primary, primaryValue)\n\t\t\t\treturn [...insertResult, ...connectResult]\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic async disconnect(\n\t\t{ entity, targetEntity, relation, input }: Context & { input: Input.UniqueWhere },\n\t) {\n\t\treturn async ({ primary }: { primary: Input.PrimaryValue }) => {\n\t\t\tconst otherPrimary = await this.mapper.getPrimaryValue(targetEntity, input)\n\t\t\tif (!otherPrimary) {\n\t\t\t\treturn [new MutationEntryNotFoundError([], input)]\n\t\t\t}\n\n\t\t\treturn await this.mapper.disconnectJunction(entity, relation, primary, otherPrimary)\n\t\t}\n\t}\n\n\tpublic async delete(\n\t\t{ entity, targetEntity, relation, targetRelation, input }: Context & { input: Input.UniqueWhere },\n\t) {\n\t\treturn async ({ primary }: { primary: Input.PrimaryValue }) => {\n\t\t\treturn await this.mapper.delete(targetEntity, input)\n\t\t}\n\t}\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ManyHasManyUpdateInputProcessor.js","sources":["../../../../../../../packages/engine-content-api/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.ts"],"sourcesContent":["import { UpdateInputProcessor } from '../../../inputProcessing'\nimport { Input, Model } from '@contember/schema'\nimport { getInsertPrimary, MutationEntryNotFoundError } from '../../Result'\nimport { Mapper } from '../../Mapper'\nimport { SqlUpdateInputProcessorResult } from '../../update'\nimport { CheckedPrimary } from '../../CheckedPrimary'\nimport { MapperInput } from '../../types'\n\ntype Context = Model.ManyHasManyOwningContext | Model.ManyHasManyInverseContext\n\nexport class ManyHasManyUpdateInputProcessor implements UpdateInputProcessor.HasManyRelationInputProcessor<Context, SqlUpdateInputProcessorResult> {\n\tconstructor(\n\t\tprivate readonly mapper: Mapper,\n\t) {\n\t}\n\n\tpublic async connect(\n\t\t{ entity, targetEntity, relation, targetRelation, input }: Context & { input: Input.UniqueWhere | CheckedPrimary },\n\t) {\n\t\treturn async ({ primary }: { primary: Input.PrimaryValue }) => {\n\t\t\tconst [otherPrimary, err] = await this.mapper.getPrimaryValue(targetEntity, input)\n\t\t\tif (err) return [err]\n\t\t\treturn await this.mapper.connectJunction(entity, relation, primary, otherPrimary)\n\t\t}\n\t}\n\n\tpublic async create(\n\t\t{ entity, targetEntity, relation, input }: Context & { input: MapperInput.CreateDataInput },\n\t) {\n\t\treturn async ({ primary }: { primary: Input.PrimaryValue }) => {\n\t\t\tconst insertResult = await this.mapper.insert(targetEntity, input)\n\t\t\tconst insertPrimary = getInsertPrimary(insertResult)\n\t\t\tif (!insertPrimary) {\n\t\t\t\treturn insertResult\n\t\t\t}\n\t\t\treturn [\n\t\t\t\t...insertResult,\n\t\t\t\t...(await this.mapper.connectJunction(entity, relation, primary, insertPrimary)),\n\t\t\t]\n\t\t}\n\t}\n\n\tpublic async connectOrCreate(\n\t\tcontext: Context & { input: MapperInput.ConnectOrCreateInput },\n\t) {\n\t\treturn async ({ primary }: { primary: Input.PrimaryValue }) => {\n\t\t\tlet [otherPrimary] = await this.mapper.getPrimaryValue(context.targetEntity, context.input.connect)\n\t\t\tif (!otherPrimary) {\n\t\t\t\tconst insertResult = await this.mapper.insert(context.targetEntity, context.input.create)\n\t\t\t\totherPrimary = getInsertPrimary(insertResult)\n\t\t\t\tif (!otherPrimary) {\n\t\t\t\t\treturn insertResult\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn await this.mapper.connectJunction(context.entity, context.relation, primary, otherPrimary)\n\t\t}\n\t}\n\n\tpublic async update(\n\t\t{ entity, targetEntity, relation, input: { where, data } }: Context & { input: UpdateInputProcessor.UpdateManyInput },\n\t) {\n\t\treturn async ({ primary }: { primary: Input.PrimaryValue }) => {\n\t\t\tconst [otherPrimary, err] = await this.mapper.getPrimaryValue(targetEntity, where)\n\t\t\tif (err) return [err]\n\t\t\treturn [\n\t\t\t\t...(await this.mapper.update(targetEntity, new CheckedPrimary(otherPrimary), data)),\n\t\t\t\t...(await this.mapper.connectJunction(entity, relation, primary, otherPrimary)),\n\t\t\t]\n\t\t}\n\t}\n\n\tpublic async upsert(\n\t\t{ entity, relation, targetEntity, input: { create, update, where } }: Context & { input: UpdateInputProcessor.UpsertManyInput },\n\t) {\n\t\treturn async ({ primary }: { primary: Input.PrimaryValue }) => {\n\t\t\tconst [otherPrimary] = await this.mapper.getPrimaryValue(targetEntity, where)\n\t\t\tif (otherPrimary) {\n\t\t\t\tconst updateResult = await this.mapper.update(targetEntity, new CheckedPrimary(otherPrimary), update)\n\t\t\t\tconst connectResult = await this.mapper.connectJunction(entity, relation, primary, otherPrimary)\n\t\t\t\treturn [...updateResult, ...connectResult]\n\t\t\t} else {\n\t\t\t\tconst insertResult = await this.mapper.insert(targetEntity, create)\n\n\t\t\t\tconst primaryValue = getInsertPrimary(insertResult)\n\t\t\t\tif (!primaryValue) {\n\t\t\t\t\treturn insertResult\n\t\t\t\t}\n\t\t\t\tconst connectResult = await this.mapper.connectJunction(entity, relation, primary, primaryValue)\n\t\t\t\treturn [...insertResult, ...connectResult]\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic async disconnect(\n\t\t{ entity, targetEntity, relation, input }: Context & { input: Input.UniqueWhere },\n\t) {\n\t\treturn async ({ primary }: { primary: Input.PrimaryValue }) => {\n\t\t\tconst [otherPrimary, err] = await this.mapper.getPrimaryValue(targetEntity, input)\n\t\t\tif (err) return [err]\n\n\t\t\treturn await this.mapper.disconnectJunction(entity, relation, primary, otherPrimary)\n\t\t}\n\t}\n\n\tpublic async delete(\n\t\t{ entity, targetEntity, relation, targetRelation, input }: Context & { input: Input.UniqueWhere },\n\t) {\n\t\treturn async ({ primary }: { primary: Input.PrimaryValue }) => {\n\t\t\treturn await this.mapper.delete(targetEntity, input)\n\t\t}\n\t}\n}\n"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const schema = require("@contember/schema");
4
4
  const Result = require("../../Result.cjs");
5
+ const CheckedPrimary = require("../../CheckedPrimary.cjs");
5
6
  class ManyHasOneUpdateInputProcessor {
6
7
  constructor(mapper, builder, primary) {
7
8
  this.mapper = mapper;
@@ -9,10 +10,8 @@ class ManyHasOneUpdateInputProcessor {
9
10
  this.primary = primary;
10
11
  }
11
12
  async connect({ targetEntity, relation, input }) {
12
- const value = await this.mapper.getPrimaryValue(targetEntity, input);
13
- if (!value) {
14
- return [new Result.MutationEntryNotFoundError([], input)];
15
- }
13
+ const [value, err] = await this.mapper.getPrimaryValue(targetEntity, input);
14
+ if (err) return [err];
16
15
  this.builder.addFieldValue(relation.name, value);
17
16
  return [];
18
17
  }
@@ -26,7 +25,7 @@ class ManyHasOneUpdateInputProcessor {
26
25
  return [];
27
26
  }
28
27
  async connectOrCreate({ input: { connect, create }, relation, targetEntity }) {
29
- const value = await this.mapper.getPrimaryValue(targetEntity, connect);
28
+ const [value] = await this.mapper.getPrimaryValue(targetEntity, connect);
30
29
  if (value) {
31
30
  this.builder.addFieldValue(relation.name, value);
32
31
  } else {
@@ -49,7 +48,7 @@ class ManyHasOneUpdateInputProcessor {
49
48
  if (!inversePrimary) {
50
49
  return [new Result.MutationNothingToDo([], Result.NothingToDoReason.emptyRelation)];
51
50
  }
52
- return await this.mapper.update(targetEntity, { [targetEntity.primary]: inversePrimary }, input);
51
+ return await this.mapper.update(targetEntity, new CheckedPrimary.CheckedPrimary(inversePrimary), input);
53
52
  };
54
53
  }
55
54
  async upsert({ entity, relation, targetEntity, input: { create, update } }) {
@@ -62,7 +61,7 @@ class ManyHasOneUpdateInputProcessor {
62
61
  }
63
62
  return insertResult;
64
63
  }
65
- return async () => await this.mapper.update(targetEntity, { [targetEntity.primary]: inversePrimary }, update);
64
+ return async () => await this.mapper.update(targetEntity, new CheckedPrimary.CheckedPrimary(inversePrimary), update);
66
65
  }
67
66
  async disconnect({ entity, targetEntity, relation, targetRelation }) {
68
67
  if (!relation.nullable) {