@contember/engine-content-api 2.0.0-alpha.9 → 2.0.0-beta.1

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 (1022) hide show
  1. package/dist/development/index.cjs +3 -2
  2. package/dist/development/index.cjs.map +1 -1
  3. package/dist/development/index.js +3 -2
  4. package/dist/development/index.js.map +1 -1
  5. package/dist/development/src/ExecutionContainer.cjs +2 -2
  6. package/dist/development/src/ExecutionContainer.cjs.map +1 -1
  7. package/dist/development/src/ExecutionContainer.js +2 -2
  8. package/dist/development/src/ExecutionContainer.js.map +1 -1
  9. package/dist/development/src/acl/Authorizator.cjs.map +1 -1
  10. package/dist/development/src/acl/Authorizator.js.map +1 -1
  11. package/dist/development/src/acl/EvaluatedPredicateReplacer.cjs.map +1 -1
  12. package/dist/development/src/acl/EvaluatedPredicateReplacer.js.map +1 -1
  13. package/dist/development/src/acl/PermissionFactory.cjs.map +1 -1
  14. package/dist/development/src/acl/PermissionFactory.js.map +1 -1
  15. package/dist/development/src/acl/PredicateFactory.cjs.map +1 -1
  16. package/dist/development/src/acl/PredicateFactory.js.map +1 -1
  17. package/dist/development/src/acl/PredicatesInjector.cjs.map +1 -1
  18. package/dist/development/src/acl/PredicatesInjector.js.map +1 -1
  19. package/dist/development/src/acl/VariableInjector.cjs.map +1 -1
  20. package/dist/development/src/acl/VariableInjector.js.map +1 -1
  21. package/dist/development/src/acl/VariableUtils.cjs.map +1 -1
  22. package/dist/development/src/acl/VariableUtils.js.map +1 -1
  23. package/dist/development/src/exception.cjs.map +1 -1
  24. package/dist/development/src/exception.js.map +1 -1
  25. package/dist/development/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducer.cjs.map +1 -1
  26. package/dist/development/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducer.js.map +1 -1
  27. package/dist/development/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducerExecutionHandler.cjs.map +1 -1
  28. package/dist/development/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducerExecutionHandler.js.map +1 -1
  29. package/dist/development/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.cjs +31 -6
  30. package/dist/development/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.cjs.map +1 -1
  31. package/dist/development/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.js +31 -6
  32. package/dist/development/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.js.map +1 -1
  33. package/dist/development/src/extensions/paginatedHasMany/PaginatedHasManyCountVisitor.cjs.map +1 -1
  34. package/dist/development/src/extensions/paginatedHasMany/PaginatedHasManyCountVisitor.js.map +1 -1
  35. package/dist/development/src/extensions/paginatedHasMany/PaginatedHasManyExecutionHandler.cjs.map +1 -1
  36. package/dist/development/src/extensions/paginatedHasMany/PaginatedHasManyExecutionHandler.js.map +1 -1
  37. package/dist/development/src/extensions/paginatedHasMany/PaginatedHasManyFieldProvider.cjs.map +1 -1
  38. package/dist/development/src/extensions/paginatedHasMany/PaginatedHasManyFieldProvider.js.map +1 -1
  39. package/dist/development/src/extensions/paginatedHasMany/PaginatedHasManyFieldProviderVisitor.cjs.map +1 -1
  40. package/dist/development/src/extensions/paginatedHasMany/PaginatedHasManyFieldProviderVisitor.js.map +1 -1
  41. package/dist/development/src/extensions/paginatedHasMany/PaginatedHasManyNodesVisitor.cjs.map +1 -1
  42. package/dist/development/src/extensions/paginatedHasMany/PaginatedHasManyNodesVisitor.js.map +1 -1
  43. package/dist/development/src/input-validation/ColumnValueResolver.cjs.map +1 -1
  44. package/dist/development/src/input-validation/ColumnValueResolver.js.map +1 -1
  45. package/dist/development/src/input-validation/EntityRulesResolver.cjs.map +1 -1
  46. package/dist/development/src/input-validation/EntityRulesResolver.js.map +1 -1
  47. package/dist/development/src/input-validation/QueryAstFactory.cjs.map +1 -1
  48. package/dist/development/src/input-validation/QueryAstFactory.js.map +1 -1
  49. package/dist/development/src/input-validation/ValidationContext.cjs.map +1 -1
  50. package/dist/development/src/input-validation/ValidationContext.js.map +1 -1
  51. package/dist/development/src/input-validation/ValidationDataSelector.cjs.map +1 -1
  52. package/dist/development/src/input-validation/ValidationDataSelector.js.map +1 -1
  53. package/dist/development/src/input-validation/ValidationEvaluation.cjs.map +1 -1
  54. package/dist/development/src/input-validation/ValidationEvaluation.js.map +1 -1
  55. package/dist/development/src/input-validation/ValidationPath.cjs.map +1 -1
  56. package/dist/development/src/input-validation/ValidationPath.js.map +1 -1
  57. package/dist/development/src/input-validation/dependencies/DependencyCollector.cjs.map +1 -1
  58. package/dist/development/src/input-validation/dependencies/DependencyCollector.js.map +1 -1
  59. package/dist/development/src/input-validation/dependencies/DependencyMerger.cjs.map +1 -1
  60. package/dist/development/src/input-validation/dependencies/DependencyMerger.js.map +1 -1
  61. package/dist/development/src/input-validation/preValidation/CreateInputPreValidationProcessor.cjs.map +1 -1
  62. package/dist/development/src/input-validation/preValidation/CreateInputPreValidationProcessor.js.map +1 -1
  63. package/dist/development/src/input-validation/preValidation/InputPreValidator.cjs +1 -1
  64. package/dist/development/src/input-validation/preValidation/InputPreValidator.cjs.map +1 -1
  65. package/dist/development/src/input-validation/preValidation/InputPreValidator.js +1 -1
  66. package/dist/development/src/input-validation/preValidation/InputPreValidator.js.map +1 -1
  67. package/dist/development/src/input-validation/preValidation/UpdateInputPreValidationProcessor.cjs.map +1 -1
  68. package/dist/development/src/input-validation/preValidation/UpdateInputPreValidationProcessor.js.map +1 -1
  69. package/dist/development/src/inputProcessing/CreateInputVisitor.cjs +16 -17
  70. package/dist/development/src/inputProcessing/CreateInputVisitor.cjs.map +1 -1
  71. package/dist/development/src/inputProcessing/CreateInputVisitor.js +16 -17
  72. package/dist/development/src/inputProcessing/CreateInputVisitor.js.map +1 -1
  73. package/dist/development/src/inputProcessing/FieldNode.cjs.map +1 -1
  74. package/dist/development/src/inputProcessing/FieldNode.js.map +1 -1
  75. package/dist/development/src/inputProcessing/ObjectNode.cjs.map +1 -1
  76. package/dist/development/src/inputProcessing/ObjectNode.js.map +1 -1
  77. package/dist/development/src/inputProcessing/UniqueWhereExpander.cjs.map +1 -1
  78. package/dist/development/src/inputProcessing/UniqueWhereExpander.js.map +1 -1
  79. package/dist/development/src/inputProcessing/UpdateInputVisitor.cjs +29 -27
  80. package/dist/development/src/inputProcessing/UpdateInputVisitor.cjs.map +1 -1
  81. package/dist/development/src/inputProcessing/UpdateInputVisitor.js +29 -27
  82. package/dist/development/src/inputProcessing/UpdateInputVisitor.js.map +1 -1
  83. package/dist/development/src/introspection/IntrospectionSchemaDefinitionFactory.cjs +6 -163
  84. package/dist/development/src/introspection/IntrospectionSchemaDefinitionFactory.cjs.map +1 -1
  85. package/dist/development/src/introspection/IntrospectionSchemaDefinitionFactory.js +5 -162
  86. package/dist/development/src/introspection/IntrospectionSchemaDefinitionFactory.js.map +1 -1
  87. package/dist/development/src/introspection/IntrospectionSchemaFactory.cjs.map +1 -1
  88. package/dist/development/src/introspection/IntrospectionSchemaFactory.js.map +1 -1
  89. package/dist/development/src/introspection/introspection.schema.cjs +163 -0
  90. package/dist/development/src/introspection/introspection.schema.cjs.map +1 -0
  91. package/dist/development/src/introspection/introspection.schema.js +163 -0
  92. package/dist/development/src/introspection/introspection.schema.js.map +1 -0
  93. package/dist/development/src/mapper/CheckedPrimary.cjs.map +1 -1
  94. package/dist/development/src/mapper/CheckedPrimary.js.map +1 -1
  95. package/dist/development/src/mapper/ColumnValue.cjs +8 -18
  96. package/dist/development/src/mapper/ColumnValue.cjs.map +1 -1
  97. package/dist/development/src/mapper/ColumnValue.js +8 -18
  98. package/dist/development/src/mapper/ColumnValue.js.map +1 -1
  99. package/dist/development/src/mapper/ErrorUtils.cjs +1 -1
  100. package/dist/development/src/mapper/ErrorUtils.cjs.map +1 -1
  101. package/dist/development/src/mapper/ErrorUtils.js +1 -1
  102. package/dist/development/src/mapper/ErrorUtils.js.map +1 -1
  103. package/dist/development/src/mapper/EventManager.cjs +4 -7
  104. package/dist/development/src/mapper/EventManager.cjs.map +1 -1
  105. package/dist/development/src/mapper/EventManager.js +4 -7
  106. package/dist/development/src/mapper/EventManager.js.map +1 -1
  107. package/dist/development/src/mapper/JunctionTableManager.cjs.map +1 -1
  108. package/dist/development/src/mapper/JunctionTableManager.js.map +1 -1
  109. package/dist/development/src/mapper/Mapper.cjs +8 -28
  110. package/dist/development/src/mapper/Mapper.cjs.map +1 -1
  111. package/dist/development/src/mapper/Mapper.js +8 -28
  112. package/dist/development/src/mapper/Mapper.js.map +1 -1
  113. package/dist/development/src/mapper/MapperFactory.cjs.map +1 -1
  114. package/dist/development/src/mapper/MapperFactory.js.map +1 -1
  115. package/dist/development/src/mapper/MutationProcessorHelper.cjs +10 -2
  116. package/dist/development/src/mapper/MutationProcessorHelper.cjs.map +1 -1
  117. package/dist/development/src/mapper/MutationProcessorHelper.js +10 -2
  118. package/dist/development/src/mapper/MutationProcessorHelper.js.map +1 -1
  119. package/dist/development/src/mapper/Result.cjs +10 -27
  120. package/dist/development/src/mapper/Result.cjs.map +1 -1
  121. package/dist/development/src/mapper/Result.js +10 -27
  122. package/dist/development/src/mapper/Result.js.map +1 -1
  123. package/dist/development/src/mapper/delete/DeleteExecutor.cjs +4 -8
  124. package/dist/development/src/mapper/delete/DeleteExecutor.cjs.map +1 -1
  125. package/dist/development/src/mapper/delete/DeleteExecutor.js +5 -9
  126. package/dist/development/src/mapper/delete/DeleteExecutor.js.map +1 -1
  127. package/dist/development/src/mapper/delete/DeleteState.cjs.map +1 -1
  128. package/dist/development/src/mapper/delete/DeleteState.js.map +1 -1
  129. package/dist/development/src/mapper/delete/DeletedEntitiesStorage.cjs.map +1 -1
  130. package/dist/development/src/mapper/delete/DeletedEntitiesStorage.js.map +1 -1
  131. package/dist/development/src/mapper/delete/helpers.cjs.map +1 -1
  132. package/dist/development/src/mapper/delete/helpers.js.map +1 -1
  133. package/dist/development/src/mapper/insert/InsertBuilder.cjs +13 -21
  134. package/dist/development/src/mapper/insert/InsertBuilder.cjs.map +1 -1
  135. package/dist/development/src/mapper/insert/InsertBuilder.js +14 -22
  136. package/dist/development/src/mapper/insert/InsertBuilder.js.map +1 -1
  137. package/dist/development/src/mapper/insert/InsertBuilderFactory.cjs.map +1 -1
  138. package/dist/development/src/mapper/insert/InsertBuilderFactory.js.map +1 -1
  139. package/dist/development/src/mapper/insert/Inserter.cjs +43 -21
  140. package/dist/development/src/mapper/insert/Inserter.cjs.map +1 -1
  141. package/dist/development/src/mapper/insert/Inserter.js +45 -23
  142. package/dist/development/src/mapper/insert/Inserter.js.map +1 -1
  143. package/dist/development/src/mapper/insert/SqlCreateInputProcessor.cjs +23 -79
  144. package/dist/development/src/mapper/insert/SqlCreateInputProcessor.cjs.map +1 -1
  145. package/dist/development/src/mapper/insert/SqlCreateInputProcessor.js +23 -79
  146. package/dist/development/src/mapper/insert/SqlCreateInputProcessor.js.map +1 -1
  147. package/dist/development/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.cjs +43 -0
  148. package/dist/development/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.cjs.map +1 -0
  149. package/dist/development/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.js +43 -0
  150. package/dist/development/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.js.map +1 -0
  151. package/dist/development/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.cjs +40 -0
  152. package/dist/development/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.cjs.map +1 -0
  153. package/dist/development/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.js +40 -0
  154. package/dist/development/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.js.map +1 -0
  155. package/dist/development/src/mapper/insert/relations/OneHasManyCreateInputProcessor.cjs +38 -0
  156. package/dist/development/src/mapper/insert/relations/OneHasManyCreateInputProcessor.cjs.map +1 -0
  157. package/dist/development/src/mapper/insert/relations/OneHasManyCreateInputProcessor.js +38 -0
  158. package/dist/development/src/mapper/insert/relations/OneHasManyCreateInputProcessor.js.map +1 -0
  159. package/dist/development/src/mapper/{relations → insert/relations}/OneHasOneInverseCreateInputProcessor.cjs +23 -32
  160. package/dist/development/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.cjs.map +1 -0
  161. package/dist/development/src/mapper/{relations → insert/relations}/OneHasOneInverseCreateInputProcessor.js +23 -32
  162. package/dist/development/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.js.map +1 -0
  163. package/dist/development/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.cjs +65 -0
  164. package/dist/development/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.cjs.map +1 -0
  165. package/dist/development/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.js +65 -0
  166. package/dist/development/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.js.map +1 -0
  167. package/dist/development/src/mapper/select/ConditionBuilder.cjs.map +1 -1
  168. package/dist/development/src/mapper/select/ConditionBuilder.js.map +1 -1
  169. package/dist/development/src/mapper/select/JoinBuilder.cjs.map +1 -1
  170. package/dist/development/src/mapper/select/JoinBuilder.js.map +1 -1
  171. package/dist/development/src/mapper/select/JoinVisitor.cjs.map +1 -1
  172. package/dist/development/src/mapper/select/JoinVisitor.js.map +1 -1
  173. package/dist/development/src/mapper/select/OrderByBuilder.cjs.map +1 -1
  174. package/dist/development/src/mapper/select/OrderByBuilder.js.map +1 -1
  175. package/dist/development/src/mapper/select/OrderByHelper.cjs.map +1 -1
  176. package/dist/development/src/mapper/select/OrderByHelper.js.map +1 -1
  177. package/dist/development/src/mapper/select/Path.cjs.map +1 -1
  178. package/dist/development/src/mapper/select/Path.js.map +1 -1
  179. package/dist/development/src/mapper/select/RelationFetcher.cjs.map +1 -1
  180. package/dist/development/src/mapper/select/RelationFetcher.js.map +1 -1
  181. package/dist/development/src/mapper/select/SelectBuilder.cjs.map +1 -1
  182. package/dist/development/src/mapper/select/SelectBuilder.js.map +1 -1
  183. package/dist/development/src/mapper/select/SelectHydrator.cjs.map +1 -1
  184. package/dist/development/src/mapper/select/SelectHydrator.js.map +1 -1
  185. package/dist/development/src/mapper/select/WhereBuilder.cjs.map +1 -1
  186. package/dist/development/src/mapper/select/WhereBuilder.js.map +1 -1
  187. package/dist/development/src/mapper/select/handlers/FieldsVisitor.cjs +3 -0
  188. package/dist/development/src/mapper/select/handlers/FieldsVisitor.cjs.map +1 -1
  189. package/dist/development/src/mapper/select/handlers/FieldsVisitor.js +3 -0
  190. package/dist/development/src/mapper/select/handlers/FieldsVisitor.js.map +1 -1
  191. package/dist/development/src/mapper/select/handlers/FieldsVisitorFactory.cjs.map +1 -1
  192. package/dist/development/src/mapper/select/handlers/FieldsVisitorFactory.js.map +1 -1
  193. package/dist/development/src/mapper/select/handlers/MetaHandler.cjs.map +1 -1
  194. package/dist/development/src/mapper/select/handlers/MetaHandler.js.map +1 -1
  195. package/dist/development/src/mapper/select/optimizer/ConditionOptimizer.cjs.map +1 -1
  196. package/dist/development/src/mapper/select/optimizer/ConditionOptimizer.js.map +1 -1
  197. package/dist/development/src/mapper/select/optimizer/WhereOptimizer.cjs.map +1 -1
  198. package/dist/development/src/mapper/select/optimizer/WhereOptimizer.js.map +1 -1
  199. package/dist/development/src/mapper/select/optimizer/WhereReplacer.cjs.map +1 -1
  200. package/dist/development/src/mapper/select/optimizer/WhereReplacer.js.map +1 -1
  201. package/dist/development/src/mapper/select/optimizer/helpers.cjs.map +1 -1
  202. package/dist/development/src/mapper/select/optimizer/helpers.js.map +1 -1
  203. package/dist/development/src/mapper/update/SqlUpdateInputProcessor.cjs +36 -36
  204. package/dist/development/src/mapper/update/SqlUpdateInputProcessor.cjs.map +1 -1
  205. package/dist/development/src/mapper/update/SqlUpdateInputProcessor.js +36 -36
  206. package/dist/development/src/mapper/update/SqlUpdateInputProcessor.js.map +1 -1
  207. package/dist/development/src/mapper/update/UpdateBuilder.cjs +14 -19
  208. package/dist/development/src/mapper/update/UpdateBuilder.cjs.map +1 -1
  209. package/dist/development/src/mapper/update/UpdateBuilder.js +15 -20
  210. package/dist/development/src/mapper/update/UpdateBuilder.js.map +1 -1
  211. package/dist/development/src/mapper/update/UpdateBuilderFactory.cjs.map +1 -1
  212. package/dist/development/src/mapper/update/UpdateBuilderFactory.js.map +1 -1
  213. package/dist/development/src/mapper/update/Updater.cjs +45 -17
  214. package/dist/development/src/mapper/update/Updater.cjs.map +1 -1
  215. package/dist/development/src/mapper/update/Updater.js +47 -19
  216. package/dist/development/src/mapper/update/Updater.js.map +1 -1
  217. package/dist/development/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.cjs +84 -0
  218. package/dist/development/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.cjs.map +1 -0
  219. package/dist/development/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.js +84 -0
  220. package/dist/development/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.js.map +1 -0
  221. package/dist/development/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.cjs +88 -0
  222. package/dist/development/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.cjs.map +1 -0
  223. package/dist/development/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.js +88 -0
  224. package/dist/development/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.js.map +1 -0
  225. package/dist/development/src/mapper/update/relations/OneHasManyUpdateInputProcessor.cjs +87 -0
  226. package/dist/development/src/mapper/update/relations/OneHasManyUpdateInputProcessor.cjs.map +1 -0
  227. package/dist/development/src/mapper/update/relations/OneHasManyUpdateInputProcessor.js +87 -0
  228. package/dist/development/src/mapper/update/relations/OneHasManyUpdateInputProcessor.js.map +1 -0
  229. package/dist/development/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.cjs +147 -0
  230. package/dist/development/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.cjs.map +1 -0
  231. package/dist/development/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.js +147 -0
  232. package/dist/development/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.js.map +1 -0
  233. package/dist/development/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.cjs +183 -0
  234. package/dist/development/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.cjs.map +1 -0
  235. package/dist/development/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.js +183 -0
  236. package/dist/development/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.js.map +1 -0
  237. package/dist/development/src/resolvers/GraphQlQueryAstFactory.cjs.map +1 -1
  238. package/dist/development/src/resolvers/GraphQlQueryAstFactory.js.map +1 -1
  239. package/dist/development/src/resolvers/MutationResolver.cjs +8 -4
  240. package/dist/development/src/resolvers/MutationResolver.cjs.map +1 -1
  241. package/dist/development/src/resolvers/MutationResolver.js +8 -4
  242. package/dist/development/src/resolvers/MutationResolver.js.map +1 -1
  243. package/dist/development/src/resolvers/ReadHelpers.cjs.map +1 -1
  244. package/dist/development/src/resolvers/ReadHelpers.js.map +1 -1
  245. package/dist/development/src/resolvers/ReadResolver.cjs.map +1 -1
  246. package/dist/development/src/resolvers/ReadResolver.js.map +1 -1
  247. package/dist/development/src/resolvers/ValidationResolver.cjs.map +1 -1
  248. package/dist/development/src/resolvers/ValidationResolver.js.map +1 -1
  249. package/dist/development/src/schema/ColumnTypeResolver.cjs.map +1 -1
  250. package/dist/development/src/schema/ColumnTypeResolver.js.map +1 -1
  251. package/dist/development/src/schema/ConditionTypeProvider.cjs.map +1 -1
  252. package/dist/development/src/schema/ConditionTypeProvider.js.map +1 -1
  253. package/dist/development/src/schema/CustomTypesProvider.cjs.map +1 -1
  254. package/dist/development/src/schema/CustomTypesProvider.js.map +1 -1
  255. package/dist/development/src/schema/EntityTypeProvider.cjs.map +1 -1
  256. package/dist/development/src/schema/EntityTypeProvider.js.map +1 -1
  257. package/dist/development/src/schema/EnumsProvider.cjs.map +1 -1
  258. package/dist/development/src/schema/EnumsProvider.js.map +1 -1
  259. package/dist/development/src/schema/FieldAccessVisitor.cjs.map +1 -1
  260. package/dist/development/src/schema/FieldAccessVisitor.js.map +1 -1
  261. package/dist/development/src/schema/GraphQlSchemaBuilder.cjs.map +1 -1
  262. package/dist/development/src/schema/GraphQlSchemaBuilder.js.map +1 -1
  263. package/dist/development/src/schema/GraphQlSchemaBuilderFactory.cjs.map +1 -1
  264. package/dist/development/src/schema/GraphQlSchemaBuilderFactory.js.map +1 -1
  265. package/dist/development/src/schema/MutationProvider.cjs.map +1 -1
  266. package/dist/development/src/schema/MutationProvider.js.map +1 -1
  267. package/dist/development/src/schema/OperationExtension.cjs.map +1 -1
  268. package/dist/development/src/schema/OperationExtension.js.map +1 -1
  269. package/dist/development/src/schema/OrderByTypeProvider.cjs.map +1 -1
  270. package/dist/development/src/schema/OrderByTypeProvider.js.map +1 -1
  271. package/dist/development/src/schema/PaginatedFieldConfigFactory.cjs.map +1 -1
  272. package/dist/development/src/schema/PaginatedFieldConfigFactory.js.map +1 -1
  273. package/dist/development/src/schema/QueryProvider.cjs.map +1 -1
  274. package/dist/development/src/schema/QueryProvider.js.map +1 -1
  275. package/dist/development/src/schema/ResultSchemaTypeProvider.cjs.map +1 -1
  276. package/dist/development/src/schema/ResultSchemaTypeProvider.js.map +1 -1
  277. package/dist/development/src/schema/ValidationQueriesProvider.cjs.map +1 -1
  278. package/dist/development/src/schema/ValidationQueriesProvider.js.map +1 -1
  279. package/dist/development/src/schema/WhereTypeProvider.cjs.map +1 -1
  280. package/dist/development/src/schema/WhereTypeProvider.js.map +1 -1
  281. package/dist/development/src/schema/entities/FieldArgsVisitor.cjs.map +1 -1
  282. package/dist/development/src/schema/entities/FieldArgsVisitor.js.map +1 -1
  283. package/dist/development/src/schema/entities/FieldTypeVisitor.cjs.map +1 -1
  284. package/dist/development/src/schema/entities/FieldTypeVisitor.js.map +1 -1
  285. package/dist/development/src/schema/mutations/ConnectOrCreateRelationInputProvider.cjs.map +1 -1
  286. package/dist/development/src/schema/mutations/ConnectOrCreateRelationInputProvider.js.map +1 -1
  287. package/dist/development/src/schema/mutations/CreateEntityInputFieldVisitor.cjs.map +1 -1
  288. package/dist/development/src/schema/mutations/CreateEntityInputFieldVisitor.js.map +1 -1
  289. package/dist/development/src/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.cjs.map +1 -1
  290. package/dist/development/src/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.js.map +1 -1
  291. package/dist/development/src/schema/mutations/CreateEntityRelationInputFieldVisitor.cjs.map +1 -1
  292. package/dist/development/src/schema/mutations/CreateEntityRelationInputFieldVisitor.js.map +1 -1
  293. package/dist/development/src/schema/mutations/CreateEntityRelationInputProvider.cjs.map +1 -1
  294. package/dist/development/src/schema/mutations/CreateEntityRelationInputProvider.js.map +1 -1
  295. package/dist/development/src/schema/mutations/EntityInputProvider.cjs.map +1 -1
  296. package/dist/development/src/schema/mutations/EntityInputProvider.js.map +1 -1
  297. package/dist/development/src/schema/mutations/UpdateEntityInputFieldVisitor.cjs.map +1 -1
  298. package/dist/development/src/schema/mutations/UpdateEntityInputFieldVisitor.js.map +1 -1
  299. package/dist/development/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.cjs.map +1 -1
  300. package/dist/development/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.js.map +1 -1
  301. package/dist/development/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.cjs +2 -0
  302. package/dist/development/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.cjs.map +1 -1
  303. package/dist/development/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.js +2 -0
  304. package/dist/development/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.js.map +1 -1
  305. package/dist/development/src/schema/mutations/UpdateEntityRelationInputProvider.cjs.map +1 -1
  306. package/dist/development/src/schema/mutations/UpdateEntityRelationInputProvider.js.map +1 -1
  307. package/dist/development/src/schema/utils.cjs.map +1 -1
  308. package/dist/development/src/schema/utils.js.map +1 -1
  309. package/dist/development/src/utils/Mutex.cjs.map +1 -1
  310. package/dist/development/src/utils/Mutex.js.map +1 -1
  311. package/dist/development/src/utils/ResolveInfoUtils.cjs.map +1 -1
  312. package/dist/development/src/utils/ResolveInfoUtils.js.map +1 -1
  313. package/dist/development/src/utils/accessor.cjs.map +1 -1
  314. package/dist/development/src/utils/accessor.js.map +1 -1
  315. package/dist/development/src/utils/isIt.cjs.map +1 -1
  316. package/dist/development/src/utils/isIt.js.map +1 -1
  317. package/dist/development/src/utils/object.cjs.map +1 -1
  318. package/dist/development/src/utils/object.js.map +1 -1
  319. package/dist/development/src/utils/paginationUtils.cjs.map +1 -1
  320. package/dist/development/src/utils/paginationUtils.js.map +1 -1
  321. package/dist/development/src/utils/singletonFactory.cjs.map +1 -1
  322. package/dist/development/src/utils/singletonFactory.js.map +1 -1
  323. package/dist/development/src/utils/uniqueWhereFields.cjs.map +1 -1
  324. package/dist/development/src/utils/uniqueWhereFields.js.map +1 -1
  325. package/dist/production/index.cjs +3 -2
  326. package/dist/production/index.cjs.map +1 -1
  327. package/dist/production/index.js +3 -2
  328. package/dist/production/index.js.map +1 -1
  329. package/dist/production/src/ExecutionContainer.cjs +2 -2
  330. package/dist/production/src/ExecutionContainer.cjs.map +1 -1
  331. package/dist/production/src/ExecutionContainer.js +2 -2
  332. package/dist/production/src/ExecutionContainer.js.map +1 -1
  333. package/dist/production/src/acl/Authorizator.cjs.map +1 -1
  334. package/dist/production/src/acl/Authorizator.js.map +1 -1
  335. package/dist/production/src/acl/EvaluatedPredicateReplacer.cjs.map +1 -1
  336. package/dist/production/src/acl/EvaluatedPredicateReplacer.js.map +1 -1
  337. package/dist/production/src/acl/PermissionFactory.cjs.map +1 -1
  338. package/dist/production/src/acl/PermissionFactory.js.map +1 -1
  339. package/dist/production/src/acl/PredicateFactory.cjs.map +1 -1
  340. package/dist/production/src/acl/PredicateFactory.js.map +1 -1
  341. package/dist/production/src/acl/PredicatesInjector.cjs.map +1 -1
  342. package/dist/production/src/acl/PredicatesInjector.js.map +1 -1
  343. package/dist/production/src/acl/VariableInjector.cjs.map +1 -1
  344. package/dist/production/src/acl/VariableInjector.js.map +1 -1
  345. package/dist/production/src/acl/VariableUtils.cjs.map +1 -1
  346. package/dist/production/src/acl/VariableUtils.js.map +1 -1
  347. package/dist/production/src/exception.cjs.map +1 -1
  348. package/dist/production/src/exception.js.map +1 -1
  349. package/dist/production/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducer.cjs.map +1 -1
  350. package/dist/production/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducer.js.map +1 -1
  351. package/dist/production/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducerExecutionHandler.cjs.map +1 -1
  352. package/dist/production/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducerExecutionHandler.js.map +1 -1
  353. package/dist/production/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.cjs +31 -6
  354. package/dist/production/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.cjs.map +1 -1
  355. package/dist/production/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.js +31 -6
  356. package/dist/production/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.js.map +1 -1
  357. package/dist/production/src/extensions/paginatedHasMany/PaginatedHasManyCountVisitor.cjs.map +1 -1
  358. package/dist/production/src/extensions/paginatedHasMany/PaginatedHasManyCountVisitor.js.map +1 -1
  359. package/dist/production/src/extensions/paginatedHasMany/PaginatedHasManyExecutionHandler.cjs.map +1 -1
  360. package/dist/production/src/extensions/paginatedHasMany/PaginatedHasManyExecutionHandler.js.map +1 -1
  361. package/dist/production/src/extensions/paginatedHasMany/PaginatedHasManyFieldProvider.cjs.map +1 -1
  362. package/dist/production/src/extensions/paginatedHasMany/PaginatedHasManyFieldProvider.js.map +1 -1
  363. package/dist/production/src/extensions/paginatedHasMany/PaginatedHasManyFieldProviderVisitor.cjs.map +1 -1
  364. package/dist/production/src/extensions/paginatedHasMany/PaginatedHasManyFieldProviderVisitor.js.map +1 -1
  365. package/dist/production/src/extensions/paginatedHasMany/PaginatedHasManyNodesVisitor.cjs.map +1 -1
  366. package/dist/production/src/extensions/paginatedHasMany/PaginatedHasManyNodesVisitor.js.map +1 -1
  367. package/dist/production/src/input-validation/ColumnValueResolver.cjs.map +1 -1
  368. package/dist/production/src/input-validation/ColumnValueResolver.js.map +1 -1
  369. package/dist/production/src/input-validation/EntityRulesResolver.cjs.map +1 -1
  370. package/dist/production/src/input-validation/EntityRulesResolver.js.map +1 -1
  371. package/dist/production/src/input-validation/QueryAstFactory.cjs.map +1 -1
  372. package/dist/production/src/input-validation/QueryAstFactory.js.map +1 -1
  373. package/dist/production/src/input-validation/ValidationContext.cjs.map +1 -1
  374. package/dist/production/src/input-validation/ValidationContext.js.map +1 -1
  375. package/dist/production/src/input-validation/ValidationDataSelector.cjs.map +1 -1
  376. package/dist/production/src/input-validation/ValidationDataSelector.js.map +1 -1
  377. package/dist/production/src/input-validation/ValidationEvaluation.cjs.map +1 -1
  378. package/dist/production/src/input-validation/ValidationEvaluation.js.map +1 -1
  379. package/dist/production/src/input-validation/ValidationPath.cjs.map +1 -1
  380. package/dist/production/src/input-validation/ValidationPath.js.map +1 -1
  381. package/dist/production/src/input-validation/dependencies/DependencyCollector.cjs.map +1 -1
  382. package/dist/production/src/input-validation/dependencies/DependencyCollector.js.map +1 -1
  383. package/dist/production/src/input-validation/dependencies/DependencyMerger.cjs.map +1 -1
  384. package/dist/production/src/input-validation/dependencies/DependencyMerger.js.map +1 -1
  385. package/dist/production/src/input-validation/preValidation/CreateInputPreValidationProcessor.cjs.map +1 -1
  386. package/dist/production/src/input-validation/preValidation/CreateInputPreValidationProcessor.js.map +1 -1
  387. package/dist/production/src/input-validation/preValidation/InputPreValidator.cjs +1 -1
  388. package/dist/production/src/input-validation/preValidation/InputPreValidator.cjs.map +1 -1
  389. package/dist/production/src/input-validation/preValidation/InputPreValidator.js +1 -1
  390. package/dist/production/src/input-validation/preValidation/InputPreValidator.js.map +1 -1
  391. package/dist/production/src/input-validation/preValidation/UpdateInputPreValidationProcessor.cjs.map +1 -1
  392. package/dist/production/src/input-validation/preValidation/UpdateInputPreValidationProcessor.js.map +1 -1
  393. package/dist/production/src/inputProcessing/CreateInputVisitor.cjs +16 -17
  394. package/dist/production/src/inputProcessing/CreateInputVisitor.cjs.map +1 -1
  395. package/dist/production/src/inputProcessing/CreateInputVisitor.js +16 -17
  396. package/dist/production/src/inputProcessing/CreateInputVisitor.js.map +1 -1
  397. package/dist/production/src/inputProcessing/FieldNode.cjs.map +1 -1
  398. package/dist/production/src/inputProcessing/FieldNode.js.map +1 -1
  399. package/dist/production/src/inputProcessing/ObjectNode.cjs.map +1 -1
  400. package/dist/production/src/inputProcessing/ObjectNode.js.map +1 -1
  401. package/dist/production/src/inputProcessing/UniqueWhereExpander.cjs.map +1 -1
  402. package/dist/production/src/inputProcessing/UniqueWhereExpander.js.map +1 -1
  403. package/dist/production/src/inputProcessing/UpdateInputVisitor.cjs +29 -27
  404. package/dist/production/src/inputProcessing/UpdateInputVisitor.cjs.map +1 -1
  405. package/dist/production/src/inputProcessing/UpdateInputVisitor.js +29 -27
  406. package/dist/production/src/inputProcessing/UpdateInputVisitor.js.map +1 -1
  407. package/dist/production/src/introspection/IntrospectionSchemaDefinitionFactory.cjs +6 -163
  408. package/dist/production/src/introspection/IntrospectionSchemaDefinitionFactory.cjs.map +1 -1
  409. package/dist/production/src/introspection/IntrospectionSchemaDefinitionFactory.js +5 -162
  410. package/dist/production/src/introspection/IntrospectionSchemaDefinitionFactory.js.map +1 -1
  411. package/dist/production/src/introspection/IntrospectionSchemaFactory.cjs.map +1 -1
  412. package/dist/production/src/introspection/IntrospectionSchemaFactory.js.map +1 -1
  413. package/dist/production/src/introspection/introspection.schema.cjs +163 -0
  414. package/dist/production/src/introspection/introspection.schema.cjs.map +1 -0
  415. package/dist/production/src/introspection/introspection.schema.js +163 -0
  416. package/dist/production/src/introspection/introspection.schema.js.map +1 -0
  417. package/dist/production/src/mapper/CheckedPrimary.cjs.map +1 -1
  418. package/dist/production/src/mapper/CheckedPrimary.js.map +1 -1
  419. package/dist/production/src/mapper/ColumnValue.cjs +8 -18
  420. package/dist/production/src/mapper/ColumnValue.cjs.map +1 -1
  421. package/dist/production/src/mapper/ColumnValue.js +8 -18
  422. package/dist/production/src/mapper/ColumnValue.js.map +1 -1
  423. package/dist/production/src/mapper/ErrorUtils.cjs +1 -1
  424. package/dist/production/src/mapper/ErrorUtils.cjs.map +1 -1
  425. package/dist/production/src/mapper/ErrorUtils.js +1 -1
  426. package/dist/production/src/mapper/ErrorUtils.js.map +1 -1
  427. package/dist/production/src/mapper/EventManager.cjs +4 -7
  428. package/dist/production/src/mapper/EventManager.cjs.map +1 -1
  429. package/dist/production/src/mapper/EventManager.js +4 -7
  430. package/dist/production/src/mapper/EventManager.js.map +1 -1
  431. package/dist/production/src/mapper/JunctionTableManager.cjs.map +1 -1
  432. package/dist/production/src/mapper/JunctionTableManager.js.map +1 -1
  433. package/dist/production/src/mapper/Mapper.cjs +8 -28
  434. package/dist/production/src/mapper/Mapper.cjs.map +1 -1
  435. package/dist/production/src/mapper/Mapper.js +8 -28
  436. package/dist/production/src/mapper/Mapper.js.map +1 -1
  437. package/dist/production/src/mapper/MapperFactory.cjs.map +1 -1
  438. package/dist/production/src/mapper/MapperFactory.js.map +1 -1
  439. package/dist/production/src/mapper/MutationProcessorHelper.cjs +10 -2
  440. package/dist/production/src/mapper/MutationProcessorHelper.cjs.map +1 -1
  441. package/dist/production/src/mapper/MutationProcessorHelper.js +10 -2
  442. package/dist/production/src/mapper/MutationProcessorHelper.js.map +1 -1
  443. package/dist/production/src/mapper/Result.cjs +10 -27
  444. package/dist/production/src/mapper/Result.cjs.map +1 -1
  445. package/dist/production/src/mapper/Result.js +10 -27
  446. package/dist/production/src/mapper/Result.js.map +1 -1
  447. package/dist/production/src/mapper/delete/DeleteExecutor.cjs +4 -8
  448. package/dist/production/src/mapper/delete/DeleteExecutor.cjs.map +1 -1
  449. package/dist/production/src/mapper/delete/DeleteExecutor.js +5 -9
  450. package/dist/production/src/mapper/delete/DeleteExecutor.js.map +1 -1
  451. package/dist/production/src/mapper/delete/DeleteState.cjs.map +1 -1
  452. package/dist/production/src/mapper/delete/DeleteState.js.map +1 -1
  453. package/dist/production/src/mapper/delete/DeletedEntitiesStorage.cjs.map +1 -1
  454. package/dist/production/src/mapper/delete/DeletedEntitiesStorage.js.map +1 -1
  455. package/dist/production/src/mapper/delete/helpers.cjs.map +1 -1
  456. package/dist/production/src/mapper/delete/helpers.js.map +1 -1
  457. package/dist/production/src/mapper/insert/InsertBuilder.cjs +13 -21
  458. package/dist/production/src/mapper/insert/InsertBuilder.cjs.map +1 -1
  459. package/dist/production/src/mapper/insert/InsertBuilder.js +14 -22
  460. package/dist/production/src/mapper/insert/InsertBuilder.js.map +1 -1
  461. package/dist/production/src/mapper/insert/InsertBuilderFactory.cjs.map +1 -1
  462. package/dist/production/src/mapper/insert/InsertBuilderFactory.js.map +1 -1
  463. package/dist/production/src/mapper/insert/Inserter.cjs +43 -21
  464. package/dist/production/src/mapper/insert/Inserter.cjs.map +1 -1
  465. package/dist/production/src/mapper/insert/Inserter.js +45 -23
  466. package/dist/production/src/mapper/insert/Inserter.js.map +1 -1
  467. package/dist/production/src/mapper/insert/SqlCreateInputProcessor.cjs +23 -79
  468. package/dist/production/src/mapper/insert/SqlCreateInputProcessor.cjs.map +1 -1
  469. package/dist/production/src/mapper/insert/SqlCreateInputProcessor.js +23 -79
  470. package/dist/production/src/mapper/insert/SqlCreateInputProcessor.js.map +1 -1
  471. package/dist/production/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.cjs +43 -0
  472. package/dist/production/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.cjs.map +1 -0
  473. package/dist/production/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.js +43 -0
  474. package/dist/production/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.js.map +1 -0
  475. package/dist/production/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.cjs +40 -0
  476. package/dist/production/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.cjs.map +1 -0
  477. package/dist/production/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.js +40 -0
  478. package/dist/production/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.js.map +1 -0
  479. package/dist/production/src/mapper/insert/relations/OneHasManyCreateInputProcessor.cjs +38 -0
  480. package/dist/production/src/mapper/insert/relations/OneHasManyCreateInputProcessor.cjs.map +1 -0
  481. package/dist/production/src/mapper/insert/relations/OneHasManyCreateInputProcessor.js +38 -0
  482. package/dist/production/src/mapper/insert/relations/OneHasManyCreateInputProcessor.js.map +1 -0
  483. package/dist/production/src/mapper/{relations → insert/relations}/OneHasOneInverseCreateInputProcessor.cjs +23 -32
  484. package/dist/production/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.cjs.map +1 -0
  485. package/dist/production/src/mapper/{relations → insert/relations}/OneHasOneInverseCreateInputProcessor.js +23 -32
  486. package/dist/production/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.js.map +1 -0
  487. package/dist/production/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.cjs +65 -0
  488. package/dist/production/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.cjs.map +1 -0
  489. package/dist/production/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.js +65 -0
  490. package/dist/production/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.js.map +1 -0
  491. package/dist/production/src/mapper/select/ConditionBuilder.cjs.map +1 -1
  492. package/dist/production/src/mapper/select/ConditionBuilder.js.map +1 -1
  493. package/dist/production/src/mapper/select/JoinBuilder.cjs.map +1 -1
  494. package/dist/production/src/mapper/select/JoinBuilder.js.map +1 -1
  495. package/dist/production/src/mapper/select/JoinVisitor.cjs.map +1 -1
  496. package/dist/production/src/mapper/select/JoinVisitor.js.map +1 -1
  497. package/dist/production/src/mapper/select/OrderByBuilder.cjs.map +1 -1
  498. package/dist/production/src/mapper/select/OrderByBuilder.js.map +1 -1
  499. package/dist/production/src/mapper/select/OrderByHelper.cjs.map +1 -1
  500. package/dist/production/src/mapper/select/OrderByHelper.js.map +1 -1
  501. package/dist/production/src/mapper/select/Path.cjs.map +1 -1
  502. package/dist/production/src/mapper/select/Path.js.map +1 -1
  503. package/dist/production/src/mapper/select/RelationFetcher.cjs.map +1 -1
  504. package/dist/production/src/mapper/select/RelationFetcher.js.map +1 -1
  505. package/dist/production/src/mapper/select/SelectBuilder.cjs.map +1 -1
  506. package/dist/production/src/mapper/select/SelectBuilder.js.map +1 -1
  507. package/dist/production/src/mapper/select/SelectHydrator.cjs.map +1 -1
  508. package/dist/production/src/mapper/select/SelectHydrator.js.map +1 -1
  509. package/dist/production/src/mapper/select/WhereBuilder.cjs.map +1 -1
  510. package/dist/production/src/mapper/select/WhereBuilder.js.map +1 -1
  511. package/dist/production/src/mapper/select/handlers/FieldsVisitor.cjs +3 -0
  512. package/dist/production/src/mapper/select/handlers/FieldsVisitor.cjs.map +1 -1
  513. package/dist/production/src/mapper/select/handlers/FieldsVisitor.js +3 -0
  514. package/dist/production/src/mapper/select/handlers/FieldsVisitor.js.map +1 -1
  515. package/dist/production/src/mapper/select/handlers/FieldsVisitorFactory.cjs.map +1 -1
  516. package/dist/production/src/mapper/select/handlers/FieldsVisitorFactory.js.map +1 -1
  517. package/dist/production/src/mapper/select/handlers/MetaHandler.cjs.map +1 -1
  518. package/dist/production/src/mapper/select/handlers/MetaHandler.js.map +1 -1
  519. package/dist/production/src/mapper/select/optimizer/ConditionOptimizer.cjs.map +1 -1
  520. package/dist/production/src/mapper/select/optimizer/ConditionOptimizer.js.map +1 -1
  521. package/dist/production/src/mapper/select/optimizer/WhereOptimizer.cjs.map +1 -1
  522. package/dist/production/src/mapper/select/optimizer/WhereOptimizer.js.map +1 -1
  523. package/dist/production/src/mapper/select/optimizer/WhereReplacer.cjs.map +1 -1
  524. package/dist/production/src/mapper/select/optimizer/WhereReplacer.js.map +1 -1
  525. package/dist/production/src/mapper/select/optimizer/helpers.cjs.map +1 -1
  526. package/dist/production/src/mapper/select/optimizer/helpers.js.map +1 -1
  527. package/dist/production/src/mapper/update/SqlUpdateInputProcessor.cjs +36 -36
  528. package/dist/production/src/mapper/update/SqlUpdateInputProcessor.cjs.map +1 -1
  529. package/dist/production/src/mapper/update/SqlUpdateInputProcessor.js +36 -36
  530. package/dist/production/src/mapper/update/SqlUpdateInputProcessor.js.map +1 -1
  531. package/dist/production/src/mapper/update/UpdateBuilder.cjs +14 -19
  532. package/dist/production/src/mapper/update/UpdateBuilder.cjs.map +1 -1
  533. package/dist/production/src/mapper/update/UpdateBuilder.js +15 -20
  534. package/dist/production/src/mapper/update/UpdateBuilder.js.map +1 -1
  535. package/dist/production/src/mapper/update/UpdateBuilderFactory.cjs.map +1 -1
  536. package/dist/production/src/mapper/update/UpdateBuilderFactory.js.map +1 -1
  537. package/dist/production/src/mapper/update/Updater.cjs +45 -17
  538. package/dist/production/src/mapper/update/Updater.cjs.map +1 -1
  539. package/dist/production/src/mapper/update/Updater.js +47 -19
  540. package/dist/production/src/mapper/update/Updater.js.map +1 -1
  541. package/dist/production/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.cjs +84 -0
  542. package/dist/production/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.cjs.map +1 -0
  543. package/dist/production/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.js +84 -0
  544. package/dist/production/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.js.map +1 -0
  545. package/dist/production/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.cjs +88 -0
  546. package/dist/production/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.cjs.map +1 -0
  547. package/dist/production/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.js +88 -0
  548. package/dist/production/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.js.map +1 -0
  549. package/dist/production/src/mapper/update/relations/OneHasManyUpdateInputProcessor.cjs +87 -0
  550. package/dist/production/src/mapper/update/relations/OneHasManyUpdateInputProcessor.cjs.map +1 -0
  551. package/dist/production/src/mapper/update/relations/OneHasManyUpdateInputProcessor.js +87 -0
  552. package/dist/production/src/mapper/update/relations/OneHasManyUpdateInputProcessor.js.map +1 -0
  553. package/dist/production/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.cjs +147 -0
  554. package/dist/production/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.cjs.map +1 -0
  555. package/dist/production/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.js +147 -0
  556. package/dist/production/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.js.map +1 -0
  557. package/dist/production/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.cjs +183 -0
  558. package/dist/production/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.cjs.map +1 -0
  559. package/dist/production/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.js +183 -0
  560. package/dist/production/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.js.map +1 -0
  561. package/dist/production/src/resolvers/GraphQlQueryAstFactory.cjs.map +1 -1
  562. package/dist/production/src/resolvers/GraphQlQueryAstFactory.js.map +1 -1
  563. package/dist/production/src/resolvers/MutationResolver.cjs +8 -4
  564. package/dist/production/src/resolvers/MutationResolver.cjs.map +1 -1
  565. package/dist/production/src/resolvers/MutationResolver.js +8 -4
  566. package/dist/production/src/resolvers/MutationResolver.js.map +1 -1
  567. package/dist/production/src/resolvers/ReadHelpers.cjs.map +1 -1
  568. package/dist/production/src/resolvers/ReadHelpers.js.map +1 -1
  569. package/dist/production/src/resolvers/ReadResolver.cjs.map +1 -1
  570. package/dist/production/src/resolvers/ReadResolver.js.map +1 -1
  571. package/dist/production/src/resolvers/ValidationResolver.cjs.map +1 -1
  572. package/dist/production/src/resolvers/ValidationResolver.js.map +1 -1
  573. package/dist/production/src/schema/ColumnTypeResolver.cjs.map +1 -1
  574. package/dist/production/src/schema/ColumnTypeResolver.js.map +1 -1
  575. package/dist/production/src/schema/ConditionTypeProvider.cjs.map +1 -1
  576. package/dist/production/src/schema/ConditionTypeProvider.js.map +1 -1
  577. package/dist/production/src/schema/CustomTypesProvider.cjs.map +1 -1
  578. package/dist/production/src/schema/CustomTypesProvider.js.map +1 -1
  579. package/dist/production/src/schema/EntityTypeProvider.cjs.map +1 -1
  580. package/dist/production/src/schema/EntityTypeProvider.js.map +1 -1
  581. package/dist/production/src/schema/EnumsProvider.cjs.map +1 -1
  582. package/dist/production/src/schema/EnumsProvider.js.map +1 -1
  583. package/dist/production/src/schema/FieldAccessVisitor.cjs.map +1 -1
  584. package/dist/production/src/schema/FieldAccessVisitor.js.map +1 -1
  585. package/dist/production/src/schema/GraphQlSchemaBuilder.cjs.map +1 -1
  586. package/dist/production/src/schema/GraphQlSchemaBuilder.js.map +1 -1
  587. package/dist/production/src/schema/GraphQlSchemaBuilderFactory.cjs.map +1 -1
  588. package/dist/production/src/schema/GraphQlSchemaBuilderFactory.js.map +1 -1
  589. package/dist/production/src/schema/MutationProvider.cjs.map +1 -1
  590. package/dist/production/src/schema/MutationProvider.js.map +1 -1
  591. package/dist/production/src/schema/OperationExtension.cjs.map +1 -1
  592. package/dist/production/src/schema/OperationExtension.js.map +1 -1
  593. package/dist/production/src/schema/OrderByTypeProvider.cjs.map +1 -1
  594. package/dist/production/src/schema/OrderByTypeProvider.js.map +1 -1
  595. package/dist/production/src/schema/PaginatedFieldConfigFactory.cjs.map +1 -1
  596. package/dist/production/src/schema/PaginatedFieldConfigFactory.js.map +1 -1
  597. package/dist/production/src/schema/QueryProvider.cjs.map +1 -1
  598. package/dist/production/src/schema/QueryProvider.js.map +1 -1
  599. package/dist/production/src/schema/ResultSchemaTypeProvider.cjs.map +1 -1
  600. package/dist/production/src/schema/ResultSchemaTypeProvider.js.map +1 -1
  601. package/dist/production/src/schema/ValidationQueriesProvider.cjs.map +1 -1
  602. package/dist/production/src/schema/ValidationQueriesProvider.js.map +1 -1
  603. package/dist/production/src/schema/WhereTypeProvider.cjs.map +1 -1
  604. package/dist/production/src/schema/WhereTypeProvider.js.map +1 -1
  605. package/dist/production/src/schema/entities/FieldArgsVisitor.cjs.map +1 -1
  606. package/dist/production/src/schema/entities/FieldArgsVisitor.js.map +1 -1
  607. package/dist/production/src/schema/entities/FieldTypeVisitor.cjs.map +1 -1
  608. package/dist/production/src/schema/entities/FieldTypeVisitor.js.map +1 -1
  609. package/dist/production/src/schema/mutations/ConnectOrCreateRelationInputProvider.cjs.map +1 -1
  610. package/dist/production/src/schema/mutations/ConnectOrCreateRelationInputProvider.js.map +1 -1
  611. package/dist/production/src/schema/mutations/CreateEntityInputFieldVisitor.cjs.map +1 -1
  612. package/dist/production/src/schema/mutations/CreateEntityInputFieldVisitor.js.map +1 -1
  613. package/dist/production/src/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.cjs.map +1 -1
  614. package/dist/production/src/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.js.map +1 -1
  615. package/dist/production/src/schema/mutations/CreateEntityRelationInputFieldVisitor.cjs.map +1 -1
  616. package/dist/production/src/schema/mutations/CreateEntityRelationInputFieldVisitor.js.map +1 -1
  617. package/dist/production/src/schema/mutations/CreateEntityRelationInputProvider.cjs.map +1 -1
  618. package/dist/production/src/schema/mutations/CreateEntityRelationInputProvider.js.map +1 -1
  619. package/dist/production/src/schema/mutations/EntityInputProvider.cjs.map +1 -1
  620. package/dist/production/src/schema/mutations/EntityInputProvider.js.map +1 -1
  621. package/dist/production/src/schema/mutations/UpdateEntityInputFieldVisitor.cjs.map +1 -1
  622. package/dist/production/src/schema/mutations/UpdateEntityInputFieldVisitor.js.map +1 -1
  623. package/dist/production/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.cjs.map +1 -1
  624. package/dist/production/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.js.map +1 -1
  625. package/dist/production/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.cjs +2 -0
  626. package/dist/production/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.cjs.map +1 -1
  627. package/dist/production/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.js +2 -0
  628. package/dist/production/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.js.map +1 -1
  629. package/dist/production/src/schema/mutations/UpdateEntityRelationInputProvider.cjs.map +1 -1
  630. package/dist/production/src/schema/mutations/UpdateEntityRelationInputProvider.js.map +1 -1
  631. package/dist/production/src/schema/utils.cjs.map +1 -1
  632. package/dist/production/src/schema/utils.js.map +1 -1
  633. package/dist/production/src/utils/Mutex.cjs.map +1 -1
  634. package/dist/production/src/utils/Mutex.js.map +1 -1
  635. package/dist/production/src/utils/ResolveInfoUtils.cjs.map +1 -1
  636. package/dist/production/src/utils/ResolveInfoUtils.js.map +1 -1
  637. package/dist/production/src/utils/accessor.cjs.map +1 -1
  638. package/dist/production/src/utils/accessor.js.map +1 -1
  639. package/dist/production/src/utils/isIt.cjs.map +1 -1
  640. package/dist/production/src/utils/isIt.js.map +1 -1
  641. package/dist/production/src/utils/object.cjs.map +1 -1
  642. package/dist/production/src/utils/object.js.map +1 -1
  643. package/dist/production/src/utils/paginationUtils.cjs.map +1 -1
  644. package/dist/production/src/utils/paginationUtils.js.map +1 -1
  645. package/dist/production/src/utils/singletonFactory.cjs.map +1 -1
  646. package/dist/production/src/utils/singletonFactory.js.map +1 -1
  647. package/dist/production/src/utils/uniqueWhereFields.cjs.map +1 -1
  648. package/dist/production/src/utils/uniqueWhereFields.js.map +1 -1
  649. package/dist/tests/cases/integration/graphQlRequests/insert/jsonInsert.test.d.ts +2 -0
  650. package/dist/tests/cases/integration/graphQlRequests/insert/jsonInsert.test.d.ts.map +1 -0
  651. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/connectOrCreate.test.d.ts +2 -0
  652. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/connectOrCreate.test.d.ts.map +1 -0
  653. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/connectOrCreate.test.d.ts +2 -0
  654. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/connectOrCreate.test.d.ts.map +1 -0
  655. package/dist/tests/cases/integration/graphQlRequests/validation/conditions.test.d.ts +2 -2
  656. package/dist/tests/cases/integration/graphQlRequests/validation/conditions.test.d.ts.map +1 -1
  657. package/dist/tests/cases/integration/graphQlRequests/validation/requiredWhen.test.d.ts +1 -1
  658. package/dist/tests/cases/integration/graphQlRequests/validation/requiredWhen.test.d.ts.map +1 -1
  659. package/dist/tests/cases/integration/graphQlSchema/model.d.ts +4 -4
  660. package/dist/tests/cases/integration/graphQlSchema/model.d.ts.map +1 -1
  661. package/dist/tests/src/assert.d.ts +5 -0
  662. package/dist/tests/src/assert.d.ts.map +1 -0
  663. package/dist/tests/src/test.d.ts.map +1 -1
  664. package/dist/tests/tsconfig.tsbuildinfo +1 -1
  665. package/dist/types/ExecutionContainer.d.ts +8 -5
  666. package/dist/types/ExecutionContainer.d.ts.map +1 -1
  667. package/dist/types/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.d.ts.map +1 -1
  668. package/dist/types/input-validation/ColumnValueResolver.d.ts +1 -1
  669. package/dist/types/input-validation/ColumnValueResolver.d.ts.map +1 -1
  670. package/dist/types/input-validation/ValidationDataSelector.d.ts +1 -1
  671. package/dist/types/input-validation/preValidation/CreateInputPreValidationProcessor.d.ts +3 -3
  672. package/dist/types/input-validation/preValidation/CreateInputPreValidationProcessor.d.ts.map +1 -1
  673. package/dist/types/input-validation/preValidation/InputPreValidator.d.ts +3 -3
  674. package/dist/types/input-validation/preValidation/InputPreValidator.d.ts.map +1 -1
  675. package/dist/types/input-validation/preValidation/UpdateInputPreValidationProcessor.d.ts +4 -4
  676. package/dist/types/input-validation/preValidation/UpdateInputPreValidationProcessor.d.ts.map +1 -1
  677. package/dist/types/inputProcessing/CreateInputProcessor.d.ts +8 -6
  678. package/dist/types/inputProcessing/CreateInputProcessor.d.ts.map +1 -1
  679. package/dist/types/inputProcessing/CreateInputVisitor.d.ts +11 -10
  680. package/dist/types/inputProcessing/CreateInputVisitor.d.ts.map +1 -1
  681. package/dist/types/inputProcessing/UpdateInputProcessor.d.ts +14 -12
  682. package/dist/types/inputProcessing/UpdateInputProcessor.d.ts.map +1 -1
  683. package/dist/types/inputProcessing/UpdateInputVisitor.d.ts +11 -10
  684. package/dist/types/inputProcessing/UpdateInputVisitor.d.ts.map +1 -1
  685. package/dist/types/introspection/IntrospectionSchemaDefinitionFactory.d.ts +1 -3
  686. package/dist/types/introspection/IntrospectionSchemaDefinitionFactory.d.ts.map +1 -1
  687. package/dist/types/introspection/index.d.ts +2 -1
  688. package/dist/types/introspection/index.d.ts.map +1 -1
  689. package/dist/types/introspection/introspection.schema.d.ts +5 -0
  690. package/dist/types/introspection/introspection.schema.d.ts.map +1 -0
  691. package/dist/types/mapper/ColumnValue.d.ts +4 -8
  692. package/dist/types/mapper/ColumnValue.d.ts.map +1 -1
  693. package/dist/types/mapper/EventManager.d.ts +9 -9
  694. package/dist/types/mapper/EventManager.d.ts.map +1 -1
  695. package/dist/types/mapper/Mapper.d.ts +6 -7
  696. package/dist/types/mapper/Mapper.d.ts.map +1 -1
  697. package/dist/types/mapper/MutationProcessorHelper.d.ts +2 -2
  698. package/dist/types/mapper/MutationProcessorHelper.d.ts.map +1 -1
  699. package/dist/types/mapper/Result.d.ts +16 -9
  700. package/dist/types/mapper/Result.d.ts.map +1 -1
  701. package/dist/types/mapper/delete/DeleteExecutor.d.ts.map +1 -1
  702. package/dist/types/mapper/insert/InsertBuilder.d.ts +4 -9
  703. package/dist/types/mapper/insert/InsertBuilder.d.ts.map +1 -1
  704. package/dist/types/mapper/insert/Inserter.d.ts +3 -3
  705. package/dist/types/mapper/insert/Inserter.d.ts.map +1 -1
  706. package/dist/types/mapper/insert/SqlCreateInputProcessor.d.ts +11 -8
  707. package/dist/types/mapper/insert/SqlCreateInputProcessor.d.ts.map +1 -1
  708. package/dist/types/mapper/insert/relations/ManyHasManyCreateInputProcessor.d.ts +26 -0
  709. package/dist/types/mapper/insert/relations/ManyHasManyCreateInputProcessor.d.ts.map +1 -0
  710. package/dist/types/mapper/insert/relations/ManyHasOneCreateInputProcessor.d.ts +25 -0
  711. package/dist/types/mapper/insert/relations/ManyHasOneCreateInputProcessor.d.ts.map +1 -0
  712. package/dist/types/mapper/insert/relations/OneHasManyCreateInputProcessor.d.ts +28 -0
  713. package/dist/types/mapper/insert/relations/OneHasManyCreateInputProcessor.d.ts.map +1 -0
  714. package/dist/types/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.d.ts +31 -0
  715. package/dist/types/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.d.ts.map +1 -0
  716. package/dist/types/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.d.ts +26 -0
  717. package/dist/types/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.d.ts.map +1 -0
  718. package/dist/types/mapper/select/handlers/FieldsVisitor.d.ts.map +1 -1
  719. package/dist/types/mapper/types.d.ts +84 -1
  720. package/dist/types/mapper/types.d.ts.map +1 -1
  721. package/dist/types/mapper/update/SqlUpdateInputProcessor.d.ts +12 -8
  722. package/dist/types/mapper/update/SqlUpdateInputProcessor.d.ts.map +1 -1
  723. package/dist/types/mapper/update/UpdateBuilder.d.ts +4 -8
  724. package/dist/types/mapper/update/UpdateBuilder.d.ts.map +1 -1
  725. package/dist/types/mapper/update/Updater.d.ts +2 -2
  726. package/dist/types/mapper/update/Updater.d.ts.map +1 -1
  727. package/dist/types/mapper/update/relations/ManyHasManyUpdateInputProcessor.d.ts +48 -0
  728. package/dist/types/mapper/update/relations/ManyHasManyUpdateInputProcessor.d.ts.map +1 -0
  729. package/dist/types/mapper/update/relations/ManyHasOneUpdateInputProcessor.d.ts +42 -0
  730. package/dist/types/mapper/update/relations/ManyHasOneUpdateInputProcessor.d.ts.map +1 -0
  731. package/dist/types/mapper/update/relations/OneHasManyUpdateInputProcessor.d.ts +48 -0
  732. package/dist/types/mapper/update/relations/OneHasManyUpdateInputProcessor.d.ts.map +1 -0
  733. package/dist/types/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.d.ts +38 -0
  734. package/dist/types/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.d.ts.map +1 -0
  735. package/dist/types/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.d.ts +42 -0
  736. package/dist/types/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.d.ts.map +1 -0
  737. package/dist/types/resolvers/MutationResolver.d.ts.map +1 -1
  738. package/dist/types/schema/mutations/UpdateEntityRelationInputFieldVisitor.d.ts.map +1 -1
  739. package/dist/types/tsconfig.tsbuildinfo +1 -1
  740. package/graphql.codegen.yml +2 -2
  741. package/package.json +14 -18
  742. package/src/ExecutionContainer.ts +5 -2
  743. package/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.ts +35 -2
  744. package/src/input-validation/ColumnValueResolver.ts +1 -1
  745. package/src/input-validation/preValidation/CreateInputPreValidationProcessor.ts +2 -2
  746. package/src/input-validation/preValidation/InputPreValidator.ts +10 -12
  747. package/src/input-validation/preValidation/UpdateInputPreValidationProcessor.ts +3 -3
  748. package/src/inputProcessing/CreateInputProcessor.ts +8 -6
  749. package/src/inputProcessing/CreateInputVisitor.ts +32 -33
  750. package/src/inputProcessing/UpdateInputProcessor.ts +13 -11
  751. package/src/inputProcessing/UpdateInputVisitor.ts +44 -40
  752. package/src/introspection/IntrospectionSchemaDefinitionFactory.ts +2 -194
  753. package/src/introspection/index.ts +2 -1
  754. package/src/introspection/introspection.schema.ts +194 -0
  755. package/src/mapper/ColumnValue.ts +11 -25
  756. package/src/mapper/ErrorUtils.ts +1 -1
  757. package/src/mapper/EventManager.ts +9 -13
  758. package/src/mapper/Mapper.ts +19 -37
  759. package/src/mapper/MutationProcessorHelper.ts +16 -8
  760. package/src/mapper/Result.ts +14 -49
  761. package/src/mapper/delete/DeleteExecutor.ts +4 -8
  762. package/src/mapper/insert/InsertBuilder.ts +23 -34
  763. package/src/mapper/insert/Inserter.ts +55 -41
  764. package/src/mapper/insert/SqlCreateInputProcessor.ts +36 -91
  765. package/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.ts +59 -0
  766. package/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.ts +57 -0
  767. package/src/mapper/insert/relations/OneHasManyCreateInputProcessor.ts +52 -0
  768. package/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.ts +90 -0
  769. package/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.ts +87 -0
  770. package/src/mapper/select/handlers/FieldsVisitor.ts +3 -0
  771. package/src/mapper/types.ts +115 -1
  772. package/src/mapper/update/SqlUpdateInputProcessor.ts +50 -47
  773. package/src/mapper/update/UpdateBuilder.ts +25 -31
  774. package/src/mapper/update/Updater.ts +55 -35
  775. package/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.ts +112 -0
  776. package/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.ts +125 -0
  777. package/src/mapper/update/relations/OneHasManyUpdateInputProcessor.ts +113 -0
  778. package/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.ts +184 -0
  779. package/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.ts +240 -0
  780. package/src/resolvers/MutationResolver.ts +6 -4
  781. package/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.ts +5 -0
  782. package/tests/cases/bugs/bug-filter-or.test.ts +1 -1
  783. package/tests/cases/bugs/bug-update-by-nested-unique.test.ts +1 -1
  784. package/tests/cases/bugs/bug102.test.ts +1 -1
  785. package/tests/cases/integration/graphQlRequests/delete/aclDelete.test.ts +1 -1
  786. package/tests/cases/integration/graphQlRequests/delete/additionalDeleteFilter.test.ts +1 -1
  787. package/tests/cases/integration/graphQlRequests/delete/cascadeDelete.test.ts +1 -1
  788. package/tests/cases/integration/graphQlRequests/delete/deleteById.test.ts +1 -1
  789. package/tests/cases/integration/graphQlRequests/delete/orphanRemoval.test.ts +1 -1
  790. package/tests/cases/integration/graphQlRequests/delete/restrictOnDelete.test.ts +1 -1
  791. package/tests/cases/integration/graphQlRequests/delete/setNullOnDelete.test.ts +1 -1
  792. package/tests/cases/integration/graphQlRequests/insert/acl/setField.test.ts +1 -1
  793. package/tests/cases/integration/graphQlRequests/insert/aclInsert.test.ts +1 -1
  794. package/tests/cases/integration/graphQlRequests/insert/basicInsert.test.ts +1 -1
  795. package/tests/cases/integration/graphQlRequests/insert/insertCustomId.test.ts +1 -1
  796. package/tests/cases/integration/graphQlRequests/insert/jsonInsert.test.ts +37 -0
  797. package/tests/cases/integration/graphQlRequests/insert/manyHasManyInverse/create.test.ts +1 -1
  798. package/tests/cases/integration/graphQlRequests/insert/manyHasManyOwning/create.test.ts +1 -1
  799. package/tests/cases/integration/graphQlRequests/insert/manyHasOne/connectOrCreate.test.ts +1 -1
  800. package/tests/cases/integration/graphQlRequests/insert/manyHasOne/create.test.ts +1 -1
  801. package/tests/cases/integration/graphQlRequests/insert/oneHasMany/connect.test.ts +1 -1
  802. package/tests/cases/integration/graphQlRequests/insert/oneHasMany/create.test.ts +9 -9
  803. package/tests/cases/integration/graphQlRequests/insert/oneHasOneInverse/create.test.ts +1 -1
  804. package/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/create.test.ts +1 -1
  805. package/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/empty.test.ts +1 -1
  806. package/tests/cases/integration/graphQlRequests/insert/validation/toBeFixed.test.ts +1 -1
  807. package/tests/cases/integration/graphQlRequests/query/acl/differentRowAndFieldPredicate.test.ts +1 -1
  808. package/tests/cases/integration/graphQlRequests/query/acl/fieldRestrictedByLocale.test.ts +1 -1
  809. package/tests/cases/integration/graphQlRequests/query/acl/isNullAcl.test.ts +1 -1
  810. package/tests/cases/integration/graphQlRequests/query/acl/nestedPredicate.test.ts +1 -1
  811. package/tests/cases/integration/graphQlRequests/query/acl/orPredicate.test.ts +1 -1
  812. package/tests/cases/integration/graphQlRequests/query/acl/predicateElimination.test.ts +1 -1
  813. package/tests/cases/integration/graphQlRequests/query/acl/relationAcl.test.ts +1 -1
  814. package/tests/cases/integration/graphQlRequests/query/acl/rowPredicateSubset.test.ts +1 -1
  815. package/tests/cases/integration/graphQlRequests/query/acl/sameRowAndFieldPredicate.test.ts +1 -1
  816. package/tests/cases/integration/graphQlRequests/query/filter/backReferencedFilter.test.ts +1 -1
  817. package/tests/cases/integration/graphQlRequests/query/filter/complexCondition.test.ts +1 -1
  818. package/tests/cases/integration/graphQlRequests/query/filter/composedFilter.test.ts +1 -1
  819. package/tests/cases/integration/graphQlRequests/query/filter/containsQuery.test.ts +1 -1
  820. package/tests/cases/integration/graphQlRequests/query/filter/manyHasManyOwnerRelation.test.ts +1 -1
  821. package/tests/cases/integration/graphQlRequests/query/filter/manyHasOneRelation.test.ts +1 -1
  822. package/tests/cases/integration/graphQlRequests/query/filter/oneHasManyRelation.test.ts +1 -1
  823. package/tests/cases/integration/graphQlRequests/query/formatting/dateFormat.test.ts +1 -1
  824. package/tests/cases/integration/graphQlRequests/query/graphqlFeatures/alias.test.ts +1 -1
  825. package/tests/cases/integration/graphQlRequests/query/graphqlFeatures/fragments.test.ts +1 -1
  826. package/tests/cases/integration/graphQlRequests/query/misc/aliasedType.test.ts +1 -1
  827. package/tests/cases/integration/graphQlRequests/query/misc/longAliasHash.test.ts +1 -1
  828. package/tests/cases/integration/graphQlRequests/query/misc/reducedHasMany.test.ts +70 -1
  829. package/tests/cases/integration/graphQlRequests/query/misc/transaction.test.ts +1 -1
  830. package/tests/cases/integration/graphQlRequests/query/pagination/hasManyLimit.test.ts +1 -1
  831. package/tests/cases/integration/graphQlRequests/query/pagination/paginate.test.ts +1 -1
  832. package/tests/cases/integration/graphQlRequests/query/pagination/paginateAliased.test.ts +1 -1
  833. package/tests/cases/integration/graphQlRequests/query/pagination/simpleLimit.test.ts +1 -1
  834. package/tests/cases/integration/graphQlRequests/query/relations/advanced.test.ts +1 -1
  835. package/tests/cases/integration/graphQlRequests/query/relations/manyHasManyInverse.test.ts +1 -1
  836. package/tests/cases/integration/graphQlRequests/query/relations/manyHasManyOwning.test.ts +2 -2
  837. package/tests/cases/integration/graphQlRequests/query/relations/manyHasOne.test.ts +1 -1
  838. package/tests/cases/integration/graphQlRequests/query/relations/oneHasMany.test.ts +1 -1
  839. package/tests/cases/integration/graphQlRequests/query/relations/oneHasOneInverse.test.ts +1 -1
  840. package/tests/cases/integration/graphQlRequests/query/relations/oneHasOneOwner.test.ts +1 -1
  841. package/tests/cases/integration/graphQlRequests/query/sorting/byRelations.test.ts +1 -1
  842. package/tests/cases/integration/graphQlRequests/query/sorting/defaultOrdering.test.ts +1 -1
  843. package/tests/cases/integration/graphQlRequests/query/sorting/orderBy.test.ts +1 -1
  844. package/tests/cases/integration/graphQlRequests/query/sorting/randomSort.test.ts +1 -1
  845. package/tests/cases/integration/graphQlRequests/query/sorting/sortNulls.test.ts +1 -1
  846. package/tests/cases/integration/graphQlRequests/query/sorting/sortedHasMany.test.ts +1 -1
  847. package/tests/cases/integration/graphQlRequests/query/unique/basicQueryById.test.ts +1 -1
  848. package/tests/cases/integration/graphQlRequests/query/unique/composedUnique.test.ts +1 -1
  849. package/tests/cases/integration/graphQlRequests/query/unique/oneHasManyUnique.test.ts +1 -1
  850. package/tests/cases/integration/graphQlRequests/query/unique/uniqueWithFilter.test.ts +1 -1
  851. package/tests/cases/integration/graphQlRequests/query/view/view.test.ts +1 -1
  852. package/tests/cases/integration/graphQlRequests/update/acl/aclUpdate.test.ts +1 -1
  853. package/tests/cases/integration/graphQlRequests/update/additionalFilter.test.ts +1 -1
  854. package/tests/cases/integration/graphQlRequests/update/basic/columnUpdate.test.ts +1 -1
  855. package/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/connect.test.ts +1 -1
  856. package/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/create.test.ts +1 -1
  857. package/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/delete.test.ts +1 -1
  858. package/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/disconnect.test.ts +1 -1
  859. package/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/update.test.ts +1 -1
  860. package/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/upsert.test.ts +1 -1
  861. package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/connect.test.ts +1 -1
  862. package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/connectOrCreate.test.ts +100 -0
  863. package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/create.test.ts +1 -1
  864. package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/delete.test.ts +1 -1
  865. package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/disconnect.test.ts +1 -1
  866. package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/update.test.ts +1 -1
  867. package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/upsert.test.ts +1 -1
  868. package/tests/cases/integration/graphQlRequests/update/manyHasOne/connect.test.ts +1 -1
  869. package/tests/cases/integration/graphQlRequests/update/manyHasOne/create.test.ts +1 -1
  870. package/tests/cases/integration/graphQlRequests/update/manyHasOne/delete.test.ts +1 -1
  871. package/tests/cases/integration/graphQlRequests/update/manyHasOne/disconnect.test.ts +1 -1
  872. package/tests/cases/integration/graphQlRequests/update/manyHasOne/update.test.ts +1 -6
  873. package/tests/cases/integration/graphQlRequests/update/manyHasOne/upsert.test.ts +1 -6
  874. package/tests/cases/integration/graphQlRequests/update/oneHasMany/combination.test.ts +1 -1
  875. package/tests/cases/integration/graphQlRequests/update/oneHasMany/connect.test.ts +1 -1
  876. package/tests/cases/integration/graphQlRequests/update/oneHasMany/connectOrCreate.test.ts +90 -0
  877. package/tests/cases/integration/graphQlRequests/update/oneHasMany/create.test.ts +1 -1
  878. package/tests/cases/integration/graphQlRequests/update/oneHasMany/delete.test.ts +1 -1
  879. package/tests/cases/integration/graphQlRequests/update/oneHasMany/disconnect.test.ts +1 -1
  880. package/tests/cases/integration/graphQlRequests/update/oneHasMany/update.test.ts +1 -1
  881. package/tests/cases/integration/graphQlRequests/update/oneHasMany/upsert.test.ts +1 -1
  882. package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/connect.test.ts +1 -1
  883. package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/create.test.ts +1 -1
  884. package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/delete.test.ts +1 -1
  885. package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/disconnect.test.ts +1 -1
  886. package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/update.test.ts +1 -1
  887. package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/upsert.test.ts +10 -1
  888. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/connect.test.ts +1 -1
  889. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/connectOrCreate.test.ts +1 -1
  890. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/create.test.ts +1 -1
  891. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/delete.test.ts +1 -1
  892. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/disconnect.test.ts +1 -1
  893. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/update.test.ts +1 -6
  894. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/upsert.test.ts +1 -6
  895. package/tests/cases/integration/graphQlRequests/update/queryPortal.test.ts +1 -1
  896. package/tests/cases/integration/graphQlRequests/update/transaction.test.ts +1 -1
  897. package/tests/cases/integration/graphQlRequests/update/validation/toBeFixed.test.ts +1 -1
  898. package/tests/cases/integration/graphQlRequests/upsert/basicUpsert.test.ts +1 -1
  899. package/tests/cases/integration/graphQlRequests/validation/conditions.test.ts +1 -1
  900. package/tests/cases/integration/graphQlRequests/validation/nestedValidation.test.ts +1 -1
  901. package/tests/cases/integration/graphQlRequests/validation/optionalAssert.test.ts +1 -1
  902. package/tests/cases/integration/graphQlRequests/validation/required.test.ts +1 -1
  903. package/tests/cases/integration/graphQlRequests/validation/requiredWhen.test.ts +1 -1
  904. package/tests/cases/integration/graphQlRequests/validation/rules/andRule.test.ts +1 -1
  905. package/tests/cases/integration/graphQlRequests/validation/rules/lengthRangeRule.test.ts +1 -1
  906. package/tests/cases/integration/graphQlRequests/validation/rules/maxLengthRule.test.ts +1 -1
  907. package/tests/cases/integration/graphQlRequests/validation/rules/minLength.test.ts +1 -1
  908. package/tests/cases/integration/graphQlRequests/validation/rules/notEmptyRule.test.ts +1 -1
  909. package/tests/cases/integration/graphQlRequests/validation/rules/notRule.test.ts +1 -1
  910. package/tests/cases/integration/graphQlRequests/validation/rules/orRule.test.ts +1 -1
  911. package/tests/cases/integration/graphQlRequests/validation/rules/patternRule.test.ts +1 -2
  912. package/tests/cases/integration/graphQlRequests/validation/rules/rangeRule.test.ts +1 -1
  913. package/tests/cases/integration/graphQlSchema/graphQlSchemaBuilder.test.ts +4 -4
  914. package/tests/cases/integration/graphQlSchema/schema-acl-allowed.gql +6 -0
  915. package/tests/cases/integration/graphQlSchema/schema-acl-create-only.gql +28 -28
  916. package/tests/cases/integration/graphQlSchema/schema-acl-restricted-create.gql +5 -0
  917. package/tests/cases/integration/graphQlSchema/schema-acl-restricted-delete.gql +6 -0
  918. package/tests/cases/integration/graphQlSchema/schema-acl-restricted-update.gql +5 -0
  919. package/tests/cases/integration/graphQlSchema/schema-basic.gql +15 -0
  920. package/tests/cases/integration/graphQlSchema/schema-bug-66.gql +7 -0
  921. package/tests/cases/integration/graphQlSchema/schema-custom-primary.gql +15 -0
  922. package/tests/cases/integration/graphQlSchema/schema-has-many-reduction.gql +7 -0
  923. package/tests/cases/integration/graphQlSchema/schema-new-builder.gql +123 -107
  924. package/tests/cases/unit/aclVariablesFactory.test.ts +5 -5
  925. package/tests/cases/unit/conditionOptimizer.test.ts +7 -1
  926. package/tests/cases/unit/inputPreValidator.test.ts +3 -2
  927. package/tests/cases/unit/inputValidation.test.ts +7 -6
  928. package/tests/cases/unit/orderbyHelper.test.ts +3 -2
  929. package/tests/cases/unit/permissionMerger.test.ts +2 -1
  930. package/tests/cases/unit/predicatesFactory.test.ts +2 -1
  931. package/tests/cases/unit/predicatesInjector.test.ts +2 -1
  932. package/tests/cases/unit/uuidType.test.ts +5 -5
  933. package/tests/cases/unit/variableInjector.test.ts +2 -1
  934. package/tests/cases/unit/whereBuilder.test.ts +2 -1
  935. package/tests/cases/unit/whereOptimizer.test.ts +2 -1
  936. package/tests/src/assert.ts +10 -0
  937. package/tests/src/test.ts +4 -1
  938. package/tests/src/testGraphql.ts +3 -3
  939. package/dist/development/src/mapper/DataManipulationBuilder.cjs +0 -5
  940. package/dist/development/src/mapper/DataManipulationBuilder.cjs.map +0 -1
  941. package/dist/development/src/mapper/DataManipulationBuilder.js +0 -5
  942. package/dist/development/src/mapper/DataManipulationBuilder.js.map +0 -1
  943. package/dist/development/src/mapper/relations/ManyHasManyInputProcessor.cjs +0 -75
  944. package/dist/development/src/mapper/relations/ManyHasManyInputProcessor.cjs.map +0 -1
  945. package/dist/development/src/mapper/relations/ManyHasManyInputProcessor.js +0 -75
  946. package/dist/development/src/mapper/relations/ManyHasManyInputProcessor.js.map +0 -1
  947. package/dist/development/src/mapper/relations/ManyHasOneInputProcessor.cjs +0 -114
  948. package/dist/development/src/mapper/relations/ManyHasOneInputProcessor.cjs.map +0 -1
  949. package/dist/development/src/mapper/relations/ManyHasOneInputProcessor.js +0 -114
  950. package/dist/development/src/mapper/relations/ManyHasOneInputProcessor.js.map +0 -1
  951. package/dist/development/src/mapper/relations/OneHasManyInputProcessor.cjs +0 -72
  952. package/dist/development/src/mapper/relations/OneHasManyInputProcessor.cjs.map +0 -1
  953. package/dist/development/src/mapper/relations/OneHasManyInputProcessor.js +0 -72
  954. package/dist/development/src/mapper/relations/OneHasManyInputProcessor.js.map +0 -1
  955. package/dist/development/src/mapper/relations/OneHasOneInverseCreateInputProcessor.cjs.map +0 -1
  956. package/dist/development/src/mapper/relations/OneHasOneInverseCreateInputProcessor.js.map +0 -1
  957. package/dist/development/src/mapper/relations/OneHasOneInverseUpdateInputProcessor.cjs +0 -131
  958. package/dist/development/src/mapper/relations/OneHasOneInverseUpdateInputProcessor.cjs.map +0 -1
  959. package/dist/development/src/mapper/relations/OneHasOneInverseUpdateInputProcessor.js +0 -131
  960. package/dist/development/src/mapper/relations/OneHasOneInverseUpdateInputProcessor.js.map +0 -1
  961. package/dist/development/src/mapper/relations/OneHasOneOwningCreateInputProcessor.cjs +0 -71
  962. package/dist/development/src/mapper/relations/OneHasOneOwningCreateInputProcessor.cjs.map +0 -1
  963. package/dist/development/src/mapper/relations/OneHasOneOwningCreateInputProcessor.js +0 -71
  964. package/dist/development/src/mapper/relations/OneHasOneOwningCreateInputProcessor.js.map +0 -1
  965. package/dist/development/src/mapper/relations/OneHasOneOwningUpdateInputProcessor.cjs +0 -200
  966. package/dist/development/src/mapper/relations/OneHasOneOwningUpdateInputProcessor.cjs.map +0 -1
  967. package/dist/development/src/mapper/relations/OneHasOneOwningUpdateInputProcessor.js +0 -200
  968. package/dist/development/src/mapper/relations/OneHasOneOwningUpdateInputProcessor.js.map +0 -1
  969. package/dist/production/src/mapper/DataManipulationBuilder.cjs +0 -5
  970. package/dist/production/src/mapper/DataManipulationBuilder.cjs.map +0 -1
  971. package/dist/production/src/mapper/DataManipulationBuilder.js +0 -5
  972. package/dist/production/src/mapper/DataManipulationBuilder.js.map +0 -1
  973. package/dist/production/src/mapper/relations/ManyHasManyInputProcessor.cjs +0 -75
  974. package/dist/production/src/mapper/relations/ManyHasManyInputProcessor.cjs.map +0 -1
  975. package/dist/production/src/mapper/relations/ManyHasManyInputProcessor.js +0 -75
  976. package/dist/production/src/mapper/relations/ManyHasManyInputProcessor.js.map +0 -1
  977. package/dist/production/src/mapper/relations/ManyHasOneInputProcessor.cjs +0 -114
  978. package/dist/production/src/mapper/relations/ManyHasOneInputProcessor.cjs.map +0 -1
  979. package/dist/production/src/mapper/relations/ManyHasOneInputProcessor.js +0 -114
  980. package/dist/production/src/mapper/relations/ManyHasOneInputProcessor.js.map +0 -1
  981. package/dist/production/src/mapper/relations/OneHasManyInputProcessor.cjs +0 -72
  982. package/dist/production/src/mapper/relations/OneHasManyInputProcessor.cjs.map +0 -1
  983. package/dist/production/src/mapper/relations/OneHasManyInputProcessor.js +0 -72
  984. package/dist/production/src/mapper/relations/OneHasManyInputProcessor.js.map +0 -1
  985. package/dist/production/src/mapper/relations/OneHasOneInverseCreateInputProcessor.cjs.map +0 -1
  986. package/dist/production/src/mapper/relations/OneHasOneInverseCreateInputProcessor.js.map +0 -1
  987. package/dist/production/src/mapper/relations/OneHasOneInverseUpdateInputProcessor.cjs +0 -131
  988. package/dist/production/src/mapper/relations/OneHasOneInverseUpdateInputProcessor.cjs.map +0 -1
  989. package/dist/production/src/mapper/relations/OneHasOneInverseUpdateInputProcessor.js +0 -131
  990. package/dist/production/src/mapper/relations/OneHasOneInverseUpdateInputProcessor.js.map +0 -1
  991. package/dist/production/src/mapper/relations/OneHasOneOwningCreateInputProcessor.cjs +0 -71
  992. package/dist/production/src/mapper/relations/OneHasOneOwningCreateInputProcessor.cjs.map +0 -1
  993. package/dist/production/src/mapper/relations/OneHasOneOwningCreateInputProcessor.js +0 -71
  994. package/dist/production/src/mapper/relations/OneHasOneOwningCreateInputProcessor.js.map +0 -1
  995. package/dist/production/src/mapper/relations/OneHasOneOwningUpdateInputProcessor.cjs +0 -200
  996. package/dist/production/src/mapper/relations/OneHasOneOwningUpdateInputProcessor.cjs.map +0 -1
  997. package/dist/production/src/mapper/relations/OneHasOneOwningUpdateInputProcessor.js +0 -200
  998. package/dist/production/src/mapper/relations/OneHasOneOwningUpdateInputProcessor.js.map +0 -1
  999. package/dist/types/mapper/DataManipulationBuilder.d.ts +0 -7
  1000. package/dist/types/mapper/DataManipulationBuilder.d.ts.map +0 -1
  1001. package/dist/types/mapper/relations/ManyHasManyInputProcessor.d.ts +0 -32
  1002. package/dist/types/mapper/relations/ManyHasManyInputProcessor.d.ts.map +0 -1
  1003. package/dist/types/mapper/relations/ManyHasOneInputProcessor.d.ts +0 -32
  1004. package/dist/types/mapper/relations/ManyHasOneInputProcessor.d.ts.map +0 -1
  1005. package/dist/types/mapper/relations/OneHasManyInputProcessor.d.ts +0 -29
  1006. package/dist/types/mapper/relations/OneHasManyInputProcessor.d.ts.map +0 -1
  1007. package/dist/types/mapper/relations/OneHasOneInverseCreateInputProcessor.d.ts +0 -21
  1008. package/dist/types/mapper/relations/OneHasOneInverseCreateInputProcessor.d.ts.map +0 -1
  1009. package/dist/types/mapper/relations/OneHasOneInverseUpdateInputProcessor.d.ts +0 -32
  1010. package/dist/types/mapper/relations/OneHasOneInverseUpdateInputProcessor.d.ts.map +0 -1
  1011. package/dist/types/mapper/relations/OneHasOneOwningCreateInputProcessor.d.ts +0 -21
  1012. package/dist/types/mapper/relations/OneHasOneOwningCreateInputProcessor.d.ts.map +0 -1
  1013. package/dist/types/mapper/relations/OneHasOneOwningUpdateInputProcessor.d.ts +0 -37
  1014. package/dist/types/mapper/relations/OneHasOneOwningUpdateInputProcessor.d.ts.map +0 -1
  1015. package/src/mapper/DataManipulationBuilder.ts +0 -12
  1016. package/src/mapper/relations/ManyHasManyInputProcessor.ts +0 -108
  1017. package/src/mapper/relations/ManyHasOneInputProcessor.ts +0 -158
  1018. package/src/mapper/relations/OneHasManyInputProcessor.ts +0 -101
  1019. package/src/mapper/relations/OneHasOneInverseCreateInputProcessor.ts +0 -99
  1020. package/src/mapper/relations/OneHasOneInverseUpdateInputProcessor.ts +0 -164
  1021. package/src/mapper/relations/OneHasOneOwningCreateInputProcessor.ts +0 -92
  1022. package/src/mapper/relations/OneHasOneOwningUpdateInputProcessor.ts +0 -253
@@ -1 +1 @@
1
- {"version":3,"file":"JunctionTableManager.cjs","sources":["../../../../../packages/engine-content-api/src/mapper/JunctionTableManager.ts"],"sourcesContent":["import { getEntity } from '@contember/schema-utils'\nimport { PathFactory, WhereBuilder } from './select'\nimport { PredicateFactory } from '../acl'\nimport {\n\tClient,\n\tConflictActionType,\n\tDeleteBuilder,\n\tInsertBuilder,\n\tLiteral,\n\tOperator,\n\tSelectBuilder,\n} from '@contember/database'\nimport { Acl, Input, Model } from '@contember/schema'\nimport {\n\tMutationJunctionUpdateOk,\n\tMutationNoResultError,\n\tMutationNothingToDo,\n\tMutationResultList,\n\tMutationResultType,\n\tNothingToDoReason,\n} from './Result'\nimport { ImplementationException } from '../exception'\nimport { AfterJunctionUpdateEvent, BeforeJunctionUpdateEvent } from './EventManager'\nimport { Mapper } from './Mapper'\n\ntype OkResultFactory = () => MutationJunctionUpdateOk\n\ntype JunctionMutationResult =\n\t| MutationJunctionUpdateOk\n\t| MutationNothingToDo\n\t| MutationNoResultError\n\nexport class JunctionTableManager {\n\tconstructor(\n\t\tprivate readonly schema: Model.Schema,\n\t\tprivate readonly predicateFactory: PredicateFactory,\n\t\tprivate readonly whereBuilder: WhereBuilder,\n\t\tprivate readonly connectJunctionHandler: JunctionConnectHandler,\n\t\tprivate readonly disconnectJunctionHandler: JunctionDisconnectHandler,\n\t\tprivate readonly pathFactory: PathFactory,\n\t) {}\n\n\tpublic async connectJunction(\n\t\tmapper: Mapper,\n\t\towningEntity: Model.Entity,\n\t\trelation: Model.ManyHasManyOwningRelation,\n\t\towningUnique: Input.PrimaryValue,\n\t\tinverseUnique: Input.PrimaryValue,\n\t): Promise<MutationResultList> {\n\t\tconst beforeEvent = new BeforeJunctionUpdateEvent(owningEntity, relation, owningUnique, inverseUnique, 'connect')\n\t\tawait mapper.eventManager.fire(beforeEvent)\n\t\tconst result = await this.executeJunctionModification(\n\t\t\tmapper.db,\n\t\t\towningEntity,\n\t\t\trelation,\n\t\t\towningUnique,\n\t\t\tinverseUnique,\n\t\t\tthis.connectJunctionHandler,\n\t\t)\n\t\tif (result.result !== MutationResultType.noResultError) {\n\t\t\tconst afterEvent = new AfterJunctionUpdateEvent(owningEntity, relation, owningUnique, inverseUnique, 'connect', result.result === MutationResultType.ok)\n\t\t\tawait mapper.eventManager.fire(afterEvent)\n\t\t}\n\t\treturn [result]\n\t}\n\n\tpublic async disconnectJunction(\n\t\tmapper: Mapper,\n\t\towningEntity: Model.Entity,\n\t\trelation: Model.ManyHasManyOwningRelation,\n\t\towningUnique: Input.PrimaryValue,\n\t\tinverseUnique: Input.PrimaryValue,\n\t): Promise<MutationResultList> {\n\t\tconst beforeEvent = new BeforeJunctionUpdateEvent(owningEntity, relation, owningUnique, inverseUnique, 'connect')\n\t\tawait mapper.eventManager.fire(beforeEvent)\n\t\tconst result = await this.executeJunctionModification(\n\t\t\tmapper.db,\n\t\t\towningEntity,\n\t\t\trelation,\n\t\t\towningUnique,\n\t\t\tinverseUnique,\n\t\t\tthis.disconnectJunctionHandler,\n\t\t)\n\t\tif (result.result !== MutationResultType.noResultError) {\n\t\t\tconst afterEvent = new AfterJunctionUpdateEvent(owningEntity, relation, owningUnique, inverseUnique, 'disconnect', result.result === MutationResultType.ok)\n\t\t\tbeforeEvent.afterEvent = afterEvent\n\t\t\tawait mapper.eventManager.fire(afterEvent)\n\t\t}\n\t\treturn [result]\n\t}\n\n\n\tprivate async executeJunctionModification(\n\t\tdb: Client,\n\t\towningEntity: Model.Entity,\n\t\trelation: Model.ManyHasManyOwningRelation,\n\t\towningPrimary: Input.PrimaryValue,\n\t\tinversePrimary: Input.PrimaryValue,\n\t\thandler: JunctionHandler,\n\t): Promise<JunctionMutationResult> {\n\t\tconst joiningTable = relation.joiningTable\n\t\tconst inverseEntity = getEntity(this.schema, relation.target)\n\t\tif (inverseEntity.view || owningEntity.view) {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\n\t\tconst owningPredicate = this.predicateFactory.create(owningEntity, Acl.Operation.update, [relation.name])\n\t\tlet inversePredicate: Input.OptionalWhere = {}\n\t\tif (relation.inversedBy) {\n\t\t\tinversePredicate = this.predicateFactory.create(inverseEntity, Acl.Operation.update, [relation.inversedBy])\n\t\t}\n\n\t\tconst hasNoPredicates = Object.keys(owningPredicate).length === 0 && Object.keys(inversePredicate).length === 0\n\n\t\tconst okResultFactory = () =>\n\t\t\tnew MutationJunctionUpdateOk([], owningEntity, relation, owningPrimary, inversePrimary)\n\t\tif (hasNoPredicates) {\n\t\t\treturn await handler.executeSimple({ db, joiningTable, owningPrimary, inversePrimary, okResultFactory })\n\t\t} else {\n\t\t\tconst owningWhere: Input.OptionalWhere = {\n\t\t\t\tand: [owningPredicate, { [owningEntity.primary]: { eq: owningPrimary } }],\n\t\t\t}\n\n\t\t\tconst inverseWhere: Input.OptionalWhere = {\n\t\t\t\tand: [inversePredicate, { [inverseEntity.primary]: { eq: inversePrimary } }],\n\t\t\t}\n\n\t\t\tconst dataCallback: SelectBuilder.Callback = qb => {\n\t\t\t\tqb = qb\n\t\t\t\t\t.select(expr => expr.select(['owning', owningEntity.primaryColumn]), joiningTable.joiningColumn.columnName)\n\t\t\t\t\t.select(\n\t\t\t\t\t\texpr => expr.select(['inverse', inverseEntity.primaryColumn]),\n\t\t\t\t\t\tjoiningTable.inverseJoiningColumn.columnName,\n\t\t\t\t\t)\n\t\t\t\t\t.select(expr => expr.raw('true'), 'selected')\n\t\t\t\t\t.from(new Literal('(values (null))'), 't')\n\n\t\t\t\t\t.join(owningEntity.tableName, 'owning', condition => condition.raw('true'))\n\t\t\t\t\t.join(inverseEntity.tableName, 'inverse', condition => condition.raw('true'))\n\t\t\t\tqb = this.whereBuilder.build(qb, owningEntity, this.pathFactory.create([], 'owning'), owningWhere)\n\t\t\t\tqb = this.whereBuilder.build(qb, inverseEntity, this.pathFactory.create([], 'inverse'), inverseWhere)\n\t\t\t\treturn qb\n\t\t\t}\n\n\t\t\treturn await handler.executeComplex({ db, joiningTable, dataCallback, okResultFactory })\n\t\t}\n\t}\n}\n\ninterface JunctionSimpleExecutionArgs {\n\tdb: Client\n\tjoiningTable: Model.JoiningTable\n\towningPrimary: Input.PrimaryValue\n\tinversePrimary: Input.PrimaryValue\n\tokResultFactory: OkResultFactory\n}\n\ninterface JunctionComplexExecutionArgs {\n\tdb: Client\n\tjoiningTable: Model.JoiningTable\n\tdataCallback: SelectBuilder.Callback\n\tokResultFactory: OkResultFactory\n}\n\ninterface JunctionHandler {\n\texecuteSimple(args: JunctionSimpleExecutionArgs): Promise<JunctionMutationResult>\n\n\texecuteComplex(args: JunctionComplexExecutionArgs): Promise<JunctionMutationResult>\n}\n\nexport class JunctionConnectHandler implements JunctionHandler {\n\tasync executeSimple({\n\t\tdb,\n\t\tjoiningTable,\n\t\towningPrimary,\n\t\tinversePrimary,\n\t\tokResultFactory,\n\t}: JunctionSimpleExecutionArgs): Promise<JunctionMutationResult> {\n\t\tconst result = await InsertBuilder.create()\n\t\t\t.into(joiningTable.tableName)\n\t\t\t.values({\n\t\t\t\t[joiningTable.joiningColumn.columnName]: expr => expr.selectValue(owningPrimary),\n\t\t\t\t[joiningTable.inverseJoiningColumn.columnName]: expr => expr.selectValue(inversePrimary),\n\t\t\t})\n\t\t\t.onConflict(ConflictActionType.doNothing)\n\t\t\t.execute(db)\n\t\tif (result === 0) {\n\t\t\treturn new MutationNothingToDo([], NothingToDoReason.alreadyExists)\n\t\t}\n\t\treturn okResultFactory()\n\t}\n\n\tasync executeComplex({\n\t\tdb,\n\t\tjoiningTable,\n\t\tdataCallback,\n\t\tokResultFactory,\n\t}: JunctionComplexExecutionArgs): Promise<JunctionMutationResult> {\n\t\tconst insert = InsertBuilder.create()\n\t\t\t.into(joiningTable.tableName)\n\t\t\t.values({\n\t\t\t\t[joiningTable.joiningColumn.columnName]: expr => expr.select(['data', joiningTable.joiningColumn.columnName]),\n\t\t\t\t[joiningTable.inverseJoiningColumn.columnName]: expr =>\n\t\t\t\t\texpr.select(['data', joiningTable.inverseJoiningColumn.columnName]),\n\t\t\t})\n\t\t\t.returning(new Literal('true as inserted'))\n\t\t\t.from(qb => qb.from('data'))\n\t\t\t.onConflict(ConflictActionType.doNothing)\n\n\t\tconst qb = SelectBuilder.create()\n\t\t\t.with('data', dataCallback)\n\t\t\t.with('insert', insert)\n\t\t\t.from(new Literal('(values (null))'), 't')\n\t\t\t.leftJoin('data', 'data', condition => condition.raw('true'))\n\t\t\t.leftJoin('insert', 'insert', condition => condition.raw('true'))\n\t\t\t.select(expr => expr.raw('coalesce(data.selected, false)'), 'selected')\n\t\t\t.select(expr => expr.raw('coalesce(insert.inserted, false)'), 'inserted')\n\n\t\tconst result = await qb.getResult(db)\n\t\tif (result[0]['selected'] === false) {\n\t\t\treturn new MutationNoResultError([])\n\t\t}\n\t\tif (result[0]['inserted'] === false) {\n\t\t\treturn new MutationNothingToDo([], NothingToDoReason.alreadyExists)\n\t\t}\n\t\treturn okResultFactory()\n\t}\n}\n\nexport class JunctionDisconnectHandler implements JunctionHandler {\n\tpublic async executeSimple({\n\t\tdb,\n\t\tjoiningTable,\n\t\towningPrimary,\n\t\tinversePrimary,\n\t\tokResultFactory,\n\t}: JunctionSimpleExecutionArgs): Promise<JunctionMutationResult> {\n\t\tconst qb = DeleteBuilder.create()\n\t\t\t.from(joiningTable.tableName)\n\t\t\t.where(cond => cond.compare(joiningTable.joiningColumn.columnName, Operator.eq, owningPrimary))\n\t\t\t.where(cond => cond.compare(joiningTable.inverseJoiningColumn.columnName, Operator.eq, inversePrimary))\n\n\t\tconst result = await qb.execute(db)\n\t\tif (result === 0) {\n\t\t\treturn new MutationNothingToDo([], NothingToDoReason.alreadyExists)\n\t\t}\n\t\treturn okResultFactory()\n\t}\n\n\tpublic async executeComplex({\n\t\tdb,\n\t\tjoiningTable,\n\t\tdataCallback,\n\t\tokResultFactory,\n\t}: JunctionComplexExecutionArgs): Promise<JunctionMutationResult> {\n\t\tconst deleteQb = DeleteBuilder.create()\n\t\t\t.from(joiningTable.tableName)\n\t\t\t.using('data')\n\t\t\t.where(cond => {\n\t\t\t\tcond = cond.compareColumns([joiningTable.tableName, joiningTable.joiningColumn.columnName], Operator.eq, [\n\t\t\t\t\t'data',\n\t\t\t\t\tjoiningTable.joiningColumn.columnName,\n\t\t\t\t])\n\t\t\t\tcond = cond.compareColumns(\n\t\t\t\t\t[joiningTable.tableName, joiningTable.inverseJoiningColumn.columnName],\n\t\t\t\t\tOperator.eq,\n\t\t\t\t\t['data', joiningTable.inverseJoiningColumn.columnName],\n\t\t\t\t)\n\t\t\t\treturn cond\n\t\t\t})\n\t\t\t.returning(new Literal('true as deleted'))\n\n\t\tconst qb = SelectBuilder.create()\n\t\t\t.with('data', dataCallback)\n\t\t\t.with('delete', deleteQb)\n\t\t\t.from(new Literal('(values (null))'), 't')\n\t\t\t.leftJoin('data', 'data', condition => condition.raw('true'))\n\t\t\t.leftJoin('delete', 'delete', condition => condition.raw('true'))\n\t\t\t.select(expr => expr.raw('coalesce(data.selected, false)'), 'selected')\n\t\t\t.select(expr => expr.raw('coalesce(delete.deleted, false)'), 'deleted')\n\n\t\tconst result = await qb.getResult(db)\n\t\tif (result[0]['selected'] === false) {\n\t\t\treturn new MutationNoResultError([])\n\t\t}\n\t\tif (result[0]['inserted'] === false) {\n\t\t\treturn new MutationNothingToDo([], NothingToDoReason.alreadyExists)\n\t\t}\n\t\treturn okResultFactory()\n\t}\n}\n"],"names":["schema","BeforeJunctionUpdateEvent","MutationResultType","AfterJunctionUpdateEvent","getEntity","ImplementationException","Acl","MutationJunctionUpdateOk","Literal","InsertBuilder","ConflictActionType","MutationNothingToDo","NothingToDoReason","qb","SelectBuilder","MutationNoResultError","DeleteBuilder","Operator"],"mappings":"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"}
1
+ {"version":3,"file":"JunctionTableManager.cjs","sources":["../../../../../packages/engine-content-api/src/mapper/JunctionTableManager.ts"],"sourcesContent":["import { getEntity } from '@contember/schema-utils'\nimport { PathFactory, WhereBuilder } from './select'\nimport { PredicateFactory } from '../acl'\nimport {\n\tClient,\n\tConflictActionType,\n\tDeleteBuilder,\n\tInsertBuilder,\n\tLiteral,\n\tOperator,\n\tSelectBuilder,\n} from '@contember/database'\nimport { Acl, Input, Model } from '@contember/schema'\nimport {\n\tMutationJunctionUpdateOk,\n\tMutationNoResultError,\n\tMutationNothingToDo,\n\tMutationResultList,\n\tMutationResultType,\n\tNothingToDoReason,\n} from './Result'\nimport { ImplementationException } from '../exception'\nimport { AfterJunctionUpdateEvent, BeforeJunctionUpdateEvent } from './EventManager'\nimport { Mapper } from './Mapper'\n\ntype OkResultFactory = () => MutationJunctionUpdateOk\n\ntype JunctionMutationResult =\n\t| MutationJunctionUpdateOk\n\t| MutationNothingToDo\n\t| MutationNoResultError\n\nexport class JunctionTableManager {\n\tconstructor(\n\t\tprivate readonly schema: Model.Schema,\n\t\tprivate readonly predicateFactory: PredicateFactory,\n\t\tprivate readonly whereBuilder: WhereBuilder,\n\t\tprivate readonly connectJunctionHandler: JunctionConnectHandler,\n\t\tprivate readonly disconnectJunctionHandler: JunctionDisconnectHandler,\n\t\tprivate readonly pathFactory: PathFactory,\n\t) {}\n\n\tpublic async connectJunction(\n\t\tmapper: Mapper,\n\t\towningEntity: Model.Entity,\n\t\trelation: Model.ManyHasManyOwningRelation,\n\t\towningUnique: Input.PrimaryValue,\n\t\tinverseUnique: Input.PrimaryValue,\n\t): Promise<MutationResultList> {\n\t\tconst beforeEvent = new BeforeJunctionUpdateEvent(owningEntity, relation, owningUnique, inverseUnique, 'connect')\n\t\tawait mapper.eventManager.fire(beforeEvent)\n\t\tconst result = await this.executeJunctionModification(\n\t\t\tmapper.db,\n\t\t\towningEntity,\n\t\t\trelation,\n\t\t\towningUnique,\n\t\t\tinverseUnique,\n\t\t\tthis.connectJunctionHandler,\n\t\t)\n\t\tif (result.result !== MutationResultType.noResultError) {\n\t\t\tconst afterEvent = new AfterJunctionUpdateEvent(owningEntity, relation, owningUnique, inverseUnique, 'connect', result.result === MutationResultType.ok)\n\t\t\tawait mapper.eventManager.fire(afterEvent)\n\t\t}\n\t\treturn [result]\n\t}\n\n\tpublic async disconnectJunction(\n\t\tmapper: Mapper,\n\t\towningEntity: Model.Entity,\n\t\trelation: Model.ManyHasManyOwningRelation,\n\t\towningUnique: Input.PrimaryValue,\n\t\tinverseUnique: Input.PrimaryValue,\n\t): Promise<MutationResultList> {\n\t\tconst beforeEvent = new BeforeJunctionUpdateEvent(owningEntity, relation, owningUnique, inverseUnique, 'connect')\n\t\tawait mapper.eventManager.fire(beforeEvent)\n\t\tconst result = await this.executeJunctionModification(\n\t\t\tmapper.db,\n\t\t\towningEntity,\n\t\t\trelation,\n\t\t\towningUnique,\n\t\t\tinverseUnique,\n\t\t\tthis.disconnectJunctionHandler,\n\t\t)\n\t\tif (result.result !== MutationResultType.noResultError) {\n\t\t\tconst afterEvent = new AfterJunctionUpdateEvent(owningEntity, relation, owningUnique, inverseUnique, 'disconnect', result.result === MutationResultType.ok)\n\t\t\tbeforeEvent.afterEvent = afterEvent\n\t\t\tawait mapper.eventManager.fire(afterEvent)\n\t\t}\n\t\treturn [result]\n\t}\n\n\n\tprivate async executeJunctionModification(\n\t\tdb: Client,\n\t\towningEntity: Model.Entity,\n\t\trelation: Model.ManyHasManyOwningRelation,\n\t\towningPrimary: Input.PrimaryValue,\n\t\tinversePrimary: Input.PrimaryValue,\n\t\thandler: JunctionHandler,\n\t): Promise<JunctionMutationResult> {\n\t\tconst joiningTable = relation.joiningTable\n\t\tconst inverseEntity = getEntity(this.schema, relation.target)\n\t\tif (inverseEntity.view || owningEntity.view) {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\n\t\tconst owningPredicate = this.predicateFactory.create(owningEntity, Acl.Operation.update, [relation.name])\n\t\tlet inversePredicate: Input.OptionalWhere = {}\n\t\tif (relation.inversedBy) {\n\t\t\tinversePredicate = this.predicateFactory.create(inverseEntity, Acl.Operation.update, [relation.inversedBy])\n\t\t}\n\n\t\tconst hasNoPredicates = Object.keys(owningPredicate).length === 0 && Object.keys(inversePredicate).length === 0\n\n\t\tconst okResultFactory = () =>\n\t\t\tnew MutationJunctionUpdateOk([], owningEntity, relation, owningPrimary, inversePrimary)\n\t\tif (hasNoPredicates) {\n\t\t\treturn await handler.executeSimple({ db, joiningTable, owningPrimary, inversePrimary, okResultFactory })\n\t\t} else {\n\t\t\tconst owningWhere: Input.OptionalWhere = {\n\t\t\t\tand: [owningPredicate, { [owningEntity.primary]: { eq: owningPrimary } }],\n\t\t\t}\n\n\t\t\tconst inverseWhere: Input.OptionalWhere = {\n\t\t\t\tand: [inversePredicate, { [inverseEntity.primary]: { eq: inversePrimary } }],\n\t\t\t}\n\n\t\t\tconst dataCallback: SelectBuilder.Callback = qb => {\n\t\t\t\tqb = qb\n\t\t\t\t\t.select(expr => expr.select(['owning', owningEntity.primaryColumn]), joiningTable.joiningColumn.columnName)\n\t\t\t\t\t.select(\n\t\t\t\t\t\texpr => expr.select(['inverse', inverseEntity.primaryColumn]),\n\t\t\t\t\t\tjoiningTable.inverseJoiningColumn.columnName,\n\t\t\t\t\t)\n\t\t\t\t\t.select(expr => expr.raw('true'), 'selected')\n\t\t\t\t\t.from(new Literal('(values (null))'), 't')\n\n\t\t\t\t\t.join(owningEntity.tableName, 'owning', condition => condition.raw('true'))\n\t\t\t\t\t.join(inverseEntity.tableName, 'inverse', condition => condition.raw('true'))\n\t\t\t\tqb = this.whereBuilder.build(qb, owningEntity, this.pathFactory.create([], 'owning'), owningWhere)\n\t\t\t\tqb = this.whereBuilder.build(qb, inverseEntity, this.pathFactory.create([], 'inverse'), inverseWhere)\n\t\t\t\treturn qb\n\t\t\t}\n\n\t\t\treturn await handler.executeComplex({ db, joiningTable, dataCallback, okResultFactory })\n\t\t}\n\t}\n}\n\ninterface JunctionSimpleExecutionArgs {\n\tdb: Client\n\tjoiningTable: Model.JoiningTable\n\towningPrimary: Input.PrimaryValue\n\tinversePrimary: Input.PrimaryValue\n\tokResultFactory: OkResultFactory\n}\n\ninterface JunctionComplexExecutionArgs {\n\tdb: Client\n\tjoiningTable: Model.JoiningTable\n\tdataCallback: SelectBuilder.Callback\n\tokResultFactory: OkResultFactory\n}\n\ninterface JunctionHandler {\n\texecuteSimple(args: JunctionSimpleExecutionArgs): Promise<JunctionMutationResult>\n\n\texecuteComplex(args: JunctionComplexExecutionArgs): Promise<JunctionMutationResult>\n}\n\nexport class JunctionConnectHandler implements JunctionHandler {\n\tasync executeSimple({\n\t\tdb,\n\t\tjoiningTable,\n\t\towningPrimary,\n\t\tinversePrimary,\n\t\tokResultFactory,\n\t}: JunctionSimpleExecutionArgs): Promise<JunctionMutationResult> {\n\t\tconst result = await InsertBuilder.create()\n\t\t\t.into(joiningTable.tableName)\n\t\t\t.values({\n\t\t\t\t[joiningTable.joiningColumn.columnName]: expr => expr.selectValue(owningPrimary),\n\t\t\t\t[joiningTable.inverseJoiningColumn.columnName]: expr => expr.selectValue(inversePrimary),\n\t\t\t})\n\t\t\t.onConflict(ConflictActionType.doNothing)\n\t\t\t.execute(db)\n\t\tif (result === 0) {\n\t\t\treturn new MutationNothingToDo([], NothingToDoReason.alreadyExists)\n\t\t}\n\t\treturn okResultFactory()\n\t}\n\n\tasync executeComplex({\n\t\tdb,\n\t\tjoiningTable,\n\t\tdataCallback,\n\t\tokResultFactory,\n\t}: JunctionComplexExecutionArgs): Promise<JunctionMutationResult> {\n\t\tconst insert = InsertBuilder.create()\n\t\t\t.into(joiningTable.tableName)\n\t\t\t.values({\n\t\t\t\t[joiningTable.joiningColumn.columnName]: expr => expr.select(['data', joiningTable.joiningColumn.columnName]),\n\t\t\t\t[joiningTable.inverseJoiningColumn.columnName]: expr =>\n\t\t\t\t\texpr.select(['data', joiningTable.inverseJoiningColumn.columnName]),\n\t\t\t})\n\t\t\t.returning(new Literal('true as inserted'))\n\t\t\t.from(qb => qb.from('data'))\n\t\t\t.onConflict(ConflictActionType.doNothing)\n\n\t\tconst qb = SelectBuilder.create()\n\t\t\t.with('data', dataCallback)\n\t\t\t.with('insert', insert)\n\t\t\t.from(new Literal('(values (null))'), 't')\n\t\t\t.leftJoin('data', 'data', condition => condition.raw('true'))\n\t\t\t.leftJoin('insert', 'insert', condition => condition.raw('true'))\n\t\t\t.select(expr => expr.raw('coalesce(data.selected, false)'), 'selected')\n\t\t\t.select(expr => expr.raw('coalesce(insert.inserted, false)'), 'inserted')\n\n\t\tconst result = await qb.getResult(db)\n\t\tif (result[0]['selected'] === false) {\n\t\t\treturn new MutationNoResultError([])\n\t\t}\n\t\tif (result[0]['inserted'] === false) {\n\t\t\treturn new MutationNothingToDo([], NothingToDoReason.alreadyExists)\n\t\t}\n\t\treturn okResultFactory()\n\t}\n}\n\nexport class JunctionDisconnectHandler implements JunctionHandler {\n\tpublic async executeSimple({\n\t\tdb,\n\t\tjoiningTable,\n\t\towningPrimary,\n\t\tinversePrimary,\n\t\tokResultFactory,\n\t}: JunctionSimpleExecutionArgs): Promise<JunctionMutationResult> {\n\t\tconst qb = DeleteBuilder.create()\n\t\t\t.from(joiningTable.tableName)\n\t\t\t.where(cond => cond.compare(joiningTable.joiningColumn.columnName, Operator.eq, owningPrimary))\n\t\t\t.where(cond => cond.compare(joiningTable.inverseJoiningColumn.columnName, Operator.eq, inversePrimary))\n\n\t\tconst result = await qb.execute(db)\n\t\tif (result === 0) {\n\t\t\treturn new MutationNothingToDo([], NothingToDoReason.alreadyExists)\n\t\t}\n\t\treturn okResultFactory()\n\t}\n\n\tpublic async executeComplex({\n\t\tdb,\n\t\tjoiningTable,\n\t\tdataCallback,\n\t\tokResultFactory,\n\t}: JunctionComplexExecutionArgs): Promise<JunctionMutationResult> {\n\t\tconst deleteQb = DeleteBuilder.create()\n\t\t\t.from(joiningTable.tableName)\n\t\t\t.using('data')\n\t\t\t.where(cond => {\n\t\t\t\tcond = cond.compareColumns([joiningTable.tableName, joiningTable.joiningColumn.columnName], Operator.eq, [\n\t\t\t\t\t'data',\n\t\t\t\t\tjoiningTable.joiningColumn.columnName,\n\t\t\t\t])\n\t\t\t\tcond = cond.compareColumns(\n\t\t\t\t\t[joiningTable.tableName, joiningTable.inverseJoiningColumn.columnName],\n\t\t\t\t\tOperator.eq,\n\t\t\t\t\t['data', joiningTable.inverseJoiningColumn.columnName],\n\t\t\t\t)\n\t\t\t\treturn cond\n\t\t\t})\n\t\t\t.returning(new Literal('true as deleted'))\n\n\t\tconst qb = SelectBuilder.create()\n\t\t\t.with('data', dataCallback)\n\t\t\t.with('delete', deleteQb)\n\t\t\t.from(new Literal('(values (null))'), 't')\n\t\t\t.leftJoin('data', 'data', condition => condition.raw('true'))\n\t\t\t.leftJoin('delete', 'delete', condition => condition.raw('true'))\n\t\t\t.select(expr => expr.raw('coalesce(data.selected, false)'), 'selected')\n\t\t\t.select(expr => expr.raw('coalesce(delete.deleted, false)'), 'deleted')\n\n\t\tconst result = await qb.getResult(db)\n\t\tif (result[0]['selected'] === false) {\n\t\t\treturn new MutationNoResultError([])\n\t\t}\n\t\tif (result[0]['inserted'] === false) {\n\t\t\treturn new MutationNothingToDo([], NothingToDoReason.alreadyExists)\n\t\t}\n\t\treturn okResultFactory()\n\t}\n}\n"],"names":["schema","BeforeJunctionUpdateEvent","MutationResultType","AfterJunctionUpdateEvent","getEntity","ImplementationException","Acl","MutationJunctionUpdateOk","Literal","InsertBuilder","ConflictActionType","MutationNothingToDo","NothingToDoReason","qb","SelectBuilder","MutationNoResultError","DeleteBuilder","Operator"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"JunctionTableManager.js","sources":["../../../../../packages/engine-content-api/src/mapper/JunctionTableManager.ts"],"sourcesContent":["import { getEntity } from '@contember/schema-utils'\nimport { PathFactory, WhereBuilder } from './select'\nimport { PredicateFactory } from '../acl'\nimport {\n\tClient,\n\tConflictActionType,\n\tDeleteBuilder,\n\tInsertBuilder,\n\tLiteral,\n\tOperator,\n\tSelectBuilder,\n} from '@contember/database'\nimport { Acl, Input, Model } from '@contember/schema'\nimport {\n\tMutationJunctionUpdateOk,\n\tMutationNoResultError,\n\tMutationNothingToDo,\n\tMutationResultList,\n\tMutationResultType,\n\tNothingToDoReason,\n} from './Result'\nimport { ImplementationException } from '../exception'\nimport { AfterJunctionUpdateEvent, BeforeJunctionUpdateEvent } from './EventManager'\nimport { Mapper } from './Mapper'\n\ntype OkResultFactory = () => MutationJunctionUpdateOk\n\ntype JunctionMutationResult =\n\t| MutationJunctionUpdateOk\n\t| MutationNothingToDo\n\t| MutationNoResultError\n\nexport class JunctionTableManager {\n\tconstructor(\n\t\tprivate readonly schema: Model.Schema,\n\t\tprivate readonly predicateFactory: PredicateFactory,\n\t\tprivate readonly whereBuilder: WhereBuilder,\n\t\tprivate readonly connectJunctionHandler: JunctionConnectHandler,\n\t\tprivate readonly disconnectJunctionHandler: JunctionDisconnectHandler,\n\t\tprivate readonly pathFactory: PathFactory,\n\t) {}\n\n\tpublic async connectJunction(\n\t\tmapper: Mapper,\n\t\towningEntity: Model.Entity,\n\t\trelation: Model.ManyHasManyOwningRelation,\n\t\towningUnique: Input.PrimaryValue,\n\t\tinverseUnique: Input.PrimaryValue,\n\t): Promise<MutationResultList> {\n\t\tconst beforeEvent = new BeforeJunctionUpdateEvent(owningEntity, relation, owningUnique, inverseUnique, 'connect')\n\t\tawait mapper.eventManager.fire(beforeEvent)\n\t\tconst result = await this.executeJunctionModification(\n\t\t\tmapper.db,\n\t\t\towningEntity,\n\t\t\trelation,\n\t\t\towningUnique,\n\t\t\tinverseUnique,\n\t\t\tthis.connectJunctionHandler,\n\t\t)\n\t\tif (result.result !== MutationResultType.noResultError) {\n\t\t\tconst afterEvent = new AfterJunctionUpdateEvent(owningEntity, relation, owningUnique, inverseUnique, 'connect', result.result === MutationResultType.ok)\n\t\t\tawait mapper.eventManager.fire(afterEvent)\n\t\t}\n\t\treturn [result]\n\t}\n\n\tpublic async disconnectJunction(\n\t\tmapper: Mapper,\n\t\towningEntity: Model.Entity,\n\t\trelation: Model.ManyHasManyOwningRelation,\n\t\towningUnique: Input.PrimaryValue,\n\t\tinverseUnique: Input.PrimaryValue,\n\t): Promise<MutationResultList> {\n\t\tconst beforeEvent = new BeforeJunctionUpdateEvent(owningEntity, relation, owningUnique, inverseUnique, 'connect')\n\t\tawait mapper.eventManager.fire(beforeEvent)\n\t\tconst result = await this.executeJunctionModification(\n\t\t\tmapper.db,\n\t\t\towningEntity,\n\t\t\trelation,\n\t\t\towningUnique,\n\t\t\tinverseUnique,\n\t\t\tthis.disconnectJunctionHandler,\n\t\t)\n\t\tif (result.result !== MutationResultType.noResultError) {\n\t\t\tconst afterEvent = new AfterJunctionUpdateEvent(owningEntity, relation, owningUnique, inverseUnique, 'disconnect', result.result === MutationResultType.ok)\n\t\t\tbeforeEvent.afterEvent = afterEvent\n\t\t\tawait mapper.eventManager.fire(afterEvent)\n\t\t}\n\t\treturn [result]\n\t}\n\n\n\tprivate async executeJunctionModification(\n\t\tdb: Client,\n\t\towningEntity: Model.Entity,\n\t\trelation: Model.ManyHasManyOwningRelation,\n\t\towningPrimary: Input.PrimaryValue,\n\t\tinversePrimary: Input.PrimaryValue,\n\t\thandler: JunctionHandler,\n\t): Promise<JunctionMutationResult> {\n\t\tconst joiningTable = relation.joiningTable\n\t\tconst inverseEntity = getEntity(this.schema, relation.target)\n\t\tif (inverseEntity.view || owningEntity.view) {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\n\t\tconst owningPredicate = this.predicateFactory.create(owningEntity, Acl.Operation.update, [relation.name])\n\t\tlet inversePredicate: Input.OptionalWhere = {}\n\t\tif (relation.inversedBy) {\n\t\t\tinversePredicate = this.predicateFactory.create(inverseEntity, Acl.Operation.update, [relation.inversedBy])\n\t\t}\n\n\t\tconst hasNoPredicates = Object.keys(owningPredicate).length === 0 && Object.keys(inversePredicate).length === 0\n\n\t\tconst okResultFactory = () =>\n\t\t\tnew MutationJunctionUpdateOk([], owningEntity, relation, owningPrimary, inversePrimary)\n\t\tif (hasNoPredicates) {\n\t\t\treturn await handler.executeSimple({ db, joiningTable, owningPrimary, inversePrimary, okResultFactory })\n\t\t} else {\n\t\t\tconst owningWhere: Input.OptionalWhere = {\n\t\t\t\tand: [owningPredicate, { [owningEntity.primary]: { eq: owningPrimary } }],\n\t\t\t}\n\n\t\t\tconst inverseWhere: Input.OptionalWhere = {\n\t\t\t\tand: [inversePredicate, { [inverseEntity.primary]: { eq: inversePrimary } }],\n\t\t\t}\n\n\t\t\tconst dataCallback: SelectBuilder.Callback = qb => {\n\t\t\t\tqb = qb\n\t\t\t\t\t.select(expr => expr.select(['owning', owningEntity.primaryColumn]), joiningTable.joiningColumn.columnName)\n\t\t\t\t\t.select(\n\t\t\t\t\t\texpr => expr.select(['inverse', inverseEntity.primaryColumn]),\n\t\t\t\t\t\tjoiningTable.inverseJoiningColumn.columnName,\n\t\t\t\t\t)\n\t\t\t\t\t.select(expr => expr.raw('true'), 'selected')\n\t\t\t\t\t.from(new Literal('(values (null))'), 't')\n\n\t\t\t\t\t.join(owningEntity.tableName, 'owning', condition => condition.raw('true'))\n\t\t\t\t\t.join(inverseEntity.tableName, 'inverse', condition => condition.raw('true'))\n\t\t\t\tqb = this.whereBuilder.build(qb, owningEntity, this.pathFactory.create([], 'owning'), owningWhere)\n\t\t\t\tqb = this.whereBuilder.build(qb, inverseEntity, this.pathFactory.create([], 'inverse'), inverseWhere)\n\t\t\t\treturn qb\n\t\t\t}\n\n\t\t\treturn await handler.executeComplex({ db, joiningTable, dataCallback, okResultFactory })\n\t\t}\n\t}\n}\n\ninterface JunctionSimpleExecutionArgs {\n\tdb: Client\n\tjoiningTable: Model.JoiningTable\n\towningPrimary: Input.PrimaryValue\n\tinversePrimary: Input.PrimaryValue\n\tokResultFactory: OkResultFactory\n}\n\ninterface JunctionComplexExecutionArgs {\n\tdb: Client\n\tjoiningTable: Model.JoiningTable\n\tdataCallback: SelectBuilder.Callback\n\tokResultFactory: OkResultFactory\n}\n\ninterface JunctionHandler {\n\texecuteSimple(args: JunctionSimpleExecutionArgs): Promise<JunctionMutationResult>\n\n\texecuteComplex(args: JunctionComplexExecutionArgs): Promise<JunctionMutationResult>\n}\n\nexport class JunctionConnectHandler implements JunctionHandler {\n\tasync executeSimple({\n\t\tdb,\n\t\tjoiningTable,\n\t\towningPrimary,\n\t\tinversePrimary,\n\t\tokResultFactory,\n\t}: JunctionSimpleExecutionArgs): Promise<JunctionMutationResult> {\n\t\tconst result = await InsertBuilder.create()\n\t\t\t.into(joiningTable.tableName)\n\t\t\t.values({\n\t\t\t\t[joiningTable.joiningColumn.columnName]: expr => expr.selectValue(owningPrimary),\n\t\t\t\t[joiningTable.inverseJoiningColumn.columnName]: expr => expr.selectValue(inversePrimary),\n\t\t\t})\n\t\t\t.onConflict(ConflictActionType.doNothing)\n\t\t\t.execute(db)\n\t\tif (result === 0) {\n\t\t\treturn new MutationNothingToDo([], NothingToDoReason.alreadyExists)\n\t\t}\n\t\treturn okResultFactory()\n\t}\n\n\tasync executeComplex({\n\t\tdb,\n\t\tjoiningTable,\n\t\tdataCallback,\n\t\tokResultFactory,\n\t}: JunctionComplexExecutionArgs): Promise<JunctionMutationResult> {\n\t\tconst insert = InsertBuilder.create()\n\t\t\t.into(joiningTable.tableName)\n\t\t\t.values({\n\t\t\t\t[joiningTable.joiningColumn.columnName]: expr => expr.select(['data', joiningTable.joiningColumn.columnName]),\n\t\t\t\t[joiningTable.inverseJoiningColumn.columnName]: expr =>\n\t\t\t\t\texpr.select(['data', joiningTable.inverseJoiningColumn.columnName]),\n\t\t\t})\n\t\t\t.returning(new Literal('true as inserted'))\n\t\t\t.from(qb => qb.from('data'))\n\t\t\t.onConflict(ConflictActionType.doNothing)\n\n\t\tconst qb = SelectBuilder.create()\n\t\t\t.with('data', dataCallback)\n\t\t\t.with('insert', insert)\n\t\t\t.from(new Literal('(values (null))'), 't')\n\t\t\t.leftJoin('data', 'data', condition => condition.raw('true'))\n\t\t\t.leftJoin('insert', 'insert', condition => condition.raw('true'))\n\t\t\t.select(expr => expr.raw('coalesce(data.selected, false)'), 'selected')\n\t\t\t.select(expr => expr.raw('coalesce(insert.inserted, false)'), 'inserted')\n\n\t\tconst result = await qb.getResult(db)\n\t\tif (result[0]['selected'] === false) {\n\t\t\treturn new MutationNoResultError([])\n\t\t}\n\t\tif (result[0]['inserted'] === false) {\n\t\t\treturn new MutationNothingToDo([], NothingToDoReason.alreadyExists)\n\t\t}\n\t\treturn okResultFactory()\n\t}\n}\n\nexport class JunctionDisconnectHandler implements JunctionHandler {\n\tpublic async executeSimple({\n\t\tdb,\n\t\tjoiningTable,\n\t\towningPrimary,\n\t\tinversePrimary,\n\t\tokResultFactory,\n\t}: JunctionSimpleExecutionArgs): Promise<JunctionMutationResult> {\n\t\tconst qb = DeleteBuilder.create()\n\t\t\t.from(joiningTable.tableName)\n\t\t\t.where(cond => cond.compare(joiningTable.joiningColumn.columnName, Operator.eq, owningPrimary))\n\t\t\t.where(cond => cond.compare(joiningTable.inverseJoiningColumn.columnName, Operator.eq, inversePrimary))\n\n\t\tconst result = await qb.execute(db)\n\t\tif (result === 0) {\n\t\t\treturn new MutationNothingToDo([], NothingToDoReason.alreadyExists)\n\t\t}\n\t\treturn okResultFactory()\n\t}\n\n\tpublic async executeComplex({\n\t\tdb,\n\t\tjoiningTable,\n\t\tdataCallback,\n\t\tokResultFactory,\n\t}: JunctionComplexExecutionArgs): Promise<JunctionMutationResult> {\n\t\tconst deleteQb = DeleteBuilder.create()\n\t\t\t.from(joiningTable.tableName)\n\t\t\t.using('data')\n\t\t\t.where(cond => {\n\t\t\t\tcond = cond.compareColumns([joiningTable.tableName, joiningTable.joiningColumn.columnName], Operator.eq, [\n\t\t\t\t\t'data',\n\t\t\t\t\tjoiningTable.joiningColumn.columnName,\n\t\t\t\t])\n\t\t\t\tcond = cond.compareColumns(\n\t\t\t\t\t[joiningTable.tableName, joiningTable.inverseJoiningColumn.columnName],\n\t\t\t\t\tOperator.eq,\n\t\t\t\t\t['data', joiningTable.inverseJoiningColumn.columnName],\n\t\t\t\t)\n\t\t\t\treturn cond\n\t\t\t})\n\t\t\t.returning(new Literal('true as deleted'))\n\n\t\tconst qb = SelectBuilder.create()\n\t\t\t.with('data', dataCallback)\n\t\t\t.with('delete', deleteQb)\n\t\t\t.from(new Literal('(values (null))'), 't')\n\t\t\t.leftJoin('data', 'data', condition => condition.raw('true'))\n\t\t\t.leftJoin('delete', 'delete', condition => condition.raw('true'))\n\t\t\t.select(expr => expr.raw('coalesce(data.selected, false)'), 'selected')\n\t\t\t.select(expr => expr.raw('coalesce(delete.deleted, false)'), 'deleted')\n\n\t\tconst result = await qb.getResult(db)\n\t\tif (result[0]['selected'] === false) {\n\t\t\treturn new MutationNoResultError([])\n\t\t}\n\t\tif (result[0]['inserted'] === false) {\n\t\t\treturn new MutationNothingToDo([], NothingToDoReason.alreadyExists)\n\t\t}\n\t\treturn okResultFactory()\n\t}\n}\n"],"names":["InsertBuilder","qb"],"mappings":";;;;;;AAgCO,MAAM,qBAAqB;AAAA,EACjC,YACkB,QACA,kBACA,cACA,wBACA,2BACA,aAChB;AANgB,SAAA,SAAA;AACA,SAAA,mBAAA;AACA,SAAA,eAAA;AACA,SAAA,yBAAA;AACA,SAAA,4BAAA;AACA,SAAA,cAAA;AAAA,EACf;AAAA,EAEH,MAAa,gBACZ,QACA,cACA,UACA,cACA,eAC8B;AAC9B,UAAM,cAAc,IAAI,0BAA0B,cAAc,UAAU,cAAc,eAAe,SAAS;AAC1G,UAAA,OAAO,aAAa,KAAK,WAAW;AACpC,UAAA,SAAS,MAAM,KAAK;AAAA,MACzB,OAAO;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,KAAK;AAAA,IAAA;AAEF,QAAA,OAAO,WAAW,mBAAmB,eAAe;AACjD,YAAA,aAAa,IAAI,yBAAyB,cAAc,UAAU,cAAc,eAAe,WAAW,OAAO,WAAW,mBAAmB,EAAE;AACjJ,YAAA,OAAO,aAAa,KAAK,UAAU;AAAA,IAC1C;AACA,WAAO,CAAC,MAAM;AAAA,EACf;AAAA,EAEA,MAAa,mBACZ,QACA,cACA,UACA,cACA,eAC8B;AAC9B,UAAM,cAAc,IAAI,0BAA0B,cAAc,UAAU,cAAc,eAAe,SAAS;AAC1G,UAAA,OAAO,aAAa,KAAK,WAAW;AACpC,UAAA,SAAS,MAAM,KAAK;AAAA,MACzB,OAAO;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,KAAK;AAAA,IAAA;AAEF,QAAA,OAAO,WAAW,mBAAmB,eAAe;AACjD,YAAA,aAAa,IAAI,yBAAyB,cAAc,UAAU,cAAc,eAAe,cAAc,OAAO,WAAW,mBAAmB,EAAE;AAC1J,kBAAY,aAAa;AACnB,YAAA,OAAO,aAAa,KAAK,UAAU;AAAA,IAC1C;AACA,WAAO,CAAC,MAAM;AAAA,EACf;AAAA,EAGA,MAAc,4BACb,IACA,cACA,UACA,eACA,gBACA,SACkC;AAClC,UAAM,eAAe,SAAS;AAC9B,UAAM,gBAAgB,UAAU,KAAK,QAAQ,SAAS,MAAM;AACxD,QAAA,cAAc,QAAQ,aAAa,MAAM;AAC5C,YAAM,IAAI,wBAAwB;AAAA,IACnC;AAEM,UAAA,kBAAkB,KAAK,iBAAiB,OAAO,cAAc,IAAI,UAAU,QAAQ,CAAC,SAAS,IAAI,CAAC;AACxG,QAAI,mBAAwC,CAAA;AAC5C,QAAI,SAAS,YAAY;AACL,yBAAA,KAAK,iBAAiB,OAAO,eAAe,IAAI,UAAU,QAAQ,CAAC,SAAS,UAAU,CAAC;AAAA,IAC3G;AAEM,UAAA,kBAAkB,OAAO,KAAK,eAAe,EAAE,WAAW,KAAK,OAAO,KAAK,gBAAgB,EAAE,WAAW;AAExG,UAAA,kBAAkB,MACvB,IAAI,yBAAyB,CAAA,GAAI,cAAc,UAAU,eAAe,cAAc;AACvF,QAAI,iBAAiB;AACb,aAAA,MAAM,QAAQ,cAAc,EAAE,IAAI,cAAc,eAAe,gBAAgB,gBAAA,CAAiB;AAAA,IAAA,OACjG;AACN,YAAM,cAAmC;AAAA,QACxC,KAAK,CAAC,iBAAiB,EAAE,CAAC,aAAa,OAAO,GAAG,EAAE,IAAI,cAAc,GAAG;AAAA,MAAA;AAGzE,YAAM,eAAoC;AAAA,QACzC,KAAK,CAAC,kBAAkB,EAAE,CAAC,cAAc,OAAO,GAAG,EAAE,IAAI,eAAe,GAAG;AAAA,MAAA;AAG5E,YAAM,eAAuC,CAAM,OAAA;AAClD,aAAK,GACH,OAAO,CAAQ,SAAA,KAAK,OAAO,CAAC,UAAU,aAAa,aAAa,CAAC,GAAG,aAAa,cAAc,UAAU,EACzG;AAAA,UACA,UAAQ,KAAK,OAAO,CAAC,WAAW,cAAc,aAAa,CAAC;AAAA,UAC5D,aAAa,qBAAqB;AAAA,QAAA,EAElC,OAAO,CAAQ,SAAA,KAAK,IAAI,MAAM,GAAG,UAAU,EAC3C,KAAK,IAAI,QAAQ,iBAAiB,GAAG,GAAG,EAExC,KAAK,aAAa,WAAW,UAAU,CAAA,cAAa,UAAU,IAAI,MAAM,CAAC,EACzE,KAAK,cAAc,WAAW,WAAW,CAAA,cAAa,UAAU,IAAI,MAAM,CAAC;AAC7E,aAAK,KAAK,aAAa,MAAM,IAAI,cAAc,KAAK,YAAY,OAAO,CAAA,GAAI,QAAQ,GAAG,WAAW;AACjG,aAAK,KAAK,aAAa,MAAM,IAAI,eAAe,KAAK,YAAY,OAAO,CAAA,GAAI,SAAS,GAAG,YAAY;AAC7F,eAAA;AAAA,MAAA;AAGD,aAAA,MAAM,QAAQ,eAAe,EAAE,IAAI,cAAc,cAAc,iBAAiB;AAAA,IACxF;AAAA,EACD;AACD;AAuBO,MAAM,uBAAkD;AAAA,EAC9D,MAAM,cAAc;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,GACgE;AAC1D,UAAA,SAAS,MAAMA,gBAAc,OAAA,EACjC,KAAK,aAAa,SAAS,EAC3B,OAAO;AAAA,MACP,CAAC,aAAa,cAAc,UAAU,GAAG,CAAQ,SAAA,KAAK,YAAY,aAAa;AAAA,MAC/E,CAAC,aAAa,qBAAqB,UAAU,GAAG,CAAQ,SAAA,KAAK,YAAY,cAAc;AAAA,IAAA,CACvF,EACA,WAAW,mBAAmB,SAAS,EACvC,QAAQ,EAAE;AACZ,QAAI,WAAW,GAAG;AACjB,aAAO,IAAI,oBAAoB,CAAA,GAAI,kBAAkB,aAAa;AAAA,IACnE;AACA,WAAO,gBAAgB;AAAA,EACxB;AAAA,EAEA,MAAM,eAAe;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,GACiE;AAC3D,UAAA,SAASA,gBAAc,OAAO,EAClC,KAAK,aAAa,SAAS,EAC3B,OAAO;AAAA,MACP,CAAC,aAAa,cAAc,UAAU,GAAG,CAAA,SAAQ,KAAK,OAAO,CAAC,QAAQ,aAAa,cAAc,UAAU,CAAC;AAAA,MAC5G,CAAC,aAAa,qBAAqB,UAAU,GAAG,CAAA,SAC/C,KAAK,OAAO,CAAC,QAAQ,aAAa,qBAAqB,UAAU,CAAC;AAAA,IAAA,CACnE,EACA,UAAU,IAAI,QAAQ,kBAAkB,CAAC,EACzC,KAAK,CAAAC,QAAMA,IAAG,KAAK,MAAM,CAAC,EAC1B,WAAW,mBAAmB,SAAS;AAEnC,UAAA,KAAK,cAAc,OAAO,EAC9B,KAAK,QAAQ,YAAY,EACzB,KAAK,UAAU,MAAM,EACrB,KAAK,IAAI,QAAQ,iBAAiB,GAAG,GAAG,EACxC,SAAS,QAAQ,QAAQ,CAAA,cAAa,UAAU,IAAI,MAAM,CAAC,EAC3D,SAAS,UAAU,UAAU,CAAA,cAAa,UAAU,IAAI,MAAM,CAAC,EAC/D,OAAO,CAAA,SAAQ,KAAK,IAAI,gCAAgC,GAAG,UAAU,EACrE,OAAO,UAAQ,KAAK,IAAI,kCAAkC,GAAG,UAAU;AAEzE,UAAM,SAAS,MAAM,GAAG,UAAU,EAAE;AACpC,QAAI,OAAO,CAAC,EAAE,UAAU,MAAM,OAAO;AAC7B,aAAA,IAAI,sBAAsB,CAAA,CAAE;AAAA,IACpC;AACA,QAAI,OAAO,CAAC,EAAE,UAAU,MAAM,OAAO;AACpC,aAAO,IAAI,oBAAoB,CAAA,GAAI,kBAAkB,aAAa;AAAA,IACnE;AACA,WAAO,gBAAgB;AAAA,EACxB;AACD;AAEO,MAAM,0BAAqD;AAAA,EACjE,MAAa,cAAc;AAAA,IAC1B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,GACgE;AAChE,UAAM,KAAK,cAAc,OAAO,EAC9B,KAAK,aAAa,SAAS,EAC3B,MAAM,CAAA,SAAQ,KAAK,QAAQ,aAAa,cAAc,YAAY,SAAS,IAAI,aAAa,CAAC,EAC7F,MAAM,CAAQ,SAAA,KAAK,QAAQ,aAAa,qBAAqB,YAAY,SAAS,IAAI,cAAc,CAAC;AAEvG,UAAM,SAAS,MAAM,GAAG,QAAQ,EAAE;AAClC,QAAI,WAAW,GAAG;AACjB,aAAO,IAAI,oBAAoB,CAAA,GAAI,kBAAkB,aAAa;AAAA,IACnE;AACA,WAAO,gBAAgB;AAAA,EACxB;AAAA,EAEA,MAAa,eAAe;AAAA,IAC3B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,GACiE;AACjE,UAAM,WAAW,cAAc,OAAO,EACpC,KAAK,aAAa,SAAS,EAC3B,MAAM,MAAM,EACZ,MAAM,CAAQ,SAAA;AACP,aAAA,KAAK,eAAe,CAAC,aAAa,WAAW,aAAa,cAAc,UAAU,GAAG,SAAS,IAAI;AAAA,QACxG;AAAA,QACA,aAAa,cAAc;AAAA,MAAA,CAC3B;AACD,aAAO,KAAK;AAAA,QACX,CAAC,aAAa,WAAW,aAAa,qBAAqB,UAAU;AAAA,QACrE,SAAS;AAAA,QACT,CAAC,QAAQ,aAAa,qBAAqB,UAAU;AAAA,MAAA;AAE/C,aAAA;AAAA,IACP,CAAA,EACA,UAAU,IAAI,QAAQ,iBAAiB,CAAC;AAEpC,UAAA,KAAK,cAAc,OAAO,EAC9B,KAAK,QAAQ,YAAY,EACzB,KAAK,UAAU,QAAQ,EACvB,KAAK,IAAI,QAAQ,iBAAiB,GAAG,GAAG,EACxC,SAAS,QAAQ,QAAQ,CAAA,cAAa,UAAU,IAAI,MAAM,CAAC,EAC3D,SAAS,UAAU,UAAU,CAAA,cAAa,UAAU,IAAI,MAAM,CAAC,EAC/D,OAAO,CAAA,SAAQ,KAAK,IAAI,gCAAgC,GAAG,UAAU,EACrE,OAAO,UAAQ,KAAK,IAAI,iCAAiC,GAAG,SAAS;AAEvE,UAAM,SAAS,MAAM,GAAG,UAAU,EAAE;AACpC,QAAI,OAAO,CAAC,EAAE,UAAU,MAAM,OAAO;AAC7B,aAAA,IAAI,sBAAsB,CAAA,CAAE;AAAA,IACpC;AACA,QAAI,OAAO,CAAC,EAAE,UAAU,MAAM,OAAO;AACpC,aAAO,IAAI,oBAAoB,CAAA,GAAI,kBAAkB,aAAa;AAAA,IACnE;AACA,WAAO,gBAAgB;AAAA,EACxB;AACD;"}
1
+ {"version":3,"file":"JunctionTableManager.js","sources":["../../../../../packages/engine-content-api/src/mapper/JunctionTableManager.ts"],"sourcesContent":["import { getEntity } from '@contember/schema-utils'\nimport { PathFactory, WhereBuilder } from './select'\nimport { PredicateFactory } from '../acl'\nimport {\n\tClient,\n\tConflictActionType,\n\tDeleteBuilder,\n\tInsertBuilder,\n\tLiteral,\n\tOperator,\n\tSelectBuilder,\n} from '@contember/database'\nimport { Acl, Input, Model } from '@contember/schema'\nimport {\n\tMutationJunctionUpdateOk,\n\tMutationNoResultError,\n\tMutationNothingToDo,\n\tMutationResultList,\n\tMutationResultType,\n\tNothingToDoReason,\n} from './Result'\nimport { ImplementationException } from '../exception'\nimport { AfterJunctionUpdateEvent, BeforeJunctionUpdateEvent } from './EventManager'\nimport { Mapper } from './Mapper'\n\ntype OkResultFactory = () => MutationJunctionUpdateOk\n\ntype JunctionMutationResult =\n\t| MutationJunctionUpdateOk\n\t| MutationNothingToDo\n\t| MutationNoResultError\n\nexport class JunctionTableManager {\n\tconstructor(\n\t\tprivate readonly schema: Model.Schema,\n\t\tprivate readonly predicateFactory: PredicateFactory,\n\t\tprivate readonly whereBuilder: WhereBuilder,\n\t\tprivate readonly connectJunctionHandler: JunctionConnectHandler,\n\t\tprivate readonly disconnectJunctionHandler: JunctionDisconnectHandler,\n\t\tprivate readonly pathFactory: PathFactory,\n\t) {}\n\n\tpublic async connectJunction(\n\t\tmapper: Mapper,\n\t\towningEntity: Model.Entity,\n\t\trelation: Model.ManyHasManyOwningRelation,\n\t\towningUnique: Input.PrimaryValue,\n\t\tinverseUnique: Input.PrimaryValue,\n\t): Promise<MutationResultList> {\n\t\tconst beforeEvent = new BeforeJunctionUpdateEvent(owningEntity, relation, owningUnique, inverseUnique, 'connect')\n\t\tawait mapper.eventManager.fire(beforeEvent)\n\t\tconst result = await this.executeJunctionModification(\n\t\t\tmapper.db,\n\t\t\towningEntity,\n\t\t\trelation,\n\t\t\towningUnique,\n\t\t\tinverseUnique,\n\t\t\tthis.connectJunctionHandler,\n\t\t)\n\t\tif (result.result !== MutationResultType.noResultError) {\n\t\t\tconst afterEvent = new AfterJunctionUpdateEvent(owningEntity, relation, owningUnique, inverseUnique, 'connect', result.result === MutationResultType.ok)\n\t\t\tawait mapper.eventManager.fire(afterEvent)\n\t\t}\n\t\treturn [result]\n\t}\n\n\tpublic async disconnectJunction(\n\t\tmapper: Mapper,\n\t\towningEntity: Model.Entity,\n\t\trelation: Model.ManyHasManyOwningRelation,\n\t\towningUnique: Input.PrimaryValue,\n\t\tinverseUnique: Input.PrimaryValue,\n\t): Promise<MutationResultList> {\n\t\tconst beforeEvent = new BeforeJunctionUpdateEvent(owningEntity, relation, owningUnique, inverseUnique, 'connect')\n\t\tawait mapper.eventManager.fire(beforeEvent)\n\t\tconst result = await this.executeJunctionModification(\n\t\t\tmapper.db,\n\t\t\towningEntity,\n\t\t\trelation,\n\t\t\towningUnique,\n\t\t\tinverseUnique,\n\t\t\tthis.disconnectJunctionHandler,\n\t\t)\n\t\tif (result.result !== MutationResultType.noResultError) {\n\t\t\tconst afterEvent = new AfterJunctionUpdateEvent(owningEntity, relation, owningUnique, inverseUnique, 'disconnect', result.result === MutationResultType.ok)\n\t\t\tbeforeEvent.afterEvent = afterEvent\n\t\t\tawait mapper.eventManager.fire(afterEvent)\n\t\t}\n\t\treturn [result]\n\t}\n\n\n\tprivate async executeJunctionModification(\n\t\tdb: Client,\n\t\towningEntity: Model.Entity,\n\t\trelation: Model.ManyHasManyOwningRelation,\n\t\towningPrimary: Input.PrimaryValue,\n\t\tinversePrimary: Input.PrimaryValue,\n\t\thandler: JunctionHandler,\n\t): Promise<JunctionMutationResult> {\n\t\tconst joiningTable = relation.joiningTable\n\t\tconst inverseEntity = getEntity(this.schema, relation.target)\n\t\tif (inverseEntity.view || owningEntity.view) {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\n\t\tconst owningPredicate = this.predicateFactory.create(owningEntity, Acl.Operation.update, [relation.name])\n\t\tlet inversePredicate: Input.OptionalWhere = {}\n\t\tif (relation.inversedBy) {\n\t\t\tinversePredicate = this.predicateFactory.create(inverseEntity, Acl.Operation.update, [relation.inversedBy])\n\t\t}\n\n\t\tconst hasNoPredicates = Object.keys(owningPredicate).length === 0 && Object.keys(inversePredicate).length === 0\n\n\t\tconst okResultFactory = () =>\n\t\t\tnew MutationJunctionUpdateOk([], owningEntity, relation, owningPrimary, inversePrimary)\n\t\tif (hasNoPredicates) {\n\t\t\treturn await handler.executeSimple({ db, joiningTable, owningPrimary, inversePrimary, okResultFactory })\n\t\t} else {\n\t\t\tconst owningWhere: Input.OptionalWhere = {\n\t\t\t\tand: [owningPredicate, { [owningEntity.primary]: { eq: owningPrimary } }],\n\t\t\t}\n\n\t\t\tconst inverseWhere: Input.OptionalWhere = {\n\t\t\t\tand: [inversePredicate, { [inverseEntity.primary]: { eq: inversePrimary } }],\n\t\t\t}\n\n\t\t\tconst dataCallback: SelectBuilder.Callback = qb => {\n\t\t\t\tqb = qb\n\t\t\t\t\t.select(expr => expr.select(['owning', owningEntity.primaryColumn]), joiningTable.joiningColumn.columnName)\n\t\t\t\t\t.select(\n\t\t\t\t\t\texpr => expr.select(['inverse', inverseEntity.primaryColumn]),\n\t\t\t\t\t\tjoiningTable.inverseJoiningColumn.columnName,\n\t\t\t\t\t)\n\t\t\t\t\t.select(expr => expr.raw('true'), 'selected')\n\t\t\t\t\t.from(new Literal('(values (null))'), 't')\n\n\t\t\t\t\t.join(owningEntity.tableName, 'owning', condition => condition.raw('true'))\n\t\t\t\t\t.join(inverseEntity.tableName, 'inverse', condition => condition.raw('true'))\n\t\t\t\tqb = this.whereBuilder.build(qb, owningEntity, this.pathFactory.create([], 'owning'), owningWhere)\n\t\t\t\tqb = this.whereBuilder.build(qb, inverseEntity, this.pathFactory.create([], 'inverse'), inverseWhere)\n\t\t\t\treturn qb\n\t\t\t}\n\n\t\t\treturn await handler.executeComplex({ db, joiningTable, dataCallback, okResultFactory })\n\t\t}\n\t}\n}\n\ninterface JunctionSimpleExecutionArgs {\n\tdb: Client\n\tjoiningTable: Model.JoiningTable\n\towningPrimary: Input.PrimaryValue\n\tinversePrimary: Input.PrimaryValue\n\tokResultFactory: OkResultFactory\n}\n\ninterface JunctionComplexExecutionArgs {\n\tdb: Client\n\tjoiningTable: Model.JoiningTable\n\tdataCallback: SelectBuilder.Callback\n\tokResultFactory: OkResultFactory\n}\n\ninterface JunctionHandler {\n\texecuteSimple(args: JunctionSimpleExecutionArgs): Promise<JunctionMutationResult>\n\n\texecuteComplex(args: JunctionComplexExecutionArgs): Promise<JunctionMutationResult>\n}\n\nexport class JunctionConnectHandler implements JunctionHandler {\n\tasync executeSimple({\n\t\tdb,\n\t\tjoiningTable,\n\t\towningPrimary,\n\t\tinversePrimary,\n\t\tokResultFactory,\n\t}: JunctionSimpleExecutionArgs): Promise<JunctionMutationResult> {\n\t\tconst result = await InsertBuilder.create()\n\t\t\t.into(joiningTable.tableName)\n\t\t\t.values({\n\t\t\t\t[joiningTable.joiningColumn.columnName]: expr => expr.selectValue(owningPrimary),\n\t\t\t\t[joiningTable.inverseJoiningColumn.columnName]: expr => expr.selectValue(inversePrimary),\n\t\t\t})\n\t\t\t.onConflict(ConflictActionType.doNothing)\n\t\t\t.execute(db)\n\t\tif (result === 0) {\n\t\t\treturn new MutationNothingToDo([], NothingToDoReason.alreadyExists)\n\t\t}\n\t\treturn okResultFactory()\n\t}\n\n\tasync executeComplex({\n\t\tdb,\n\t\tjoiningTable,\n\t\tdataCallback,\n\t\tokResultFactory,\n\t}: JunctionComplexExecutionArgs): Promise<JunctionMutationResult> {\n\t\tconst insert = InsertBuilder.create()\n\t\t\t.into(joiningTable.tableName)\n\t\t\t.values({\n\t\t\t\t[joiningTable.joiningColumn.columnName]: expr => expr.select(['data', joiningTable.joiningColumn.columnName]),\n\t\t\t\t[joiningTable.inverseJoiningColumn.columnName]: expr =>\n\t\t\t\t\texpr.select(['data', joiningTable.inverseJoiningColumn.columnName]),\n\t\t\t})\n\t\t\t.returning(new Literal('true as inserted'))\n\t\t\t.from(qb => qb.from('data'))\n\t\t\t.onConflict(ConflictActionType.doNothing)\n\n\t\tconst qb = SelectBuilder.create()\n\t\t\t.with('data', dataCallback)\n\t\t\t.with('insert', insert)\n\t\t\t.from(new Literal('(values (null))'), 't')\n\t\t\t.leftJoin('data', 'data', condition => condition.raw('true'))\n\t\t\t.leftJoin('insert', 'insert', condition => condition.raw('true'))\n\t\t\t.select(expr => expr.raw('coalesce(data.selected, false)'), 'selected')\n\t\t\t.select(expr => expr.raw('coalesce(insert.inserted, false)'), 'inserted')\n\n\t\tconst result = await qb.getResult(db)\n\t\tif (result[0]['selected'] === false) {\n\t\t\treturn new MutationNoResultError([])\n\t\t}\n\t\tif (result[0]['inserted'] === false) {\n\t\t\treturn new MutationNothingToDo([], NothingToDoReason.alreadyExists)\n\t\t}\n\t\treturn okResultFactory()\n\t}\n}\n\nexport class JunctionDisconnectHandler implements JunctionHandler {\n\tpublic async executeSimple({\n\t\tdb,\n\t\tjoiningTable,\n\t\towningPrimary,\n\t\tinversePrimary,\n\t\tokResultFactory,\n\t}: JunctionSimpleExecutionArgs): Promise<JunctionMutationResult> {\n\t\tconst qb = DeleteBuilder.create()\n\t\t\t.from(joiningTable.tableName)\n\t\t\t.where(cond => cond.compare(joiningTable.joiningColumn.columnName, Operator.eq, owningPrimary))\n\t\t\t.where(cond => cond.compare(joiningTable.inverseJoiningColumn.columnName, Operator.eq, inversePrimary))\n\n\t\tconst result = await qb.execute(db)\n\t\tif (result === 0) {\n\t\t\treturn new MutationNothingToDo([], NothingToDoReason.alreadyExists)\n\t\t}\n\t\treturn okResultFactory()\n\t}\n\n\tpublic async executeComplex({\n\t\tdb,\n\t\tjoiningTable,\n\t\tdataCallback,\n\t\tokResultFactory,\n\t}: JunctionComplexExecutionArgs): Promise<JunctionMutationResult> {\n\t\tconst deleteQb = DeleteBuilder.create()\n\t\t\t.from(joiningTable.tableName)\n\t\t\t.using('data')\n\t\t\t.where(cond => {\n\t\t\t\tcond = cond.compareColumns([joiningTable.tableName, joiningTable.joiningColumn.columnName], Operator.eq, [\n\t\t\t\t\t'data',\n\t\t\t\t\tjoiningTable.joiningColumn.columnName,\n\t\t\t\t])\n\t\t\t\tcond = cond.compareColumns(\n\t\t\t\t\t[joiningTable.tableName, joiningTable.inverseJoiningColumn.columnName],\n\t\t\t\t\tOperator.eq,\n\t\t\t\t\t['data', joiningTable.inverseJoiningColumn.columnName],\n\t\t\t\t)\n\t\t\t\treturn cond\n\t\t\t})\n\t\t\t.returning(new Literal('true as deleted'))\n\n\t\tconst qb = SelectBuilder.create()\n\t\t\t.with('data', dataCallback)\n\t\t\t.with('delete', deleteQb)\n\t\t\t.from(new Literal('(values (null))'), 't')\n\t\t\t.leftJoin('data', 'data', condition => condition.raw('true'))\n\t\t\t.leftJoin('delete', 'delete', condition => condition.raw('true'))\n\t\t\t.select(expr => expr.raw('coalesce(data.selected, false)'), 'selected')\n\t\t\t.select(expr => expr.raw('coalesce(delete.deleted, false)'), 'deleted')\n\n\t\tconst result = await qb.getResult(db)\n\t\tif (result[0]['selected'] === false) {\n\t\t\treturn new MutationNoResultError([])\n\t\t}\n\t\tif (result[0]['inserted'] === false) {\n\t\t\treturn new MutationNothingToDo([], NothingToDoReason.alreadyExists)\n\t\t}\n\t\treturn okResultFactory()\n\t}\n}\n"],"names":["InsertBuilder","qb"],"mappings":"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"}
@@ -31,7 +31,6 @@ class Mapper {
31
31
  this.updater = updater;
32
32
  this.inserter = inserter;
33
33
  this.pathFactory = pathFactory;
34
- __publicField(this, "primaryKeyCache", {});
35
34
  __publicField(this, "systemVariablesSetupDone");
36
35
  __publicField(this, "deletedEntities", new DeletedEntitiesStorage.DeletedEntitiesStorage());
37
36
  __publicField(this, "mutex", new Mutex.Mutex());
@@ -125,10 +124,8 @@ class Mapper {
125
124
  }
126
125
  await this.setupSystemVariables();
127
126
  return ErrorUtils.tryMutation(this.schema, this.schemaDatabaseMetadata, async () => {
128
- const primaryValue = await this.getPrimaryValue(entity, by);
129
- if (primaryValue === void 0) {
130
- return [new Result.MutationEntryNotFoundError([], by)];
131
- }
127
+ const [primaryValue, err] = await this.getPrimaryValue(entity, by);
128
+ if (err) return [err];
132
129
  return await this.updater.update(this, entity, primaryValue, data, filter);
133
130
  });
134
131
  }
@@ -138,10 +135,8 @@ class Mapper {
138
135
  }
139
136
  await this.setupSystemVariables();
140
137
  return ErrorUtils.tryMutation(this.schema, this.schemaDatabaseMetadata, async () => {
141
- const primaryValue = await this.getPrimaryValue(entity, by);
142
- if (primaryValue === void 0) {
143
- return [new Result.MutationEntryNotFoundError([], by)];
144
- }
138
+ const [primaryValue, err] = await this.getPrimaryValue(entity, by);
139
+ if (err) return [err];
145
140
  return await this.updater.updateCb(this, entity, primaryValue, builderCb);
146
141
  });
147
142
  }
@@ -151,7 +146,7 @@ class Mapper {
151
146
  }
152
147
  await this.setupSystemVariables();
153
148
  return ErrorUtils.tryMutation(this.schema, this.schemaDatabaseMetadata, async () => {
154
- const primaryValue = await this.getPrimaryValue(entity, by);
149
+ const [primaryValue] = await this.getPrimaryValue(entity, by);
155
150
  if (primaryValue === void 0) {
156
151
  return await this.insertInternal(entity, create);
157
152
  }
@@ -161,8 +156,6 @@ class Mapper {
161
156
  insertInternal(entity, data, builderCb = () => {
162
157
  }) {
163
158
  return this.inserter.insert(this, entity, data, (id) => {
164
- const where = { [entity.primary]: id };
165
- this.primaryKeyCache[this.hashWhere(entity.name, where)] = id;
166
159
  }, builderCb);
167
160
  }
168
161
  async delete(entity, by, filter) {
@@ -214,23 +207,10 @@ class Mapper {
214
207
  }
215
208
  async getPrimaryValue(entity, where) {
216
209
  if (where instanceof CheckedPrimary.CheckedPrimary) {
217
- return where.primaryValue;
210
+ return [where.primaryValue, void 0];
218
211
  }
219
- const hash = this.hashWhere(entity.name, where);
220
- if (this.primaryKeyCache[hash]) {
221
- return this.primaryKeyCache[hash];
222
- }
223
- const primaryPromise = this.selectField(entity, where, entity.primary);
224
- this.primaryKeyCache[hash] = primaryPromise;
225
- const primaryValue = await primaryPromise;
226
- const uniqueFields = Object.keys(where);
227
- if (primaryValue && (uniqueFields.length !== 1 || uniqueFields[0] !== entity.primary)) {
228
- this.primaryKeyCache[this.hashWhere(entity.name, { [entity.primary]: primaryValue })] = primaryValue;
229
- }
230
- return primaryValue;
231
- }
232
- hashWhere(entityName, where) {
233
- return JSON.stringify([entityName, where]);
212
+ const result = await this.selectField(entity, where, entity.primary);
213
+ return result ? [result, void 0] : [void 0, new Result.MutationEntryNotFoundError([], where)];
234
214
  }
235
215
  async setupSystemVariables() {
236
216
  this.systemVariablesSetupDone ?? (this.systemVariablesSetupDone = (async () => {
@@ -1 +1 @@
1
- {"version":3,"file":"Mapper.cjs","sources":["../../../../../packages/engine-content-api/src/mapper/Mapper.ts"],"sourcesContent":["import { Input, Model } from '@contember/schema'\nimport { acceptFieldVisitor, getColumnName } from '@contember/schema-utils'\nimport {\n\tOrderByHelper,\n\tPathFactory,\n\tSelectBuilderFactory,\n\tSelectGroupedObjects,\n\tSelectHydrator,\n\tSelectIndexedResultObjects,\n\tSelectResultObject,\n\tWhereBuilder,\n} from './select'\nimport { Client, Connection, ConstraintHelper, DatabaseMetadata, SelectBuilder } from '@contember/database'\nimport { PredicatesInjector } from '../acl'\nimport { JunctionTableManager } from './JunctionTableManager'\nimport { DeletedEntitiesStorage, DeleteExecutor } from './delete'\nimport { MutationEntryNotFoundError, MutationResultList } from './Result'\nimport { UpdateBuilder, Updater } from './update'\nimport { InsertBuilder, Inserter } from './insert'\nimport { tryMutation } from './ErrorUtils'\nimport { ObjectNode, UniqueWhereExpander } from '../inputProcessing'\nimport { Mutex } from '../utils'\nimport { CheckedPrimary } from './CheckedPrimary'\nimport { ImplementationException } from '../exception'\nimport { EventManager } from './EventManager'\n\nexport class Mapper<ConnectionType extends Connection.ConnectionLike = Connection.ConnectionLike> {\n\tprivate primaryKeyCache: Record<string, Promise<string> | string> = {}\n\tprivate systemVariablesSetupDone: Promise<void> | undefined\n\tpublic readonly deletedEntities = new DeletedEntitiesStorage()\n\tpublic readonly mutex = new Mutex()\n\tpublic readonly constraintHelper: ConstraintHelper\n\n\tpublic readonly eventManager: EventManager\n\n\tconstructor(\n\t\tpublic readonly db: Client<ConnectionType>,\n\t\tpublic readonly identityId: string,\n\t\tpublic readonly transactionId: string,\n\t\tprivate readonly schema: Model.Schema,\n\t\tprivate readonly schemaDatabaseMetadata: DatabaseMetadata,\n\t\tprivate readonly predicatesInjector: PredicatesInjector,\n\t\tprivate readonly selectBuilderFactory: SelectBuilderFactory,\n\t\tprivate readonly uniqueWhereExpander: UniqueWhereExpander,\n\t\tprivate readonly whereBuilder: WhereBuilder,\n\t\tprivate readonly junctionTableManager: JunctionTableManager,\n\t\tprivate readonly deleteExecutor: DeleteExecutor,\n\t\tprivate readonly updater: Updater,\n\t\tprivate readonly inserter: Inserter,\n\t\tprivate readonly pathFactory: PathFactory,\n\t) {\n\t\tthis.constraintHelper = new ConstraintHelper(db, this.schemaDatabaseMetadata)\n\t\tthis.eventManager = new EventManager(this)\n\t}\n\n\tpublic async selectField(entity: Model.Entity, where: Input.UniqueWhere | CheckedPrimary, fieldName: string) {\n\t\tconst columnName = getColumnName(this.schema, entity, fieldName)\n\n\t\tconst qb = SelectBuilder.create() //\n\t\t\t.from(entity.tableName, 'root_')\n\t\t\t.select(['root_', columnName])\n\t\tconst expandedWhere = this.uniqueWhereExpander.expand(entity, where)\n\t\tconst builtQb = this.whereBuilder.build(qb, entity, this.pathFactory.create([]), expandedWhere)\n\t\tconst result = await builtQb.getResult(this.db)\n\n\t\treturn result[0] !== undefined ? result[0][columnName] : undefined\n\t}\n\n\tpublic async selectAssoc(\n\t\tentity: Model.Entity,\n\t\tinput: ObjectNode<Input.ListQueryInput>,\n\t\trelationPath: Model.AnyRelationContext[],\n\t\tindexBy: string,\n\t): Promise<SelectIndexedResultObjects> {\n\t\tconst hydrator = new SelectHydrator()\n\t\tconst path = this.pathFactory.create([])\n\t\tconst indexByAlias: string = path.for(indexBy).alias\n\t\tconst qb: SelectBuilder = SelectBuilder.create()\n\t\t\t.select([path.alias, getColumnName(this.schema, entity, indexBy)], indexByAlias)\n\t\tconst rows = await this.selectRows(hydrator, qb, entity, input, relationPath)\n\t\treturn await hydrator.hydrateAll(rows, indexByAlias)\n\t}\n\n\tpublic async select(entity: Model.Entity, input: ObjectNode<Input.ListQueryInput>, relationPath: Model.AnyRelationContext[]): Promise<SelectResultObject[]> {\n\t\tconst hydrator = new SelectHydrator()\n\t\tconst qb: SelectBuilder<SelectBuilder.Result> = SelectBuilder.create()\n\n\t\tconst rows = await this.selectRows(hydrator, qb, entity, input, relationPath)\n\n\t\treturn await hydrator.hydrateAll(rows)\n\t}\n\n\tpublic async selectUnique(\n\t\tentity: Model.Entity,\n\t\tquery: ObjectNode<Input.UniqueQueryInput>,\n\t\trelationPath: Model.AnyRelationContext[],\n\t): Promise<SelectResultObject | null> {\n\t\tconst uniqueWhere = this.uniqueWhereExpander.expand(entity, query.args.by)\n\t\tconst where = query.args.filter ? { and: [uniqueWhere, query.args.filter] } : uniqueWhere\n\t\tconst queryExpanded = query.withArg<Input.ListQueryInput>('filter', where)\n\n\t\tconst rows = await this.select(entity, queryExpanded, relationPath)\n\n\t\treturn rows[0] ?? null\n\t}\n\n\tpublic async selectGrouped(\n\t\tentity: Model.Entity,\n\t\tinput: ObjectNode<Input.ListQueryInput>,\n\t\trelation: Model.JoiningColumnRelation & Model.AnyRelation,\n\t\trelationPath: Model.AnyRelationContext[],\n\t): Promise<SelectGroupedObjects> {\n\t\tconst hydrator = new SelectHydrator()\n\t\tconst path = this.pathFactory.create([])\n\t\tconst groupingKey = '__grouping_key'\n\t\tconst qb: SelectBuilder = SelectBuilder.create()\n\t\t\t.select([path.alias, relation.joiningColumn.columnName], groupingKey)\n\n\t\tconst rows = await this.selectRows(hydrator, qb, entity, input, relationPath, relation.name)\n\n\t\treturn await hydrator.hydrateGroups(rows, groupingKey)\n\t}\n\n\tprivate async selectRows(\n\t\thydrator: SelectHydrator,\n\t\tqb: SelectBuilder<SelectBuilder.Result>,\n\t\tentity: Model.Entity,\n\t\tinput: ObjectNode<Input.ListQueryInput>,\n\t\trelationPath: Model.AnyRelationContext[],\n\t\tgroupBy?: string,\n\t) {\n\t\tconst inputWithOrder = OrderByHelper.appendDefaultOrderBy(entity, input, undefined)\n\t\tconst path = this.pathFactory.create([])\n\t\tconst augmentedBuilder = qb.from(entity.tableName, path.alias).meta('path', [...input.path, input.alias])\n\n\t\tconst selector = this.selectBuilderFactory.create(augmentedBuilder, hydrator, relationPath)\n\t\tconst filterWithPredicates = this.predicatesInjector.inject(entity, inputWithOrder.args.filter || {}, relationPath[relationPath.length - 1])\n\t\tconst inputWithPredicates = inputWithOrder.withArg('filter', filterWithPredicates)\n\t\tselector.select(this, entity, inputWithPredicates, path, groupBy)\n\t\treturn await selector.execute(this.db)\n\t}\n\n\tpublic async count(entity: Model.Entity, filter: Input.OptionalWhere) {\n\t\tconst path = this.pathFactory.create([])\n\t\tconst qb = SelectBuilder.create()\n\t\t\t.from(entity.tableName, path.alias)\n\t\t\t.select(expr => expr.raw('count(*)'), 'row_count')\n\t\tconst withPredicates = this.predicatesInjector.inject(entity, filter)\n\t\tconst qbWithWhere = this.whereBuilder.build(qb, entity, path, withPredicates)\n\t\tconst result = await qbWithWhere.getResult(this.db)\n\t\treturn result[0].row_count\n\t}\n\n\tpublic async countGrouped(\n\t\tentity: Model.Entity,\n\t\tfilter: Input.OptionalWhere,\n\t\trelation: Model.JoiningColumnRelation & Model.Relation,\n\t\trelationPath: Model.AnyRelationContext[],\n\t): Promise<Record<string, number>> {\n\t\tconst path = this.pathFactory.create([])\n\t\tconst qb = SelectBuilder.create()\n\t\t\t.from(entity.tableName, path.alias)\n\t\t\t.select(expr => expr.raw('count(*)'), 'row_count')\n\t\t\t.select([path.alias, relation.joiningColumn.columnName])\n\t\t\t.groupBy([path.alias, relation.joiningColumn.columnName])\n\t\tconst withPredicates = this.predicatesInjector.inject(entity, filter, relationPath[relationPath.length - 1])\n\t\tconst qbWithWhere = this.whereBuilder.build(qb, entity, path, withPredicates, { relationPath })\n\t\tconst rows = await qbWithWhere.getResult(this.db)\n\t\tconst result = new Map<string, number>()\n\t\tfor (const row of rows) {\n\t\t\tresult.set(String(row[relation.joiningColumn.columnName]), Number(row.row_count))\n\t\t}\n\t\treturn Object.fromEntries(result)\n\t}\n\n\tpublic async insert(\n\t\tentity: Model.Entity,\n\t\tdata: Input.CreateDataInput,\n\t\tbuilderCb: (builder: InsertBuilder) => void = () => {},\n\t): Promise<MutationResultList> {\n\t\tif (entity.view) {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\t\tawait this.setupSystemVariables()\n\t\treturn tryMutation(this.schema, this.schemaDatabaseMetadata, () =>\n\t\t\tthis.insertInternal(entity, data, builderCb),\n\t\t)\n\t}\n\n\tpublic async update(\n\t\tentity: Model.Entity,\n\t\tby: Input.UniqueWhere,\n\t\tdata: Input.UpdateDataInput,\n\t\tfilter?: Input.OptionalWhere,\n\t): Promise<MutationResultList> {\n\t\tif (entity.view) {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\t\tawait this.setupSystemVariables()\n\t\treturn tryMutation(this.schema, this.schemaDatabaseMetadata, async () => {\n\t\t\tconst primaryValue = await this.getPrimaryValue(entity, by)\n\t\t\tif (primaryValue === undefined) {\n\t\t\t\treturn [new MutationEntryNotFoundError([], by)]\n\t\t\t}\n\t\t\treturn await this.updater.update(this, entity, primaryValue, data, filter)\n\t\t})\n\t}\n\n\tpublic async updateInternal(\n\t\tentity: Model.Entity,\n\t\tby: Input.UniqueWhere | CheckedPrimary,\n\t\tbuilderCb: (builder: UpdateBuilder) => void,\n\t): Promise<MutationResultList> {\n\t\tif (entity.view) {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\t\tawait this.setupSystemVariables()\n\t\treturn tryMutation(this.schema, this.schemaDatabaseMetadata, async () => {\n\t\t\tconst primaryValue = await this.getPrimaryValue(entity, by)\n\t\t\tif (primaryValue === undefined) {\n\t\t\t\treturn [new MutationEntryNotFoundError([], by as Input.UniqueWhere)]\n\t\t\t}\n\t\t\treturn await this.updater.updateCb(this, entity, primaryValue, builderCb)\n\t\t})\n\t}\n\tpublic async upsert(\n\t\tentity: Model.Entity,\n\t\tby: Input.UniqueWhere,\n\t\tupdate: Input.UpdateDataInput,\n\t\tcreate: Input.CreateDataInput,\n\t\tfilter?: Input.OptionalWhere,\n\t): Promise<MutationResultList> {\n\t\tif (entity.view) {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\t\tawait this.setupSystemVariables()\n\t\treturn tryMutation(this.schema, this.schemaDatabaseMetadata, async () => {\n\t\t\tconst primaryValue = await this.getPrimaryValue(entity, by)\n\t\t\tif (primaryValue === undefined) {\n\t\t\t\treturn await this.insertInternal(entity, create)\n\t\t\t}\n\t\t\treturn await this.updater.update(this, entity, primaryValue, update, filter)\n\t\t})\n\t}\n\n\tprivate insertInternal(entity: Model.Entity, data: Input.CreateDataInput, builderCb: (builder: InsertBuilder) => void = () => {}) {\n\t\treturn this.inserter.insert(this, entity, data, id => {\n\t\t\tconst where = { [entity.primary]: id }\n\t\t\tthis.primaryKeyCache[this.hashWhere(entity.name, where)] = id\n\t\t}, builderCb)\n\t}\n\n\tpublic async delete(\n\t\tentity: Model.Entity,\n\t\tby: Input.UniqueWhere | CheckedPrimary,\n\t\tfilter?: Input.OptionalWhere,\n\t): Promise<MutationResultList> {\n\t\tif (entity.view) {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\t\tawait this.setupSystemVariables()\n\t\treturn tryMutation(this.schema, this.schemaDatabaseMetadata, () => {\n\t\t\treturn this.deleteExecutor.execute(this, entity, by, filter)\n\t\t})\n\t}\n\n\tpublic async connectJunction(\n\t\tentity: Model.Entity,\n\t\trelation: Model.ManyHasManyOwningRelation | Model.ManyHasManyInverseRelation,\n\t\tthisPrimary: Input.PrimaryValue,\n\t\totherPrimary: Input.PrimaryValue,\n\t): Promise<MutationResultList> {\n\t\tawait this.setupSystemVariables()\n\t\tconst err = () => {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\t\treturn await acceptFieldVisitor(this.schema, entity, relation, {\n\t\t\tvisitManyHasManyOwning: ({ entity, relation }) => {\n\t\t\t\treturn this.junctionTableManager.connectJunction(this, entity, relation, thisPrimary, otherPrimary)\n\t\t\t},\n\t\t\tvisitManyHasManyInverse: ({ targetEntity, targetRelation }) => {\n\t\t\t\treturn this.junctionTableManager.connectJunction(this, targetEntity, targetRelation, otherPrimary, thisPrimary)\n\t\t\t},\n\t\t\tvisitColumn: err,\n\t\t\tvisitOneHasMany: err,\n\t\t\tvisitOneHasOneInverse: err,\n\t\t\tvisitOneHasOneOwning: err,\n\t\t\tvisitManyHasOne: err,\n\t\t})\n\t}\n\n\tpublic async disconnectJunction(\n\t\tentity: Model.Entity,\n\t\trelation: Model.ManyHasManyOwningRelation | Model.ManyHasManyInverseRelation,\n\t\tthisPrimary: Input.PrimaryValue,\n\t\totherPrimary: Input.PrimaryValue,\n\t): Promise<MutationResultList> {\n\t\tawait this.setupSystemVariables()\n\t\tconst err = () => {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\t\treturn await acceptFieldVisitor(this.schema, entity, relation, {\n\t\t\tvisitManyHasManyOwning: ({ entity, relation }) => {\n\t\t\t\treturn this.junctionTableManager.disconnectJunction(this, entity, relation, thisPrimary, otherPrimary)\n\t\t\t},\n\t\t\tvisitManyHasManyInverse: ({ targetEntity, targetRelation }) => {\n\t\t\t\treturn this.junctionTableManager.disconnectJunction(this, targetEntity, targetRelation, otherPrimary, thisPrimary)\n\t\t\t},\n\t\t\tvisitColumn: err,\n\t\t\tvisitOneHasMany: err,\n\t\t\tvisitOneHasOneInverse: err,\n\t\t\tvisitOneHasOneOwning: err,\n\t\t\tvisitManyHasOne: err,\n\t\t})\n\t}\n\n\tpublic async getPrimaryValue(\n\t\tentity: Model.Entity,\n\t\twhere: Input.UniqueWhere | CheckedPrimary,\n\t): Promise<Input.PrimaryValue | undefined> {\n\t\tif (where instanceof CheckedPrimary) {\n\t\t\treturn where.primaryValue\n\t\t}\n\t\tconst hash = this.hashWhere(entity.name, where)\n\t\tif (this.primaryKeyCache[hash]) {\n\t\t\treturn this.primaryKeyCache[hash]\n\t\t}\n\t\tconst primaryPromise = this.selectField(entity, where, entity.primary)\n\t\tthis.primaryKeyCache[hash] = primaryPromise\n\t\tconst primaryValue = await primaryPromise\n\t\tconst uniqueFields = Object.keys(where)\n\t\tif (primaryValue && (uniqueFields.length !== 1 || uniqueFields[0] !== entity.primary)) {\n\t\t\tthis.primaryKeyCache[this.hashWhere(entity.name, { [entity.primary]: primaryValue })] = primaryValue\n\t\t}\n\t\treturn primaryValue\n\t}\n\n\tprivate hashWhere(entityName: string, where: Input.UniqueWhere): string {\n\t\treturn JSON.stringify([entityName, where])\n\t}\n\n\tprivate async setupSystemVariables() {\n\t\tthis.systemVariablesSetupDone ??= (async () => {\n\t\t\tawait this.db.query('SELECT set_config(?, ?, false)', ['tenant.identity_id', this.identityId]) // todo rename to system.identity_id\n\t\t\tawait this.db.query('SELECT set_config(?, ?, false)', ['system.transaction_id', this.transactionId])\n\t\t})()\n\t\tawait this.systemVariablesSetupDone\n\t}\n}\n"],"names":["DeletedEntitiesStorage","Mutex","ConstraintHelper","EventManager","getColumnName","SelectBuilder","SelectHydrator","OrderByHelper","ImplementationException","tryMutation","MutationEntryNotFoundError","acceptFieldVisitor","entity","relation","CheckedPrimary"],"mappings":"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"}
1
+ {"version":3,"file":"Mapper.cjs","sources":["../../../../../packages/engine-content-api/src/mapper/Mapper.ts"],"sourcesContent":["import { Input, Model } from '@contember/schema'\nimport { acceptFieldVisitor, getColumnName } from '@contember/schema-utils'\nimport {\n\tOrderByHelper,\n\tPathFactory,\n\tSelectBuilderFactory,\n\tSelectGroupedObjects,\n\tSelectHydrator,\n\tSelectIndexedResultObjects,\n\tSelectResultObject,\n\tWhereBuilder,\n} from './select'\nimport { Client, Connection, ConstraintHelper, DatabaseMetadata, SelectBuilder } from '@contember/database'\nimport { PredicatesInjector } from '../acl'\nimport { JunctionTableManager } from './JunctionTableManager'\nimport { DeletedEntitiesStorage, DeleteExecutor } from './delete'\nimport { MutationEntryNotFoundError, MutationResultList } from './Result'\nimport { UpdateBuilder, Updater } from './update'\nimport { InsertBuilder, Inserter } from './insert'\nimport { tryMutation } from './ErrorUtils'\nimport { ObjectNode, UniqueWhereExpander } from '../inputProcessing'\nimport { Mutex } from '../utils'\nimport { CheckedPrimary } from './CheckedPrimary'\nimport { ImplementationException } from '../exception'\nimport { EventManager } from './EventManager'\nimport { MapperInput } from './types'\n\nexport class Mapper<ConnectionType extends Connection.ConnectionLike = Connection.ConnectionLike> {\n\tprivate systemVariablesSetupDone: Promise<void> | undefined\n\tpublic readonly deletedEntities = new DeletedEntitiesStorage()\n\tpublic readonly mutex = new Mutex()\n\tpublic readonly constraintHelper: ConstraintHelper\n\n\tpublic readonly eventManager: EventManager\n\n\tconstructor(\n\t\tpublic readonly db: Client<ConnectionType>,\n\t\tpublic readonly identityId: string,\n\t\tpublic readonly transactionId: string,\n\t\tprivate readonly schema: Model.Schema,\n\t\tprivate readonly schemaDatabaseMetadata: DatabaseMetadata,\n\t\tprivate readonly predicatesInjector: PredicatesInjector,\n\t\tprivate readonly selectBuilderFactory: SelectBuilderFactory,\n\t\tprivate readonly uniqueWhereExpander: UniqueWhereExpander,\n\t\tprivate readonly whereBuilder: WhereBuilder,\n\t\tprivate readonly junctionTableManager: JunctionTableManager,\n\t\tprivate readonly deleteExecutor: DeleteExecutor,\n\t\tprivate readonly updater: Updater,\n\t\tprivate readonly inserter: Inserter,\n\t\tprivate readonly pathFactory: PathFactory,\n\t) {\n\t\tthis.constraintHelper = new ConstraintHelper(db, this.schemaDatabaseMetadata)\n\t\tthis.eventManager = new EventManager(this)\n\t}\n\n\tpublic async selectField(entity: Model.Entity, where: Input.UniqueWhere | CheckedPrimary, fieldName: string) {\n\t\tconst columnName = getColumnName(this.schema, entity, fieldName)\n\n\t\tconst qb = SelectBuilder.create() //\n\t\t\t.from(entity.tableName, 'root_')\n\t\t\t.select(['root_', columnName])\n\t\tconst expandedWhere = this.uniqueWhereExpander.expand(entity, where)\n\t\tconst builtQb = this.whereBuilder.build(qb, entity, this.pathFactory.create([]), expandedWhere)\n\t\tconst result = await builtQb.getResult(this.db)\n\n\t\treturn result[0] !== undefined ? result[0][columnName] : undefined\n\t}\n\n\tpublic async selectAssoc(\n\t\tentity: Model.Entity,\n\t\tinput: ObjectNode<Input.ListQueryInput>,\n\t\trelationPath: Model.AnyRelationContext[],\n\t\tindexBy: string,\n\t): Promise<SelectIndexedResultObjects> {\n\t\tconst hydrator = new SelectHydrator()\n\t\tconst path = this.pathFactory.create([])\n\t\tconst indexByAlias: string = path.for(indexBy).alias\n\t\tconst qb: SelectBuilder = SelectBuilder.create()\n\t\t\t.select([path.alias, getColumnName(this.schema, entity, indexBy)], indexByAlias)\n\t\tconst rows = await this.selectRows(hydrator, qb, entity, input, relationPath)\n\t\treturn await hydrator.hydrateAll(rows, indexByAlias)\n\t}\n\n\tpublic async select(entity: Model.Entity, input: ObjectNode<Input.ListQueryInput>, relationPath: Model.AnyRelationContext[]): Promise<SelectResultObject[]> {\n\t\tconst hydrator = new SelectHydrator()\n\t\tconst qb: SelectBuilder<SelectBuilder.Result> = SelectBuilder.create()\n\n\t\tconst rows = await this.selectRows(hydrator, qb, entity, input, relationPath)\n\n\t\treturn await hydrator.hydrateAll(rows)\n\t}\n\n\tpublic async selectUnique(\n\t\tentity: Model.Entity,\n\t\tquery: ObjectNode<Input.UniqueQueryInput>,\n\t\trelationPath: Model.AnyRelationContext[],\n\t): Promise<SelectResultObject | null> {\n\t\tconst uniqueWhere = this.uniqueWhereExpander.expand(entity, query.args.by)\n\t\tconst where = query.args.filter ? { and: [uniqueWhere, query.args.filter] } : uniqueWhere\n\t\tconst queryExpanded = query.withArg<Input.ListQueryInput>('filter', where)\n\n\t\tconst rows = await this.select(entity, queryExpanded, relationPath)\n\n\t\treturn rows[0] ?? null\n\t}\n\n\tpublic async selectGrouped(\n\t\tentity: Model.Entity,\n\t\tinput: ObjectNode<Input.ListQueryInput>,\n\t\trelation: Model.JoiningColumnRelation & Model.AnyRelation,\n\t\trelationPath: Model.AnyRelationContext[],\n\t): Promise<SelectGroupedObjects> {\n\t\tconst hydrator = new SelectHydrator()\n\t\tconst path = this.pathFactory.create([])\n\t\tconst groupingKey = '__grouping_key'\n\t\tconst qb: SelectBuilder = SelectBuilder.create()\n\t\t\t.select([path.alias, relation.joiningColumn.columnName], groupingKey)\n\n\t\tconst rows = await this.selectRows(hydrator, qb, entity, input, relationPath, relation.name)\n\n\t\treturn await hydrator.hydrateGroups(rows, groupingKey)\n\t}\n\n\tprivate async selectRows(\n\t\thydrator: SelectHydrator,\n\t\tqb: SelectBuilder<SelectBuilder.Result>,\n\t\tentity: Model.Entity,\n\t\tinput: ObjectNode<Input.ListQueryInput>,\n\t\trelationPath: Model.AnyRelationContext[],\n\t\tgroupBy?: string,\n\t) {\n\t\tconst inputWithOrder = OrderByHelper.appendDefaultOrderBy(entity, input, undefined)\n\t\tconst path = this.pathFactory.create([])\n\t\tconst augmentedBuilder = qb.from(entity.tableName, path.alias).meta('path', [...input.path, input.alias])\n\n\t\tconst selector = this.selectBuilderFactory.create(augmentedBuilder, hydrator, relationPath)\n\t\tconst filterWithPredicates = this.predicatesInjector.inject(entity, inputWithOrder.args.filter || {}, relationPath[relationPath.length - 1])\n\t\tconst inputWithPredicates = inputWithOrder.withArg('filter', filterWithPredicates)\n\t\tselector.select(this, entity, inputWithPredicates, path, groupBy)\n\t\treturn await selector.execute(this.db)\n\t}\n\n\tpublic async count(entity: Model.Entity, filter: Input.OptionalWhere) {\n\t\tconst path = this.pathFactory.create([])\n\t\tconst qb = SelectBuilder.create()\n\t\t\t.from(entity.tableName, path.alias)\n\t\t\t.select(expr => expr.raw('count(*)'), 'row_count')\n\t\tconst withPredicates = this.predicatesInjector.inject(entity, filter)\n\t\tconst qbWithWhere = this.whereBuilder.build(qb, entity, path, withPredicates)\n\t\tconst result = await qbWithWhere.getResult(this.db)\n\t\treturn result[0].row_count\n\t}\n\n\tpublic async countGrouped(\n\t\tentity: Model.Entity,\n\t\tfilter: Input.OptionalWhere,\n\t\trelation: Model.JoiningColumnRelation & Model.Relation,\n\t\trelationPath: Model.AnyRelationContext[],\n\t): Promise<Record<string, number>> {\n\t\tconst path = this.pathFactory.create([])\n\t\tconst qb = SelectBuilder.create()\n\t\t\t.from(entity.tableName, path.alias)\n\t\t\t.select(expr => expr.raw('count(*)'), 'row_count')\n\t\t\t.select([path.alias, relation.joiningColumn.columnName])\n\t\t\t.groupBy([path.alias, relation.joiningColumn.columnName])\n\t\tconst withPredicates = this.predicatesInjector.inject(entity, filter, relationPath[relationPath.length - 1])\n\t\tconst qbWithWhere = this.whereBuilder.build(qb, entity, path, withPredicates, { relationPath })\n\t\tconst rows = await qbWithWhere.getResult(this.db)\n\t\tconst result = new Map<string, number>()\n\t\tfor (const row of rows) {\n\t\t\tresult.set(String(row[relation.joiningColumn.columnName]), Number(row.row_count))\n\t\t}\n\t\treturn Object.fromEntries(result)\n\t}\n\n\tpublic async insert(\n\t\tentity: Model.Entity,\n\t\tdata: MapperInput.CreateDataInput,\n\t\tbuilderCb: (builder: InsertBuilder) => void = () => {},\n\t): Promise<MutationResultList> {\n\t\tif (entity.view) {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\t\tawait this.setupSystemVariables()\n\t\treturn tryMutation(this.schema, this.schemaDatabaseMetadata, () =>\n\t\t\tthis.insertInternal(entity, data, builderCb),\n\t\t)\n\t}\n\n\tpublic async update(\n\t\tentity: Model.Entity,\n\t\tby: Input.UniqueWhere | CheckedPrimary,\n\t\tdata: MapperInput.UpdateDataInput,\n\t\tfilter?: Input.OptionalWhere,\n\t): Promise<MutationResultList> {\n\t\tif (entity.view) {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\t\tawait this.setupSystemVariables()\n\t\treturn tryMutation(this.schema, this.schemaDatabaseMetadata, async () => {\n\t\t\tconst [primaryValue, err] = await this.getPrimaryValue(entity, by)\n\t\t\tif (err) return [err]\n\n\t\t\treturn await this.updater.update(this, entity, primaryValue, data, filter)\n\t\t})\n\t}\n\n\tpublic async updateInternal(\n\t\tentity: Model.Entity,\n\t\tby: Input.UniqueWhere | CheckedPrimary,\n\t\tbuilderCb: (builder: UpdateBuilder) => void,\n\t): Promise<MutationResultList> {\n\t\tif (entity.view) {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\t\tawait this.setupSystemVariables()\n\t\treturn tryMutation(this.schema, this.schemaDatabaseMetadata, async () => {\n\t\t\tconst [primaryValue, err] = await this.getPrimaryValue(entity, by)\n\t\t\tif (err) return [err]\n\n\t\t\treturn await this.updater.updateCb(this, entity, primaryValue, builderCb)\n\t\t})\n\t}\n\tpublic async upsert(\n\t\tentity: Model.Entity,\n\t\tby: Input.UniqueWhere | CheckedPrimary,\n\t\tupdate: MapperInput.UpdateDataInput,\n\t\tcreate: MapperInput.CreateDataInput,\n\t\tfilter?: Input.OptionalWhere,\n\t): Promise<MutationResultList> {\n\t\tif (entity.view) {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\t\tawait this.setupSystemVariables()\n\t\treturn tryMutation(this.schema, this.schemaDatabaseMetadata, async () => {\n\t\t\tconst [primaryValue] = await this.getPrimaryValue(entity, by)\n\t\t\tif (primaryValue === undefined) {\n\t\t\t\treturn await this.insertInternal(entity, create)\n\t\t\t}\n\t\t\treturn await this.updater.update(this, entity, primaryValue, update, filter)\n\t\t})\n\t}\n\n\tprivate insertInternal(entity: Model.Entity, data: MapperInput.CreateDataInput, builderCb: (builder: InsertBuilder) => void = () => {}) {\n\t\treturn this.inserter.insert(this, entity, data, id => {\n\t\t}, builderCb)\n\t}\n\n\tpublic async delete(\n\t\tentity: Model.Entity,\n\t\tby: Input.UniqueWhere | CheckedPrimary,\n\t\tfilter?: Input.OptionalWhere,\n\t): Promise<MutationResultList> {\n\t\tif (entity.view) {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\t\tawait this.setupSystemVariables()\n\t\treturn tryMutation(this.schema, this.schemaDatabaseMetadata, () => {\n\t\t\treturn this.deleteExecutor.execute(this, entity, by, filter)\n\t\t})\n\t}\n\n\tpublic async connectJunction(\n\t\tentity: Model.Entity,\n\t\trelation: Model.ManyHasManyOwningRelation | Model.ManyHasManyInverseRelation,\n\t\tthisPrimary: Input.PrimaryValue,\n\t\totherPrimary: Input.PrimaryValue,\n\t): Promise<MutationResultList> {\n\t\tawait this.setupSystemVariables()\n\t\tconst err = () => {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\t\treturn await acceptFieldVisitor(this.schema, entity, relation, {\n\t\t\tvisitManyHasManyOwning: ({ entity, relation }) => {\n\t\t\t\treturn this.junctionTableManager.connectJunction(this, entity, relation, thisPrimary, otherPrimary)\n\t\t\t},\n\t\t\tvisitManyHasManyInverse: ({ targetEntity, targetRelation }) => {\n\t\t\t\treturn this.junctionTableManager.connectJunction(this, targetEntity, targetRelation, otherPrimary, thisPrimary)\n\t\t\t},\n\t\t\tvisitColumn: err,\n\t\t\tvisitOneHasMany: err,\n\t\t\tvisitOneHasOneInverse: err,\n\t\t\tvisitOneHasOneOwning: err,\n\t\t\tvisitManyHasOne: err,\n\t\t})\n\t}\n\n\tpublic async disconnectJunction(\n\t\tentity: Model.Entity,\n\t\trelation: Model.ManyHasManyOwningRelation | Model.ManyHasManyInverseRelation,\n\t\tthisPrimary: Input.PrimaryValue,\n\t\totherPrimary: Input.PrimaryValue,\n\t): Promise<MutationResultList> {\n\t\tawait this.setupSystemVariables()\n\t\tconst err = () => {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\t\treturn await acceptFieldVisitor(this.schema, entity, relation, {\n\t\t\tvisitManyHasManyOwning: ({ entity, relation }) => {\n\t\t\t\treturn this.junctionTableManager.disconnectJunction(this, entity, relation, thisPrimary, otherPrimary)\n\t\t\t},\n\t\t\tvisitManyHasManyInverse: ({ targetEntity, targetRelation }) => {\n\t\t\t\treturn this.junctionTableManager.disconnectJunction(this, targetEntity, targetRelation, otherPrimary, thisPrimary)\n\t\t\t},\n\t\t\tvisitColumn: err,\n\t\t\tvisitOneHasMany: err,\n\t\t\tvisitOneHasOneInverse: err,\n\t\t\tvisitOneHasOneOwning: err,\n\t\t\tvisitManyHasOne: err,\n\t\t})\n\t}\n\n\tpublic async getPrimaryValue(\n\t\tentity: Model.Entity,\n\t\twhere: Input.UniqueWhere | CheckedPrimary,\n\t): Promise<[Input.PrimaryValue, undefined] | [undefined, MutationEntryNotFoundError]> {\n\t\tif (where instanceof CheckedPrimary) {\n\t\t\treturn [where.primaryValue, undefined]\n\t\t}\n\t\tconst result = await this.selectField(entity, where, entity.primary)\n\t\treturn result ? [result, undefined] : [undefined, new MutationEntryNotFoundError([], where)]\n\t}\n\n\tprivate async setupSystemVariables() {\n\t\tthis.systemVariablesSetupDone ??= (async () => {\n\t\t\tawait this.db.query('SELECT set_config(?, ?, false)', ['tenant.identity_id', this.identityId]) // todo rename to system.identity_id\n\t\t\tawait this.db.query('SELECT set_config(?, ?, false)', ['system.transaction_id', this.transactionId])\n\t\t})()\n\t\tawait this.systemVariablesSetupDone\n\t}\n}\n"],"names":["DeletedEntitiesStorage","Mutex","ConstraintHelper","EventManager","getColumnName","SelectBuilder","SelectHydrator","OrderByHelper","ImplementationException","tryMutation","acceptFieldVisitor","entity","relation","CheckedPrimary","MutationEntryNotFoundError"],"mappings":"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"}
@@ -29,7 +29,6 @@ class Mapper {
29
29
  this.updater = updater;
30
30
  this.inserter = inserter;
31
31
  this.pathFactory = pathFactory;
32
- __publicField(this, "primaryKeyCache", {});
33
32
  __publicField(this, "systemVariablesSetupDone");
34
33
  __publicField(this, "deletedEntities", new DeletedEntitiesStorage());
35
34
  __publicField(this, "mutex", new Mutex());
@@ -123,10 +122,8 @@ class Mapper {
123
122
  }
124
123
  await this.setupSystemVariables();
125
124
  return tryMutation(this.schema, this.schemaDatabaseMetadata, async () => {
126
- const primaryValue = await this.getPrimaryValue(entity, by);
127
- if (primaryValue === void 0) {
128
- return [new MutationEntryNotFoundError([], by)];
129
- }
125
+ const [primaryValue, err] = await this.getPrimaryValue(entity, by);
126
+ if (err) return [err];
130
127
  return await this.updater.update(this, entity, primaryValue, data, filter);
131
128
  });
132
129
  }
@@ -136,10 +133,8 @@ class Mapper {
136
133
  }
137
134
  await this.setupSystemVariables();
138
135
  return tryMutation(this.schema, this.schemaDatabaseMetadata, async () => {
139
- const primaryValue = await this.getPrimaryValue(entity, by);
140
- if (primaryValue === void 0) {
141
- return [new MutationEntryNotFoundError([], by)];
142
- }
136
+ const [primaryValue, err] = await this.getPrimaryValue(entity, by);
137
+ if (err) return [err];
143
138
  return await this.updater.updateCb(this, entity, primaryValue, builderCb);
144
139
  });
145
140
  }
@@ -149,7 +144,7 @@ class Mapper {
149
144
  }
150
145
  await this.setupSystemVariables();
151
146
  return tryMutation(this.schema, this.schemaDatabaseMetadata, async () => {
152
- const primaryValue = await this.getPrimaryValue(entity, by);
147
+ const [primaryValue] = await this.getPrimaryValue(entity, by);
153
148
  if (primaryValue === void 0) {
154
149
  return await this.insertInternal(entity, create);
155
150
  }
@@ -159,8 +154,6 @@ class Mapper {
159
154
  insertInternal(entity, data, builderCb = () => {
160
155
  }) {
161
156
  return this.inserter.insert(this, entity, data, (id) => {
162
- const where = { [entity.primary]: id };
163
- this.primaryKeyCache[this.hashWhere(entity.name, where)] = id;
164
157
  }, builderCb);
165
158
  }
166
159
  async delete(entity, by, filter) {
@@ -212,23 +205,10 @@ class Mapper {
212
205
  }
213
206
  async getPrimaryValue(entity, where) {
214
207
  if (where instanceof CheckedPrimary) {
215
- return where.primaryValue;
208
+ return [where.primaryValue, void 0];
216
209
  }
217
- const hash = this.hashWhere(entity.name, where);
218
- if (this.primaryKeyCache[hash]) {
219
- return this.primaryKeyCache[hash];
220
- }
221
- const primaryPromise = this.selectField(entity, where, entity.primary);
222
- this.primaryKeyCache[hash] = primaryPromise;
223
- const primaryValue = await primaryPromise;
224
- const uniqueFields = Object.keys(where);
225
- if (primaryValue && (uniqueFields.length !== 1 || uniqueFields[0] !== entity.primary)) {
226
- this.primaryKeyCache[this.hashWhere(entity.name, { [entity.primary]: primaryValue })] = primaryValue;
227
- }
228
- return primaryValue;
229
- }
230
- hashWhere(entityName, where) {
231
- return JSON.stringify([entityName, where]);
210
+ const result = await this.selectField(entity, where, entity.primary);
211
+ return result ? [result, void 0] : [void 0, new MutationEntryNotFoundError([], where)];
232
212
  }
233
213
  async setupSystemVariables() {
234
214
  this.systemVariablesSetupDone ?? (this.systemVariablesSetupDone = (async () => {
@@ -1 +1 @@
1
- {"version":3,"file":"Mapper.js","sources":["../../../../../packages/engine-content-api/src/mapper/Mapper.ts"],"sourcesContent":["import { Input, Model } from '@contember/schema'\nimport { acceptFieldVisitor, getColumnName } from '@contember/schema-utils'\nimport {\n\tOrderByHelper,\n\tPathFactory,\n\tSelectBuilderFactory,\n\tSelectGroupedObjects,\n\tSelectHydrator,\n\tSelectIndexedResultObjects,\n\tSelectResultObject,\n\tWhereBuilder,\n} from './select'\nimport { Client, Connection, ConstraintHelper, DatabaseMetadata, SelectBuilder } from '@contember/database'\nimport { PredicatesInjector } from '../acl'\nimport { JunctionTableManager } from './JunctionTableManager'\nimport { DeletedEntitiesStorage, DeleteExecutor } from './delete'\nimport { MutationEntryNotFoundError, MutationResultList } from './Result'\nimport { UpdateBuilder, Updater } from './update'\nimport { InsertBuilder, Inserter } from './insert'\nimport { tryMutation } from './ErrorUtils'\nimport { ObjectNode, UniqueWhereExpander } from '../inputProcessing'\nimport { Mutex } from '../utils'\nimport { CheckedPrimary } from './CheckedPrimary'\nimport { ImplementationException } from '../exception'\nimport { EventManager } from './EventManager'\n\nexport class Mapper<ConnectionType extends Connection.ConnectionLike = Connection.ConnectionLike> {\n\tprivate primaryKeyCache: Record<string, Promise<string> | string> = {}\n\tprivate systemVariablesSetupDone: Promise<void> | undefined\n\tpublic readonly deletedEntities = new DeletedEntitiesStorage()\n\tpublic readonly mutex = new Mutex()\n\tpublic readonly constraintHelper: ConstraintHelper\n\n\tpublic readonly eventManager: EventManager\n\n\tconstructor(\n\t\tpublic readonly db: Client<ConnectionType>,\n\t\tpublic readonly identityId: string,\n\t\tpublic readonly transactionId: string,\n\t\tprivate readonly schema: Model.Schema,\n\t\tprivate readonly schemaDatabaseMetadata: DatabaseMetadata,\n\t\tprivate readonly predicatesInjector: PredicatesInjector,\n\t\tprivate readonly selectBuilderFactory: SelectBuilderFactory,\n\t\tprivate readonly uniqueWhereExpander: UniqueWhereExpander,\n\t\tprivate readonly whereBuilder: WhereBuilder,\n\t\tprivate readonly junctionTableManager: JunctionTableManager,\n\t\tprivate readonly deleteExecutor: DeleteExecutor,\n\t\tprivate readonly updater: Updater,\n\t\tprivate readonly inserter: Inserter,\n\t\tprivate readonly pathFactory: PathFactory,\n\t) {\n\t\tthis.constraintHelper = new ConstraintHelper(db, this.schemaDatabaseMetadata)\n\t\tthis.eventManager = new EventManager(this)\n\t}\n\n\tpublic async selectField(entity: Model.Entity, where: Input.UniqueWhere | CheckedPrimary, fieldName: string) {\n\t\tconst columnName = getColumnName(this.schema, entity, fieldName)\n\n\t\tconst qb = SelectBuilder.create() //\n\t\t\t.from(entity.tableName, 'root_')\n\t\t\t.select(['root_', columnName])\n\t\tconst expandedWhere = this.uniqueWhereExpander.expand(entity, where)\n\t\tconst builtQb = this.whereBuilder.build(qb, entity, this.pathFactory.create([]), expandedWhere)\n\t\tconst result = await builtQb.getResult(this.db)\n\n\t\treturn result[0] !== undefined ? result[0][columnName] : undefined\n\t}\n\n\tpublic async selectAssoc(\n\t\tentity: Model.Entity,\n\t\tinput: ObjectNode<Input.ListQueryInput>,\n\t\trelationPath: Model.AnyRelationContext[],\n\t\tindexBy: string,\n\t): Promise<SelectIndexedResultObjects> {\n\t\tconst hydrator = new SelectHydrator()\n\t\tconst path = this.pathFactory.create([])\n\t\tconst indexByAlias: string = path.for(indexBy).alias\n\t\tconst qb: SelectBuilder = SelectBuilder.create()\n\t\t\t.select([path.alias, getColumnName(this.schema, entity, indexBy)], indexByAlias)\n\t\tconst rows = await this.selectRows(hydrator, qb, entity, input, relationPath)\n\t\treturn await hydrator.hydrateAll(rows, indexByAlias)\n\t}\n\n\tpublic async select(entity: Model.Entity, input: ObjectNode<Input.ListQueryInput>, relationPath: Model.AnyRelationContext[]): Promise<SelectResultObject[]> {\n\t\tconst hydrator = new SelectHydrator()\n\t\tconst qb: SelectBuilder<SelectBuilder.Result> = SelectBuilder.create()\n\n\t\tconst rows = await this.selectRows(hydrator, qb, entity, input, relationPath)\n\n\t\treturn await hydrator.hydrateAll(rows)\n\t}\n\n\tpublic async selectUnique(\n\t\tentity: Model.Entity,\n\t\tquery: ObjectNode<Input.UniqueQueryInput>,\n\t\trelationPath: Model.AnyRelationContext[],\n\t): Promise<SelectResultObject | null> {\n\t\tconst uniqueWhere = this.uniqueWhereExpander.expand(entity, query.args.by)\n\t\tconst where = query.args.filter ? { and: [uniqueWhere, query.args.filter] } : uniqueWhere\n\t\tconst queryExpanded = query.withArg<Input.ListQueryInput>('filter', where)\n\n\t\tconst rows = await this.select(entity, queryExpanded, relationPath)\n\n\t\treturn rows[0] ?? null\n\t}\n\n\tpublic async selectGrouped(\n\t\tentity: Model.Entity,\n\t\tinput: ObjectNode<Input.ListQueryInput>,\n\t\trelation: Model.JoiningColumnRelation & Model.AnyRelation,\n\t\trelationPath: Model.AnyRelationContext[],\n\t): Promise<SelectGroupedObjects> {\n\t\tconst hydrator = new SelectHydrator()\n\t\tconst path = this.pathFactory.create([])\n\t\tconst groupingKey = '__grouping_key'\n\t\tconst qb: SelectBuilder = SelectBuilder.create()\n\t\t\t.select([path.alias, relation.joiningColumn.columnName], groupingKey)\n\n\t\tconst rows = await this.selectRows(hydrator, qb, entity, input, relationPath, relation.name)\n\n\t\treturn await hydrator.hydrateGroups(rows, groupingKey)\n\t}\n\n\tprivate async selectRows(\n\t\thydrator: SelectHydrator,\n\t\tqb: SelectBuilder<SelectBuilder.Result>,\n\t\tentity: Model.Entity,\n\t\tinput: ObjectNode<Input.ListQueryInput>,\n\t\trelationPath: Model.AnyRelationContext[],\n\t\tgroupBy?: string,\n\t) {\n\t\tconst inputWithOrder = OrderByHelper.appendDefaultOrderBy(entity, input, undefined)\n\t\tconst path = this.pathFactory.create([])\n\t\tconst augmentedBuilder = qb.from(entity.tableName, path.alias).meta('path', [...input.path, input.alias])\n\n\t\tconst selector = this.selectBuilderFactory.create(augmentedBuilder, hydrator, relationPath)\n\t\tconst filterWithPredicates = this.predicatesInjector.inject(entity, inputWithOrder.args.filter || {}, relationPath[relationPath.length - 1])\n\t\tconst inputWithPredicates = inputWithOrder.withArg('filter', filterWithPredicates)\n\t\tselector.select(this, entity, inputWithPredicates, path, groupBy)\n\t\treturn await selector.execute(this.db)\n\t}\n\n\tpublic async count(entity: Model.Entity, filter: Input.OptionalWhere) {\n\t\tconst path = this.pathFactory.create([])\n\t\tconst qb = SelectBuilder.create()\n\t\t\t.from(entity.tableName, path.alias)\n\t\t\t.select(expr => expr.raw('count(*)'), 'row_count')\n\t\tconst withPredicates = this.predicatesInjector.inject(entity, filter)\n\t\tconst qbWithWhere = this.whereBuilder.build(qb, entity, path, withPredicates)\n\t\tconst result = await qbWithWhere.getResult(this.db)\n\t\treturn result[0].row_count\n\t}\n\n\tpublic async countGrouped(\n\t\tentity: Model.Entity,\n\t\tfilter: Input.OptionalWhere,\n\t\trelation: Model.JoiningColumnRelation & Model.Relation,\n\t\trelationPath: Model.AnyRelationContext[],\n\t): Promise<Record<string, number>> {\n\t\tconst path = this.pathFactory.create([])\n\t\tconst qb = SelectBuilder.create()\n\t\t\t.from(entity.tableName, path.alias)\n\t\t\t.select(expr => expr.raw('count(*)'), 'row_count')\n\t\t\t.select([path.alias, relation.joiningColumn.columnName])\n\t\t\t.groupBy([path.alias, relation.joiningColumn.columnName])\n\t\tconst withPredicates = this.predicatesInjector.inject(entity, filter, relationPath[relationPath.length - 1])\n\t\tconst qbWithWhere = this.whereBuilder.build(qb, entity, path, withPredicates, { relationPath })\n\t\tconst rows = await qbWithWhere.getResult(this.db)\n\t\tconst result = new Map<string, number>()\n\t\tfor (const row of rows) {\n\t\t\tresult.set(String(row[relation.joiningColumn.columnName]), Number(row.row_count))\n\t\t}\n\t\treturn Object.fromEntries(result)\n\t}\n\n\tpublic async insert(\n\t\tentity: Model.Entity,\n\t\tdata: Input.CreateDataInput,\n\t\tbuilderCb: (builder: InsertBuilder) => void = () => {},\n\t): Promise<MutationResultList> {\n\t\tif (entity.view) {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\t\tawait this.setupSystemVariables()\n\t\treturn tryMutation(this.schema, this.schemaDatabaseMetadata, () =>\n\t\t\tthis.insertInternal(entity, data, builderCb),\n\t\t)\n\t}\n\n\tpublic async update(\n\t\tentity: Model.Entity,\n\t\tby: Input.UniqueWhere,\n\t\tdata: Input.UpdateDataInput,\n\t\tfilter?: Input.OptionalWhere,\n\t): Promise<MutationResultList> {\n\t\tif (entity.view) {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\t\tawait this.setupSystemVariables()\n\t\treturn tryMutation(this.schema, this.schemaDatabaseMetadata, async () => {\n\t\t\tconst primaryValue = await this.getPrimaryValue(entity, by)\n\t\t\tif (primaryValue === undefined) {\n\t\t\t\treturn [new MutationEntryNotFoundError([], by)]\n\t\t\t}\n\t\t\treturn await this.updater.update(this, entity, primaryValue, data, filter)\n\t\t})\n\t}\n\n\tpublic async updateInternal(\n\t\tentity: Model.Entity,\n\t\tby: Input.UniqueWhere | CheckedPrimary,\n\t\tbuilderCb: (builder: UpdateBuilder) => void,\n\t): Promise<MutationResultList> {\n\t\tif (entity.view) {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\t\tawait this.setupSystemVariables()\n\t\treturn tryMutation(this.schema, this.schemaDatabaseMetadata, async () => {\n\t\t\tconst primaryValue = await this.getPrimaryValue(entity, by)\n\t\t\tif (primaryValue === undefined) {\n\t\t\t\treturn [new MutationEntryNotFoundError([], by as Input.UniqueWhere)]\n\t\t\t}\n\t\t\treturn await this.updater.updateCb(this, entity, primaryValue, builderCb)\n\t\t})\n\t}\n\tpublic async upsert(\n\t\tentity: Model.Entity,\n\t\tby: Input.UniqueWhere,\n\t\tupdate: Input.UpdateDataInput,\n\t\tcreate: Input.CreateDataInput,\n\t\tfilter?: Input.OptionalWhere,\n\t): Promise<MutationResultList> {\n\t\tif (entity.view) {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\t\tawait this.setupSystemVariables()\n\t\treturn tryMutation(this.schema, this.schemaDatabaseMetadata, async () => {\n\t\t\tconst primaryValue = await this.getPrimaryValue(entity, by)\n\t\t\tif (primaryValue === undefined) {\n\t\t\t\treturn await this.insertInternal(entity, create)\n\t\t\t}\n\t\t\treturn await this.updater.update(this, entity, primaryValue, update, filter)\n\t\t})\n\t}\n\n\tprivate insertInternal(entity: Model.Entity, data: Input.CreateDataInput, builderCb: (builder: InsertBuilder) => void = () => {}) {\n\t\treturn this.inserter.insert(this, entity, data, id => {\n\t\t\tconst where = { [entity.primary]: id }\n\t\t\tthis.primaryKeyCache[this.hashWhere(entity.name, where)] = id\n\t\t}, builderCb)\n\t}\n\n\tpublic async delete(\n\t\tentity: Model.Entity,\n\t\tby: Input.UniqueWhere | CheckedPrimary,\n\t\tfilter?: Input.OptionalWhere,\n\t): Promise<MutationResultList> {\n\t\tif (entity.view) {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\t\tawait this.setupSystemVariables()\n\t\treturn tryMutation(this.schema, this.schemaDatabaseMetadata, () => {\n\t\t\treturn this.deleteExecutor.execute(this, entity, by, filter)\n\t\t})\n\t}\n\n\tpublic async connectJunction(\n\t\tentity: Model.Entity,\n\t\trelation: Model.ManyHasManyOwningRelation | Model.ManyHasManyInverseRelation,\n\t\tthisPrimary: Input.PrimaryValue,\n\t\totherPrimary: Input.PrimaryValue,\n\t): Promise<MutationResultList> {\n\t\tawait this.setupSystemVariables()\n\t\tconst err = () => {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\t\treturn await acceptFieldVisitor(this.schema, entity, relation, {\n\t\t\tvisitManyHasManyOwning: ({ entity, relation }) => {\n\t\t\t\treturn this.junctionTableManager.connectJunction(this, entity, relation, thisPrimary, otherPrimary)\n\t\t\t},\n\t\t\tvisitManyHasManyInverse: ({ targetEntity, targetRelation }) => {\n\t\t\t\treturn this.junctionTableManager.connectJunction(this, targetEntity, targetRelation, otherPrimary, thisPrimary)\n\t\t\t},\n\t\t\tvisitColumn: err,\n\t\t\tvisitOneHasMany: err,\n\t\t\tvisitOneHasOneInverse: err,\n\t\t\tvisitOneHasOneOwning: err,\n\t\t\tvisitManyHasOne: err,\n\t\t})\n\t}\n\n\tpublic async disconnectJunction(\n\t\tentity: Model.Entity,\n\t\trelation: Model.ManyHasManyOwningRelation | Model.ManyHasManyInverseRelation,\n\t\tthisPrimary: Input.PrimaryValue,\n\t\totherPrimary: Input.PrimaryValue,\n\t): Promise<MutationResultList> {\n\t\tawait this.setupSystemVariables()\n\t\tconst err = () => {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\t\treturn await acceptFieldVisitor(this.schema, entity, relation, {\n\t\t\tvisitManyHasManyOwning: ({ entity, relation }) => {\n\t\t\t\treturn this.junctionTableManager.disconnectJunction(this, entity, relation, thisPrimary, otherPrimary)\n\t\t\t},\n\t\t\tvisitManyHasManyInverse: ({ targetEntity, targetRelation }) => {\n\t\t\t\treturn this.junctionTableManager.disconnectJunction(this, targetEntity, targetRelation, otherPrimary, thisPrimary)\n\t\t\t},\n\t\t\tvisitColumn: err,\n\t\t\tvisitOneHasMany: err,\n\t\t\tvisitOneHasOneInverse: err,\n\t\t\tvisitOneHasOneOwning: err,\n\t\t\tvisitManyHasOne: err,\n\t\t})\n\t}\n\n\tpublic async getPrimaryValue(\n\t\tentity: Model.Entity,\n\t\twhere: Input.UniqueWhere | CheckedPrimary,\n\t): Promise<Input.PrimaryValue | undefined> {\n\t\tif (where instanceof CheckedPrimary) {\n\t\t\treturn where.primaryValue\n\t\t}\n\t\tconst hash = this.hashWhere(entity.name, where)\n\t\tif (this.primaryKeyCache[hash]) {\n\t\t\treturn this.primaryKeyCache[hash]\n\t\t}\n\t\tconst primaryPromise = this.selectField(entity, where, entity.primary)\n\t\tthis.primaryKeyCache[hash] = primaryPromise\n\t\tconst primaryValue = await primaryPromise\n\t\tconst uniqueFields = Object.keys(where)\n\t\tif (primaryValue && (uniqueFields.length !== 1 || uniqueFields[0] !== entity.primary)) {\n\t\t\tthis.primaryKeyCache[this.hashWhere(entity.name, { [entity.primary]: primaryValue })] = primaryValue\n\t\t}\n\t\treturn primaryValue\n\t}\n\n\tprivate hashWhere(entityName: string, where: Input.UniqueWhere): string {\n\t\treturn JSON.stringify([entityName, where])\n\t}\n\n\tprivate async setupSystemVariables() {\n\t\tthis.systemVariablesSetupDone ??= (async () => {\n\t\t\tawait this.db.query('SELECT set_config(?, ?, false)', ['tenant.identity_id', this.identityId]) // todo rename to system.identity_id\n\t\t\tawait this.db.query('SELECT set_config(?, ?, false)', ['system.transaction_id', this.transactionId])\n\t\t})()\n\t\tawait this.systemVariablesSetupDone\n\t}\n}\n"],"names":["entity","relation"],"mappings":"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"}
1
+ {"version":3,"file":"Mapper.js","sources":["../../../../../packages/engine-content-api/src/mapper/Mapper.ts"],"sourcesContent":["import { Input, Model } from '@contember/schema'\nimport { acceptFieldVisitor, getColumnName } from '@contember/schema-utils'\nimport {\n\tOrderByHelper,\n\tPathFactory,\n\tSelectBuilderFactory,\n\tSelectGroupedObjects,\n\tSelectHydrator,\n\tSelectIndexedResultObjects,\n\tSelectResultObject,\n\tWhereBuilder,\n} from './select'\nimport { Client, Connection, ConstraintHelper, DatabaseMetadata, SelectBuilder } from '@contember/database'\nimport { PredicatesInjector } from '../acl'\nimport { JunctionTableManager } from './JunctionTableManager'\nimport { DeletedEntitiesStorage, DeleteExecutor } from './delete'\nimport { MutationEntryNotFoundError, MutationResultList } from './Result'\nimport { UpdateBuilder, Updater } from './update'\nimport { InsertBuilder, Inserter } from './insert'\nimport { tryMutation } from './ErrorUtils'\nimport { ObjectNode, UniqueWhereExpander } from '../inputProcessing'\nimport { Mutex } from '../utils'\nimport { CheckedPrimary } from './CheckedPrimary'\nimport { ImplementationException } from '../exception'\nimport { EventManager } from './EventManager'\nimport { MapperInput } from './types'\n\nexport class Mapper<ConnectionType extends Connection.ConnectionLike = Connection.ConnectionLike> {\n\tprivate systemVariablesSetupDone: Promise<void> | undefined\n\tpublic readonly deletedEntities = new DeletedEntitiesStorage()\n\tpublic readonly mutex = new Mutex()\n\tpublic readonly constraintHelper: ConstraintHelper\n\n\tpublic readonly eventManager: EventManager\n\n\tconstructor(\n\t\tpublic readonly db: Client<ConnectionType>,\n\t\tpublic readonly identityId: string,\n\t\tpublic readonly transactionId: string,\n\t\tprivate readonly schema: Model.Schema,\n\t\tprivate readonly schemaDatabaseMetadata: DatabaseMetadata,\n\t\tprivate readonly predicatesInjector: PredicatesInjector,\n\t\tprivate readonly selectBuilderFactory: SelectBuilderFactory,\n\t\tprivate readonly uniqueWhereExpander: UniqueWhereExpander,\n\t\tprivate readonly whereBuilder: WhereBuilder,\n\t\tprivate readonly junctionTableManager: JunctionTableManager,\n\t\tprivate readonly deleteExecutor: DeleteExecutor,\n\t\tprivate readonly updater: Updater,\n\t\tprivate readonly inserter: Inserter,\n\t\tprivate readonly pathFactory: PathFactory,\n\t) {\n\t\tthis.constraintHelper = new ConstraintHelper(db, this.schemaDatabaseMetadata)\n\t\tthis.eventManager = new EventManager(this)\n\t}\n\n\tpublic async selectField(entity: Model.Entity, where: Input.UniqueWhere | CheckedPrimary, fieldName: string) {\n\t\tconst columnName = getColumnName(this.schema, entity, fieldName)\n\n\t\tconst qb = SelectBuilder.create() //\n\t\t\t.from(entity.tableName, 'root_')\n\t\t\t.select(['root_', columnName])\n\t\tconst expandedWhere = this.uniqueWhereExpander.expand(entity, where)\n\t\tconst builtQb = this.whereBuilder.build(qb, entity, this.pathFactory.create([]), expandedWhere)\n\t\tconst result = await builtQb.getResult(this.db)\n\n\t\treturn result[0] !== undefined ? result[0][columnName] : undefined\n\t}\n\n\tpublic async selectAssoc(\n\t\tentity: Model.Entity,\n\t\tinput: ObjectNode<Input.ListQueryInput>,\n\t\trelationPath: Model.AnyRelationContext[],\n\t\tindexBy: string,\n\t): Promise<SelectIndexedResultObjects> {\n\t\tconst hydrator = new SelectHydrator()\n\t\tconst path = this.pathFactory.create([])\n\t\tconst indexByAlias: string = path.for(indexBy).alias\n\t\tconst qb: SelectBuilder = SelectBuilder.create()\n\t\t\t.select([path.alias, getColumnName(this.schema, entity, indexBy)], indexByAlias)\n\t\tconst rows = await this.selectRows(hydrator, qb, entity, input, relationPath)\n\t\treturn await hydrator.hydrateAll(rows, indexByAlias)\n\t}\n\n\tpublic async select(entity: Model.Entity, input: ObjectNode<Input.ListQueryInput>, relationPath: Model.AnyRelationContext[]): Promise<SelectResultObject[]> {\n\t\tconst hydrator = new SelectHydrator()\n\t\tconst qb: SelectBuilder<SelectBuilder.Result> = SelectBuilder.create()\n\n\t\tconst rows = await this.selectRows(hydrator, qb, entity, input, relationPath)\n\n\t\treturn await hydrator.hydrateAll(rows)\n\t}\n\n\tpublic async selectUnique(\n\t\tentity: Model.Entity,\n\t\tquery: ObjectNode<Input.UniqueQueryInput>,\n\t\trelationPath: Model.AnyRelationContext[],\n\t): Promise<SelectResultObject | null> {\n\t\tconst uniqueWhere = this.uniqueWhereExpander.expand(entity, query.args.by)\n\t\tconst where = query.args.filter ? { and: [uniqueWhere, query.args.filter] } : uniqueWhere\n\t\tconst queryExpanded = query.withArg<Input.ListQueryInput>('filter', where)\n\n\t\tconst rows = await this.select(entity, queryExpanded, relationPath)\n\n\t\treturn rows[0] ?? null\n\t}\n\n\tpublic async selectGrouped(\n\t\tentity: Model.Entity,\n\t\tinput: ObjectNode<Input.ListQueryInput>,\n\t\trelation: Model.JoiningColumnRelation & Model.AnyRelation,\n\t\trelationPath: Model.AnyRelationContext[],\n\t): Promise<SelectGroupedObjects> {\n\t\tconst hydrator = new SelectHydrator()\n\t\tconst path = this.pathFactory.create([])\n\t\tconst groupingKey = '__grouping_key'\n\t\tconst qb: SelectBuilder = SelectBuilder.create()\n\t\t\t.select([path.alias, relation.joiningColumn.columnName], groupingKey)\n\n\t\tconst rows = await this.selectRows(hydrator, qb, entity, input, relationPath, relation.name)\n\n\t\treturn await hydrator.hydrateGroups(rows, groupingKey)\n\t}\n\n\tprivate async selectRows(\n\t\thydrator: SelectHydrator,\n\t\tqb: SelectBuilder<SelectBuilder.Result>,\n\t\tentity: Model.Entity,\n\t\tinput: ObjectNode<Input.ListQueryInput>,\n\t\trelationPath: Model.AnyRelationContext[],\n\t\tgroupBy?: string,\n\t) {\n\t\tconst inputWithOrder = OrderByHelper.appendDefaultOrderBy(entity, input, undefined)\n\t\tconst path = this.pathFactory.create([])\n\t\tconst augmentedBuilder = qb.from(entity.tableName, path.alias).meta('path', [...input.path, input.alias])\n\n\t\tconst selector = this.selectBuilderFactory.create(augmentedBuilder, hydrator, relationPath)\n\t\tconst filterWithPredicates = this.predicatesInjector.inject(entity, inputWithOrder.args.filter || {}, relationPath[relationPath.length - 1])\n\t\tconst inputWithPredicates = inputWithOrder.withArg('filter', filterWithPredicates)\n\t\tselector.select(this, entity, inputWithPredicates, path, groupBy)\n\t\treturn await selector.execute(this.db)\n\t}\n\n\tpublic async count(entity: Model.Entity, filter: Input.OptionalWhere) {\n\t\tconst path = this.pathFactory.create([])\n\t\tconst qb = SelectBuilder.create()\n\t\t\t.from(entity.tableName, path.alias)\n\t\t\t.select(expr => expr.raw('count(*)'), 'row_count')\n\t\tconst withPredicates = this.predicatesInjector.inject(entity, filter)\n\t\tconst qbWithWhere = this.whereBuilder.build(qb, entity, path, withPredicates)\n\t\tconst result = await qbWithWhere.getResult(this.db)\n\t\treturn result[0].row_count\n\t}\n\n\tpublic async countGrouped(\n\t\tentity: Model.Entity,\n\t\tfilter: Input.OptionalWhere,\n\t\trelation: Model.JoiningColumnRelation & Model.Relation,\n\t\trelationPath: Model.AnyRelationContext[],\n\t): Promise<Record<string, number>> {\n\t\tconst path = this.pathFactory.create([])\n\t\tconst qb = SelectBuilder.create()\n\t\t\t.from(entity.tableName, path.alias)\n\t\t\t.select(expr => expr.raw('count(*)'), 'row_count')\n\t\t\t.select([path.alias, relation.joiningColumn.columnName])\n\t\t\t.groupBy([path.alias, relation.joiningColumn.columnName])\n\t\tconst withPredicates = this.predicatesInjector.inject(entity, filter, relationPath[relationPath.length - 1])\n\t\tconst qbWithWhere = this.whereBuilder.build(qb, entity, path, withPredicates, { relationPath })\n\t\tconst rows = await qbWithWhere.getResult(this.db)\n\t\tconst result = new Map<string, number>()\n\t\tfor (const row of rows) {\n\t\t\tresult.set(String(row[relation.joiningColumn.columnName]), Number(row.row_count))\n\t\t}\n\t\treturn Object.fromEntries(result)\n\t}\n\n\tpublic async insert(\n\t\tentity: Model.Entity,\n\t\tdata: MapperInput.CreateDataInput,\n\t\tbuilderCb: (builder: InsertBuilder) => void = () => {},\n\t): Promise<MutationResultList> {\n\t\tif (entity.view) {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\t\tawait this.setupSystemVariables()\n\t\treturn tryMutation(this.schema, this.schemaDatabaseMetadata, () =>\n\t\t\tthis.insertInternal(entity, data, builderCb),\n\t\t)\n\t}\n\n\tpublic async update(\n\t\tentity: Model.Entity,\n\t\tby: Input.UniqueWhere | CheckedPrimary,\n\t\tdata: MapperInput.UpdateDataInput,\n\t\tfilter?: Input.OptionalWhere,\n\t): Promise<MutationResultList> {\n\t\tif (entity.view) {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\t\tawait this.setupSystemVariables()\n\t\treturn tryMutation(this.schema, this.schemaDatabaseMetadata, async () => {\n\t\t\tconst [primaryValue, err] = await this.getPrimaryValue(entity, by)\n\t\t\tif (err) return [err]\n\n\t\t\treturn await this.updater.update(this, entity, primaryValue, data, filter)\n\t\t})\n\t}\n\n\tpublic async updateInternal(\n\t\tentity: Model.Entity,\n\t\tby: Input.UniqueWhere | CheckedPrimary,\n\t\tbuilderCb: (builder: UpdateBuilder) => void,\n\t): Promise<MutationResultList> {\n\t\tif (entity.view) {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\t\tawait this.setupSystemVariables()\n\t\treturn tryMutation(this.schema, this.schemaDatabaseMetadata, async () => {\n\t\t\tconst [primaryValue, err] = await this.getPrimaryValue(entity, by)\n\t\t\tif (err) return [err]\n\n\t\t\treturn await this.updater.updateCb(this, entity, primaryValue, builderCb)\n\t\t})\n\t}\n\tpublic async upsert(\n\t\tentity: Model.Entity,\n\t\tby: Input.UniqueWhere | CheckedPrimary,\n\t\tupdate: MapperInput.UpdateDataInput,\n\t\tcreate: MapperInput.CreateDataInput,\n\t\tfilter?: Input.OptionalWhere,\n\t): Promise<MutationResultList> {\n\t\tif (entity.view) {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\t\tawait this.setupSystemVariables()\n\t\treturn tryMutation(this.schema, this.schemaDatabaseMetadata, async () => {\n\t\t\tconst [primaryValue] = await this.getPrimaryValue(entity, by)\n\t\t\tif (primaryValue === undefined) {\n\t\t\t\treturn await this.insertInternal(entity, create)\n\t\t\t}\n\t\t\treturn await this.updater.update(this, entity, primaryValue, update, filter)\n\t\t})\n\t}\n\n\tprivate insertInternal(entity: Model.Entity, data: MapperInput.CreateDataInput, builderCb: (builder: InsertBuilder) => void = () => {}) {\n\t\treturn this.inserter.insert(this, entity, data, id => {\n\t\t}, builderCb)\n\t}\n\n\tpublic async delete(\n\t\tentity: Model.Entity,\n\t\tby: Input.UniqueWhere | CheckedPrimary,\n\t\tfilter?: Input.OptionalWhere,\n\t): Promise<MutationResultList> {\n\t\tif (entity.view) {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\t\tawait this.setupSystemVariables()\n\t\treturn tryMutation(this.schema, this.schemaDatabaseMetadata, () => {\n\t\t\treturn this.deleteExecutor.execute(this, entity, by, filter)\n\t\t})\n\t}\n\n\tpublic async connectJunction(\n\t\tentity: Model.Entity,\n\t\trelation: Model.ManyHasManyOwningRelation | Model.ManyHasManyInverseRelation,\n\t\tthisPrimary: Input.PrimaryValue,\n\t\totherPrimary: Input.PrimaryValue,\n\t): Promise<MutationResultList> {\n\t\tawait this.setupSystemVariables()\n\t\tconst err = () => {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\t\treturn await acceptFieldVisitor(this.schema, entity, relation, {\n\t\t\tvisitManyHasManyOwning: ({ entity, relation }) => {\n\t\t\t\treturn this.junctionTableManager.connectJunction(this, entity, relation, thisPrimary, otherPrimary)\n\t\t\t},\n\t\t\tvisitManyHasManyInverse: ({ targetEntity, targetRelation }) => {\n\t\t\t\treturn this.junctionTableManager.connectJunction(this, targetEntity, targetRelation, otherPrimary, thisPrimary)\n\t\t\t},\n\t\t\tvisitColumn: err,\n\t\t\tvisitOneHasMany: err,\n\t\t\tvisitOneHasOneInverse: err,\n\t\t\tvisitOneHasOneOwning: err,\n\t\t\tvisitManyHasOne: err,\n\t\t})\n\t}\n\n\tpublic async disconnectJunction(\n\t\tentity: Model.Entity,\n\t\trelation: Model.ManyHasManyOwningRelation | Model.ManyHasManyInverseRelation,\n\t\tthisPrimary: Input.PrimaryValue,\n\t\totherPrimary: Input.PrimaryValue,\n\t): Promise<MutationResultList> {\n\t\tawait this.setupSystemVariables()\n\t\tconst err = () => {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\t\treturn await acceptFieldVisitor(this.schema, entity, relation, {\n\t\t\tvisitManyHasManyOwning: ({ entity, relation }) => {\n\t\t\t\treturn this.junctionTableManager.disconnectJunction(this, entity, relation, thisPrimary, otherPrimary)\n\t\t\t},\n\t\t\tvisitManyHasManyInverse: ({ targetEntity, targetRelation }) => {\n\t\t\t\treturn this.junctionTableManager.disconnectJunction(this, targetEntity, targetRelation, otherPrimary, thisPrimary)\n\t\t\t},\n\t\t\tvisitColumn: err,\n\t\t\tvisitOneHasMany: err,\n\t\t\tvisitOneHasOneInverse: err,\n\t\t\tvisitOneHasOneOwning: err,\n\t\t\tvisitManyHasOne: err,\n\t\t})\n\t}\n\n\tpublic async getPrimaryValue(\n\t\tentity: Model.Entity,\n\t\twhere: Input.UniqueWhere | CheckedPrimary,\n\t): Promise<[Input.PrimaryValue, undefined] | [undefined, MutationEntryNotFoundError]> {\n\t\tif (where instanceof CheckedPrimary) {\n\t\t\treturn [where.primaryValue, undefined]\n\t\t}\n\t\tconst result = await this.selectField(entity, where, entity.primary)\n\t\treturn result ? [result, undefined] : [undefined, new MutationEntryNotFoundError([], where)]\n\t}\n\n\tprivate async setupSystemVariables() {\n\t\tthis.systemVariablesSetupDone ??= (async () => {\n\t\t\tawait this.db.query('SELECT set_config(?, ?, false)', ['tenant.identity_id', this.identityId]) // todo rename to system.identity_id\n\t\t\tawait this.db.query('SELECT set_config(?, ?, false)', ['system.transaction_id', this.transactionId])\n\t\t})()\n\t\tawait this.systemVariablesSetupDone\n\t}\n}\n"],"names":["entity","relation"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"MapperFactory.cjs","sources":["../../../../../packages/engine-content-api/src/mapper/MapperFactory.ts"],"sourcesContent":["import { PredicatesInjector } from '../acl'\nimport { PathFactory, SelectBuilderFactory, WhereBuilder } from './select'\nimport { UniqueWhereExpander } from '../inputProcessing'\nimport { JunctionTableManager } from './JunctionTableManager'\nimport { DeleteExecutor } from './delete'\nimport { Updater } from './update'\nimport { Inserter } from './insert'\nimport { Model } from '@contember/schema'\nimport { Client, Connection, DatabaseMetadata } from '@contember/database'\nimport { Mapper } from './Mapper'\nimport { Providers } from '@contember/schema-utils'\n\nexport type MapperFactoryHook = (mapper: Mapper) => void\n\nexport class MapperFactory {\n\n\tpublic readonly hooks: MapperFactoryHook[] = []\n\n\tconstructor(\n\t\tprivate readonly db: Client,\n\t\tprivate readonly identityId: string,\n\t\tprivate readonly schema: Model.Schema,\n\t\tprivate readonly schemaDatabaseMetadata: DatabaseMetadata,\n\t\tprivate readonly predicatesInjector: PredicatesInjector,\n\t\tprivate readonly selectBuilderFactory: SelectBuilderFactory,\n\t\tprivate readonly uniqueWhereExpander: UniqueWhereExpander,\n\t\tprivate readonly whereBuilder: WhereBuilder,\n\t\tprivate readonly junctionTableManager: JunctionTableManager,\n\t\tprivate readonly deleteExecutor: DeleteExecutor,\n\t\tprivate readonly updater: Updater,\n\t\tprivate readonly inserter: Inserter,\n\t\tprivate readonly pathFactory: PathFactory,\n\t\tprivate readonly providers: Providers,\n\t) {\n\t}\n\n\tpublic create() {\n\t\treturn this.createInternal(this.db)\n\t}\n\n\tpublic transaction<T>(cb: (mapper: Mapper<Connection.TransactionLike>) => Promise<T>): Promise<T> {\n\t\treturn this.db.transaction(async trx => {\n\t\t\tawait trx.connection.query(Connection.REPEATABLE_READ)\n\t\t\tconst mapper = this.createInternal(trx)\n\t\t\treturn await cb(mapper)\n\t\t})\n\t}\n\n\tprivate createInternal<T extends Connection.ConnectionLike>(db: Client<T>) {\n\t\tconst mapper = new Mapper<T>(\n\t\t\tdb,\n\t\t\tthis.identityId,\n\t\t\tthis.providers.uuid(),\n\t\t\tthis.schema,\n\t\t\tthis.schemaDatabaseMetadata,\n\t\t\tthis.predicatesInjector,\n\t\t\tthis.selectBuilderFactory,\n\t\t\tthis.uniqueWhereExpander,\n\t\t\tthis.whereBuilder,\n\t\t\tthis.junctionTableManager,\n\t\t\tthis.deleteExecutor,\n\t\t\tthis.updater,\n\t\t\tthis.inserter,\n\t\t\tthis.pathFactory,\n\t\t)\n\t\tthis.hooks.forEach(it => it(mapper))\n\t\treturn mapper\n\t}\n}\n"],"names":["Connection","Mapper"],"mappings":";;;;;;;AAcO,MAAM,cAAc;AAAA,EAI1B,YACkB,IACA,YACA,QACA,wBACA,oBACA,sBACA,qBACA,cACA,sBACA,gBACA,SACA,UACA,aACA,WAChB;AAdgB,SAAA,KAAA;AACA,SAAA,aAAA;AACA,SAAA,SAAA;AACA,SAAA,yBAAA;AACA,SAAA,qBAAA;AACA,SAAA,uBAAA;AACA,SAAA,sBAAA;AACA,SAAA,eAAA;AACA,SAAA,uBAAA;AACA,SAAA,iBAAA;AACA,SAAA,UAAA;AACA,SAAA,WAAA;AACA,SAAA,cAAA;AACA,SAAA,YAAA;AAhBlB,kBAAA,MAAgB,SAA6B,CAAA,CAAC;AAAA,EAkB9C;AAAA,EAEO,SAAS;AACR,WAAA,KAAK,eAAe,KAAK,EAAE;AAAA,EACnC;AAAA,EAEO,YAAe,IAA4E;AACjG,WAAO,KAAK,GAAG,YAAY,OAAM,QAAO;AACvC,YAAM,IAAI,WAAW,MAAMA,SAAA,WAAW,eAAe;AAC/C,YAAA,SAAS,KAAK,eAAe,GAAG;AAC/B,aAAA,MAAM,GAAG,MAAM;AAAA,IAAA,CACtB;AAAA,EACF;AAAA,EAEQ,eAAoD,IAAe;AAC1E,UAAM,SAAS,IAAIC,OAAA;AAAA,MAClB;AAAA,MACA,KAAK;AAAA,MACL,KAAK,UAAU,KAAK;AAAA,MACpB,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,IAAA;AAEN,SAAK,MAAM,QAAQ,CAAM,OAAA,GAAG,MAAM,CAAC;AAC5B,WAAA;AAAA,EACR;AACD;;"}
1
+ {"version":3,"file":"MapperFactory.cjs","sources":["../../../../../packages/engine-content-api/src/mapper/MapperFactory.ts"],"sourcesContent":["import { PredicatesInjector } from '../acl'\nimport { PathFactory, SelectBuilderFactory, WhereBuilder } from './select'\nimport { UniqueWhereExpander } from '../inputProcessing'\nimport { JunctionTableManager } from './JunctionTableManager'\nimport { DeleteExecutor } from './delete'\nimport { Updater } from './update'\nimport { Inserter } from './insert'\nimport { Model } from '@contember/schema'\nimport { Client, Connection, DatabaseMetadata } from '@contember/database'\nimport { Mapper } from './Mapper'\nimport { Providers } from '@contember/schema-utils'\n\nexport type MapperFactoryHook = (mapper: Mapper) => void\n\nexport class MapperFactory {\n\n\tpublic readonly hooks: MapperFactoryHook[] = []\n\n\tconstructor(\n\t\tprivate readonly db: Client,\n\t\tprivate readonly identityId: string,\n\t\tprivate readonly schema: Model.Schema,\n\t\tprivate readonly schemaDatabaseMetadata: DatabaseMetadata,\n\t\tprivate readonly predicatesInjector: PredicatesInjector,\n\t\tprivate readonly selectBuilderFactory: SelectBuilderFactory,\n\t\tprivate readonly uniqueWhereExpander: UniqueWhereExpander,\n\t\tprivate readonly whereBuilder: WhereBuilder,\n\t\tprivate readonly junctionTableManager: JunctionTableManager,\n\t\tprivate readonly deleteExecutor: DeleteExecutor,\n\t\tprivate readonly updater: Updater,\n\t\tprivate readonly inserter: Inserter,\n\t\tprivate readonly pathFactory: PathFactory,\n\t\tprivate readonly providers: Providers,\n\t) {\n\t}\n\n\tpublic create() {\n\t\treturn this.createInternal(this.db)\n\t}\n\n\tpublic transaction<T>(cb: (mapper: Mapper<Connection.TransactionLike>) => Promise<T>): Promise<T> {\n\t\treturn this.db.transaction(async trx => {\n\t\t\tawait trx.connection.query(Connection.REPEATABLE_READ)\n\t\t\tconst mapper = this.createInternal(trx)\n\t\t\treturn await cb(mapper)\n\t\t})\n\t}\n\n\tprivate createInternal<T extends Connection.ConnectionLike>(db: Client<T>) {\n\t\tconst mapper = new Mapper<T>(\n\t\t\tdb,\n\t\t\tthis.identityId,\n\t\t\tthis.providers.uuid(),\n\t\t\tthis.schema,\n\t\t\tthis.schemaDatabaseMetadata,\n\t\t\tthis.predicatesInjector,\n\t\t\tthis.selectBuilderFactory,\n\t\t\tthis.uniqueWhereExpander,\n\t\t\tthis.whereBuilder,\n\t\t\tthis.junctionTableManager,\n\t\t\tthis.deleteExecutor,\n\t\t\tthis.updater,\n\t\t\tthis.inserter,\n\t\t\tthis.pathFactory,\n\t\t)\n\t\tthis.hooks.forEach(it => it(mapper))\n\t\treturn mapper\n\t}\n}\n"],"names":["Connection","Mapper"],"mappings":";;;;;;;AAcO,MAAM,cAAc;AAAA,EAI1B,YACkB,IACA,YACA,QACA,wBACA,oBACA,sBACA,qBACA,cACA,sBACA,gBACA,SACA,UACA,aACA,WAChB;AAdgB,SAAA,KAAA;AACA,SAAA,aAAA;AACA,SAAA,SAAA;AACA,SAAA,yBAAA;AACA,SAAA,qBAAA;AACA,SAAA,uBAAA;AACA,SAAA,sBAAA;AACA,SAAA,eAAA;AACA,SAAA,uBAAA;AACA,SAAA,iBAAA;AACA,SAAA,UAAA;AACA,SAAA,WAAA;AACA,SAAA,cAAA;AACA,SAAA,YAAA;AAhBlB,kBAAA,MAAgB,SAA6B,EAAC;AAAA,EAAA;AAAA,EAoBvC,SAAS;AACR,WAAA,KAAK,eAAe,KAAK,EAAE;AAAA,EAAA;AAAA,EAG5B,YAAe,IAA4E;AACjG,WAAO,KAAK,GAAG,YAAY,OAAM,QAAO;AACvC,YAAM,IAAI,WAAW,MAAMA,SAAAA,WAAW,eAAe;AAC/C,YAAA,SAAS,KAAK,eAAe,GAAG;AAC/B,aAAA,MAAM,GAAG,MAAM;AAAA,IAAA,CACtB;AAAA,EAAA;AAAA,EAGM,eAAoD,IAAe;AAC1E,UAAM,SAAS,IAAIC,OAAA;AAAA,MAClB;AAAA,MACA,KAAK;AAAA,MACL,KAAK,UAAU,KAAK;AAAA,MACpB,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,IACN;AACA,SAAK,MAAM,QAAQ,CAAM,OAAA,GAAG,MAAM,CAAC;AAC5B,WAAA;AAAA,EAAA;AAET;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"MapperFactory.js","sources":["../../../../../packages/engine-content-api/src/mapper/MapperFactory.ts"],"sourcesContent":["import { PredicatesInjector } from '../acl'\nimport { PathFactory, SelectBuilderFactory, WhereBuilder } from './select'\nimport { UniqueWhereExpander } from '../inputProcessing'\nimport { JunctionTableManager } from './JunctionTableManager'\nimport { DeleteExecutor } from './delete'\nimport { Updater } from './update'\nimport { Inserter } from './insert'\nimport { Model } from '@contember/schema'\nimport { Client, Connection, DatabaseMetadata } from '@contember/database'\nimport { Mapper } from './Mapper'\nimport { Providers } from '@contember/schema-utils'\n\nexport type MapperFactoryHook = (mapper: Mapper) => void\n\nexport class MapperFactory {\n\n\tpublic readonly hooks: MapperFactoryHook[] = []\n\n\tconstructor(\n\t\tprivate readonly db: Client,\n\t\tprivate readonly identityId: string,\n\t\tprivate readonly schema: Model.Schema,\n\t\tprivate readonly schemaDatabaseMetadata: DatabaseMetadata,\n\t\tprivate readonly predicatesInjector: PredicatesInjector,\n\t\tprivate readonly selectBuilderFactory: SelectBuilderFactory,\n\t\tprivate readonly uniqueWhereExpander: UniqueWhereExpander,\n\t\tprivate readonly whereBuilder: WhereBuilder,\n\t\tprivate readonly junctionTableManager: JunctionTableManager,\n\t\tprivate readonly deleteExecutor: DeleteExecutor,\n\t\tprivate readonly updater: Updater,\n\t\tprivate readonly inserter: Inserter,\n\t\tprivate readonly pathFactory: PathFactory,\n\t\tprivate readonly providers: Providers,\n\t) {\n\t}\n\n\tpublic create() {\n\t\treturn this.createInternal(this.db)\n\t}\n\n\tpublic transaction<T>(cb: (mapper: Mapper<Connection.TransactionLike>) => Promise<T>): Promise<T> {\n\t\treturn this.db.transaction(async trx => {\n\t\t\tawait trx.connection.query(Connection.REPEATABLE_READ)\n\t\t\tconst mapper = this.createInternal(trx)\n\t\t\treturn await cb(mapper)\n\t\t})\n\t}\n\n\tprivate createInternal<T extends Connection.ConnectionLike>(db: Client<T>) {\n\t\tconst mapper = new Mapper<T>(\n\t\t\tdb,\n\t\t\tthis.identityId,\n\t\t\tthis.providers.uuid(),\n\t\t\tthis.schema,\n\t\t\tthis.schemaDatabaseMetadata,\n\t\t\tthis.predicatesInjector,\n\t\t\tthis.selectBuilderFactory,\n\t\t\tthis.uniqueWhereExpander,\n\t\t\tthis.whereBuilder,\n\t\t\tthis.junctionTableManager,\n\t\t\tthis.deleteExecutor,\n\t\t\tthis.updater,\n\t\t\tthis.inserter,\n\t\t\tthis.pathFactory,\n\t\t)\n\t\tthis.hooks.forEach(it => it(mapper))\n\t\treturn mapper\n\t}\n}\n"],"names":[],"mappings":";;;;;AAcO,MAAM,cAAc;AAAA,EAI1B,YACkB,IACA,YACA,QACA,wBACA,oBACA,sBACA,qBACA,cACA,sBACA,gBACA,SACA,UACA,aACA,WAChB;AAdgB,SAAA,KAAA;AACA,SAAA,aAAA;AACA,SAAA,SAAA;AACA,SAAA,yBAAA;AACA,SAAA,qBAAA;AACA,SAAA,uBAAA;AACA,SAAA,sBAAA;AACA,SAAA,eAAA;AACA,SAAA,uBAAA;AACA,SAAA,iBAAA;AACA,SAAA,UAAA;AACA,SAAA,WAAA;AACA,SAAA,cAAA;AACA,SAAA,YAAA;AAhBlB,kBAAA,MAAgB,SAA6B,CAAA,CAAC;AAAA,EAkB9C;AAAA,EAEO,SAAS;AACR,WAAA,KAAK,eAAe,KAAK,EAAE;AAAA,EACnC;AAAA,EAEO,YAAe,IAA4E;AACjG,WAAO,KAAK,GAAG,YAAY,OAAM,QAAO;AACvC,YAAM,IAAI,WAAW,MAAM,WAAW,eAAe;AAC/C,YAAA,SAAS,KAAK,eAAe,GAAG;AAC/B,aAAA,MAAM,GAAG,MAAM;AAAA,IAAA,CACtB;AAAA,EACF;AAAA,EAEQ,eAAoD,IAAe;AAC1E,UAAM,SAAS,IAAI;AAAA,MAClB;AAAA,MACA,KAAK;AAAA,MACL,KAAK,UAAU,KAAK;AAAA,MACpB,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,IAAA;AAEN,SAAK,MAAM,QAAQ,CAAM,OAAA,GAAG,MAAM,CAAC;AAC5B,WAAA;AAAA,EACR;AACD;"}
1
+ {"version":3,"file":"MapperFactory.js","sources":["../../../../../packages/engine-content-api/src/mapper/MapperFactory.ts"],"sourcesContent":["import { PredicatesInjector } from '../acl'\nimport { PathFactory, SelectBuilderFactory, WhereBuilder } from './select'\nimport { UniqueWhereExpander } from '../inputProcessing'\nimport { JunctionTableManager } from './JunctionTableManager'\nimport { DeleteExecutor } from './delete'\nimport { Updater } from './update'\nimport { Inserter } from './insert'\nimport { Model } from '@contember/schema'\nimport { Client, Connection, DatabaseMetadata } from '@contember/database'\nimport { Mapper } from './Mapper'\nimport { Providers } from '@contember/schema-utils'\n\nexport type MapperFactoryHook = (mapper: Mapper) => void\n\nexport class MapperFactory {\n\n\tpublic readonly hooks: MapperFactoryHook[] = []\n\n\tconstructor(\n\t\tprivate readonly db: Client,\n\t\tprivate readonly identityId: string,\n\t\tprivate readonly schema: Model.Schema,\n\t\tprivate readonly schemaDatabaseMetadata: DatabaseMetadata,\n\t\tprivate readonly predicatesInjector: PredicatesInjector,\n\t\tprivate readonly selectBuilderFactory: SelectBuilderFactory,\n\t\tprivate readonly uniqueWhereExpander: UniqueWhereExpander,\n\t\tprivate readonly whereBuilder: WhereBuilder,\n\t\tprivate readonly junctionTableManager: JunctionTableManager,\n\t\tprivate readonly deleteExecutor: DeleteExecutor,\n\t\tprivate readonly updater: Updater,\n\t\tprivate readonly inserter: Inserter,\n\t\tprivate readonly pathFactory: PathFactory,\n\t\tprivate readonly providers: Providers,\n\t) {\n\t}\n\n\tpublic create() {\n\t\treturn this.createInternal(this.db)\n\t}\n\n\tpublic transaction<T>(cb: (mapper: Mapper<Connection.TransactionLike>) => Promise<T>): Promise<T> {\n\t\treturn this.db.transaction(async trx => {\n\t\t\tawait trx.connection.query(Connection.REPEATABLE_READ)\n\t\t\tconst mapper = this.createInternal(trx)\n\t\t\treturn await cb(mapper)\n\t\t})\n\t}\n\n\tprivate createInternal<T extends Connection.ConnectionLike>(db: Client<T>) {\n\t\tconst mapper = new Mapper<T>(\n\t\t\tdb,\n\t\t\tthis.identityId,\n\t\t\tthis.providers.uuid(),\n\t\t\tthis.schema,\n\t\t\tthis.schemaDatabaseMetadata,\n\t\t\tthis.predicatesInjector,\n\t\t\tthis.selectBuilderFactory,\n\t\t\tthis.uniqueWhereExpander,\n\t\t\tthis.whereBuilder,\n\t\t\tthis.junctionTableManager,\n\t\t\tthis.deleteExecutor,\n\t\t\tthis.updater,\n\t\t\tthis.inserter,\n\t\t\tthis.pathFactory,\n\t\t)\n\t\tthis.hooks.forEach(it => it(mapper))\n\t\treturn mapper\n\t}\n}\n"],"names":[],"mappings":";;;;;AAcO,MAAM,cAAc;AAAA,EAI1B,YACkB,IACA,YACA,QACA,wBACA,oBACA,sBACA,qBACA,cACA,sBACA,gBACA,SACA,UACA,aACA,WAChB;AAdgB,SAAA,KAAA;AACA,SAAA,aAAA;AACA,SAAA,SAAA;AACA,SAAA,yBAAA;AACA,SAAA,qBAAA;AACA,SAAA,uBAAA;AACA,SAAA,sBAAA;AACA,SAAA,eAAA;AACA,SAAA,uBAAA;AACA,SAAA,iBAAA;AACA,SAAA,UAAA;AACA,SAAA,WAAA;AACA,SAAA,cAAA;AACA,SAAA,YAAA;AAhBlB,kBAAA,MAAgB,SAA6B,EAAC;AAAA,EAAA;AAAA,EAoBvC,SAAS;AACR,WAAA,KAAK,eAAe,KAAK,EAAE;AAAA,EAAA;AAAA,EAG5B,YAAe,IAA4E;AACjG,WAAO,KAAK,GAAG,YAAY,OAAM,QAAO;AACvC,YAAM,IAAI,WAAW,MAAM,WAAW,eAAe;AAC/C,YAAA,SAAS,KAAK,eAAe,GAAG;AAC/B,aAAA,MAAM,GAAG,MAAM;AAAA,IAAA,CACtB;AAAA,EAAA;AAAA,EAGM,eAAoD,IAAe;AAC1E,UAAM,SAAS,IAAI;AAAA,MAClB;AAAA,MACA,KAAK;AAAA,MACL,KAAK,UAAU,KAAK;AAAA,MACpB,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,IACN;AACA,SAAK,MAAM,QAAQ,CAAM,OAAA,GAAG,MAAM,CAAC;AAC5B,WAAA;AAAA,EAAA;AAET;"}
@@ -5,14 +5,22 @@ const hasManyProcessor = (innerProcessor) => {
5
5
  return async (context) => {
6
6
  const { relation, index, alias } = context;
7
7
  const path = [{ field: relation.name }, { index, alias }];
8
- return Result.prependPath(path, await innerProcessor(context));
8
+ const innerResult = await innerProcessor(context);
9
+ if (typeof innerResult === "function") {
10
+ return async (it) => Result.prependPath(path, await innerResult(it));
11
+ }
12
+ return Result.prependPath(path, innerResult);
9
13
  };
10
14
  };
11
15
  const hasOneProcessor = (innerProcessor) => {
12
16
  return async (context) => {
13
17
  const { relation } = context;
14
18
  const path = [{ field: relation.name }];
15
- return Result.prependPath(path, await innerProcessor(context));
19
+ const innerResult = await innerProcessor(context);
20
+ if (typeof innerResult === "function") {
21
+ return async (it) => Result.prependPath(path, await innerResult(it));
22
+ }
23
+ return Result.prependPath(path, innerResult);
16
24
  };
17
25
  };
18
26
  exports.hasManyProcessor = hasManyProcessor;