@contember/engine-content-api 1.2.0-alpha.1 → 1.2.0-alpha.12

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 (361) hide show
  1. package/dist/src/acl/EvaluatedPredicateReplacer.d.ts +9 -0
  2. package/dist/src/acl/EvaluatedPredicateReplacer.d.ts.map +1 -0
  3. package/dist/src/acl/EvaluatedPredicateReplacer.js +31 -0
  4. package/dist/src/acl/EvaluatedPredicateReplacer.js.map +1 -0
  5. package/dist/src/acl/PermissionFactory.d.ts.map +1 -1
  6. package/dist/src/acl/PermissionFactory.js +15 -11
  7. package/dist/src/acl/PermissionFactory.js.map +1 -1
  8. package/dist/src/acl/PredicateFactory.d.ts +4 -2
  9. package/dist/src/acl/PredicateFactory.d.ts.map +1 -1
  10. package/dist/src/acl/PredicateFactory.js +17 -6
  11. package/dist/src/acl/PredicateFactory.js.map +1 -1
  12. package/dist/src/acl/PredicatesInjector.d.ts +1 -1
  13. package/dist/src/acl/PredicatesInjector.d.ts.map +1 -1
  14. package/dist/src/acl/PredicatesInjector.js +16 -19
  15. package/dist/src/acl/PredicatesInjector.js.map +1 -1
  16. package/dist/src/acl/VariableInjector.d.ts +0 -1
  17. package/dist/src/acl/VariableInjector.d.ts.map +1 -1
  18. package/dist/src/acl/VariableInjector.js +4 -14
  19. package/dist/src/acl/VariableInjector.js.map +1 -1
  20. package/dist/src/acl/VariableUtils.d.ts +2 -13
  21. package/dist/src/acl/VariableUtils.d.ts.map +1 -1
  22. package/dist/src/acl/VariableUtils.js +5 -16
  23. package/dist/src/acl/VariableUtils.js.map +1 -1
  24. package/dist/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducerExecutionHandler.d.ts +0 -1
  25. package/dist/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducerExecutionHandler.d.ts.map +1 -1
  26. package/dist/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducerExecutionHandler.js +14 -15
  27. package/dist/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducerExecutionHandler.js.map +1 -1
  28. package/dist/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.d.ts +1 -1
  29. package/dist/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.d.ts.map +1 -1
  30. package/dist/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.js +1 -1
  31. package/dist/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.js.map +1 -1
  32. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyCountVisitor.d.ts +5 -4
  33. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyCountVisitor.d.ts.map +1 -1
  34. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyCountVisitor.js +29 -20
  35. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyCountVisitor.js.map +1 -1
  36. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyExecutionHandler.d.ts.map +1 -1
  37. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyExecutionHandler.js +2 -2
  38. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyExecutionHandler.js.map +1 -1
  39. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyFieldProviderVisitor.d.ts +3 -3
  40. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyFieldProviderVisitor.d.ts.map +1 -1
  41. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyFieldProviderVisitor.js +3 -3
  42. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyFieldProviderVisitor.js.map +1 -1
  43. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyNodesVisitor.d.ts +5 -4
  44. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyNodesVisitor.d.ts.map +1 -1
  45. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyNodesVisitor.js +29 -20
  46. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyNodesVisitor.js.map +1 -1
  47. package/dist/src/input-validation/ColumnValueResolver.d.ts +4 -3
  48. package/dist/src/input-validation/ColumnValueResolver.d.ts.map +1 -1
  49. package/dist/src/input-validation/ColumnValueResolver.js.map +1 -1
  50. package/dist/src/input-validation/EntityRulesResolver.js +7 -7
  51. package/dist/src/input-validation/EntityRulesResolver.js.map +1 -1
  52. package/dist/src/input-validation/QueryAstFactory.js +1 -1
  53. package/dist/src/input-validation/QueryAstFactory.js.map +1 -1
  54. package/dist/src/input-validation/ValidationContext.d.ts +2 -2
  55. package/dist/src/input-validation/ValidationContext.d.ts.map +1 -1
  56. package/dist/src/input-validation/ValidationContext.js.map +1 -1
  57. package/dist/src/input-validation/ValidationDataSelector.d.ts.map +1 -1
  58. package/dist/src/input-validation/ValidationDataSelector.js +1 -1
  59. package/dist/src/input-validation/ValidationDataSelector.js.map +1 -1
  60. package/dist/src/input-validation/preValidation/CreateInputPreValidationProcessor.d.ts +7 -8
  61. package/dist/src/input-validation/preValidation/CreateInputPreValidationProcessor.d.ts.map +1 -1
  62. package/dist/src/input-validation/preValidation/CreateInputPreValidationProcessor.js.map +1 -1
  63. package/dist/src/input-validation/preValidation/InputPreValidator.js +4 -4
  64. package/dist/src/input-validation/preValidation/InputPreValidator.js.map +1 -1
  65. package/dist/src/input-validation/preValidation/UpdateInputPreValidationProcessor.d.ts +7 -8
  66. package/dist/src/input-validation/preValidation/UpdateInputPreValidationProcessor.d.ts.map +1 -1
  67. package/dist/src/input-validation/preValidation/UpdateInputPreValidationProcessor.js.map +1 -1
  68. package/dist/src/inputProcessing/CreateInputProcessor.d.ts +8 -9
  69. package/dist/src/inputProcessing/CreateInputProcessor.d.ts.map +1 -1
  70. package/dist/src/inputProcessing/CreateInputVisitor.d.ts +7 -7
  71. package/dist/src/inputProcessing/CreateInputVisitor.d.ts.map +1 -1
  72. package/dist/src/inputProcessing/CreateInputVisitor.js +15 -46
  73. package/dist/src/inputProcessing/CreateInputVisitor.js.map +1 -1
  74. package/dist/src/inputProcessing/UpdateInputProcessor.d.ts +8 -9
  75. package/dist/src/inputProcessing/UpdateInputProcessor.d.ts.map +1 -1
  76. package/dist/src/inputProcessing/UpdateInputVisitor.d.ts +7 -7
  77. package/dist/src/inputProcessing/UpdateInputVisitor.d.ts.map +1 -1
  78. package/dist/src/inputProcessing/UpdateInputVisitor.js +13 -28
  79. package/dist/src/inputProcessing/UpdateInputVisitor.js.map +1 -1
  80. package/dist/src/inputProcessing/index.d.ts +0 -1
  81. package/dist/src/inputProcessing/index.d.ts.map +1 -1
  82. package/dist/src/inputProcessing/index.js +0 -1
  83. package/dist/src/inputProcessing/index.js.map +1 -1
  84. package/dist/src/introspection/IntrospectionSchemaFactory.js +7 -7
  85. package/dist/src/introspection/IntrospectionSchemaFactory.js.map +1 -1
  86. package/dist/src/introspection/content-schema.types.d.ts +19 -223
  87. package/dist/src/introspection/content-schema.types.d.ts.map +1 -1
  88. package/dist/src/introspection/content-schema.types.js +2 -2
  89. package/dist/src/introspection/content-schema.types.js.map +1 -1
  90. package/dist/src/mapper/Mapper.d.ts +6 -6
  91. package/dist/src/mapper/Mapper.d.ts.map +1 -1
  92. package/dist/src/mapper/Mapper.js +28 -23
  93. package/dist/src/mapper/Mapper.js.map +1 -1
  94. package/dist/src/mapper/MapperContainer.d.ts.map +1 -1
  95. package/dist/src/mapper/MapperContainer.js +7 -4
  96. package/dist/src/mapper/MapperContainer.js.map +1 -1
  97. package/dist/src/mapper/delete/DeleteExecutor.js +3 -3
  98. package/dist/src/mapper/delete/DeleteExecutor.js.map +1 -1
  99. package/dist/src/mapper/insert/SqlCreateInputProcessor.d.ts +4 -2
  100. package/dist/src/mapper/insert/SqlCreateInputProcessor.d.ts.map +1 -1
  101. package/dist/src/mapper/insert/SqlCreateInputProcessor.js.map +1 -1
  102. package/dist/src/mapper/select/JoinVisitor.d.ts +6 -6
  103. package/dist/src/mapper/select/JoinVisitor.d.ts.map +1 -1
  104. package/dist/src/mapper/select/JoinVisitor.js +6 -6
  105. package/dist/src/mapper/select/JoinVisitor.js.map +1 -1
  106. package/dist/src/mapper/select/RelationFetcher.d.ts +32 -5
  107. package/dist/src/mapper/select/RelationFetcher.d.ts.map +1 -1
  108. package/dist/src/mapper/select/RelationFetcher.js +37 -15
  109. package/dist/src/mapper/select/RelationFetcher.js.map +1 -1
  110. package/dist/src/mapper/select/SelectBuilder.d.ts +2 -1
  111. package/dist/src/mapper/select/SelectBuilder.d.ts.map +1 -1
  112. package/dist/src/mapper/select/SelectBuilder.js +4 -2
  113. package/dist/src/mapper/select/SelectBuilder.js.map +1 -1
  114. package/dist/src/mapper/select/SelectBuilderFactory.d.ts +2 -1
  115. package/dist/src/mapper/select/SelectBuilderFactory.d.ts.map +1 -1
  116. package/dist/src/mapper/select/SelectExecutionHandler.d.ts +1 -0
  117. package/dist/src/mapper/select/SelectExecutionHandler.d.ts.map +1 -1
  118. package/dist/src/mapper/select/WhereBuilder.d.ts +8 -3
  119. package/dist/src/mapper/select/WhereBuilder.d.ts.map +1 -1
  120. package/dist/src/mapper/select/WhereBuilder.js +71 -25
  121. package/dist/src/mapper/select/WhereBuilder.js.map +1 -1
  122. package/dist/src/mapper/select/handlers/FieldsVisitor.d.ts +9 -8
  123. package/dist/src/mapper/select/handlers/FieldsVisitor.d.ts.map +1 -1
  124. package/dist/src/mapper/select/handlers/FieldsVisitor.js +45 -24
  125. package/dist/src/mapper/select/handlers/FieldsVisitor.js.map +1 -1
  126. package/dist/src/mapper/select/handlers/FieldsVisitorFactory.d.ts.map +1 -1
  127. package/dist/src/mapper/select/handlers/FieldsVisitorFactory.js +1 -1
  128. package/dist/src/mapper/select/handlers/FieldsVisitorFactory.js.map +1 -1
  129. package/dist/src/mapper/select/optimizer/ConditionOptimizer.d.ts +5 -0
  130. package/dist/src/mapper/select/optimizer/ConditionOptimizer.d.ts.map +1 -0
  131. package/dist/src/mapper/select/optimizer/ConditionOptimizer.js +39 -0
  132. package/dist/src/mapper/select/optimizer/ConditionOptimizer.js.map +1 -0
  133. package/dist/src/mapper/select/optimizer/WhereOptimizer.d.ts +15 -0
  134. package/dist/src/mapper/select/optimizer/WhereOptimizer.d.ts.map +1 -0
  135. package/dist/src/mapper/select/optimizer/WhereOptimizer.js +118 -0
  136. package/dist/src/mapper/select/optimizer/WhereOptimizer.js.map +1 -0
  137. package/dist/src/mapper/select/optimizer/WhereReplacer.d.ts +6 -0
  138. package/dist/src/mapper/select/optimizer/WhereReplacer.d.ts.map +1 -0
  139. package/dist/src/mapper/select/optimizer/WhereReplacer.js +28 -0
  140. package/dist/src/mapper/select/optimizer/WhereReplacer.js.map +1 -0
  141. package/dist/src/mapper/select/optimizer/helpers.d.ts +10 -0
  142. package/dist/src/mapper/select/optimizer/helpers.d.ts.map +1 -0
  143. package/dist/src/mapper/select/optimizer/helpers.js +72 -0
  144. package/dist/src/mapper/select/optimizer/helpers.js.map +1 -0
  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.map +1 -1
  148. package/dist/src/mapper/update/UpdateBuilder.js +3 -3
  149. package/dist/src/mapper/update/UpdateBuilder.js.map +1 -1
  150. package/dist/src/resolvers/GraphQlQueryAstFactory.js +2 -2
  151. package/dist/src/resolvers/GraphQlQueryAstFactory.js.map +1 -1
  152. package/dist/src/resolvers/MutationResolver.js +15 -15
  153. package/dist/src/resolvers/MutationResolver.js.map +1 -1
  154. package/dist/src/resolvers/ReadHelpers.js +10 -10
  155. package/dist/src/resolvers/ReadHelpers.js.map +1 -1
  156. package/dist/src/resolvers/ReadResolver.js +2 -2
  157. package/dist/src/resolvers/ReadResolver.js.map +1 -1
  158. package/dist/src/schema/FieldAccessVisitor.d.ts +2 -2
  159. package/dist/src/schema/FieldAccessVisitor.d.ts.map +1 -1
  160. package/dist/src/schema/FieldAccessVisitor.js +2 -2
  161. package/dist/src/schema/FieldAccessVisitor.js.map +1 -1
  162. package/dist/src/schema/MutationProvider.js +4 -4
  163. package/dist/src/schema/MutationProvider.js.map +1 -1
  164. package/dist/src/schema/OrderByTypeProvider.js +1 -1
  165. package/dist/src/schema/OrderByTypeProvider.js.map +1 -1
  166. package/dist/src/schema/QueryProvider.js +3 -3
  167. package/dist/src/schema/QueryProvider.js.map +1 -1
  168. package/dist/src/schema/ResultSchemaTypeProvider.d.ts +2 -2
  169. package/dist/src/schema/ResultSchemaTypeProvider.d.ts.map +1 -1
  170. package/dist/src/schema/WhereTypeProvider.js +4 -4
  171. package/dist/src/schema/WhereTypeProvider.js.map +1 -1
  172. package/dist/src/schema/entities/FieldArgsVisitor.d.ts +7 -7
  173. package/dist/src/schema/entities/FieldArgsVisitor.d.ts.map +1 -1
  174. package/dist/src/schema/entities/FieldArgsVisitor.js +3 -3
  175. package/dist/src/schema/entities/FieldArgsVisitor.js.map +1 -1
  176. package/dist/src/schema/entities/FieldTypeVisitor.d.ts +3 -3
  177. package/dist/src/schema/entities/FieldTypeVisitor.d.ts.map +1 -1
  178. package/dist/src/schema/entities/FieldTypeVisitor.js +3 -3
  179. package/dist/src/schema/entities/FieldTypeVisitor.js.map +1 -1
  180. package/dist/src/schema/mutations/CreateEntityInputFieldVisitor.d.ts +3 -3
  181. package/dist/src/schema/mutations/CreateEntityInputFieldVisitor.d.ts.map +1 -1
  182. package/dist/src/schema/mutations/CreateEntityInputFieldVisitor.js +3 -3
  183. package/dist/src/schema/mutations/CreateEntityInputFieldVisitor.js.map +1 -1
  184. package/dist/src/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.d.ts +6 -6
  185. package/dist/src/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.d.ts.map +1 -1
  186. package/dist/src/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.js +6 -6
  187. package/dist/src/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.js.map +1 -1
  188. package/dist/src/schema/mutations/CreateEntityRelationInputFieldVisitor.d.ts +3 -3
  189. package/dist/src/schema/mutations/CreateEntityRelationInputFieldVisitor.d.ts.map +1 -1
  190. package/dist/src/schema/mutations/CreateEntityRelationInputFieldVisitor.js +5 -5
  191. package/dist/src/schema/mutations/CreateEntityRelationInputFieldVisitor.js.map +1 -1
  192. package/dist/src/schema/mutations/UpdateEntityInputFieldVisitor.d.ts +10 -4
  193. package/dist/src/schema/mutations/UpdateEntityInputFieldVisitor.d.ts.map +1 -1
  194. package/dist/src/schema/mutations/UpdateEntityInputFieldVisitor.js +3 -3
  195. package/dist/src/schema/mutations/UpdateEntityInputFieldVisitor.js.map +1 -1
  196. package/dist/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.d.ts +6 -6
  197. package/dist/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.d.ts.map +1 -1
  198. package/dist/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.js +6 -6
  199. package/dist/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.js.map +1 -1
  200. package/dist/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.d.ts +2 -2
  201. package/dist/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.d.ts.map +1 -1
  202. package/dist/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.js +2 -2
  203. package/dist/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.js.map +1 -1
  204. package/dist/src/tsconfig.tsbuildinfo +1 -1
  205. package/dist/src/utils/object.d.ts.map +1 -1
  206. package/dist/src/utils/object.js +3 -4
  207. package/dist/src/utils/object.js.map +1 -1
  208. package/dist/src/utils/uniqueWhereFields.js +3 -3
  209. package/dist/src/utils/uniqueWhereFields.js.map +1 -1
  210. package/dist/tests/cases/integration/graphQlDb/insert/insertSequence.test.d.ts +2 -0
  211. package/dist/tests/cases/integration/graphQlDb/insert/insertSequence.test.d.ts.map +1 -0
  212. package/dist/tests/cases/integration/graphQlDb/insert/insertSequence.test.js +38 -0
  213. package/dist/tests/cases/integration/graphQlDb/insert/insertSequence.test.js.map +1 -0
  214. package/dist/tests/cases/integration/graphQlRequests/delete/aclDelete.test.js +1 -1
  215. package/dist/tests/cases/integration/graphQlRequests/delete/aclDelete.test.js.map +1 -1
  216. package/dist/tests/cases/integration/graphQlRequests/insert/acl/setField.test.js +2 -2
  217. package/dist/tests/cases/integration/graphQlRequests/insert/acl/setField.test.js.map +1 -1
  218. package/dist/tests/cases/integration/graphQlRequests/insert/aclInsert.test.js +1 -1
  219. package/dist/tests/cases/integration/graphQlRequests/insert/aclInsert.test.js.map +1 -1
  220. package/dist/tests/cases/integration/graphQlRequests/query/acl/fieldRestrictedByLocale.test.js +7 -6
  221. package/dist/tests/cases/integration/graphQlRequests/query/acl/fieldRestrictedByLocale.test.js.map +1 -1
  222. package/dist/tests/cases/integration/graphQlRequests/query/acl/nestedPredicate.test.js +1 -1
  223. package/dist/tests/cases/integration/graphQlRequests/query/acl/nestedPredicate.test.js.map +1 -1
  224. package/dist/tests/cases/integration/graphQlRequests/query/acl/predicateElimination.test.d.ts +2 -0
  225. package/dist/tests/cases/integration/graphQlRequests/query/acl/predicateElimination.test.d.ts.map +1 -0
  226. package/dist/tests/cases/integration/graphQlRequests/query/acl/predicateElimination.test.js +137 -0
  227. package/dist/tests/cases/integration/graphQlRequests/query/acl/predicateElimination.test.js.map +1 -0
  228. package/dist/tests/cases/integration/graphQlRequests/query/filter/complexCondition.test.js +1 -1
  229. package/dist/tests/cases/integration/graphQlRequests/query/filter/composedFilter.test.js +1 -1
  230. package/dist/tests/cases/integration/graphQlRequests/query/filter/composedFilter.test.js.map +1 -1
  231. package/dist/tests/cases/integration/graphQlRequests/query/relations/manyHasManyInverse.test.js +73 -0
  232. package/dist/tests/cases/integration/graphQlRequests/query/relations/manyHasManyInverse.test.js.map +1 -1
  233. package/dist/tests/cases/integration/graphQlRequests/query/relations/manyHasManyOwning.test.js +73 -0
  234. package/dist/tests/cases/integration/graphQlRequests/query/relations/manyHasManyOwning.test.js.map +1 -1
  235. package/dist/tests/cases/integration/graphQlRequests/update/acl/aclUpdate.test.js +6 -6
  236. package/dist/tests/cases/integration/graphQlRequests/update/acl/aclUpdate.test.js.map +1 -1
  237. package/dist/tests/cases/integration/graphQlSchema/graphQlSchemaBuilder.test.js +6 -3
  238. package/dist/tests/cases/integration/graphQlSchema/graphQlSchemaBuilder.test.js.map +1 -1
  239. package/dist/tests/cases/integration/graphQlSchema/model.js.map +1 -1
  240. package/dist/tests/cases/unit/aclVariablesFactory.test.js +7 -33
  241. package/dist/tests/cases/unit/aclVariablesFactory.test.js.map +1 -1
  242. package/dist/tests/cases/unit/conditionOptimizer.test.d.ts +2 -0
  243. package/dist/tests/cases/unit/conditionOptimizer.test.d.ts.map +1 -0
  244. package/dist/tests/cases/unit/conditionOptimizer.test.js +118 -0
  245. package/dist/tests/cases/unit/conditionOptimizer.test.js.map +1 -0
  246. package/dist/tests/cases/unit/orderbyHelper.test.js +1 -0
  247. package/dist/tests/cases/unit/orderbyHelper.test.js.map +1 -1
  248. package/dist/tests/cases/unit/permissionMerger.test.js +2 -0
  249. package/dist/tests/cases/unit/permissionMerger.test.js.map +1 -1
  250. package/dist/tests/cases/unit/predicatesFactory.test.d.ts +2 -0
  251. package/dist/tests/cases/unit/predicatesFactory.test.d.ts.map +1 -0
  252. package/dist/tests/cases/unit/predicatesFactory.test.js +109 -0
  253. package/dist/tests/cases/unit/predicatesFactory.test.js.map +1 -0
  254. package/dist/tests/cases/unit/predicatesInjector.test.js +88 -14
  255. package/dist/tests/cases/unit/predicatesInjector.test.js.map +1 -1
  256. package/dist/tests/cases/unit/variableInjector.test.js +4 -3
  257. package/dist/tests/cases/unit/variableInjector.test.js.map +1 -1
  258. package/dist/tests/cases/unit/whereBuilder.test.d.ts +2 -0
  259. package/dist/tests/cases/unit/whereBuilder.test.d.ts.map +1 -0
  260. package/dist/tests/cases/unit/whereBuilder.test.js +75 -0
  261. package/dist/tests/cases/unit/whereBuilder.test.js.map +1 -0
  262. package/dist/tests/cases/unit/whereOptimizer.test.d.ts +2 -0
  263. package/dist/tests/cases/unit/whereOptimizer.test.d.ts.map +1 -0
  264. package/dist/tests/cases/unit/whereOptimizer.test.js +265 -0
  265. package/dist/tests/cases/unit/whereOptimizer.test.js.map +1 -0
  266. package/dist/tests/src/testGraphql.d.ts.map +1 -1
  267. package/dist/tests/src/testGraphql.js +10 -2
  268. package/dist/tests/src/testGraphql.js.map +1 -1
  269. package/dist/tests/tsconfig.tsbuildinfo +1 -1
  270. package/graphql.codegen.yml +0 -3
  271. package/package.json +16 -16
  272. package/src/acl/EvaluatedPredicateReplacer.ts +32 -0
  273. package/src/acl/PermissionFactory.ts +18 -13
  274. package/src/acl/PredicateFactory.ts +32 -8
  275. package/src/acl/PredicatesInjector.ts +25 -17
  276. package/src/acl/VariableInjector.ts +2 -15
  277. package/src/acl/VariableUtils.ts +7 -23
  278. package/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducerExecutionHandler.ts +17 -24
  279. package/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.ts +1 -6
  280. package/src/extensions/paginatedHasMany/PaginatedHasManyCountVisitor.ts +26 -46
  281. package/src/extensions/paginatedHasMany/PaginatedHasManyExecutionHandler.ts +6 -3
  282. package/src/extensions/paginatedHasMany/PaginatedHasManyFieldProviderVisitor.ts +4 -22
  283. package/src/extensions/paginatedHasMany/PaginatedHasManyNodesVisitor.ts +26 -49
  284. package/src/input-validation/ColumnValueResolver.ts +2 -3
  285. package/src/input-validation/EntityRulesResolver.ts +7 -7
  286. package/src/input-validation/QueryAstFactory.ts +1 -1
  287. package/src/input-validation/ValidationContext.ts +2 -2
  288. package/src/input-validation/ValidationDataSelector.ts +2 -2
  289. package/src/input-validation/preValidation/CreateInputPreValidationProcessor.ts +7 -8
  290. package/src/input-validation/preValidation/InputPreValidator.ts +4 -4
  291. package/src/input-validation/preValidation/UpdateInputPreValidationProcessor.ts +7 -8
  292. package/src/inputProcessing/CreateInputProcessor.ts +8 -9
  293. package/src/inputProcessing/CreateInputVisitor.ts +27 -89
  294. package/src/inputProcessing/UpdateInputProcessor.ts +8 -9
  295. package/src/inputProcessing/UpdateInputVisitor.ts +25 -71
  296. package/src/inputProcessing/index.ts +0 -1
  297. package/src/introspection/IntrospectionSchemaFactory.ts +7 -7
  298. package/src/introspection/content-schema.types.ts +19 -286
  299. package/src/mapper/Mapper.ts +37 -30
  300. package/src/mapper/MapperContainer.ts +10 -5
  301. package/src/mapper/delete/DeleteExecutor.ts +3 -3
  302. package/src/mapper/insert/SqlCreateInputProcessor.ts +3 -3
  303. package/src/mapper/select/JoinVisitor.ts +6 -33
  304. package/src/mapper/select/RelationFetcher.ts +101 -41
  305. package/src/mapper/select/SelectBuilder.ts +3 -1
  306. package/src/mapper/select/SelectBuilderFactory.ts +2 -1
  307. package/src/mapper/select/SelectExecutionHandler.ts +1 -0
  308. package/src/mapper/select/WhereBuilder.ts +95 -34
  309. package/src/mapper/select/handlers/FieldsVisitor.ts +47 -57
  310. package/src/mapper/select/handlers/FieldsVisitorFactory.ts +1 -0
  311. package/src/mapper/select/optimizer/ConditionOptimizer.ts +41 -0
  312. package/src/mapper/select/optimizer/WhereOptimizer.ts +138 -0
  313. package/src/mapper/select/optimizer/WhereReplacer.ts +27 -0
  314. package/src/mapper/select/optimizer/helpers.ts +58 -0
  315. package/src/mapper/update/SqlUpdateInputProcessor.ts +1 -1
  316. package/src/mapper/update/UpdateBuilder.ts +3 -3
  317. package/src/resolvers/GraphQlQueryAstFactory.ts +3 -3
  318. package/src/resolvers/MutationResolver.ts +1 -1
  319. package/src/resolvers/ReadHelpers.ts +3 -3
  320. package/src/resolvers/ReadResolver.ts +2 -2
  321. package/src/schema/FieldAccessVisitor.ts +2 -2
  322. package/src/schema/OrderByTypeProvider.ts +1 -1
  323. package/src/schema/WhereTypeProvider.ts +4 -4
  324. package/src/schema/entities/FieldArgsVisitor.ts +3 -3
  325. package/src/schema/entities/FieldTypeVisitor.ts +3 -3
  326. package/src/schema/mutations/CreateEntityInputFieldVisitor.ts +3 -6
  327. package/src/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.ts +6 -20
  328. package/src/schema/mutations/CreateEntityRelationInputFieldVisitor.ts +5 -18
  329. package/src/schema/mutations/UpdateEntityInputFieldVisitor.ts +3 -6
  330. package/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.ts +6 -20
  331. package/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.ts +2 -12
  332. package/src/utils/object.ts +6 -6
  333. package/src/utils/uniqueWhereFields.ts +3 -3
  334. package/tests/cases/integration/graphQlDb/insert/insertSequence.test.ts +34 -0
  335. package/tests/cases/integration/graphQlRequests/delete/aclDelete.test.ts +2 -2
  336. package/tests/cases/integration/graphQlRequests/insert/acl/setField.test.ts +3 -3
  337. package/tests/cases/integration/graphQlRequests/insert/aclInsert.test.ts +2 -2
  338. package/tests/cases/integration/graphQlRequests/query/acl/fieldRestrictedByLocale.test.ts +7 -6
  339. package/tests/cases/integration/graphQlRequests/query/acl/nestedPredicate.test.ts +1 -1
  340. package/tests/cases/integration/graphQlRequests/query/acl/predicateElimination.test.ts +130 -0
  341. package/tests/cases/integration/graphQlRequests/query/filter/complexCondition.test.ts +1 -1
  342. package/tests/cases/integration/graphQlRequests/query/filter/composedFilter.test.ts +1 -1
  343. package/tests/cases/integration/graphQlRequests/query/relations/manyHasManyInverse.test.ts +74 -0
  344. package/tests/cases/integration/graphQlRequests/query/relations/manyHasManyOwning.test.ts +77 -0
  345. package/tests/cases/integration/graphQlRequests/update/acl/aclUpdate.test.ts +7 -7
  346. package/tests/cases/integration/graphQlSchema/graphQlSchemaBuilder.test.ts +5 -5
  347. package/tests/cases/unit/aclVariablesFactory.test.ts +8 -35
  348. package/tests/cases/unit/conditionOptimizer.test.ts +135 -0
  349. package/tests/cases/unit/orderbyHelper.test.ts +1 -0
  350. package/tests/cases/unit/permissionMerger.test.ts +2 -0
  351. package/tests/cases/unit/predicatesFactory.test.ts +103 -0
  352. package/tests/cases/unit/predicatesInjector.test.ts +78 -16
  353. package/tests/cases/unit/variableInjector.test.ts +6 -5
  354. package/tests/cases/unit/whereBuilder.test.ts +84 -0
  355. package/tests/cases/unit/whereOptimizer.test.ts +289 -0
  356. package/tests/src/testGraphql.ts +9 -2
  357. package/dist/src/inputProcessing/InputContext.d.ts +0 -43
  358. package/dist/src/inputProcessing/InputContext.d.ts.map +0 -1
  359. package/dist/src/inputProcessing/InputContext.js +0 -3
  360. package/dist/src/inputProcessing/InputContext.js.map +0 -1
  361. package/src/inputProcessing/InputContext.ts +0 -49
@@ -0,0 +1,58 @@
1
+ export const optimizeOr = <P extends Record<string, unknown>>(operands: readonly (P | boolean | undefined)[]): P | { or?: P[] } | boolean => {
2
+ const normalized: P[] = []
3
+ let hasNever = false
4
+ for (const operand of operands) {
5
+ if (operand === true) {
6
+ return true
7
+ } else if (operand === false) {
8
+ hasNever = true
9
+ } else if (operand !== undefined) {
10
+ normalized.push(...Array.isArray(operand.or) ? operand.or : [operand])
11
+ }
12
+ }
13
+
14
+ if (normalized.length > 1) {
15
+ return { or: normalized }
16
+ } else if (normalized.length === 1) {
17
+ return normalized[0]
18
+ } else if (hasNever) {
19
+ return false
20
+ } else {
21
+ return {}
22
+ }
23
+ }
24
+
25
+ export const optimizeAnd = <P extends Record<string, unknown>>(operands: readonly (P | boolean | undefined)[]): P | { and?: P[] } | boolean => {
26
+ const normalized: P[] = []
27
+ let hasAlways = false
28
+
29
+ for (const operand of operands) {
30
+ if (operand === true) {
31
+ hasAlways = true
32
+ } else if (operand === false) {
33
+ return false
34
+ } else if (operand !== undefined) {
35
+ normalized.push(...Array.isArray(operand.and) ? operand.and : [operand])
36
+ }
37
+ }
38
+
39
+ if (normalized.length > 1) {
40
+ return { and: normalized }
41
+ } else if (normalized.length === 1) {
42
+ return normalized[0]
43
+ } else if (hasAlways) {
44
+ return true
45
+ } else {
46
+ return {}
47
+ }
48
+ }
49
+
50
+ export const optimizeNot = <P extends Record<string, unknown>>(operand: P | boolean): P['not'] | { not: P } | boolean => {
51
+ if (typeof operand === 'boolean') {
52
+ return !operand
53
+ } else if (operand.not) {
54
+ return operand.not as P['not']
55
+ } else {
56
+ return { not: operand }
57
+ }
58
+ }
@@ -26,7 +26,7 @@ export class SqlUpdateInputProcessor implements UpdateInputProcessor<MutationRes
26
26
  private readonly mapper: Mapper,
27
27
  ) {}
28
28
 
29
- public column({ entity, column }: Context.ColumnContext) {
29
+ public column({ entity, column }: Model.ColumnContext) {
30
30
  if (this.data[column.name] !== undefined) {
31
31
  this.updateBuilder.addFieldValue(column.name, this.data[column.name] as Value.AtomicValue)
32
32
  }
@@ -74,9 +74,9 @@ export class UpdateBuilder {
74
74
  const columns = new Set(resolvedData.map(it => it.columnName))
75
75
  const allColumns: string[] = Object.values(
76
76
  acceptEveryFieldVisitor(this.schema, this.entity, {
77
- visitColumn: (entity, column) => column.columnName,
78
- visitManyHasOne: (entity, relation) => relation.joiningColumn.columnName,
79
- visitOneHasOneOwning: (entity, relation) => relation.joiningColumn.columnName,
77
+ visitColumn: ({ column }) => column.columnName,
78
+ visitManyHasOne: ({ relation }) => relation.joiningColumn.columnName,
79
+ visitOneHasOneOwning: ({ relation }) => relation.joiningColumn.columnName,
80
80
  visitManyHasManyInverse: () => null,
81
81
  visitManyHasManyOwning: () => null,
82
82
  visitOneHasOneInverse: () => null,
@@ -7,7 +7,7 @@ import {
7
7
  GraphQLResolveInfo,
8
8
  isListType,
9
9
  isNonNullType,
10
- isObjectType,
10
+ isObjectType, Kind,
11
11
  } from 'graphql'
12
12
  import { SelectionSetNode } from 'graphql/language/ast'
13
13
  import { getArgumentValues } from 'graphql/execution/values'
@@ -67,13 +67,13 @@ export class GraphQlQueryAstFactory {
67
67
  ): AnyNode[] {
68
68
  const fields: ObjectNode | FieldNode[] = []
69
69
  for (const subNode of selectionSet.selections) {
70
- if (isIt<GraphQlFieldNode>(subNode, 'kind', 'Field')) {
70
+ if (isIt<GraphQlFieldNode>(subNode, 'kind', Kind.FIELD)) {
71
71
  const field = this.createFromNode(info, parentType, subNode, path, filter)
72
72
  if (field === null) {
73
73
  continue
74
74
  }
75
75
  fields.push(field)
76
- } else if (isIt<FragmentSpreadNode>(subNode, 'kind', 'FragmentSpread')) {
76
+ } else if (isIt<FragmentSpreadNode>(subNode, 'kind', Kind.FRAGMENT_SPREAD)) {
77
77
  const fragmentDefinition = info.fragments[subNode.name.value]
78
78
  if (!fragmentDefinition) {
79
79
  throw new Error(`GraphQlQueryAstFactory: Fragment definition ${subNode.name.value} not found`)
@@ -457,7 +457,7 @@ export class MutationResolver {
457
457
  throw new Error('MutationResolver: expected ObjectNode')
458
458
  }
459
459
  const objectWithArgs = singleNodeQuery.withArgs({ by: where })
460
- nodes[singleNodeQuery.alias] = await mapper.selectUnique(entity, objectWithArgs)
460
+ nodes[singleNodeQuery.alias] = await mapper.selectUnique(entity, objectWithArgs, [])
461
461
  }
462
462
  return nodes
463
463
  }
@@ -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) : 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)
40
+ return mapper.selectUnique(meta.entity, field, [])
41
41
  case Operation.list:
42
- return mapper.select(meta.entity, field)
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)
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)
41
+ return await this.mapperFactory(this.db).selectUnique(entity, queryAst, [])
42
42
  }
43
43
 
44
44
  public async resolvePaginationQuery(entity: Model.Entity, info: GraphQLResolveInfo) {
@@ -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
  }
@@ -51,7 +51,7 @@ export class OrderByTypeProvider {
51
51
 
52
52
  const field = acceptFieldVisitor(this.schema, name, fieldName, {
53
53
  visitColumn: () => ({ type: this.orderDirectionEnum }),
54
- visitHasOne: (entity, relation) => ({ type: this.getEntityOrderByType(relation.target) }),
54
+ visitHasOne: ({ relation }) => ({ type: this.getEntityOrderByType(relation.target) }),
55
55
  visitHasMany: () => undefined,
56
56
  } as Model.FieldVisitor<GraphQLInputFieldConfig | undefined>)
57
57
 
@@ -74,7 +74,7 @@ export class WhereTypeProvider {
74
74
  continue
75
75
  }
76
76
  fields[field] = acceptFieldVisitor<GraphQLInputFieldConfig>(this.schema, entity, field, {
77
- visitRelation: (entity, relation, targetEntity) => {
77
+ visitRelation: ({ targetEntity }) => {
78
78
  // if (!isIt<Model.JoiningColumnRelation>(relation, 'joiningColumn')) {
79
79
  // throw new Error('Only column or owning relation can be a part of unique key')
80
80
  // }
@@ -84,7 +84,7 @@ export class WhereTypeProvider {
84
84
  }
85
85
  return { type: uniqueWhere }
86
86
  },
87
- visitColumn: (entity, column) => ({ type: this.columnTypeResolver.getType(column) }),
87
+ visitColumn: ({ column }) => ({ type: this.columnTypeResolver.getType(column) }),
88
88
  })
89
89
  }
90
90
  }
@@ -104,8 +104,8 @@ export class WhereTypeProvider {
104
104
  continue
105
105
  }
106
106
  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) }),
107
+ visitColumn: ({ column }) => ({ type: this.conditionTypeProvider.getCondition(column) }),
108
+ visitRelation: ({ relation }) => ({ type: this.getEntityWhereType(relation.target) }),
109
109
  } as Model.FieldVisitor<GraphQLInputFieldConfig>)
110
110
  }
111
111
 
@@ -15,11 +15,11 @@ export class FieldArgsVisitor implements
15
15
  this.whereTypeProvider = whereTypeProvider
16
16
  }
17
17
 
18
- public visitColumn(entity: Model.Entity, column: Model.AnyColumn) {
18
+ public visitColumn() {
19
19
  return undefined
20
20
  }
21
21
 
22
- public visitHasMany(entity: Model.Entity, relation: Model.Relation) {
22
+ public visitHasMany({ relation }: Model.AnyHasManyRelationContext) {
23
23
  const filter = this.getWhereArg(relation)
24
24
  const orderBy = this.getOrderByArgs(relation)
25
25
  return {
@@ -30,7 +30,7 @@ export class FieldArgsVisitor implements
30
30
  }
31
31
  }
32
32
 
33
- public visitHasOne(entity: Model.Entity, relation: Model.Relation) {
33
+ public visitHasOne({ relation }: Model.ManyHasOneContext) {
34
34
  const filter = this.getWhereArg(relation)
35
35
  return { filter }
36
36
  }
@@ -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
@@ -26,29 +26,16 @@ export class CreateEntityRelationInputFieldVisitor implements
26
26
  throw new ImplementationException('CreateEntityRelationInputFieldVisitor: Not applicable for a column')
27
27
  }
28
28
 
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)
29
+ public visitHasOne(context: Model.ManyHasOneContext): GraphQLInputObjectType | undefined {
30
+ return this.createInputObject(context, false)
36
31
  }
37
32
 
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)
33
+ public visitHasMany(context: Model.OneHasManyContext): GraphQLInputObjectType | undefined {
34
+ return this.createInputObject(context, true)
45
35
  }
46
36
 
47
37
  public createInputObject(
48
- entity: Model.Entity,
49
- relation: Model.Relation,
50
- targetEntity: Model.Entity,
51
- targetRelation: Model.Relation | null,
38
+ { entity, relation, targetEntity, targetRelation }: Model.AnyRelationContext,
52
39
  withAliasField: boolean,
53
40
  ): GraphQLInputObjectType | undefined {
54
41
  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
@@ -27,12 +27,7 @@ export class UpdateEntityRelationInputFieldVisitor implements
27
27
  throw new Error('UpdateEntityRelationInputFieldVisitor: Not applicable for a column')
28
28
  }
29
29
 
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 {
30
+ public visitHasOne({ targetRelation, targetEntity, relation, entity }: Model.AnyHasOneRelationContext) {
36
31
  const withoutRelation = targetRelation ? targetRelation.name : undefined
37
32
 
38
33
  const whereInput = this.createWhereInput(targetEntity)
@@ -84,12 +79,7 @@ export class UpdateEntityRelationInputFieldVisitor implements
84
79
  })
85
80
  }
86
81
 
87
- public visitHasMany(
88
- entity: Model.Entity,
89
- relation: Model.Relation,
90
- targetEntity: Model.Entity,
91
- targetRelation: Model.Relation | null,
92
- ): GraphQLInputObjectType | undefined {
82
+ public visitHasMany({ entity, relation, targetEntity, targetRelation }: Model.AnyHasManyRelationContext) {
93
83
  const withoutRelation = targetRelation ? targetRelation.name : undefined
94
84
 
95
85
  const whereInput = this.createWhereInput(targetEntity)
@@ -9,18 +9,18 @@ function filterObject<Input extends {}, Result extends { [Key in keyof Input]: I
9
9
  object: Input,
10
10
  callback: TypeGuard<Input, Result> | Filter<Input>,
11
11
  ): Result {
12
- return (Object.entries(object) as any)
13
- .filter(<K extends keyof Input>(it: [K, Input[K]]): it is [K, Result[K]] =>
14
- (callback as any)(it[0] as K, it[1] as Input[K], object),
15
- )
16
- .reduce((result: Result, [key, value]: [string, any]) => ({ ...(result as any), [key]: value }), {} as Result)
12
+ return Object.fromEntries(Object.entries(object)
13
+ .filter(([key, value]) => (callback as any)(key, value, object)),
14
+ ) as Result
17
15
  }
18
16
 
19
17
  function mapObject<Input, Result>(
20
18
  input: { [key: string]: Input },
21
19
  callback: (value: Input, key: string) => Result,
22
20
  ): { [key: string]: Result } {
23
- return Object.keys(input).reduce((acc, key) => ({ ...acc, [key]: callback(input[key], key) }), {})
21
+ return Object.fromEntries(
22
+ Object.entries(input).map(([key, value]) => [key, callback(value, key)]),
23
+ )
24
24
  }
25
25
 
26
26
  export { filterObject, mapObject }
@@ -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
 
@@ -0,0 +1,34 @@
1
+ import { SchemaDefinition as def } from '@contember/schema-definition'
2
+ import { GQL } from '../../../../src/tags'
3
+ import { test } from 'vitest'
4
+ import { executeDbTest } from '@contember/engine-api-tester'
5
+
6
+ namespace SeqModel {
7
+ export class Order {
8
+ seqId = def.intColumn().sequence().notNull()
9
+ }
10
+ }
11
+
12
+ test('insert author with id', async () => {
13
+ const schema = def.createModel(SeqModel)
14
+ await executeDbTest({
15
+ schema: schema,
16
+ query: GQL`
17
+ mutation {
18
+ createOrder(data: {}) {
19
+ node {
20
+ seqId
21
+ }
22
+ }
23
+ }`,
24
+ seed: [],
25
+ return: {
26
+ createOrder: {
27
+ node: {
28
+ seqId: 1,
29
+ },
30
+ },
31
+ },
32
+ })
33
+ })
34
+
@@ -1,7 +1,7 @@
1
1
  import { test } from 'vitest'
2
2
  import { execute, sqlDeferred, sqlTransaction } from '../../../../src/test'
3
3
  import { SchemaBuilder } from '@contember/schema-definition'
4
- import { Model } from '@contember/schema'
4
+ import { Acl, Model } from '@contember/schema'
5
5
  import { GQL, SQL } from '../../../../src/tags'
6
6
  import { testUuid } from '../../../../src/testUuid'
7
7
 
@@ -32,7 +32,7 @@ test('delete post with acl', async () => {
32
32
  },
33
33
  },
34
34
  variables: {
35
- locale_variable: ['cs'],
35
+ locale_variable: { in: ['cs'] },
36
36
  },
37
37
  executes: [
38
38
  ...sqlTransaction([
@@ -1,7 +1,7 @@
1
1
  import { test } from 'vitest'
2
2
  import { execute, failedTransaction, sqlTransaction } from '../../../../../src/test'
3
3
  import { SchemaBuilder } from '@contember/schema-definition'
4
- import { Model } from '@contember/schema'
4
+ import { Acl, Model } from '@contember/schema'
5
5
  import { GQL, SQL } from '../../../../../src/tags'
6
6
  import { testUuid } from '../../../../../src/testUuid'
7
7
 
@@ -34,7 +34,7 @@ test('set a name - allowed', async () => {
34
34
  },
35
35
  },
36
36
  variables: {
37
- name_variable: ['John', 'Jack'],
37
+ name_variable: { in: ['John', 'Jack'] },
38
38
  },
39
39
  executes: [
40
40
  ...sqlTransaction([
@@ -89,7 +89,7 @@ test('set a name - denied', async () => {
89
89
  },
90
90
  },
91
91
  variables: {
92
- name_variable: ['John', 'Jack'],
92
+ name_variable: { in: ['John', 'Jack'] },
93
93
  },
94
94
  executes: [
95
95
  ...failedTransaction([
@@ -1,7 +1,7 @@
1
1
  import { test } from 'vitest'
2
2
  import { execute, sqlTransaction } from '../../../../src/test'
3
3
  import { SchemaBuilder } from '@contember/schema-definition'
4
- import { Model } from '@contember/schema'
4
+ import { Acl, Model } from '@contember/schema'
5
5
  import { GQL, SQL } from '../../../../src/tags'
6
6
  import { testUuid } from '../../../../src/testUuid'
7
7
 
@@ -27,7 +27,7 @@ test('insert author (with acl)', async () => {
27
27
  },
28
28
  },
29
29
  variables: {
30
- name_variable: ['John', 'Jack'],
30
+ name_variable: { in: ['John', 'Jack'] },
31
31
  },
32
32
  query: GQL`
33
33
  mutation {