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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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 +10 -29
  110. package/dist/development/src/mapper/Mapper.cjs.map +1 -1
  111. package/dist/development/src/mapper/Mapper.js +10 -29
  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 +10 -29
  434. package/dist/production/src/mapper/Mapper.cjs.map +1 -1
  435. package/dist/production/src/mapper/Mapper.js +10 -29
  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 +21 -38
  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 +69 -2
  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":"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"}
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());
@@ -44,7 +43,8 @@ class Mapper {
44
43
  const columnName = schemaUtils.getColumnName(this.schema, entity, fieldName);
45
44
  const qb = Database.SelectBuilder.create().from(entity.tableName, "root_").select(["root_", columnName]);
46
45
  const expandedWhere = this.uniqueWhereExpander.expand(entity, where);
47
- const builtQb = this.whereBuilder.build(qb, entity, this.pathFactory.create([]), expandedWhere);
46
+ const withPredicates = this.predicatesInjector.inject(entity, expandedWhere);
47
+ const builtQb = this.whereBuilder.build(qb, entity, this.pathFactory.create([]), withPredicates);
48
48
  const result = await builtQb.getResult(this.db);
49
49
  return result[0] !== void 0 ? result[0][columnName] : void 0;
50
50
  }
@@ -125,10 +125,8 @@ class Mapper {
125
125
  }
126
126
  await this.setupSystemVariables();
127
127
  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
- }
128
+ const [primaryValue, err] = await this.getPrimaryValue(entity, by);
129
+ if (err) return [err];
132
130
  return await this.updater.update(this, entity, primaryValue, data, filter);
133
131
  });
134
132
  }
@@ -138,10 +136,8 @@ class Mapper {
138
136
  }
139
137
  await this.setupSystemVariables();
140
138
  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
- }
139
+ const [primaryValue, err] = await this.getPrimaryValue(entity, by);
140
+ if (err) return [err];
145
141
  return await this.updater.updateCb(this, entity, primaryValue, builderCb);
146
142
  });
147
143
  }
@@ -151,7 +147,7 @@ class Mapper {
151
147
  }
152
148
  await this.setupSystemVariables();
153
149
  return ErrorUtils.tryMutation(this.schema, this.schemaDatabaseMetadata, async () => {
154
- const primaryValue = await this.getPrimaryValue(entity, by);
150
+ const [primaryValue] = await this.getPrimaryValue(entity, by);
155
151
  if (primaryValue === void 0) {
156
152
  return await this.insertInternal(entity, create);
157
153
  }
@@ -161,8 +157,6 @@ class Mapper {
161
157
  insertInternal(entity, data, builderCb = () => {
162
158
  }) {
163
159
  return this.inserter.insert(this, entity, data, (id) => {
164
- const where = { [entity.primary]: id };
165
- this.primaryKeyCache[this.hashWhere(entity.name, where)] = id;
166
160
  }, builderCb);
167
161
  }
168
162
  async delete(entity, by, filter) {
@@ -214,23 +208,10 @@ class Mapper {
214
208
  }
215
209
  async getPrimaryValue(entity, where) {
216
210
  if (where instanceof CheckedPrimary.CheckedPrimary) {
217
- return where.primaryValue;
211
+ return [where.primaryValue, void 0];
218
212
  }
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]);
213
+ const result = await this.selectField(entity, where, entity.primary);
214
+ return result ? [result, void 0] : [void 0, new Result.MutationEntryNotFoundError([], where)];
234
215
  }
235
216
  async setupSystemVariables() {
236
217
  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 withPredicates = this.predicatesInjector.inject(entity, expandedWhere)\n\t\tconst builtQb = this.whereBuilder.build(qb, entity, this.pathFactory.create([]), withPredicates)\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());
@@ -42,7 +41,8 @@ class Mapper {
42
41
  const columnName = getColumnName(this.schema, entity, fieldName);
43
42
  const qb = SelectBuilder.create().from(entity.tableName, "root_").select(["root_", columnName]);
44
43
  const expandedWhere = this.uniqueWhereExpander.expand(entity, where);
45
- const builtQb = this.whereBuilder.build(qb, entity, this.pathFactory.create([]), expandedWhere);
44
+ const withPredicates = this.predicatesInjector.inject(entity, expandedWhere);
45
+ const builtQb = this.whereBuilder.build(qb, entity, this.pathFactory.create([]), withPredicates);
46
46
  const result = await builtQb.getResult(this.db);
47
47
  return result[0] !== void 0 ? result[0][columnName] : void 0;
48
48
  }
@@ -123,10 +123,8 @@ class Mapper {
123
123
  }
124
124
  await this.setupSystemVariables();
125
125
  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
- }
126
+ const [primaryValue, err] = await this.getPrimaryValue(entity, by);
127
+ if (err) return [err];
130
128
  return await this.updater.update(this, entity, primaryValue, data, filter);
131
129
  });
132
130
  }
@@ -136,10 +134,8 @@ class Mapper {
136
134
  }
137
135
  await this.setupSystemVariables();
138
136
  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
- }
137
+ const [primaryValue, err] = await this.getPrimaryValue(entity, by);
138
+ if (err) return [err];
143
139
  return await this.updater.updateCb(this, entity, primaryValue, builderCb);
144
140
  });
145
141
  }
@@ -149,7 +145,7 @@ class Mapper {
149
145
  }
150
146
  await this.setupSystemVariables();
151
147
  return tryMutation(this.schema, this.schemaDatabaseMetadata, async () => {
152
- const primaryValue = await this.getPrimaryValue(entity, by);
148
+ const [primaryValue] = await this.getPrimaryValue(entity, by);
153
149
  if (primaryValue === void 0) {
154
150
  return await this.insertInternal(entity, create);
155
151
  }
@@ -159,8 +155,6 @@ class Mapper {
159
155
  insertInternal(entity, data, builderCb = () => {
160
156
  }) {
161
157
  return this.inserter.insert(this, entity, data, (id) => {
162
- const where = { [entity.primary]: id };
163
- this.primaryKeyCache[this.hashWhere(entity.name, where)] = id;
164
158
  }, builderCb);
165
159
  }
166
160
  async delete(entity, by, filter) {
@@ -212,23 +206,10 @@ class Mapper {
212
206
  }
213
207
  async getPrimaryValue(entity, where) {
214
208
  if (where instanceof CheckedPrimary) {
215
- return where.primaryValue;
209
+ return [where.primaryValue, void 0];
216
210
  }
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]);
211
+ const result = await this.selectField(entity, where, entity.primary);
212
+ return result ? [result, void 0] : [void 0, new MutationEntryNotFoundError([], where)];
232
213
  }
233
214
  async setupSystemVariables() {
234
215
  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":";;;;;;;;;;;;;;;AA0BO,MAAM,OAAqF;AAAA,EASjG,YACiB,IACA,YACA,eACC,QACA,wBACA,oBACA,sBACA,qBACA,cACA,sBACA,gBACA,SACA,UACA,aAChB;AAde,SAAA,KAAA;AACA,SAAA,aAAA;AACA,SAAA,gBAAA;AACC,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;AAtBlB,kBAAA,MAAQ,mBAA4D,CAAA,CAAC;AAC7D,kBAAA,MAAA,0BAAA;AACQ,kBAAA,MAAA,mBAAkB,IAAI,uBAAuB,CAAA;AAC7C,kBAAA,MAAA,SAAQ,IAAI,MAAM,CAAA;AAClB,kBAAA,MAAA,kBAAA;AAEA,kBAAA,MAAA,cAAA;AAkBf,SAAK,mBAAmB,IAAI,iBAAiB,IAAI,KAAK,sBAAsB;AACvE,SAAA,eAAe,IAAI,aAAa,IAAI;AAAA,EAC1C;AAAA,EAEA,MAAa,YAAY,QAAsB,OAA2C,WAAmB;AAC5G,UAAM,aAAa,cAAc,KAAK,QAAQ,QAAQ,SAAS;AAE/D,UAAM,KAAK,cAAc,OAAO,EAC9B,KAAK,OAAO,WAAW,OAAO,EAC9B,OAAO,CAAC,SAAS,UAAU,CAAC;AAC9B,UAAM,gBAAgB,KAAK,oBAAoB,OAAO,QAAQ,KAAK;AACnE,UAAM,UAAU,KAAK,aAAa,MAAM,IAAI,QAAQ,KAAK,YAAY,OAAO,EAAE,GAAG,aAAa;AAC9F,UAAM,SAAS,MAAM,QAAQ,UAAU,KAAK,EAAE;AAEvC,WAAA,OAAO,CAAC,MAAM,SAAY,OAAO,CAAC,EAAE,UAAU,IAAI;AAAA,EAC1D;AAAA,EAEA,MAAa,YACZ,QACA,OACA,cACA,SACsC;AAChC,UAAA,WAAW,IAAI;AACrB,UAAM,OAAO,KAAK,YAAY,OAAO,CAAE,CAAA;AACvC,UAAM,eAAuB,KAAK,IAAI,OAAO,EAAE;AAC/C,UAAM,KAAoB,cAAc,OAAO,EAC7C,OAAO,CAAC,KAAK,OAAO,cAAc,KAAK,QAAQ,QAAQ,OAAO,CAAC,GAAG,YAAY;AAC1E,UAAA,OAAO,MAAM,KAAK,WAAW,UAAU,IAAI,QAAQ,OAAO,YAAY;AAC5E,WAAO,MAAM,SAAS,WAAW,MAAM,YAAY;AAAA,EACpD;AAAA,EAEA,MAAa,OAAO,QAAsB,OAAyC,cAAyE;AACrJ,UAAA,WAAW,IAAI;AACf,UAAA,KAA0C,cAAc;AAExD,UAAA,OAAO,MAAM,KAAK,WAAW,UAAU,IAAI,QAAQ,OAAO,YAAY;AAErE,WAAA,MAAM,SAAS,WAAW,IAAI;AAAA,EACtC;AAAA,EAEA,MAAa,aACZ,QACA,OACA,cACqC;AACrC,UAAM,cAAc,KAAK,oBAAoB,OAAO,QAAQ,MAAM,KAAK,EAAE;AACzE,UAAM,QAAQ,MAAM,KAAK,SAAS,EAAE,KAAK,CAAC,aAAa,MAAM,KAAK,MAAM,EAAA,IAAM;AAC9E,UAAM,gBAAgB,MAAM,QAA8B,UAAU,KAAK;AAEzE,UAAM,OAAO,MAAM,KAAK,OAAO,QAAQ,eAAe,YAAY;AAE3D,WAAA,KAAK,CAAC,KAAK;AAAA,EACnB;AAAA,EAEA,MAAa,cACZ,QACA,OACA,UACA,cACgC;AAC1B,UAAA,WAAW,IAAI;AACrB,UAAM,OAAO,KAAK,YAAY,OAAO,CAAE,CAAA;AACvC,UAAM,cAAc;AACpB,UAAM,KAAoB,cAAc,OAAO,EAC7C,OAAO,CAAC,KAAK,OAAO,SAAS,cAAc,UAAU,GAAG,WAAW;AAE/D,UAAA,OAAO,MAAM,KAAK,WAAW,UAAU,IAAI,QAAQ,OAAO,cAAc,SAAS,IAAI;AAE3F,WAAO,MAAM,SAAS,cAAc,MAAM,WAAW;AAAA,EACtD;AAAA,EAEA,MAAc,WACb,UACA,IACA,QACA,OACA,cACA,SACC;AACD,UAAM,iBAAiB,cAAc,qBAAqB,QAAQ,OAAO,MAAS;AAClF,UAAM,OAAO,KAAK,YAAY,OAAO,CAAE,CAAA;AACvC,UAAM,mBAAmB,GAAG,KAAK,OAAO,WAAW,KAAK,KAAK,EAAE,KAAK,QAAQ,CAAC,GAAG,MAAM,MAAM,MAAM,KAAK,CAAC;AAExG,UAAM,WAAW,KAAK,qBAAqB,OAAO,kBAAkB,UAAU,YAAY;AAC1F,UAAM,uBAAuB,KAAK,mBAAmB,OAAO,QAAQ,eAAe,KAAK,UAAU,CAAA,GAAI,aAAa,aAAa,SAAS,CAAC,CAAC;AAC3I,UAAM,sBAAsB,eAAe,QAAQ,UAAU,oBAAoB;AACjF,aAAS,OAAO,MAAM,QAAQ,qBAAqB,MAAM,OAAO;AAChE,WAAO,MAAM,SAAS,QAAQ,KAAK,EAAE;AAAA,EACtC;AAAA,EAEA,MAAa,MAAM,QAAsB,QAA6B;AACrE,UAAM,OAAO,KAAK,YAAY,OAAO,CAAE,CAAA;AACvC,UAAM,KAAK,cAAc,OAAA,EACvB,KAAK,OAAO,WAAW,KAAK,KAAK,EACjC,OAAO,CAAQ,SAAA,KAAK,IAAI,UAAU,GAAG,WAAW;AAClD,UAAM,iBAAiB,KAAK,mBAAmB,OAAO,QAAQ,MAAM;AACpE,UAAM,cAAc,KAAK,aAAa,MAAM,IAAI,QAAQ,MAAM,cAAc;AAC5E,UAAM,SAAS,MAAM,YAAY,UAAU,KAAK,EAAE;AAC3C,WAAA,OAAO,CAAC,EAAE;AAAA,EAClB;AAAA,EAEA,MAAa,aACZ,QACA,QACA,UACA,cACkC;AAClC,UAAM,OAAO,KAAK,YAAY,OAAO,CAAE,CAAA;AACvC,UAAM,KAAK,cAAc,OAAO,EAC9B,KAAK,OAAO,WAAW,KAAK,KAAK,EACjC,OAAO,CAAA,SAAQ,KAAK,IAAI,UAAU,GAAG,WAAW,EAChD,OAAO,CAAC,KAAK,OAAO,SAAS,cAAc,UAAU,CAAC,EACtD,QAAQ,CAAC,KAAK,OAAO,SAAS,cAAc,UAAU,CAAC;AACnD,UAAA,iBAAiB,KAAK,mBAAmB,OAAO,QAAQ,QAAQ,aAAa,aAAa,SAAS,CAAC,CAAC;AACrG,UAAA,cAAc,KAAK,aAAa,MAAM,IAAI,QAAQ,MAAM,gBAAgB,EAAE,aAAc,CAAA;AAC9F,UAAM,OAAO,MAAM,YAAY,UAAU,KAAK,EAAE;AAC1C,UAAA,6BAAa;AACnB,eAAW,OAAO,MAAM;AAChB,aAAA,IAAI,OAAO,IAAI,SAAS,cAAc,UAAU,CAAC,GAAG,OAAO,IAAI,SAAS,CAAC;AAAA,IACjF;AACO,WAAA,OAAO,YAAY,MAAM;AAAA,EACjC;AAAA,EAEA,MAAa,OACZ,QACA,MACA,YAA8C,MAAM;AAAA,EAAA,GACtB;AAC9B,QAAI,OAAO,MAAM;AAChB,YAAM,IAAI,wBAAwB;AAAA,IACnC;AACA,UAAM,KAAK;AACJ,WAAA;AAAA,MAAY,KAAK;AAAA,MAAQ,KAAK;AAAA,MAAwB,MAC5D,KAAK,eAAe,QAAQ,MAAM,SAAS;AAAA,IAAA;AAAA,EAE7C;AAAA,EAEA,MAAa,OACZ,QACA,IACA,MACA,QAC8B;AAC9B,QAAI,OAAO,MAAM;AAChB,YAAM,IAAI,wBAAwB;AAAA,IACnC;AACA,UAAM,KAAK;AACX,WAAO,YAAY,KAAK,QAAQ,KAAK,wBAAwB,YAAY;AACxE,YAAM,eAAe,MAAM,KAAK,gBAAgB,QAAQ,EAAE;AAC1D,UAAI,iBAAiB,QAAW;AAC/B,eAAO,CAAC,IAAI,2BAA2B,IAAI,EAAE,CAAC;AAAA,MAC/C;AACO,aAAA,MAAM,KAAK,QAAQ,OAAO,MAAM,QAAQ,cAAc,MAAM,MAAM;AAAA,IAAA,CACzE;AAAA,EACF;AAAA,EAEA,MAAa,eACZ,QACA,IACA,WAC8B;AAC9B,QAAI,OAAO,MAAM;AAChB,YAAM,IAAI,wBAAwB;AAAA,IACnC;AACA,UAAM,KAAK;AACX,WAAO,YAAY,KAAK,QAAQ,KAAK,wBAAwB,YAAY;AACxE,YAAM,eAAe,MAAM,KAAK,gBAAgB,QAAQ,EAAE;AAC1D,UAAI,iBAAiB,QAAW;AAC/B,eAAO,CAAC,IAAI,2BAA2B,IAAI,EAAuB,CAAC;AAAA,MACpE;AACA,aAAO,MAAM,KAAK,QAAQ,SAAS,MAAM,QAAQ,cAAc,SAAS;AAAA,IAAA,CACxE;AAAA,EACF;AAAA,EACA,MAAa,OACZ,QACA,IACA,QACA,QACA,QAC8B;AAC9B,QAAI,OAAO,MAAM;AAChB,YAAM,IAAI,wBAAwB;AAAA,IACnC;AACA,UAAM,KAAK;AACX,WAAO,YAAY,KAAK,QAAQ,KAAK,wBAAwB,YAAY;AACxE,YAAM,eAAe,MAAM,KAAK,gBAAgB,QAAQ,EAAE;AAC1D,UAAI,iBAAiB,QAAW;AAC/B,eAAO,MAAM,KAAK,eAAe,QAAQ,MAAM;AAAA,MAChD;AACO,aAAA,MAAM,KAAK,QAAQ,OAAO,MAAM,QAAQ,cAAc,QAAQ,MAAM;AAAA,IAAA,CAC3E;AAAA,EACF;AAAA,EAEQ,eAAe,QAAsB,MAA6B,YAA8C,MAAM;AAAA,EAAA,GAAI;AACjI,WAAO,KAAK,SAAS,OAAO,MAAM,QAAQ,MAAM,CAAM,OAAA;AACrD,YAAM,QAAQ,EAAE,CAAC,OAAO,OAAO,GAAG,GAAG;AACrC,WAAK,gBAAgB,KAAK,UAAU,OAAO,MAAM,KAAK,CAAC,IAAI;AAAA,OACzD,SAAS;AAAA,EACb;AAAA,EAEA,MAAa,OACZ,QACA,IACA,QAC8B;AAC9B,QAAI,OAAO,MAAM;AAChB,YAAM,IAAI,wBAAwB;AAAA,IACnC;AACA,UAAM,KAAK;AACX,WAAO,YAAY,KAAK,QAAQ,KAAK,wBAAwB,MAAM;AAClE,aAAO,KAAK,eAAe,QAAQ,MAAM,QAAQ,IAAI,MAAM;AAAA,IAAA,CAC3D;AAAA,EACF;AAAA,EAEA,MAAa,gBACZ,QACA,UACA,aACA,cAC8B;AAC9B,UAAM,KAAK;AACX,UAAM,MAAM,MAAM;AACjB,YAAM,IAAI,wBAAwB;AAAA,IAAA;AAEnC,WAAO,MAAM,mBAAmB,KAAK,QAAQ,QAAQ,UAAU;AAAA,MAC9D,wBAAwB,CAAC,EAAE,QAAAA,SAAQ,UAAAC,gBAAe;AACjD,eAAO,KAAK,qBAAqB,gBAAgB,MAAMD,SAAQC,WAAU,aAAa,YAAY;AAAA,MACnG;AAAA,MACA,yBAAyB,CAAC,EAAE,cAAc,qBAAqB;AAC9D,eAAO,KAAK,qBAAqB,gBAAgB,MAAM,cAAc,gBAAgB,cAAc,WAAW;AAAA,MAC/G;AAAA,MACA,aAAa;AAAA,MACb,iBAAiB;AAAA,MACjB,uBAAuB;AAAA,MACvB,sBAAsB;AAAA,MACtB,iBAAiB;AAAA,IAAA,CACjB;AAAA,EACF;AAAA,EAEA,MAAa,mBACZ,QACA,UACA,aACA,cAC8B;AAC9B,UAAM,KAAK;AACX,UAAM,MAAM,MAAM;AACjB,YAAM,IAAI,wBAAwB;AAAA,IAAA;AAEnC,WAAO,MAAM,mBAAmB,KAAK,QAAQ,QAAQ,UAAU;AAAA,MAC9D,wBAAwB,CAAC,EAAE,QAAAD,SAAQ,UAAAC,gBAAe;AACjD,eAAO,KAAK,qBAAqB,mBAAmB,MAAMD,SAAQC,WAAU,aAAa,YAAY;AAAA,MACtG;AAAA,MACA,yBAAyB,CAAC,EAAE,cAAc,qBAAqB;AAC9D,eAAO,KAAK,qBAAqB,mBAAmB,MAAM,cAAc,gBAAgB,cAAc,WAAW;AAAA,MAClH;AAAA,MACA,aAAa;AAAA,MACb,iBAAiB;AAAA,MACjB,uBAAuB;AAAA,MACvB,sBAAsB;AAAA,MACtB,iBAAiB;AAAA,IAAA,CACjB;AAAA,EACF;AAAA,EAEA,MAAa,gBACZ,QACA,OAC0C;AAC1C,QAAI,iBAAiB,gBAAgB;AACpC,aAAO,MAAM;AAAA,IACd;AACA,UAAM,OAAO,KAAK,UAAU,OAAO,MAAM,KAAK;AAC1C,QAAA,KAAK,gBAAgB,IAAI,GAAG;AACxB,aAAA,KAAK,gBAAgB,IAAI;AAAA,IACjC;AACA,UAAM,iBAAiB,KAAK,YAAY,QAAQ,OAAO,OAAO,OAAO;AAChE,SAAA,gBAAgB,IAAI,IAAI;AAC7B,UAAM,eAAe,MAAM;AACrB,UAAA,eAAe,OAAO,KAAK,KAAK;AAClC,QAAA,iBAAiB,aAAa,WAAW,KAAK,aAAa,CAAC,MAAM,OAAO,UAAU;AACtF,WAAK,gBAAgB,KAAK,UAAU,OAAO,MAAM,EAAE,CAAC,OAAO,OAAO,GAAG,cAAc,CAAC,IAAI;AAAA,IACzF;AACO,WAAA;AAAA,EACR;AAAA,EAEQ,UAAU,YAAoB,OAAkC;AACvE,WAAO,KAAK,UAAU,CAAC,YAAY,KAAK,CAAC;AAAA,EAC1C;AAAA,EAEA,MAAc,uBAAuB;AAC/B,SAAA,6BAAL,KAAK,4BAA8B,YAAY;AACxC,YAAA,KAAK,GAAG,MAAM,kCAAkC,CAAC,sBAAsB,KAAK,UAAU,CAAC;AACvF,YAAA,KAAK,GAAG,MAAM,kCAAkC,CAAC,yBAAyB,KAAK,aAAa,CAAC;AAAA,IACjG,GAAA;AACH,UAAM,KAAK;AAAA,EACZ;AACD;"}
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 withPredicates = this.predicatesInjector.inject(entity, expandedWhere)\n\t\tconst builtQb = this.whereBuilder.build(qb, entity, this.pathFactory.create([]), withPredicates)\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;"}