@contember/engine-content-api 1.2.0-alpha.9 → 1.2.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 (378) hide show
  1. package/dist/src/acl/EvaluatedPredicateReplacer.d.ts +2 -3
  2. package/dist/src/acl/EvaluatedPredicateReplacer.d.ts.map +1 -1
  3. package/dist/src/acl/EvaluatedPredicateReplacer.js +5 -14
  4. package/dist/src/acl/EvaluatedPredicateReplacer.js.map +1 -1
  5. package/dist/src/acl/PredicateFactory.d.ts +9 -3
  6. package/dist/src/acl/PredicateFactory.d.ts.map +1 -1
  7. package/dist/src/acl/PredicateFactory.js +47 -36
  8. package/dist/src/acl/PredicateFactory.js.map +1 -1
  9. package/dist/src/acl/PredicatesInjector.d.ts +1 -1
  10. package/dist/src/acl/PredicatesInjector.d.ts.map +1 -1
  11. package/dist/src/acl/PredicatesInjector.js +13 -18
  12. package/dist/src/acl/PredicatesInjector.js.map +1 -1
  13. package/dist/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducerExecutionHandler.d.ts +0 -1
  14. package/dist/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducerExecutionHandler.d.ts.map +1 -1
  15. package/dist/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducerExecutionHandler.js +26 -23
  16. package/dist/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducerExecutionHandler.js.map +1 -1
  17. package/dist/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.d.ts +1 -1
  18. package/dist/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.d.ts.map +1 -1
  19. package/dist/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.js +1 -1
  20. package/dist/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.js.map +1 -1
  21. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyCountVisitor.d.ts +5 -4
  22. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyCountVisitor.d.ts.map +1 -1
  23. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyCountVisitor.js +11 -14
  24. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyCountVisitor.js.map +1 -1
  25. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyExecutionHandler.d.ts.map +1 -1
  26. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyExecutionHandler.js +18 -14
  27. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyExecutionHandler.js.map +1 -1
  28. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyFieldProviderVisitor.d.ts +3 -3
  29. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyFieldProviderVisitor.d.ts.map +1 -1
  30. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyFieldProviderVisitor.js +3 -3
  31. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyFieldProviderVisitor.js.map +1 -1
  32. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyNodesVisitor.d.ts +5 -4
  33. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyNodesVisitor.d.ts.map +1 -1
  34. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyNodesVisitor.js +11 -15
  35. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyNodesVisitor.js.map +1 -1
  36. package/dist/src/input-validation/ColumnValueResolver.d.ts +4 -3
  37. package/dist/src/input-validation/ColumnValueResolver.d.ts.map +1 -1
  38. package/dist/src/input-validation/ColumnValueResolver.js.map +1 -1
  39. package/dist/src/input-validation/EntityRulesResolver.js +4 -4
  40. package/dist/src/input-validation/EntityRulesResolver.js.map +1 -1
  41. package/dist/src/input-validation/QueryAstFactory.js +1 -1
  42. package/dist/src/input-validation/QueryAstFactory.js.map +1 -1
  43. package/dist/src/input-validation/ValidationDataSelector.js +1 -1
  44. package/dist/src/input-validation/ValidationDataSelector.js.map +1 -1
  45. package/dist/src/input-validation/preValidation/CreateInputPreValidationProcessor.d.ts +7 -8
  46. package/dist/src/input-validation/preValidation/CreateInputPreValidationProcessor.d.ts.map +1 -1
  47. package/dist/src/input-validation/preValidation/CreateInputPreValidationProcessor.js.map +1 -1
  48. package/dist/src/input-validation/preValidation/InputPreValidator.js +4 -4
  49. package/dist/src/input-validation/preValidation/InputPreValidator.js.map +1 -1
  50. package/dist/src/input-validation/preValidation/UpdateInputPreValidationProcessor.d.ts +7 -8
  51. package/dist/src/input-validation/preValidation/UpdateInputPreValidationProcessor.d.ts.map +1 -1
  52. package/dist/src/input-validation/preValidation/UpdateInputPreValidationProcessor.js.map +1 -1
  53. package/dist/src/inputProcessing/CreateInputProcessor.d.ts +8 -9
  54. package/dist/src/inputProcessing/CreateInputProcessor.d.ts.map +1 -1
  55. package/dist/src/inputProcessing/CreateInputVisitor.d.ts +7 -7
  56. package/dist/src/inputProcessing/CreateInputVisitor.d.ts.map +1 -1
  57. package/dist/src/inputProcessing/CreateInputVisitor.js +15 -46
  58. package/dist/src/inputProcessing/CreateInputVisitor.js.map +1 -1
  59. package/dist/src/inputProcessing/UpdateInputProcessor.d.ts +8 -9
  60. package/dist/src/inputProcessing/UpdateInputProcessor.d.ts.map +1 -1
  61. package/dist/src/inputProcessing/UpdateInputVisitor.d.ts +7 -7
  62. package/dist/src/inputProcessing/UpdateInputVisitor.d.ts.map +1 -1
  63. package/dist/src/inputProcessing/UpdateInputVisitor.js +13 -28
  64. package/dist/src/inputProcessing/UpdateInputVisitor.js.map +1 -1
  65. package/dist/src/inputProcessing/index.d.ts +0 -1
  66. package/dist/src/inputProcessing/index.d.ts.map +1 -1
  67. package/dist/src/inputProcessing/index.js +0 -1
  68. package/dist/src/inputProcessing/index.js.map +1 -1
  69. package/dist/src/introspection/IntrospectionSchemaFactory.js +7 -7
  70. package/dist/src/introspection/IntrospectionSchemaFactory.js.map +1 -1
  71. package/dist/src/mapper/ErrorUtils.d.ts.map +1 -1
  72. package/dist/src/mapper/ErrorUtils.js +2 -2
  73. package/dist/src/mapper/ErrorUtils.js.map +1 -1
  74. package/dist/src/mapper/JunctionTableManager.js.map +1 -1
  75. package/dist/src/mapper/Mapper.d.ts +6 -6
  76. package/dist/src/mapper/Mapper.d.ts.map +1 -1
  77. package/dist/src/mapper/Mapper.js +26 -21
  78. package/dist/src/mapper/Mapper.js.map +1 -1
  79. package/dist/src/mapper/MapperContainer.d.ts.map +1 -1
  80. package/dist/src/mapper/MapperContainer.js +4 -4
  81. package/dist/src/mapper/MapperContainer.js.map +1 -1
  82. package/dist/src/mapper/Result.d.ts.map +1 -1
  83. package/dist/src/mapper/Result.js +2 -4
  84. package/dist/src/mapper/Result.js.map +1 -1
  85. package/dist/src/mapper/delete/DeleteExecutor.js +6 -6
  86. package/dist/src/mapper/delete/DeleteExecutor.js.map +1 -1
  87. package/dist/src/mapper/insert/InsertBuilder.d.ts +1 -1
  88. package/dist/src/mapper/insert/InsertBuilder.d.ts.map +1 -1
  89. package/dist/src/mapper/insert/InsertBuilder.js.map +1 -1
  90. package/dist/src/mapper/insert/SqlCreateInputProcessor.d.ts +4 -2
  91. package/dist/src/mapper/insert/SqlCreateInputProcessor.d.ts.map +1 -1
  92. package/dist/src/mapper/insert/SqlCreateInputProcessor.js.map +1 -1
  93. package/dist/src/mapper/select/JoinVisitor.d.ts +6 -6
  94. package/dist/src/mapper/select/JoinVisitor.d.ts.map +1 -1
  95. package/dist/src/mapper/select/JoinVisitor.js +6 -6
  96. package/dist/src/mapper/select/JoinVisitor.js.map +1 -1
  97. package/dist/src/mapper/select/Path.d.ts +1 -0
  98. package/dist/src/mapper/select/Path.d.ts.map +1 -1
  99. package/dist/src/mapper/select/Path.js +4 -1
  100. package/dist/src/mapper/select/Path.js.map +1 -1
  101. package/dist/src/mapper/select/RelationFetcher.d.ts +11 -19
  102. package/dist/src/mapper/select/RelationFetcher.d.ts.map +1 -1
  103. package/dist/src/mapper/select/RelationFetcher.js +34 -25
  104. package/dist/src/mapper/select/RelationFetcher.js.map +1 -1
  105. package/dist/src/mapper/select/SelectBuilder.d.ts +4 -1
  106. package/dist/src/mapper/select/SelectBuilder.d.ts.map +1 -1
  107. package/dist/src/mapper/select/SelectBuilder.js +52 -12
  108. package/dist/src/mapper/select/SelectBuilder.js.map +1 -1
  109. package/dist/src/mapper/select/SelectBuilderFactory.d.ts +2 -1
  110. package/dist/src/mapper/select/SelectBuilderFactory.d.ts.map +1 -1
  111. package/dist/src/mapper/select/SelectExecutionHandler.d.ts +16 -4
  112. package/dist/src/mapper/select/SelectExecutionHandler.d.ts.map +1 -1
  113. package/dist/src/mapper/select/SelectHydrator.d.ts +3 -2
  114. package/dist/src/mapper/select/SelectHydrator.d.ts.map +1 -1
  115. package/dist/src/mapper/select/SelectHydrator.js +6 -9
  116. package/dist/src/mapper/select/SelectHydrator.js.map +1 -1
  117. package/dist/src/mapper/select/WhereBuilder.d.ts +8 -4
  118. package/dist/src/mapper/select/WhereBuilder.d.ts.map +1 -1
  119. package/dist/src/mapper/select/WhereBuilder.js +137 -35
  120. package/dist/src/mapper/select/WhereBuilder.js.map +1 -1
  121. package/dist/src/mapper/select/handlers/FieldsVisitor.d.ts +10 -8
  122. package/dist/src/mapper/select/handlers/FieldsVisitor.d.ts.map +1 -1
  123. package/dist/src/mapper/select/handlers/FieldsVisitor.js +129 -94
  124. package/dist/src/mapper/select/handlers/FieldsVisitor.js.map +1 -1
  125. package/dist/src/mapper/select/handlers/FieldsVisitorFactory.d.ts.map +1 -1
  126. package/dist/src/mapper/select/handlers/FieldsVisitorFactory.js +1 -1
  127. package/dist/src/mapper/select/handlers/FieldsVisitorFactory.js.map +1 -1
  128. package/dist/src/mapper/select/handlers/MetaHandler.d.ts.map +1 -1
  129. package/dist/src/mapper/select/handlers/MetaHandler.js +6 -11
  130. package/dist/src/mapper/select/handlers/MetaHandler.js.map +1 -1
  131. package/dist/src/mapper/select/optimizer/ConditionOptimizer.d.ts.map +1 -1
  132. package/dist/src/mapper/select/optimizer/ConditionOptimizer.js +6 -0
  133. package/dist/src/mapper/select/optimizer/ConditionOptimizer.js.map +1 -1
  134. package/dist/src/mapper/select/optimizer/WhereOptimizer.d.ts +9 -1
  135. package/dist/src/mapper/select/optimizer/WhereOptimizer.d.ts.map +1 -1
  136. package/dist/src/mapper/select/optimizer/WhereOptimizer.js +127 -13
  137. package/dist/src/mapper/select/optimizer/WhereOptimizer.js.map +1 -1
  138. package/dist/src/mapper/select/optimizer/WhereReplacer.d.ts +3 -0
  139. package/dist/src/mapper/select/optimizer/WhereReplacer.d.ts.map +1 -0
  140. package/dist/src/mapper/select/optimizer/WhereReplacer.js +46 -0
  141. package/dist/src/mapper/select/optimizer/WhereReplacer.js.map +1 -0
  142. package/dist/src/mapper/select/optimizer/helpers.d.ts +1 -1
  143. package/dist/src/mapper/select/optimizer/helpers.js +1 -1
  144. package/dist/src/mapper/select/optimizer/helpers.js.map +1 -1
  145. package/dist/src/mapper/update/SqlUpdateInputProcessor.d.ts +2 -3
  146. package/dist/src/mapper/update/SqlUpdateInputProcessor.d.ts.map +1 -1
  147. package/dist/src/mapper/update/SqlUpdateInputProcessor.js +3 -4
  148. package/dist/src/mapper/update/SqlUpdateInputProcessor.js.map +1 -1
  149. package/dist/src/mapper/update/UpdateBuilder.js +3 -3
  150. package/dist/src/mapper/update/UpdateBuilder.js.map +1 -1
  151. package/dist/src/resolvers/ExecutionContainerFactory.d.ts +1 -1
  152. package/dist/src/resolvers/ExecutionContainerFactory.d.ts.map +1 -1
  153. package/dist/src/resolvers/GraphQlQueryAstFactory.d.ts +1 -2
  154. package/dist/src/resolvers/GraphQlQueryAstFactory.d.ts.map +1 -1
  155. package/dist/src/resolvers/GraphQlQueryAstFactory.js +2 -2
  156. package/dist/src/resolvers/GraphQlQueryAstFactory.js.map +1 -1
  157. package/dist/src/resolvers/MutationResolver.d.ts.map +1 -1
  158. package/dist/src/resolvers/MutationResolver.js +13 -2
  159. package/dist/src/resolvers/MutationResolver.js.map +1 -1
  160. package/dist/src/resolvers/ReadHelpers.js +3 -3
  161. package/dist/src/resolvers/ReadHelpers.js.map +1 -1
  162. package/dist/src/resolvers/ReadResolver.js +2 -2
  163. package/dist/src/resolvers/ReadResolver.js.map +1 -1
  164. package/dist/src/schema/EnumsProvider.d.ts.map +1 -1
  165. package/dist/src/schema/EnumsProvider.js +1 -2
  166. package/dist/src/schema/EnumsProvider.js.map +1 -1
  167. package/dist/src/schema/FieldAccessVisitor.d.ts +2 -2
  168. package/dist/src/schema/FieldAccessVisitor.d.ts.map +1 -1
  169. package/dist/src/schema/FieldAccessVisitor.js +2 -2
  170. package/dist/src/schema/FieldAccessVisitor.js.map +1 -1
  171. package/dist/src/schema/OrderByTypeProvider.d.ts +1 -1
  172. package/dist/src/schema/OrderByTypeProvider.d.ts.map +1 -1
  173. package/dist/src/schema/OrderByTypeProvider.js +2 -2
  174. package/dist/src/schema/OrderByTypeProvider.js.map +1 -1
  175. package/dist/src/schema/WhereTypeProvider.d.ts +1 -2
  176. package/dist/src/schema/WhereTypeProvider.d.ts.map +1 -1
  177. package/dist/src/schema/WhereTypeProvider.js +4 -4
  178. package/dist/src/schema/WhereTypeProvider.js.map +1 -1
  179. package/dist/src/schema/entities/FieldArgsVisitor.d.ts +4 -5
  180. package/dist/src/schema/entities/FieldArgsVisitor.d.ts.map +1 -1
  181. package/dist/src/schema/entities/FieldArgsVisitor.js +3 -3
  182. package/dist/src/schema/entities/FieldArgsVisitor.js.map +1 -1
  183. package/dist/src/schema/entities/FieldTypeVisitor.d.ts +3 -3
  184. package/dist/src/schema/entities/FieldTypeVisitor.d.ts.map +1 -1
  185. package/dist/src/schema/entities/FieldTypeVisitor.js +3 -3
  186. package/dist/src/schema/entities/FieldTypeVisitor.js.map +1 -1
  187. package/dist/src/schema/mutations/CreateEntityInputFieldVisitor.d.ts +3 -3
  188. package/dist/src/schema/mutations/CreateEntityInputFieldVisitor.d.ts.map +1 -1
  189. package/dist/src/schema/mutations/CreateEntityInputFieldVisitor.js +3 -3
  190. package/dist/src/schema/mutations/CreateEntityInputFieldVisitor.js.map +1 -1
  191. package/dist/src/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.d.ts +6 -6
  192. package/dist/src/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.d.ts.map +1 -1
  193. package/dist/src/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.js +6 -6
  194. package/dist/src/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.js.map +1 -1
  195. package/dist/src/schema/mutations/CreateEntityRelationInputFieldVisitor.d.ts +3 -3
  196. package/dist/src/schema/mutations/CreateEntityRelationInputFieldVisitor.d.ts.map +1 -1
  197. package/dist/src/schema/mutations/CreateEntityRelationInputFieldVisitor.js +5 -5
  198. package/dist/src/schema/mutations/CreateEntityRelationInputFieldVisitor.js.map +1 -1
  199. package/dist/src/schema/mutations/UpdateEntityInputFieldVisitor.d.ts +10 -4
  200. package/dist/src/schema/mutations/UpdateEntityInputFieldVisitor.d.ts.map +1 -1
  201. package/dist/src/schema/mutations/UpdateEntityInputFieldVisitor.js +3 -3
  202. package/dist/src/schema/mutations/UpdateEntityInputFieldVisitor.js.map +1 -1
  203. package/dist/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.d.ts +6 -6
  204. package/dist/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.d.ts.map +1 -1
  205. package/dist/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.js +6 -6
  206. package/dist/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.js.map +1 -1
  207. package/dist/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.d.ts +2 -2
  208. package/dist/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.d.ts.map +1 -1
  209. package/dist/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.js +2 -2
  210. package/dist/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.js.map +1 -1
  211. package/dist/src/schema/utils.d.ts +1 -1
  212. package/dist/src/schema/utils.d.ts.map +1 -1
  213. package/dist/src/tsconfig.tsbuildinfo +1 -1
  214. package/dist/src/utils/uniqueWhereFields.js +3 -3
  215. package/dist/src/utils/uniqueWhereFields.js.map +1 -1
  216. package/dist/tests/cases/bugs/bug102.test.js +6 -6
  217. package/dist/tests/cases/bugs/bug102.test.js.map +1 -1
  218. package/dist/tests/cases/integration/graphQlRequests/delete/aclDelete.test.js +5 -5
  219. package/dist/tests/cases/integration/graphQlRequests/delete/aclDelete.test.js.map +1 -1
  220. package/dist/tests/cases/integration/graphQlRequests/delete/additionalDeleteFilter.test.js +5 -5
  221. package/dist/tests/cases/integration/graphQlRequests/delete/additionalDeleteFilter.test.js.map +1 -1
  222. package/dist/tests/cases/integration/graphQlRequests/delete/cascadeDelete.test.js +5 -5
  223. package/dist/tests/cases/integration/graphQlRequests/delete/cascadeDelete.test.js.map +1 -1
  224. package/dist/tests/cases/integration/graphQlRequests/delete/deleteById.test.js +5 -5
  225. package/dist/tests/cases/integration/graphQlRequests/delete/deleteById.test.js.map +1 -1
  226. package/dist/tests/cases/integration/graphQlRequests/delete/orphanRemoval.test.js +5 -5
  227. package/dist/tests/cases/integration/graphQlRequests/delete/orphanRemoval.test.js.map +1 -1
  228. package/dist/tests/cases/integration/graphQlRequests/delete/setNullOnDelete.test.js +5 -5
  229. package/dist/tests/cases/integration/graphQlRequests/delete/setNullOnDelete.test.js.map +1 -1
  230. package/dist/tests/cases/integration/graphQlRequests/query/acl/differentRowAndFieldPredicate.test.js +51 -4
  231. package/dist/tests/cases/integration/graphQlRequests/query/acl/differentRowAndFieldPredicate.test.js.map +1 -1
  232. package/dist/tests/cases/integration/graphQlRequests/query/acl/fieldRestrictedByLocale.test.js +26 -25
  233. package/dist/tests/cases/integration/graphQlRequests/query/acl/fieldRestrictedByLocale.test.js.map +1 -1
  234. package/dist/tests/cases/integration/graphQlRequests/query/acl/nestedPredicate.test.js +9 -6
  235. package/dist/tests/cases/integration/graphQlRequests/query/acl/nestedPredicate.test.js.map +1 -1
  236. package/dist/tests/cases/integration/graphQlRequests/query/acl/rowPredicateSubset.test.d.ts +2 -0
  237. package/dist/tests/cases/integration/graphQlRequests/query/acl/rowPredicateSubset.test.d.ts.map +1 -0
  238. package/dist/tests/cases/integration/graphQlRequests/query/acl/rowPredicateSubset.test.js +109 -0
  239. package/dist/tests/cases/integration/graphQlRequests/query/acl/rowPredicateSubset.test.js.map +1 -0
  240. package/dist/tests/cases/integration/graphQlRequests/query/filter/manyHasManyOwnerRelation.test.js +17 -15
  241. package/dist/tests/cases/integration/graphQlRequests/query/filter/manyHasManyOwnerRelation.test.js.map +1 -1
  242. package/dist/tests/cases/integration/graphQlRequests/query/filter/oneHasManyRelation.test.js +4 -5
  243. package/dist/tests/cases/integration/graphQlRequests/query/filter/oneHasManyRelation.test.js.map +1 -1
  244. package/dist/tests/cases/integration/graphQlRequests/query/graphqlFeatures/alias.test.js +9 -13
  245. package/dist/tests/cases/integration/graphQlRequests/query/graphqlFeatures/alias.test.js.map +1 -1
  246. package/dist/tests/cases/integration/graphQlRequests/query/unique/oneHasManyUnique.test.js +5 -3
  247. package/dist/tests/cases/integration/graphQlRequests/query/unique/oneHasManyUnique.test.js.map +1 -1
  248. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/delete.test.js +5 -5
  249. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/delete.test.js.map +1 -1
  250. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/delete.test.js +5 -5
  251. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/delete.test.js.map +1 -1
  252. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/delete.test.js +10 -10
  253. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/delete.test.js.map +1 -1
  254. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/combination.test.js +5 -5
  255. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/combination.test.js.map +1 -1
  256. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/delete.test.js +5 -5
  257. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/delete.test.js.map +1 -1
  258. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/delete.test.js +5 -5
  259. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/delete.test.js.map +1 -1
  260. package/dist/tests/cases/integration/graphQlSchema/graphQlSchemaBuilder.test.js +4 -4
  261. package/dist/tests/cases/integration/graphQlSchema/graphQlSchemaBuilder.test.js.map +1 -1
  262. package/dist/tests/cases/unit/predicatesFactory.test.js +7 -1
  263. package/dist/tests/cases/unit/predicatesFactory.test.js.map +1 -1
  264. package/dist/tests/cases/unit/predicatesInjector.test.js +105 -0
  265. package/dist/tests/cases/unit/predicatesInjector.test.js.map +1 -1
  266. package/dist/tests/cases/unit/whereBuilder.test.d.ts +2 -0
  267. package/dist/tests/cases/unit/whereBuilder.test.d.ts.map +1 -0
  268. package/dist/tests/cases/unit/whereBuilder.test.js +131 -0
  269. package/dist/tests/cases/unit/whereBuilder.test.js.map +1 -0
  270. package/dist/tests/cases/unit/whereOptimizer.test.js +173 -0
  271. package/dist/tests/cases/unit/whereOptimizer.test.js.map +1 -1
  272. package/dist/tests/src/test.js +2 -2
  273. package/dist/tests/src/test.js.map +1 -1
  274. package/dist/tests/src/testGraphql.d.ts.map +1 -1
  275. package/dist/tests/src/testGraphql.js +9 -5
  276. package/dist/tests/src/testGraphql.js.map +1 -1
  277. package/dist/tests/tsconfig.tsbuildinfo +1 -1
  278. package/package.json +12 -10
  279. package/src/acl/EvaluatedPredicateReplacer.ts +9 -15
  280. package/src/acl/PredicateFactory.ts +64 -40
  281. package/src/acl/PredicatesInjector.ts +18 -17
  282. package/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducerExecutionHandler.ts +21 -28
  283. package/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.ts +1 -6
  284. package/src/extensions/paginatedHasMany/PaginatedHasManyCountVisitor.ts +10 -28
  285. package/src/extensions/paginatedHasMany/PaginatedHasManyExecutionHandler.ts +11 -8
  286. package/src/extensions/paginatedHasMany/PaginatedHasManyFieldProviderVisitor.ts +4 -22
  287. package/src/extensions/paginatedHasMany/PaginatedHasManyNodesVisitor.ts +10 -29
  288. package/src/input-validation/ColumnValueResolver.ts +2 -3
  289. package/src/input-validation/EntityRulesResolver.ts +4 -4
  290. package/src/input-validation/QueryAstFactory.ts +1 -1
  291. package/src/input-validation/ValidationDataSelector.ts +1 -1
  292. package/src/input-validation/preValidation/CreateInputPreValidationProcessor.ts +7 -8
  293. package/src/input-validation/preValidation/InputPreValidator.ts +4 -4
  294. package/src/input-validation/preValidation/UpdateInputPreValidationProcessor.ts +7 -8
  295. package/src/inputProcessing/CreateInputProcessor.ts +8 -9
  296. package/src/inputProcessing/CreateInputVisitor.ts +27 -89
  297. package/src/inputProcessing/UpdateInputProcessor.ts +8 -9
  298. package/src/inputProcessing/UpdateInputVisitor.ts +25 -71
  299. package/src/inputProcessing/index.ts +0 -1
  300. package/src/introspection/IntrospectionSchemaFactory.ts +7 -7
  301. package/src/mapper/ErrorUtils.ts +2 -2
  302. package/src/mapper/JunctionTableManager.ts +3 -3
  303. package/src/mapper/Mapper.ts +34 -31
  304. package/src/mapper/MapperContainer.ts +7 -5
  305. package/src/mapper/Result.ts +2 -4
  306. package/src/mapper/delete/DeleteExecutor.ts +6 -6
  307. package/src/mapper/insert/InsertBuilder.ts +2 -2
  308. package/src/mapper/insert/SqlCreateInputProcessor.ts +3 -3
  309. package/src/mapper/select/JoinVisitor.ts +6 -33
  310. package/src/mapper/select/Path.ts +4 -1
  311. package/src/mapper/select/RelationFetcher.ts +49 -50
  312. package/src/mapper/select/SelectBuilder.ts +71 -13
  313. package/src/mapper/select/SelectBuilderFactory.ts +2 -1
  314. package/src/mapper/select/SelectExecutionHandler.ts +16 -8
  315. package/src/mapper/select/SelectHydrator.ts +15 -11
  316. package/src/mapper/select/WhereBuilder.ts +168 -61
  317. package/src/mapper/select/handlers/FieldsVisitor.ts +80 -111
  318. package/src/mapper/select/handlers/FieldsVisitorFactory.ts +1 -0
  319. package/src/mapper/select/handlers/MetaHandler.ts +6 -17
  320. package/src/mapper/select/optimizer/ConditionOptimizer.ts +6 -0
  321. package/src/mapper/select/optimizer/WhereOptimizer.ts +148 -21
  322. package/src/mapper/select/optimizer/WhereReplacer.ts +39 -0
  323. package/src/mapper/select/optimizer/helpers.ts +2 -2
  324. package/src/mapper/update/SqlUpdateInputProcessor.ts +4 -10
  325. package/src/mapper/update/UpdateBuilder.ts +3 -3
  326. package/src/resolvers/ExecutionContainerFactory.ts +1 -1
  327. package/src/resolvers/GraphQlQueryAstFactory.ts +5 -4
  328. package/src/resolvers/MutationResolver.ts +14 -4
  329. package/src/resolvers/ReadHelpers.ts +3 -3
  330. package/src/resolvers/ReadResolver.ts +2 -2
  331. package/src/schema/EnumsProvider.ts +2 -4
  332. package/src/schema/FieldAccessVisitor.ts +2 -2
  333. package/src/schema/OrderByTypeProvider.ts +10 -3
  334. package/src/schema/WhereTypeProvider.ts +5 -6
  335. package/src/schema/entities/FieldArgsVisitor.ts +4 -5
  336. package/src/schema/entities/FieldTypeVisitor.ts +3 -3
  337. package/src/schema/mutations/CreateEntityInputFieldVisitor.ts +3 -6
  338. package/src/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.ts +6 -20
  339. package/src/schema/mutations/CreateEntityRelationInputFieldVisitor.ts +6 -20
  340. package/src/schema/mutations/UpdateEntityInputFieldVisitor.ts +3 -6
  341. package/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.ts +6 -20
  342. package/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.ts +9 -14
  343. package/src/schema/utils.ts +1 -1
  344. package/src/tsconfig.json +6 -6
  345. package/src/utils/uniqueWhereFields.ts +3 -3
  346. package/tests/cases/bugs/bug102.test.ts +6 -6
  347. package/tests/cases/integration/graphQlRequests/delete/aclDelete.test.ts +5 -5
  348. package/tests/cases/integration/graphQlRequests/delete/additionalDeleteFilter.test.ts +5 -5
  349. package/tests/cases/integration/graphQlRequests/delete/cascadeDelete.test.ts +5 -5
  350. package/tests/cases/integration/graphQlRequests/delete/deleteById.test.ts +5 -5
  351. package/tests/cases/integration/graphQlRequests/delete/orphanRemoval.test.ts +5 -5
  352. package/tests/cases/integration/graphQlRequests/delete/setNullOnDelete.test.ts +5 -5
  353. package/tests/cases/integration/graphQlRequests/query/acl/differentRowAndFieldPredicate.test.ts +54 -4
  354. package/tests/cases/integration/graphQlRequests/query/acl/fieldRestrictedByLocale.test.ts +26 -25
  355. package/tests/cases/integration/graphQlRequests/query/acl/nestedPredicate.test.ts +9 -6
  356. package/tests/cases/integration/graphQlRequests/query/acl/rowPredicateSubset.test.ts +104 -0
  357. package/tests/cases/integration/graphQlRequests/query/filter/manyHasManyOwnerRelation.test.ts +17 -15
  358. package/tests/cases/integration/graphQlRequests/query/filter/oneHasManyRelation.test.ts +4 -5
  359. package/tests/cases/integration/graphQlRequests/query/graphqlFeatures/alias.test.ts +9 -13
  360. package/tests/cases/integration/graphQlRequests/query/unique/oneHasManyUnique.test.ts +5 -3
  361. package/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/delete.test.ts +5 -5
  362. package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/delete.test.ts +5 -5
  363. package/tests/cases/integration/graphQlRequests/update/manyHasOne/delete.test.ts +10 -10
  364. package/tests/cases/integration/graphQlRequests/update/oneHasMany/combination.test.ts +5 -5
  365. package/tests/cases/integration/graphQlRequests/update/oneHasMany/delete.test.ts +5 -5
  366. package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/delete.test.ts +5 -5
  367. package/tests/cases/integration/graphQlSchema/graphQlSchemaBuilder.test.ts +2 -3
  368. package/tests/cases/unit/predicatesFactory.test.ts +8 -2
  369. package/tests/cases/unit/predicatesInjector.test.ts +97 -2
  370. package/tests/cases/unit/whereBuilder.test.ts +148 -0
  371. package/tests/cases/unit/whereOptimizer.test.ts +199 -0
  372. package/tests/src/test.ts +2 -2
  373. package/tests/src/testGraphql.ts +9 -5
  374. package/dist/src/inputProcessing/InputContext.d.ts +0 -43
  375. package/dist/src/inputProcessing/InputContext.d.ts.map +0 -1
  376. package/dist/src/inputProcessing/InputContext.js +0 -3
  377. package/dist/src/inputProcessing/InputContext.js.map +0 -1
  378. package/src/inputProcessing/InputContext.ts +0 -49
@@ -2,13 +2,13 @@ import { Input, Model, Result, Value } from '@contember/schema'
2
2
  import {
3
3
  ConstraintType,
4
4
  getInsertPrimary,
5
- getUpdatePrimary,
6
5
  InputErrorKind,
7
6
  Mapper,
8
7
  MapperFactory,
9
8
  MutationResultHint,
10
9
  MutationResultList,
11
- MutationResultType, tryMutation,
10
+ MutationResultType,
11
+ tryMutation,
12
12
  } from '../mapper'
13
13
  import { ValidationResolver } from './ValidationResolver'
14
14
  import { GraphQLResolveInfo } from 'graphql'
@@ -20,6 +20,7 @@ import { assertNever } from '../utils'
20
20
  import { InputPreValidator } from '../input-validation'
21
21
  import { ObjectNode } from '../inputProcessing'
22
22
  import { executeReadOperations } from './ReadHelpers'
23
+ import { logger } from '@contember/logger'
23
24
 
24
25
  type WithoutNode<T extends { node: any }> = Pick<T, Exclude<keyof T, 'node'>>
25
26
 
@@ -61,6 +62,7 @@ export class MutationResolver {
61
62
 
62
63
  return this.transaction(async (mapper, trx) => {
63
64
  if (options?.deferForeignKeyConstraints) {
65
+ logger.debug('MutationResolver: deferring foreign constraints')
64
66
  await mapper.constraintHelper.setFkConstraintsDeferred()
65
67
  }
66
68
  const validationResult: Record<string, Result.MutationFieldResult> = {}
@@ -144,7 +146,7 @@ export class MutationResolver {
144
146
  }
145
147
 
146
148
  const meta = readOperationMeta(fieldConfig.extensions)
147
-
149
+ logger.debug('MutationResolver: Resolving a field', { field: field.alias })
148
150
  const result: {
149
151
  ok: boolean
150
152
  validation?: Result.ValidationResult
@@ -168,6 +170,7 @@ export class MutationResolver {
168
170
  })()
169
171
 
170
172
  if (!result.ok) {
173
+ logger.debug('MutationResolver: Field evaluation failed', { result, field: field.alias })
171
174
  const validationErrors = result.validation ? prefixErrors(result.validation.errors, field.alias) : []
172
175
  const executionErrors = prefixErrors(result.errors, field.alias)
173
176
  return {
@@ -192,12 +195,14 @@ export class MutationResolver {
192
195
  trxResult[field.alias] = result
193
196
  }
194
197
  if (options?.deferForeignKeyConstraints) {
198
+ logger.debug('MutationResolver: validating fk constraints')
195
199
  const constraintsResult = await tryMutation(this.schema, async () => {
196
200
  await mapper.constraintHelper.setFkConstraintsImmediate()
197
201
  return []
198
202
  })
199
203
  const errorResponse = this.createErrorResponse(constraintsResult)
200
204
  if (errorResponse) {
205
+ logger.debug('MutationResolver: deferred fk validation failed', { errorResponse })
201
206
  return { ...errorResponse, ...validationResult }
202
207
  }
203
208
  }
@@ -457,7 +462,7 @@ export class MutationResolver {
457
462
  throw new Error('MutationResolver: expected ObjectNode')
458
463
  }
459
464
  const objectWithArgs = singleNodeQuery.withArgs({ by: where })
460
- nodes[singleNodeQuery.alias] = await mapper.selectUnique(entity, objectWithArgs, null)
465
+ nodes[singleNodeQuery.alias] = await mapper.selectUnique(entity, objectWithArgs, [])
461
466
  }
462
467
  return nodes
463
468
  }
@@ -468,17 +473,22 @@ export class MutationResolver {
468
473
  return await retryTransaction(
469
474
  async () => {
470
475
  return await this.db.transaction(async trx => {
476
+ logger.debug('MutationResolver: Starting mutation transaction')
471
477
  await trx.connection.query(Connection.REPEATABLE_READ)
472
478
  await this.systemVariablesSetup(trx)
473
479
  const mapper = this.mapperFactory(trx)
474
480
 
475
481
  const result = await cb(mapper, trx)
476
482
  if (!result.ok) {
483
+ logger.debug('MutationResolver: Transaction failed, rolling back', { result })
477
484
  await trx.connection.rollback()
485
+ } else {
486
+ logger.debug('MutationResolver: Transaction ok, committing')
478
487
  }
479
488
  return result
480
489
  })
481
490
  },
491
+ message => logger.warn(message),
482
492
  {
483
493
  maxAttempts: 15,
484
494
  minTimeout: 10,
@@ -15,7 +15,7 @@ export const paginate = async (
15
15
  const totalCount = paginationHelper.requiresTotalCount
16
16
  ? await mapper.count(entity, queryAst.args.filter || {})
17
17
  : undefined
18
- const nodes = paginationHelper.nodeField ? await mapper.select(entity, paginationHelper.nodeField, null) : undefined
18
+ const nodes = paginationHelper.nodeField ? await mapper.select(entity, paginationHelper.nodeField, []) : undefined
19
19
 
20
20
  return paginationHelper.createResponse(totalCount, nodes)
21
21
  }
@@ -37,9 +37,9 @@ export const executeReadOperations = async (
37
37
  trxResult[field.alias] = await (() => {
38
38
  switch (meta.operation) {
39
39
  case Operation.get:
40
- return mapper.selectUnique(meta.entity, field, null)
40
+ return mapper.selectUnique(meta.entity, field, [])
41
41
  case Operation.list:
42
- return mapper.select(meta.entity, field, null)
42
+ return mapper.select(meta.entity, field, [])
43
43
  case Operation.paginate:
44
44
  return paginate(mapper, meta.entity, field)
45
45
  case Operation.create:
@@ -33,12 +33,12 @@ export class ReadResolver {
33
33
 
34
34
  public async resolveListQuery(entity: Model.Entity, info: GraphQLResolveInfo) {
35
35
  const queryAst: ObjectNode<Input.ListQueryInput> = this.queryAstFactory.create(info)
36
- return await this.mapperFactory(this.db).select(entity, queryAst, null)
36
+ return await this.mapperFactory(this.db).select(entity, queryAst, [])
37
37
  }
38
38
 
39
39
  public async resolveGetQuery(entity: Model.Entity, info: GraphQLResolveInfo) {
40
40
  const queryAst: ObjectNode<Input.UniqueQueryInput> = this.queryAstFactory.create(info)
41
- return await this.mapperFactory(this.db).selectUnique(entity, queryAst, null)
41
+ return await this.mapperFactory(this.db).selectUnique(entity, queryAst, [])
42
42
  }
43
43
 
44
44
  public async resolvePaginationQuery(entity: Model.Entity, info: GraphQLResolveInfo) {
@@ -1,8 +1,6 @@
1
- import { GraphQLEnumType } from 'graphql'
2
- import { GraphQLEnumValueConfigMap } from 'graphql/type/definition'
1
+ import { GraphQLEnumType, GraphQLEnumValueConfigMap } from 'graphql'
3
2
  import { Model } from '@contember/schema'
4
- import { singletonFactory } from '../utils'
5
- import { capitalizeFirstLetter } from '../utils'
3
+ import { capitalizeFirstLetter, singletonFactory } from '../utils'
6
4
 
7
5
  export class EnumsProvider {
8
6
  private schema: Model.Schema
@@ -7,11 +7,11 @@ export class FieldAccessVisitor implements Model.ColumnVisitor<boolean>, Model.R
7
7
  private readonly authorizator: Authorizator,
8
8
  ) {}
9
9
 
10
- visitColumn(entity: Model.Entity, column: Model.AnyColumn) {
10
+ visitColumn({ column, entity }: Model.ColumnContext) {
11
11
  return this.authorizator.getFieldPermissions(this.operation, entity.name, column.name) !== 'no'
12
12
  }
13
13
 
14
- visitRelation({}, {}, targetEntity: Model.Entity) {
14
+ visitRelation({ targetEntity }: Model.AnyRelationContext) {
15
15
  return this.authorizator.getEntityPermission(this.operation, targetEntity.name) !== 'no'
16
16
  }
17
17
  }
@@ -1,11 +1,18 @@
1
- import { GraphQLInputFieldConfig, GraphQLInputFieldConfigMap, GraphQLInputType } from 'graphql/type/definition'
1
+ import {
2
+ GraphQLBoolean,
3
+ GraphQLEnumType,
4
+ GraphQLInputFieldConfig,
5
+ GraphQLInputFieldConfigMap,
6
+ GraphQLInputObjectType,
7
+ GraphQLInputType,
8
+ GraphQLInt,
9
+ } from 'graphql'
2
10
  import { Acl, Model } from '@contember/schema'
3
11
  import { acceptFieldVisitor } from '@contember/schema-utils'
4
12
  import { singletonFactory } from '../utils'
5
13
  import { GqlTypeName } from './utils'
6
14
  import { Authorizator } from '../acl'
7
15
  import { FieldAccessVisitor } from './FieldAccessVisitor'
8
- import { GraphQLBoolean, GraphQLEnumType, GraphQLInputObjectType, GraphQLInt } from 'graphql'
9
16
 
10
17
  export class OrderByTypeProvider {
11
18
  private orderBySingleton = singletonFactory(name => this.createEntityOrderByType(name))
@@ -51,7 +58,7 @@ export class OrderByTypeProvider {
51
58
 
52
59
  const field = acceptFieldVisitor(this.schema, name, fieldName, {
53
60
  visitColumn: () => ({ type: this.orderDirectionEnum }),
54
- visitHasOne: (entity, relation) => ({ type: this.getEntityOrderByType(relation.target) }),
61
+ visitHasOne: ({ relation }) => ({ type: this.getEntityOrderByType(relation.target) }),
55
62
  visitHasMany: () => undefined,
56
63
  } as Model.FieldVisitor<GraphQLInputFieldConfig | undefined>)
57
64
 
@@ -1,7 +1,6 @@
1
1
  import { Acl, Model } from '@contember/schema'
2
2
  import { acceptFieldVisitor, getEntity } from '@contember/schema-utils'
3
- import { GraphQLInputObjectType, GraphQLList } from 'graphql'
4
- import { GraphQLInputFieldConfig, GraphQLInputFieldConfigMap } from 'graphql/type/definition'
3
+ import { GraphQLInputFieldConfig, GraphQLInputFieldConfigMap, GraphQLInputObjectType, GraphQLList } from 'graphql'
5
4
  import { capitalizeFirstLetter, getFieldsForUniqueWhere, singletonFactory } from '../utils'
6
5
  import { ColumnTypeResolver } from './ColumnTypeResolver'
7
6
  import { ConditionTypeProvider } from './ConditionTypeProvider'
@@ -74,7 +73,7 @@ export class WhereTypeProvider {
74
73
  continue
75
74
  }
76
75
  fields[field] = acceptFieldVisitor<GraphQLInputFieldConfig>(this.schema, entity, field, {
77
- visitRelation: (entity, relation, targetEntity) => {
76
+ visitRelation: ({ targetEntity }) => {
78
77
  // if (!isIt<Model.JoiningColumnRelation>(relation, 'joiningColumn')) {
79
78
  // throw new Error('Only column or owning relation can be a part of unique key')
80
79
  // }
@@ -84,7 +83,7 @@ export class WhereTypeProvider {
84
83
  }
85
84
  return { type: uniqueWhere }
86
85
  },
87
- visitColumn: (entity, column) => ({ type: this.columnTypeResolver.getType(column) }),
86
+ visitColumn: ({ column }) => ({ type: this.columnTypeResolver.getType(column) }),
88
87
  })
89
88
  }
90
89
  }
@@ -104,8 +103,8 @@ export class WhereTypeProvider {
104
103
  continue
105
104
  }
106
105
  fields[fieldName] = acceptFieldVisitor(this.schema, name, fieldName, {
107
- visitColumn: (entity, column) => ({ type: this.conditionTypeProvider.getCondition(column) }),
108
- visitRelation: (entity, relation) => ({ type: this.getEntityWhereType(relation.target) }),
106
+ visitColumn: ({ column }) => ({ type: this.conditionTypeProvider.getCondition(column) }),
107
+ visitRelation: ({ relation }) => ({ type: this.getEntityWhereType(relation.target) }),
109
108
  } as Model.FieldVisitor<GraphQLInputFieldConfig>)
110
109
  }
111
110
 
@@ -1,8 +1,7 @@
1
1
  import { Model } from '@contember/schema'
2
2
  import { WhereTypeProvider } from '../WhereTypeProvider'
3
- import { GraphQLFieldConfigArgumentMap } from 'graphql/type/definition'
3
+ import { GraphQLFieldConfigArgumentMap, GraphQLInt, GraphQLList, GraphQLNonNull } from 'graphql'
4
4
  import { OrderByTypeProvider } from '../OrderByTypeProvider'
5
- import { GraphQLInt, GraphQLList, GraphQLNonNull } from 'graphql'
6
5
 
7
6
  export class FieldArgsVisitor implements
8
7
  Model.ColumnVisitor<GraphQLFieldConfigArgumentMap | undefined>,
@@ -15,11 +14,11 @@ export class FieldArgsVisitor implements
15
14
  this.whereTypeProvider = whereTypeProvider
16
15
  }
17
16
 
18
- public visitColumn(entity: Model.Entity, column: Model.AnyColumn) {
17
+ public visitColumn() {
19
18
  return undefined
20
19
  }
21
20
 
22
- public visitHasMany(entity: Model.Entity, relation: Model.Relation) {
21
+ public visitHasMany({ relation }: Model.AnyHasManyRelationContext) {
23
22
  const filter = this.getWhereArg(relation)
24
23
  const orderBy = this.getOrderByArgs(relation)
25
24
  return {
@@ -30,7 +29,7 @@ export class FieldArgsVisitor implements
30
29
  }
31
30
  }
32
31
 
33
- public visitHasOne(entity: Model.Entity, relation: Model.Relation) {
32
+ public visitHasOne({ relation }: Model.ManyHasOneContext) {
34
33
  const filter = this.getWhereArg(relation)
35
34
  return { filter }
36
35
  }
@@ -13,7 +13,7 @@ export class FieldTypeVisitor implements Model.ColumnVisitor<GraphQLOutputType>,
13
13
  ) {
14
14
  }
15
15
 
16
- public visitColumn(entity: Model.Entity, column: Model.AnyColumn): GraphQLOutputType {
16
+ public visitColumn({ column, entity }: Model.ColumnContext): GraphQLOutputType {
17
17
  const basicType = this.columnTypeResolver.getType(column)
18
18
  const fieldPredicate = this.authorizator.getFieldPredicate(Acl.Operation.read, entity.name, column.name)
19
19
  const idPredicate = this.authorizator.getFieldPredicate(Acl.Operation.read, entity.name, entity.primary)
@@ -26,12 +26,12 @@ export class FieldTypeVisitor implements Model.ColumnVisitor<GraphQLOutputType>,
26
26
  return basicType
27
27
  }
28
28
 
29
- public visitHasMany(entity: Model.Entity, relation: Model.Relation): GraphQLOutputType {
29
+ public visitHasMany({ relation }: Model.AnyHasManyRelationContext): GraphQLOutputType {
30
30
  const entityType = this.entityTypeProvider.getEntity(relation.target)
31
31
  return new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(entityType)))
32
32
  }
33
33
 
34
- public visitHasOne(entity: Model.Entity, relation: Model.Relation & Model.NullableRelation): GraphQLOutputType {
34
+ public visitHasOne({ relation }: Model.AnyHasOneRelationContext): GraphQLOutputType {
35
35
  return this.entityTypeProvider.getEntity(relation.target)
36
36
  }
37
37
  }
@@ -15,7 +15,7 @@ export class CreateEntityInputFieldVisitor implements
15
15
  private readonly createEntityRelationInputProvider: CreateEntityRelationInputProvider,
16
16
  ) {}
17
17
 
18
- public visitColumn(entity: Model.Entity, column: Model.AnyColumn): GraphQLInputFieldConfig | undefined {
18
+ public visitColumn({ entity, column }: Model.ColumnContext): GraphQLInputFieldConfig | undefined {
19
19
  if (entity.primary === column.name && !this.authorizator.isCustomPrimaryAllowed(entity.name)) {
20
20
  return undefined
21
21
  }
@@ -28,10 +28,7 @@ export class CreateEntityInputFieldVisitor implements
28
28
  }
29
29
  }
30
30
 
31
- public visitHasOne(
32
- entity: Model.Entity,
33
- relation: Model.Relation & Model.NullableRelation,
34
- ): GraphQLInputFieldConfig | undefined {
31
+ public visitHasOne({ entity, relation }: Model.AnyHasOneRelationContext): GraphQLInputFieldConfig | undefined {
35
32
  const type = this.createEntityRelationInputProvider.getCreateEntityRelationInput(entity.name, relation.name)
36
33
  if (type === undefined) {
37
34
  return undefined
@@ -41,7 +38,7 @@ export class CreateEntityInputFieldVisitor implements
41
38
  }
42
39
  }
43
40
 
44
- public visitHasMany(entity: Model.Entity, relation: Model.Relation): GraphQLInputFieldConfig | undefined {
41
+ public visitHasMany({ entity, relation }: Model.AnyHasManyRelationContext): GraphQLInputFieldConfig | undefined {
45
42
  const type = this.createEntityRelationInputProvider.getCreateEntityRelationInput(entity.name, relation.name)
46
43
  if (type === undefined) {
47
44
  return undefined
@@ -12,32 +12,23 @@ export class CreateEntityRelationAllowedOperationsVisitor implements
12
12
  throw new ImplementationException('CreateEntityRelationAllowedOperationsVisitor: Not applicable for a column')
13
13
  }
14
14
 
15
- public visitManyHasManyInverse({}, {}, targetEntity: Model.Entity, targetRelation: Model.ManyHasManyOwningRelation) {
15
+ public visitManyHasManyInverse({ targetEntity, targetRelation }: Model.ManyHasManyInverseContext) {
16
16
  return this.getAllowedOperations(targetEntity, targetEntity, targetRelation)
17
17
  }
18
18
 
19
- public visitManyHasManyOwning(
20
- entity: Model.Entity,
21
- relation: Model.ManyHasManyOwningRelation,
22
- targetEntity: Model.Entity,
23
- ) {
19
+ public visitManyHasManyOwning({ entity, targetEntity, relation }: Model.ManyHasManyOwningContext) {
24
20
  return this.getAllowedOperations(targetEntity, entity, relation)
25
21
  }
26
22
 
27
- public visitOneHasMany({}, {}, targetEntity: Model.Entity, targetRelation: Model.ManyHasOneRelation) {
23
+ public visitOneHasMany({ targetEntity, targetRelation }: Model.OneHasManyContext) {
28
24
  return this.getAllowedOperations(targetEntity, targetEntity, targetRelation)
29
25
  }
30
26
 
31
- public visitManyHasOne(entity: Model.Entity, relation: Model.ManyHasOneRelation, targetEntity: Model.Entity) {
27
+ public visitManyHasOne({ targetEntity, entity, relation }: Model.ManyHasOneContext) {
32
28
  return this.getAllowedOperations(targetEntity, entity, relation)
33
29
  }
34
30
 
35
- public visitOneHasOneInverse(
36
- {},
37
- relation: Model.OneHasOneInverseRelation,
38
- targetEntity: Model.Entity,
39
- targetRelation: Model.OneHasOneOwningRelation,
40
- ) {
31
+ public visitOneHasOneInverse({ targetEntity, targetRelation, relation }: Model.OneHasOneInverseContext) {
41
32
  const operations = this.getAllowedOperations(targetEntity, targetEntity, targetRelation)
42
33
  if (relation.nullable || targetRelation.nullable) {
43
34
  return operations
@@ -45,12 +36,7 @@ export class CreateEntityRelationAllowedOperationsVisitor implements
45
36
  return operations.filter(it => it === Input.CreateRelationOperation.create)
46
37
  }
47
38
 
48
- public visitOneHasOneOwning(
49
- entity: Model.Entity,
50
- relation: Model.OneHasOneOwningRelation,
51
- targetEntity: Model.Entity,
52
- targetRelation: Model.OneHasOneInverseRelation | null,
53
- ) {
39
+ public visitOneHasOneOwning({ targetEntity, entity, relation, targetRelation }: Model.OneHasOneOwningContext) {
54
40
  const operations = this.getAllowedOperations(targetEntity, entity, relation)
55
41
  if (!targetRelation || targetRelation.nullable || relation.nullable) {
56
42
  return operations
@@ -1,10 +1,9 @@
1
- import { GraphQLInputObjectType, GraphQLString } from 'graphql'
1
+ import { GraphQLInputFieldConfigMap, GraphQLInputObjectType, GraphQLString } from 'graphql'
2
2
  import { Input, Model } from '@contember/schema'
3
3
  import { GqlTypeName } from '../utils'
4
4
  import { WhereTypeProvider } from '../WhereTypeProvider'
5
5
  import { Accessor, Interface } from '../../utils'
6
6
  import { EntityInputProvider, EntityInputType } from './EntityInputProvider'
7
- import { GraphQLInputFieldConfigMap } from 'graphql/type/definition'
8
7
  import { CreateEntityRelationAllowedOperationsVisitor } from './CreateEntityRelationAllowedOperationsVisitor'
9
8
  import { acceptFieldVisitor } from '@contember/schema-utils'
10
9
  import { ImplementationException } from '../../exception'
@@ -26,29 +25,16 @@ export class CreateEntityRelationInputFieldVisitor implements
26
25
  throw new ImplementationException('CreateEntityRelationInputFieldVisitor: Not applicable for a column')
27
26
  }
28
27
 
29
- public visitHasOne(
30
- entity: Model.Entity,
31
- relation: Model.Relation & Model.NullableRelation,
32
- targetEntity: Model.Entity,
33
- targetRelation: Model.Relation | null,
34
- ): GraphQLInputObjectType | undefined {
35
- return this.createInputObject(entity, relation, targetEntity, targetRelation, false)
28
+ public visitHasOne(context: Model.ManyHasOneContext): GraphQLInputObjectType | undefined {
29
+ return this.createInputObject(context, false)
36
30
  }
37
31
 
38
- public visitHasMany(
39
- entity: Model.Entity,
40
- relation: Model.Relation,
41
- targetEntity: Model.Entity,
42
- targetRelation: Model.Relation | null,
43
- ): GraphQLInputObjectType | undefined {
44
- return this.createInputObject(entity, relation, targetEntity, targetRelation, true)
32
+ public visitHasMany(context: Model.OneHasManyContext): GraphQLInputObjectType | undefined {
33
+ return this.createInputObject(context, true)
45
34
  }
46
35
 
47
36
  public createInputObject(
48
- entity: Model.Entity,
49
- relation: Model.Relation,
50
- targetEntity: Model.Entity,
51
- targetRelation: Model.Relation | null,
37
+ { entity, relation, targetEntity, targetRelation }: Model.AnyRelationContext,
52
38
  withAliasField: boolean,
53
39
  ): GraphQLInputObjectType | undefined {
54
40
  const targetName = targetRelation ? targetRelation.name : undefined
@@ -14,7 +14,7 @@ export class UpdateEntityInputFieldVisitor implements
14
14
  private readonly updateEntityRelationInputProvider: UpdateEntityRelationInputProvider,
15
15
  ) {}
16
16
 
17
- public visitColumn(entity: Model.Entity, column: Model.AnyColumn): GraphQLInputFieldConfig | undefined {
17
+ public visitColumn({ entity, column }: Model.ColumnContext) {
18
18
  if (entity.primary === column.name) {
19
19
  return undefined
20
20
  }
@@ -27,10 +27,7 @@ export class UpdateEntityInputFieldVisitor implements
27
27
  }
28
28
  }
29
29
 
30
- public visitHasOne(
31
- entity: Model.Entity,
32
- relation: Model.Relation & Model.NullableRelation,
33
- ): GraphQLInputFieldConfig | undefined {
30
+ public visitHasOne({ entity, relation }: Model.AnyHasOneRelationContext) {
34
31
  const type = this.updateEntityRelationInputProvider.getUpdateEntityRelationInput(entity.name, relation.name)
35
32
  if (type === undefined) {
36
33
  return undefined
@@ -40,7 +37,7 @@ export class UpdateEntityInputFieldVisitor implements
40
37
  }
41
38
  }
42
39
 
43
- public visitHasMany(entity: Model.Entity, relation: Model.Relation): GraphQLInputFieldConfig | undefined {
40
+ public visitHasMany({ entity, relation }: Model.AnyHasManyRelationContext) {
44
41
  const type = this.updateEntityRelationInputProvider.getUpdateEntityRelationInput(entity.name, relation.name)
45
42
  if (type === undefined) {
46
43
  return undefined
@@ -11,23 +11,19 @@ export class UpdateEntityRelationAllowedOperationsVisitor implements
11
11
  throw new Error('UpdateEntityRelationAllowedOperationsVisitor: Not applicable for a column')
12
12
  }
13
13
 
14
- public visitManyHasManyInverse({}, {}, targetEntity: Model.Entity, targetRelation: Model.ManyHasManyOwningRelation) {
14
+ public visitManyHasManyInverse({ targetEntity, targetRelation }: Model.ManyHasManyInverseContext) {
15
15
  return this.getAllowedOperations(targetEntity, targetEntity, targetRelation)
16
16
  }
17
17
 
18
- public visitManyHasManyOwning(
19
- entity: Model.Entity,
20
- relation: Model.ManyHasManyOwningRelation,
21
- targetEntity: Model.Entity,
22
- ) {
18
+ public visitManyHasManyOwning({ entity, targetEntity, relation }: Model.ManyHasManyOwningContext) {
23
19
  return this.getAllowedOperations(targetEntity, entity, relation)
24
20
  }
25
21
 
26
- public visitOneHasMany({}, {}, targetEntity: Model.Entity, targetRelation: Model.ManyHasOneRelation) {
22
+ public visitOneHasMany({ targetRelation, targetEntity }: Model.OneHasManyContext) {
27
23
  return this.getAllowedOperations(targetEntity, targetEntity, targetRelation)
28
24
  }
29
25
 
30
- public visitManyHasOne(entity: Model.Entity, relation: Model.ManyHasOneRelation, targetEntity: Model.Entity) {
26
+ public visitManyHasOne({ targetEntity, relation, entity }: Model.ManyHasOneContext) {
31
27
  const operations = this.getAllowedOperations(targetEntity, entity, relation)
32
28
  if (relation.nullable) {
33
29
  return operations
@@ -39,12 +35,7 @@ export class UpdateEntityRelationAllowedOperationsVisitor implements
39
35
  return operations.filter(it => !forbiddenOperations.includes(it))
40
36
  }
41
37
 
42
- public visitOneHasOneInverse(
43
- {},
44
- relation: Model.OneHasOneInverseRelation,
45
- targetEntity: Model.Entity,
46
- targetRelation: Model.OneHasOneOwningRelation,
47
- ) {
38
+ public visitOneHasOneInverse({ relation, targetEntity, targetRelation }: Model.OneHasOneInverseContext) {
48
39
  const operations = this.getAllowedOperations(targetEntity, targetEntity, targetRelation)
49
40
  if (relation.nullable || targetRelation.nullable) {
50
41
  return operations
@@ -52,12 +43,7 @@ export class UpdateEntityRelationAllowedOperationsVisitor implements
52
43
  return operations.filter(it => it === Input.UpdateRelationOperation.update)
53
44
  }
54
45
 
55
- public visitOneHasOneOwning(
56
- entity: Model.Entity,
57
- relation: Model.OneHasOneOwningRelation,
58
- targetEntity: Model.Entity,
59
- targetRelation: Model.OneHasOneInverseRelation | null,
60
- ) {
46
+ public visitOneHasOneOwning({ targetEntity, entity, relation, targetRelation }: Model.OneHasOneOwningContext) {
61
47
  const operations = this.getAllowedOperations(targetEntity, entity, relation)
62
48
  if (relation.nullable || !targetRelation || targetRelation.nullable) {
63
49
  return operations
@@ -1,10 +1,15 @@
1
- import { GraphQLBoolean, GraphQLInputObjectType, GraphQLString } from 'graphql'
1
+ import {
2
+ GraphQLBoolean,
3
+ GraphQLInputFieldConfig,
4
+ GraphQLInputFieldConfigMap,
5
+ GraphQLInputObjectType,
6
+ GraphQLString,
7
+ } from 'graphql'
2
8
  import { Acl, Input, Model } from '@contember/schema'
3
9
  import { GqlTypeName } from '../utils'
4
10
  import { WhereTypeProvider } from '../WhereTypeProvider'
5
11
  import { Accessor, filterObject } from '../../utils'
6
12
  import { EntityInputProvider, EntityInputType } from './EntityInputProvider'
7
- import { GraphQLInputFieldConfig, GraphQLInputFieldConfigMap } from 'graphql/type/definition'
8
13
  import { acceptFieldVisitor } from '@contember/schema-utils'
9
14
  import { UpdateEntityRelationAllowedOperationsVisitor } from './UpdateEntityRelationAllowedOperationsVisitor'
10
15
  import { Authorizator } from '../../acl'
@@ -27,12 +32,7 @@ export class UpdateEntityRelationInputFieldVisitor implements
27
32
  throw new Error('UpdateEntityRelationInputFieldVisitor: Not applicable for a column')
28
33
  }
29
34
 
30
- public visitHasOne(
31
- entity: Model.Entity,
32
- relation: Model.Relation & Model.NullableRelation,
33
- targetEntity: Model.Entity,
34
- targetRelation: Model.Relation | null,
35
- ): GraphQLInputObjectType | undefined {
35
+ public visitHasOne({ targetRelation, targetEntity, relation, entity }: Model.AnyHasOneRelationContext) {
36
36
  const withoutRelation = targetRelation ? targetRelation.name : undefined
37
37
 
38
38
  const whereInput = this.createWhereInput(targetEntity)
@@ -84,12 +84,7 @@ export class UpdateEntityRelationInputFieldVisitor implements
84
84
  })
85
85
  }
86
86
 
87
- public visitHasMany(
88
- entity: Model.Entity,
89
- relation: Model.Relation,
90
- targetEntity: Model.Entity,
91
- targetRelation: Model.Relation | null,
92
- ): GraphQLInputObjectType | undefined {
87
+ public visitHasMany({ entity, relation, targetEntity, targetRelation }: Model.AnyHasManyRelationContext) {
93
88
  const withoutRelation = targetRelation ? targetRelation.name : undefined
94
89
 
95
90
  const whereInput = this.createWhereInput(targetEntity)
@@ -1,5 +1,5 @@
1
1
  import { capitalizeFirstLetter } from '../utils'
2
- import { GraphQLFieldResolver } from 'graphql/type/definition'
2
+ import { GraphQLFieldResolver } from 'graphql'
3
3
 
4
4
  export const GqlTypeName = (strings: TemplateStringsArray, ...values: string[]) => {
5
5
  return strings.reduce((combined, string, i) => {
package/src/tsconfig.json CHANGED
@@ -9,22 +9,22 @@
9
9
  "path": "../../database/src"
10
10
  },
11
11
  {
12
- "path": "../../engine-common/src"
12
+ "path": "../../dic/src"
13
13
  },
14
14
  {
15
- "path": "../../schema/src"
15
+ "path": "../../graphql-utils/src"
16
16
  },
17
17
  {
18
- "path": "../../schema-definition/src"
18
+ "path": "../../logger/src"
19
19
  },
20
20
  {
21
- "path": "../../schema-utils/src"
21
+ "path": "../../schema/src"
22
22
  },
23
23
  {
24
- "path": "../../dic/src"
24
+ "path": "../../schema-definition/src"
25
25
  },
26
26
  {
27
- "path": "../../graphql-utils/src"
27
+ "path": "../../schema-utils/src"
28
28
  }
29
29
  ]
30
30
  }
@@ -8,10 +8,10 @@ export const getFieldsForUniqueWhere = (schema: Model.Schema, entity: Model.Enti
8
8
  visitColumn: () => undefined,
9
9
  visitManyHasManyInverse: () => undefined,
10
10
  visitManyHasManyOwning: () => undefined,
11
- visitOneHasMany: ({}, relation) => [relation.name],
11
+ visitOneHasMany: ({ relation }) => [relation.name],
12
12
  visitManyHasOne: () => undefined,
13
- visitOneHasOneInverse: ({}, relation) => [relation.name],
14
- visitOneHasOneOwning: ({}, relation) => [relation.name],
13
+ visitOneHasOneInverse: ({ relation }) => [relation.name],
14
+ visitOneHasOneOwning: ({ relation }) => [relation.name],
15
15
  }),
16
16
  ).filter((it): it is [string] => !!it)
17
17
 
@@ -48,12 +48,12 @@ test('Filter by has many with additional join', async () => {
48
48
  executes: [
49
49
  {
50
50
  sql: SQL`
51
- select "root_"."id" as "root_id", "root_"."short_name" as "root_shortName", "root_"."id" as "root_id"
52
- from "public"."person" as "root_"
53
- where exists (select 1
54
- from "public"."person_locale" as "sub_"
55
- left join "public"."language" as "sub_locale" on "sub_"."locale_id" = "sub_locale"."id"
56
- where "root_"."id" = "sub_"."person_id" and "sub_locale"."slug" = ? and not("sub_"."url_slug" is null))`,
51
+ select "root_"."id" as "root_id", "root_"."short_name" as "root_shortName", "root_"."id" as "root_id"
52
+ from "public"."person" as "root_"
53
+ where exists (select 1
54
+ from "public"."person_locale" as "root_locales"
55
+ left join "public"."language" as "root_locales_locale" on "root_locales"."locale_id" = "root_locales_locale"."id"
56
+ where "root_"."id" = "root_locales"."person_id" and "root_locales_locale"."slug" = ? and not("root_locales"."url_slug" is null))`,
57
57
  response: { rows: [{ root_id: testUuid(1), root_shortName: 'John' }] },
58
58
  parameters: ['cs'],
59
59
  },
@@ -50,12 +50,12 @@ test('delete post with acl', async () => {
50
50
  ],
51
51
  },
52
52
  },
53
+ {
54
+ sql: SQL`select "root_"."id" from "public"."post" as "root_" where "root_"."id" = ?`,
55
+ parameters: [testUuid(1)],
56
+ response: { rows: [{ id: testUuid(1) }] },
57
+ },
53
58
  ...sqlDeferred([
54
- {
55
- sql: SQL`select "root_"."id" from "public"."post" as "root_" where "root_"."id" = ?`,
56
- parameters: [testUuid(1)],
57
- response: { rows: [{ id: testUuid(1) }] },
58
- },
59
59
  {
60
60
  sql: SQL`delete from "public"."post"
61
61
  where "id" in (select "root_"."id"