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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1019) hide show
  1. package/CLAUDE.md +54 -0
  2. package/dist/development/index.cjs +0 -2
  3. package/dist/development/index.cjs.map +1 -1
  4. package/dist/development/index.js +0 -2
  5. package/dist/development/index.js.map +1 -1
  6. package/dist/development/src/ExecutionContainer.cjs +82 -29
  7. package/dist/development/src/ExecutionContainer.cjs.map +1 -1
  8. package/dist/development/src/ExecutionContainer.js +82 -29
  9. package/dist/development/src/ExecutionContainer.js.map +1 -1
  10. package/dist/development/src/acl/Authorizator.cjs.map +1 -1
  11. package/dist/development/src/acl/Authorizator.js.map +1 -1
  12. package/dist/development/src/acl/EvaluatedPredicateReplacer.cjs.map +1 -1
  13. package/dist/development/src/acl/EvaluatedPredicateReplacer.js.map +1 -1
  14. package/dist/development/src/acl/PermissionFactory.cjs.map +1 -1
  15. package/dist/development/src/acl/PermissionFactory.js.map +1 -1
  16. package/dist/development/src/acl/PredicateFactory.cjs.map +1 -1
  17. package/dist/development/src/acl/PredicateFactory.js.map +1 -1
  18. package/dist/development/src/acl/PredicatesInjector.cjs +101 -12
  19. package/dist/development/src/acl/PredicatesInjector.cjs.map +1 -1
  20. package/dist/development/src/acl/PredicatesInjector.js +101 -12
  21. package/dist/development/src/acl/PredicatesInjector.js.map +1 -1
  22. package/dist/development/src/acl/VariableInjector.cjs.map +1 -1
  23. package/dist/development/src/acl/VariableInjector.js.map +1 -1
  24. package/dist/development/src/acl/VariableUtils.cjs.map +1 -1
  25. package/dist/development/src/acl/VariableUtils.js.map +1 -1
  26. package/dist/development/src/exception.cjs.map +1 -1
  27. package/dist/development/src/exception.js.map +1 -1
  28. package/dist/development/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducer.cjs.map +1 -1
  29. package/dist/development/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducer.js.map +1 -1
  30. package/dist/development/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducerExecutionHandler.cjs.map +1 -1
  31. package/dist/development/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducerExecutionHandler.js.map +1 -1
  32. package/dist/development/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.cjs +4 -4
  33. package/dist/development/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.cjs.map +1 -1
  34. package/dist/development/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.js +4 -4
  35. package/dist/development/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.js.map +1 -1
  36. package/dist/development/src/extensions/paginatedHasMany/PaginatedHasManyCountVisitor.cjs.map +1 -1
  37. package/dist/development/src/extensions/paginatedHasMany/PaginatedHasManyCountVisitor.js.map +1 -1
  38. package/dist/development/src/extensions/paginatedHasMany/PaginatedHasManyExecutionHandler.cjs.map +1 -1
  39. package/dist/development/src/extensions/paginatedHasMany/PaginatedHasManyExecutionHandler.js.map +1 -1
  40. package/dist/development/src/extensions/paginatedHasMany/PaginatedHasManyFieldProvider.cjs.map +1 -1
  41. package/dist/development/src/extensions/paginatedHasMany/PaginatedHasManyFieldProvider.js.map +1 -1
  42. package/dist/development/src/extensions/paginatedHasMany/PaginatedHasManyFieldProviderVisitor.cjs.map +1 -1
  43. package/dist/development/src/extensions/paginatedHasMany/PaginatedHasManyFieldProviderVisitor.js.map +1 -1
  44. package/dist/development/src/extensions/paginatedHasMany/PaginatedHasManyNodesVisitor.cjs.map +1 -1
  45. package/dist/development/src/extensions/paginatedHasMany/PaginatedHasManyNodesVisitor.js.map +1 -1
  46. package/dist/development/src/input-validation/ColumnValueResolver.cjs.map +1 -1
  47. package/dist/development/src/input-validation/ColumnValueResolver.js.map +1 -1
  48. package/dist/development/src/input-validation/EntityRulesResolver.cjs.map +1 -1
  49. package/dist/development/src/input-validation/EntityRulesResolver.js.map +1 -1
  50. package/dist/development/src/input-validation/QueryAstFactory.cjs.map +1 -1
  51. package/dist/development/src/input-validation/QueryAstFactory.js.map +1 -1
  52. package/dist/development/src/input-validation/ValidationContext.cjs.map +1 -1
  53. package/dist/development/src/input-validation/ValidationContext.js.map +1 -1
  54. package/dist/development/src/input-validation/ValidationDataSelector.cjs.map +1 -1
  55. package/dist/development/src/input-validation/ValidationDataSelector.js.map +1 -1
  56. package/dist/development/src/input-validation/ValidationEvaluation.cjs.map +1 -1
  57. package/dist/development/src/input-validation/ValidationEvaluation.js.map +1 -1
  58. package/dist/development/src/input-validation/ValidationPath.cjs.map +1 -1
  59. package/dist/development/src/input-validation/ValidationPath.js.map +1 -1
  60. package/dist/development/src/input-validation/dependencies/DependencyCollector.cjs +3 -3
  61. package/dist/development/src/input-validation/dependencies/DependencyCollector.cjs.map +1 -1
  62. package/dist/development/src/input-validation/dependencies/DependencyCollector.js +3 -3
  63. package/dist/development/src/input-validation/dependencies/DependencyCollector.js.map +1 -1
  64. package/dist/development/src/input-validation/dependencies/DependencyMerger.cjs.map +1 -1
  65. package/dist/development/src/input-validation/dependencies/DependencyMerger.js.map +1 -1
  66. package/dist/development/src/input-validation/preValidation/CreateInputPreValidationProcessor.cjs.map +1 -1
  67. package/dist/development/src/input-validation/preValidation/CreateInputPreValidationProcessor.js.map +1 -1
  68. package/dist/development/src/input-validation/preValidation/InputPreValidator.cjs +2 -4
  69. package/dist/development/src/input-validation/preValidation/InputPreValidator.cjs.map +1 -1
  70. package/dist/development/src/input-validation/preValidation/InputPreValidator.js +2 -4
  71. package/dist/development/src/input-validation/preValidation/InputPreValidator.js.map +1 -1
  72. package/dist/development/src/input-validation/preValidation/UpdateInputPreValidationProcessor.cjs.map +1 -1
  73. package/dist/development/src/input-validation/preValidation/UpdateInputPreValidationProcessor.js.map +1 -1
  74. package/dist/development/src/inputProcessing/CreateInputVisitor.cjs +6 -4
  75. package/dist/development/src/inputProcessing/CreateInputVisitor.cjs.map +1 -1
  76. package/dist/development/src/inputProcessing/CreateInputVisitor.js +6 -4
  77. package/dist/development/src/inputProcessing/CreateInputVisitor.js.map +1 -1
  78. package/dist/development/src/inputProcessing/FieldNode.cjs.map +1 -1
  79. package/dist/development/src/inputProcessing/FieldNode.js.map +1 -1
  80. package/dist/development/src/inputProcessing/ObjectNode.cjs.map +1 -1
  81. package/dist/development/src/inputProcessing/ObjectNode.js.map +1 -1
  82. package/dist/development/src/inputProcessing/UniqueWhereExpander.cjs.map +1 -1
  83. package/dist/development/src/inputProcessing/UniqueWhereExpander.js.map +1 -1
  84. package/dist/development/src/inputProcessing/UpdateInputVisitor.cjs +7 -5
  85. package/dist/development/src/inputProcessing/UpdateInputVisitor.cjs.map +1 -1
  86. package/dist/development/src/inputProcessing/UpdateInputVisitor.js +7 -5
  87. package/dist/development/src/inputProcessing/UpdateInputVisitor.js.map +1 -1
  88. package/dist/development/src/introspection/IntrospectionSchemaDefinitionFactory.cjs.map +1 -1
  89. package/dist/development/src/introspection/IntrospectionSchemaDefinitionFactory.js.map +1 -1
  90. package/dist/development/src/introspection/IntrospectionSchemaFactory.cjs.map +1 -1
  91. package/dist/development/src/introspection/IntrospectionSchemaFactory.js.map +1 -1
  92. package/dist/development/src/introspection/content-schema.types.cjs.map +1 -1
  93. package/dist/development/src/introspection/content-schema.types.js.map +1 -1
  94. package/dist/development/src/introspection/introspection.schema.cjs.map +1 -1
  95. package/dist/development/src/introspection/introspection.schema.js.map +1 -1
  96. package/dist/development/src/mapper/CheckedPrimary.cjs.map +1 -1
  97. package/dist/development/src/mapper/CheckedPrimary.js.map +1 -1
  98. package/dist/development/src/mapper/ColumnValue.cjs.map +1 -1
  99. package/dist/development/src/mapper/ColumnValue.js.map +1 -1
  100. package/dist/development/src/mapper/ErrorUtils.cjs.map +1 -1
  101. package/dist/development/src/mapper/ErrorUtils.js +1 -1
  102. package/dist/development/src/mapper/ErrorUtils.js.map +1 -1
  103. package/dist/development/src/mapper/EventManager.cjs.map +1 -1
  104. package/dist/development/src/mapper/EventManager.js.map +1 -1
  105. package/dist/development/src/mapper/JunctionTableManager.cjs +16 -2
  106. package/dist/development/src/mapper/JunctionTableManager.cjs.map +1 -1
  107. package/dist/development/src/mapper/JunctionTableManager.js +17 -3
  108. package/dist/development/src/mapper/JunctionTableManager.js.map +1 -1
  109. package/dist/development/src/mapper/Mapper.cjs +8 -7
  110. package/dist/development/src/mapper/Mapper.cjs.map +1 -1
  111. package/dist/development/src/mapper/Mapper.js +8 -7
  112. package/dist/development/src/mapper/Mapper.js.map +1 -1
  113. package/dist/development/src/mapper/MapperFactory.cjs.map +1 -1
  114. package/dist/development/src/mapper/MapperFactory.js.map +1 -1
  115. package/dist/development/src/mapper/MutationProcessorHelper.cjs.map +1 -1
  116. package/dist/development/src/mapper/MutationProcessorHelper.js.map +1 -1
  117. package/dist/development/src/mapper/Result.cjs +1 -1
  118. package/dist/development/src/mapper/Result.cjs.map +1 -1
  119. package/dist/development/src/mapper/Result.js +1 -1
  120. package/dist/development/src/mapper/Result.js.map +1 -1
  121. package/dist/development/src/mapper/delete/DeleteExecutor.cjs.map +1 -1
  122. package/dist/development/src/mapper/delete/DeleteExecutor.js.map +1 -1
  123. package/dist/development/src/mapper/delete/DeleteState.cjs.map +1 -1
  124. package/dist/development/src/mapper/delete/DeleteState.js.map +1 -1
  125. package/dist/development/src/mapper/delete/DeletedEntitiesStorage.cjs.map +1 -1
  126. package/dist/development/src/mapper/delete/DeletedEntitiesStorage.js.map +1 -1
  127. package/dist/development/src/mapper/delete/helpers.cjs.map +1 -1
  128. package/dist/development/src/mapper/delete/helpers.js.map +1 -1
  129. package/dist/development/src/mapper/insert/InsertBuilder.cjs +27 -31
  130. package/dist/development/src/mapper/insert/InsertBuilder.cjs.map +1 -1
  131. package/dist/development/src/mapper/insert/InsertBuilder.js +27 -31
  132. package/dist/development/src/mapper/insert/InsertBuilder.js.map +1 -1
  133. package/dist/development/src/mapper/insert/InsertBuilderFactory.cjs.map +1 -1
  134. package/dist/development/src/mapper/insert/InsertBuilderFactory.js.map +1 -1
  135. package/dist/development/src/mapper/insert/Inserter.cjs.map +1 -1
  136. package/dist/development/src/mapper/insert/Inserter.js.map +1 -1
  137. package/dist/development/src/mapper/insert/SqlCreateInputProcessor.cjs.map +1 -1
  138. package/dist/development/src/mapper/insert/SqlCreateInputProcessor.js.map +1 -1
  139. package/dist/development/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.cjs.map +1 -1
  140. package/dist/development/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.js.map +1 -1
  141. package/dist/development/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.cjs.map +1 -1
  142. package/dist/development/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.js.map +1 -1
  143. package/dist/development/src/mapper/insert/relations/OneHasManyCreateInputProcessor.cjs.map +1 -1
  144. package/dist/development/src/mapper/insert/relations/OneHasManyCreateInputProcessor.js.map +1 -1
  145. package/dist/development/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.cjs.map +1 -1
  146. package/dist/development/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.js.map +1 -1
  147. package/dist/development/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.cjs.map +1 -1
  148. package/dist/development/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.js.map +1 -1
  149. package/dist/development/src/mapper/select/ConditionBuilder.cjs +7 -5
  150. package/dist/development/src/mapper/select/ConditionBuilder.cjs.map +1 -1
  151. package/dist/development/src/mapper/select/ConditionBuilder.js +8 -6
  152. package/dist/development/src/mapper/select/ConditionBuilder.js.map +1 -1
  153. package/dist/development/src/mapper/select/JoinBuilder.cjs.map +1 -1
  154. package/dist/development/src/mapper/select/JoinBuilder.js.map +1 -1
  155. package/dist/development/src/mapper/select/JoinVisitor.cjs.map +1 -1
  156. package/dist/development/src/mapper/select/JoinVisitor.js.map +1 -1
  157. package/dist/development/src/mapper/select/OrderByBuilder.cjs.map +1 -1
  158. package/dist/development/src/mapper/select/OrderByBuilder.js.map +1 -1
  159. package/dist/development/src/mapper/select/OrderByHelper.cjs.map +1 -1
  160. package/dist/development/src/mapper/select/OrderByHelper.js.map +1 -1
  161. package/dist/development/src/mapper/select/Path.cjs.map +1 -1
  162. package/dist/development/src/mapper/select/Path.js.map +1 -1
  163. package/dist/development/src/mapper/select/RelationFetcher.cjs.map +1 -1
  164. package/dist/development/src/mapper/select/RelationFetcher.js.map +1 -1
  165. package/dist/development/src/mapper/select/SelectBuilder.cjs +7 -10
  166. package/dist/development/src/mapper/select/SelectBuilder.cjs.map +1 -1
  167. package/dist/development/src/mapper/select/SelectBuilder.js +7 -10
  168. package/dist/development/src/mapper/select/SelectBuilder.js.map +1 -1
  169. package/dist/development/src/mapper/select/SelectHydrator.cjs +1 -1
  170. package/dist/development/src/mapper/select/SelectHydrator.cjs.map +1 -1
  171. package/dist/development/src/mapper/select/SelectHydrator.js +1 -1
  172. package/dist/development/src/mapper/select/SelectHydrator.js.map +1 -1
  173. package/dist/development/src/mapper/select/WhereBuilder.cjs +20 -18
  174. package/dist/development/src/mapper/select/WhereBuilder.cjs.map +1 -1
  175. package/dist/development/src/mapper/select/WhereBuilder.js +20 -18
  176. package/dist/development/src/mapper/select/WhereBuilder.js.map +1 -1
  177. package/dist/development/src/mapper/select/handlers/FieldsVisitor.cjs +1 -1
  178. package/dist/development/src/mapper/select/handlers/FieldsVisitor.cjs.map +1 -1
  179. package/dist/development/src/mapper/select/handlers/FieldsVisitor.js +1 -1
  180. package/dist/development/src/mapper/select/handlers/FieldsVisitor.js.map +1 -1
  181. package/dist/development/src/mapper/select/handlers/FieldsVisitorFactory.cjs.map +1 -1
  182. package/dist/development/src/mapper/select/handlers/FieldsVisitorFactory.js.map +1 -1
  183. package/dist/development/src/mapper/select/handlers/MetaHandler.cjs.map +1 -1
  184. package/dist/development/src/mapper/select/handlers/MetaHandler.js.map +1 -1
  185. package/dist/development/src/mapper/select/optimizer/ConditionOptimizer.cjs.map +1 -1
  186. package/dist/development/src/mapper/select/optimizer/ConditionOptimizer.js.map +1 -1
  187. package/dist/development/src/mapper/select/optimizer/WhereOptimizer.cjs +7 -3
  188. package/dist/development/src/mapper/select/optimizer/WhereOptimizer.cjs.map +1 -1
  189. package/dist/development/src/mapper/select/optimizer/WhereOptimizer.js +7 -3
  190. package/dist/development/src/mapper/select/optimizer/WhereOptimizer.js.map +1 -1
  191. package/dist/development/src/mapper/select/optimizer/WhereReplacer.cjs.map +1 -1
  192. package/dist/development/src/mapper/select/optimizer/WhereReplacer.js.map +1 -1
  193. package/dist/development/src/mapper/select/optimizer/helpers.cjs.map +1 -1
  194. package/dist/development/src/mapper/select/optimizer/helpers.js.map +1 -1
  195. package/dist/development/src/mapper/update/SqlUpdateInputProcessor.cjs.map +1 -1
  196. package/dist/development/src/mapper/update/SqlUpdateInputProcessor.js.map +1 -1
  197. package/dist/development/src/mapper/update/UpdateBuilder.cjs +64 -68
  198. package/dist/development/src/mapper/update/UpdateBuilder.cjs.map +1 -1
  199. package/dist/development/src/mapper/update/UpdateBuilder.js +64 -68
  200. package/dist/development/src/mapper/update/UpdateBuilder.js.map +1 -1
  201. package/dist/development/src/mapper/update/UpdateBuilderFactory.cjs.map +1 -1
  202. package/dist/development/src/mapper/update/UpdateBuilderFactory.js.map +1 -1
  203. package/dist/development/src/mapper/update/Updater.cjs +15 -3
  204. package/dist/development/src/mapper/update/Updater.cjs.map +1 -1
  205. package/dist/development/src/mapper/update/Updater.js +16 -4
  206. package/dist/development/src/mapper/update/Updater.js.map +1 -1
  207. package/dist/development/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.cjs.map +1 -1
  208. package/dist/development/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.js.map +1 -1
  209. package/dist/development/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.cjs.map +1 -1
  210. package/dist/development/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.js.map +1 -1
  211. package/dist/development/src/mapper/update/relations/OneHasManyUpdateInputProcessor.cjs.map +1 -1
  212. package/dist/development/src/mapper/update/relations/OneHasManyUpdateInputProcessor.js.map +1 -1
  213. package/dist/development/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.cjs.map +1 -1
  214. package/dist/development/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.js.map +1 -1
  215. package/dist/development/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.cjs.map +1 -1
  216. package/dist/development/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.js.map +1 -1
  217. package/dist/development/src/resolvers/GraphQlQueryAstFactory.cjs.map +1 -1
  218. package/dist/development/src/resolvers/GraphQlQueryAstFactory.js.map +1 -1
  219. package/dist/development/src/resolvers/MutationResolver.cjs.map +1 -1
  220. package/dist/development/src/resolvers/MutationResolver.js.map +1 -1
  221. package/dist/development/src/resolvers/ReadHelpers.cjs.map +1 -1
  222. package/dist/development/src/resolvers/ReadHelpers.js.map +1 -1
  223. package/dist/development/src/resolvers/ReadResolver.cjs.map +1 -1
  224. package/dist/development/src/resolvers/ReadResolver.js.map +1 -1
  225. package/dist/development/src/resolvers/RefreshViewResolver.cjs.map +1 -1
  226. package/dist/development/src/resolvers/RefreshViewResolver.js.map +1 -1
  227. package/dist/development/src/resolvers/ValidationResolver.cjs.map +1 -1
  228. package/dist/development/src/resolvers/ValidationResolver.js.map +1 -1
  229. package/dist/development/src/schema/ColumnTypeResolver.cjs.map +1 -1
  230. package/dist/development/src/schema/ColumnTypeResolver.js.map +1 -1
  231. package/dist/development/src/schema/ConditionTypeProvider.cjs +2 -0
  232. package/dist/development/src/schema/ConditionTypeProvider.cjs.map +1 -1
  233. package/dist/development/src/schema/ConditionTypeProvider.js +3 -1
  234. package/dist/development/src/schema/ConditionTypeProvider.js.map +1 -1
  235. package/dist/development/src/schema/CustomTypesProvider.cjs.map +1 -1
  236. package/dist/development/src/schema/CustomTypesProvider.js.map +1 -1
  237. package/dist/development/src/schema/EntityTypeProvider.cjs +1 -3
  238. package/dist/development/src/schema/EntityTypeProvider.cjs.map +1 -1
  239. package/dist/development/src/schema/EntityTypeProvider.js +1 -3
  240. package/dist/development/src/schema/EntityTypeProvider.js.map +1 -1
  241. package/dist/development/src/schema/EnumsProvider.cjs.map +1 -1
  242. package/dist/development/src/schema/EnumsProvider.js.map +1 -1
  243. package/dist/development/src/schema/FieldAccessVisitor.cjs.map +1 -1
  244. package/dist/development/src/schema/FieldAccessVisitor.js.map +1 -1
  245. package/dist/development/src/schema/GraphQlSchemaBuilder.cjs +5 -11
  246. package/dist/development/src/schema/GraphQlSchemaBuilder.cjs.map +1 -1
  247. package/dist/development/src/schema/GraphQlSchemaBuilder.js +5 -11
  248. package/dist/development/src/schema/GraphQlSchemaBuilder.js.map +1 -1
  249. package/dist/development/src/schema/GraphQlSchemaBuilderFactory.cjs +103 -3
  250. package/dist/development/src/schema/GraphQlSchemaBuilderFactory.cjs.map +1 -1
  251. package/dist/development/src/schema/GraphQlSchemaBuilderFactory.js +103 -3
  252. package/dist/development/src/schema/GraphQlSchemaBuilderFactory.js.map +1 -1
  253. package/dist/development/src/schema/MutationProvider.cjs.map +1 -1
  254. package/dist/development/src/schema/MutationProvider.js +2 -2
  255. package/dist/development/src/schema/MutationProvider.js.map +1 -1
  256. package/dist/development/src/schema/OperationExtension.cjs +0 -1
  257. package/dist/development/src/schema/OperationExtension.cjs.map +1 -1
  258. package/dist/development/src/schema/OperationExtension.js +0 -1
  259. package/dist/development/src/schema/OperationExtension.js.map +1 -1
  260. package/dist/development/src/schema/OrderByTypeProvider.cjs.map +1 -1
  261. package/dist/development/src/schema/OrderByTypeProvider.js +1 -1
  262. package/dist/development/src/schema/OrderByTypeProvider.js.map +1 -1
  263. package/dist/development/src/schema/PaginatedFieldConfigFactory.cjs.map +1 -1
  264. package/dist/development/src/schema/PaginatedFieldConfigFactory.js +1 -1
  265. package/dist/development/src/schema/PaginatedFieldConfigFactory.js.map +1 -1
  266. package/dist/development/src/schema/QueryProvider.cjs.map +1 -1
  267. package/dist/development/src/schema/QueryProvider.js +2 -2
  268. package/dist/development/src/schema/QueryProvider.js.map +1 -1
  269. package/dist/development/src/schema/RefreshViewMutationProvider.cjs.map +1 -1
  270. package/dist/development/src/schema/RefreshViewMutationProvider.js.map +1 -1
  271. package/dist/development/src/schema/ResultSchemaTypeProvider.cjs.map +1 -1
  272. package/dist/development/src/schema/ResultSchemaTypeProvider.js.map +1 -1
  273. package/dist/development/src/schema/ValidationQueriesProvider.cjs +2 -8
  274. package/dist/development/src/schema/ValidationQueriesProvider.cjs.map +1 -1
  275. package/dist/development/src/schema/ValidationQueriesProvider.js +2 -8
  276. package/dist/development/src/schema/ValidationQueriesProvider.js.map +1 -1
  277. package/dist/development/src/schema/WhereTypeProvider.cjs +1 -3
  278. package/dist/development/src/schema/WhereTypeProvider.cjs.map +1 -1
  279. package/dist/development/src/schema/WhereTypeProvider.js +1 -3
  280. package/dist/development/src/schema/WhereTypeProvider.js.map +1 -1
  281. package/dist/development/src/schema/entities/FieldArgsVisitor.cjs.map +1 -1
  282. package/dist/development/src/schema/entities/FieldArgsVisitor.js.map +1 -1
  283. package/dist/development/src/schema/entities/FieldTypeVisitor.cjs.map +1 -1
  284. package/dist/development/src/schema/entities/FieldTypeVisitor.js.map +1 -1
  285. package/dist/development/src/schema/mutations/ConnectOrCreateRelationInputProvider.cjs.map +1 -1
  286. package/dist/development/src/schema/mutations/ConnectOrCreateRelationInputProvider.js.map +1 -1
  287. package/dist/development/src/schema/mutations/CreateEntityInputFieldVisitor.cjs.map +1 -1
  288. package/dist/development/src/schema/mutations/CreateEntityInputFieldVisitor.js.map +1 -1
  289. package/dist/development/src/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.cjs.map +1 -1
  290. package/dist/development/src/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.js.map +1 -1
  291. package/dist/development/src/schema/mutations/CreateEntityRelationInputFieldVisitor.cjs.map +1 -1
  292. package/dist/development/src/schema/mutations/CreateEntityRelationInputFieldVisitor.js.map +1 -1
  293. package/dist/development/src/schema/mutations/CreateEntityRelationInputProvider.cjs.map +1 -1
  294. package/dist/development/src/schema/mutations/CreateEntityRelationInputProvider.js.map +1 -1
  295. package/dist/development/src/schema/mutations/EntityInputProvider.cjs.map +1 -1
  296. package/dist/development/src/schema/mutations/EntityInputProvider.js.map +1 -1
  297. package/dist/development/src/schema/mutations/UpdateEntityInputFieldVisitor.cjs.map +1 -1
  298. package/dist/development/src/schema/mutations/UpdateEntityInputFieldVisitor.js.map +1 -1
  299. package/dist/development/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.cjs.map +1 -1
  300. package/dist/development/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.js.map +1 -1
  301. package/dist/development/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.cjs.map +1 -1
  302. package/dist/development/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.js +1 -1
  303. package/dist/development/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.js.map +1 -1
  304. package/dist/development/src/schema/mutations/UpdateEntityRelationInputProvider.cjs.map +1 -1
  305. package/dist/development/src/schema/mutations/UpdateEntityRelationInputProvider.js.map +1 -1
  306. package/dist/development/src/schema/utils.cjs.map +1 -1
  307. package/dist/development/src/schema/utils.js.map +1 -1
  308. package/dist/development/src/utils/Mutex.cjs.map +1 -1
  309. package/dist/development/src/utils/Mutex.js.map +1 -1
  310. package/dist/development/src/utils/ResolveInfoUtils.cjs.map +1 -1
  311. package/dist/development/src/utils/ResolveInfoUtils.js.map +1 -1
  312. package/dist/development/src/utils/accessor.cjs.map +1 -1
  313. package/dist/development/src/utils/accessor.js.map +1 -1
  314. package/dist/development/src/utils/assertNever.cjs.map +1 -1
  315. package/dist/development/src/utils/assertNever.js.map +1 -1
  316. package/dist/development/src/utils/isIt.cjs.map +1 -1
  317. package/dist/development/src/utils/isIt.js.map +1 -1
  318. package/dist/development/src/utils/object.cjs.map +1 -1
  319. package/dist/development/src/utils/object.js.map +1 -1
  320. package/dist/development/src/utils/paginationUtils.cjs.map +1 -1
  321. package/dist/development/src/utils/paginationUtils.js.map +1 -1
  322. package/dist/development/src/utils/promises.cjs.map +1 -1
  323. package/dist/development/src/utils/promises.js.map +1 -1
  324. package/dist/development/src/utils/singletonFactory.cjs.map +1 -1
  325. package/dist/development/src/utils/singletonFactory.js.map +1 -1
  326. package/dist/development/src/utils/strings.cjs.map +1 -1
  327. package/dist/development/src/utils/strings.js.map +1 -1
  328. package/dist/development/src/utils/tuple.cjs.map +1 -1
  329. package/dist/development/src/utils/tuple.js.map +1 -1
  330. package/dist/development/src/utils/uniqueWhereFields.cjs.map +1 -1
  331. package/dist/development/src/utils/uniqueWhereFields.js.map +1 -1
  332. package/dist/development/src/utils/viewComputedId.cjs.map +1 -1
  333. package/dist/development/src/utils/viewComputedId.js.map +1 -1
  334. package/dist/production/index.cjs +0 -2
  335. package/dist/production/index.cjs.map +1 -1
  336. package/dist/production/index.js +0 -2
  337. package/dist/production/index.js.map +1 -1
  338. package/dist/production/src/ExecutionContainer.cjs +82 -29
  339. package/dist/production/src/ExecutionContainer.cjs.map +1 -1
  340. package/dist/production/src/ExecutionContainer.js +82 -29
  341. package/dist/production/src/ExecutionContainer.js.map +1 -1
  342. package/dist/production/src/acl/Authorizator.cjs.map +1 -1
  343. package/dist/production/src/acl/Authorizator.js.map +1 -1
  344. package/dist/production/src/acl/EvaluatedPredicateReplacer.cjs.map +1 -1
  345. package/dist/production/src/acl/EvaluatedPredicateReplacer.js.map +1 -1
  346. package/dist/production/src/acl/PermissionFactory.cjs.map +1 -1
  347. package/dist/production/src/acl/PermissionFactory.js.map +1 -1
  348. package/dist/production/src/acl/PredicateFactory.cjs.map +1 -1
  349. package/dist/production/src/acl/PredicateFactory.js.map +1 -1
  350. package/dist/production/src/acl/PredicatesInjector.cjs +101 -12
  351. package/dist/production/src/acl/PredicatesInjector.cjs.map +1 -1
  352. package/dist/production/src/acl/PredicatesInjector.js +101 -12
  353. package/dist/production/src/acl/PredicatesInjector.js.map +1 -1
  354. package/dist/production/src/acl/VariableInjector.cjs.map +1 -1
  355. package/dist/production/src/acl/VariableInjector.js.map +1 -1
  356. package/dist/production/src/acl/VariableUtils.cjs.map +1 -1
  357. package/dist/production/src/acl/VariableUtils.js.map +1 -1
  358. package/dist/production/src/exception.cjs.map +1 -1
  359. package/dist/production/src/exception.js.map +1 -1
  360. package/dist/production/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducer.cjs.map +1 -1
  361. package/dist/production/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducer.js.map +1 -1
  362. package/dist/production/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducerExecutionHandler.cjs.map +1 -1
  363. package/dist/production/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducerExecutionHandler.js.map +1 -1
  364. package/dist/production/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.cjs +4 -4
  365. package/dist/production/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.cjs.map +1 -1
  366. package/dist/production/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.js +4 -4
  367. package/dist/production/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.js.map +1 -1
  368. package/dist/production/src/extensions/paginatedHasMany/PaginatedHasManyCountVisitor.cjs.map +1 -1
  369. package/dist/production/src/extensions/paginatedHasMany/PaginatedHasManyCountVisitor.js.map +1 -1
  370. package/dist/production/src/extensions/paginatedHasMany/PaginatedHasManyExecutionHandler.cjs.map +1 -1
  371. package/dist/production/src/extensions/paginatedHasMany/PaginatedHasManyExecutionHandler.js.map +1 -1
  372. package/dist/production/src/extensions/paginatedHasMany/PaginatedHasManyFieldProvider.cjs.map +1 -1
  373. package/dist/production/src/extensions/paginatedHasMany/PaginatedHasManyFieldProvider.js.map +1 -1
  374. package/dist/production/src/extensions/paginatedHasMany/PaginatedHasManyFieldProviderVisitor.cjs.map +1 -1
  375. package/dist/production/src/extensions/paginatedHasMany/PaginatedHasManyFieldProviderVisitor.js.map +1 -1
  376. package/dist/production/src/extensions/paginatedHasMany/PaginatedHasManyNodesVisitor.cjs.map +1 -1
  377. package/dist/production/src/extensions/paginatedHasMany/PaginatedHasManyNodesVisitor.js.map +1 -1
  378. package/dist/production/src/input-validation/ColumnValueResolver.cjs.map +1 -1
  379. package/dist/production/src/input-validation/ColumnValueResolver.js.map +1 -1
  380. package/dist/production/src/input-validation/EntityRulesResolver.cjs.map +1 -1
  381. package/dist/production/src/input-validation/EntityRulesResolver.js.map +1 -1
  382. package/dist/production/src/input-validation/QueryAstFactory.cjs.map +1 -1
  383. package/dist/production/src/input-validation/QueryAstFactory.js.map +1 -1
  384. package/dist/production/src/input-validation/ValidationContext.cjs.map +1 -1
  385. package/dist/production/src/input-validation/ValidationContext.js.map +1 -1
  386. package/dist/production/src/input-validation/ValidationDataSelector.cjs.map +1 -1
  387. package/dist/production/src/input-validation/ValidationDataSelector.js.map +1 -1
  388. package/dist/production/src/input-validation/ValidationEvaluation.cjs.map +1 -1
  389. package/dist/production/src/input-validation/ValidationEvaluation.js.map +1 -1
  390. package/dist/production/src/input-validation/ValidationPath.cjs.map +1 -1
  391. package/dist/production/src/input-validation/ValidationPath.js.map +1 -1
  392. package/dist/production/src/input-validation/dependencies/DependencyCollector.cjs +3 -3
  393. package/dist/production/src/input-validation/dependencies/DependencyCollector.cjs.map +1 -1
  394. package/dist/production/src/input-validation/dependencies/DependencyCollector.js +3 -3
  395. package/dist/production/src/input-validation/dependencies/DependencyCollector.js.map +1 -1
  396. package/dist/production/src/input-validation/dependencies/DependencyMerger.cjs.map +1 -1
  397. package/dist/production/src/input-validation/dependencies/DependencyMerger.js.map +1 -1
  398. package/dist/production/src/input-validation/preValidation/CreateInputPreValidationProcessor.cjs.map +1 -1
  399. package/dist/production/src/input-validation/preValidation/CreateInputPreValidationProcessor.js.map +1 -1
  400. package/dist/production/src/input-validation/preValidation/InputPreValidator.cjs +2 -4
  401. package/dist/production/src/input-validation/preValidation/InputPreValidator.cjs.map +1 -1
  402. package/dist/production/src/input-validation/preValidation/InputPreValidator.js +2 -4
  403. package/dist/production/src/input-validation/preValidation/InputPreValidator.js.map +1 -1
  404. package/dist/production/src/input-validation/preValidation/UpdateInputPreValidationProcessor.cjs.map +1 -1
  405. package/dist/production/src/input-validation/preValidation/UpdateInputPreValidationProcessor.js.map +1 -1
  406. package/dist/production/src/inputProcessing/CreateInputVisitor.cjs +6 -4
  407. package/dist/production/src/inputProcessing/CreateInputVisitor.cjs.map +1 -1
  408. package/dist/production/src/inputProcessing/CreateInputVisitor.js +6 -4
  409. package/dist/production/src/inputProcessing/CreateInputVisitor.js.map +1 -1
  410. package/dist/production/src/inputProcessing/FieldNode.cjs.map +1 -1
  411. package/dist/production/src/inputProcessing/FieldNode.js.map +1 -1
  412. package/dist/production/src/inputProcessing/ObjectNode.cjs.map +1 -1
  413. package/dist/production/src/inputProcessing/ObjectNode.js.map +1 -1
  414. package/dist/production/src/inputProcessing/UniqueWhereExpander.cjs.map +1 -1
  415. package/dist/production/src/inputProcessing/UniqueWhereExpander.js.map +1 -1
  416. package/dist/production/src/inputProcessing/UpdateInputVisitor.cjs +7 -5
  417. package/dist/production/src/inputProcessing/UpdateInputVisitor.cjs.map +1 -1
  418. package/dist/production/src/inputProcessing/UpdateInputVisitor.js +7 -5
  419. package/dist/production/src/inputProcessing/UpdateInputVisitor.js.map +1 -1
  420. package/dist/production/src/introspection/IntrospectionSchemaDefinitionFactory.cjs.map +1 -1
  421. package/dist/production/src/introspection/IntrospectionSchemaDefinitionFactory.js.map +1 -1
  422. package/dist/production/src/introspection/IntrospectionSchemaFactory.cjs.map +1 -1
  423. package/dist/production/src/introspection/IntrospectionSchemaFactory.js.map +1 -1
  424. package/dist/production/src/introspection/content-schema.types.cjs.map +1 -1
  425. package/dist/production/src/introspection/content-schema.types.js.map +1 -1
  426. package/dist/production/src/introspection/introspection.schema.cjs.map +1 -1
  427. package/dist/production/src/introspection/introspection.schema.js.map +1 -1
  428. package/dist/production/src/mapper/CheckedPrimary.cjs.map +1 -1
  429. package/dist/production/src/mapper/CheckedPrimary.js.map +1 -1
  430. package/dist/production/src/mapper/ColumnValue.cjs.map +1 -1
  431. package/dist/production/src/mapper/ColumnValue.js.map +1 -1
  432. package/dist/production/src/mapper/ErrorUtils.cjs.map +1 -1
  433. package/dist/production/src/mapper/ErrorUtils.js +1 -1
  434. package/dist/production/src/mapper/ErrorUtils.js.map +1 -1
  435. package/dist/production/src/mapper/EventManager.cjs.map +1 -1
  436. package/dist/production/src/mapper/EventManager.js.map +1 -1
  437. package/dist/production/src/mapper/JunctionTableManager.cjs +16 -2
  438. package/dist/production/src/mapper/JunctionTableManager.cjs.map +1 -1
  439. package/dist/production/src/mapper/JunctionTableManager.js +17 -3
  440. package/dist/production/src/mapper/JunctionTableManager.js.map +1 -1
  441. package/dist/production/src/mapper/Mapper.cjs +8 -7
  442. package/dist/production/src/mapper/Mapper.cjs.map +1 -1
  443. package/dist/production/src/mapper/Mapper.js +8 -7
  444. package/dist/production/src/mapper/Mapper.js.map +1 -1
  445. package/dist/production/src/mapper/MapperFactory.cjs.map +1 -1
  446. package/dist/production/src/mapper/MapperFactory.js.map +1 -1
  447. package/dist/production/src/mapper/MutationProcessorHelper.cjs.map +1 -1
  448. package/dist/production/src/mapper/MutationProcessorHelper.js.map +1 -1
  449. package/dist/production/src/mapper/Result.cjs +1 -1
  450. package/dist/production/src/mapper/Result.cjs.map +1 -1
  451. package/dist/production/src/mapper/Result.js +1 -1
  452. package/dist/production/src/mapper/Result.js.map +1 -1
  453. package/dist/production/src/mapper/delete/DeleteExecutor.cjs.map +1 -1
  454. package/dist/production/src/mapper/delete/DeleteExecutor.js.map +1 -1
  455. package/dist/production/src/mapper/delete/DeleteState.cjs.map +1 -1
  456. package/dist/production/src/mapper/delete/DeleteState.js.map +1 -1
  457. package/dist/production/src/mapper/delete/DeletedEntitiesStorage.cjs.map +1 -1
  458. package/dist/production/src/mapper/delete/DeletedEntitiesStorage.js.map +1 -1
  459. package/dist/production/src/mapper/delete/helpers.cjs.map +1 -1
  460. package/dist/production/src/mapper/delete/helpers.js.map +1 -1
  461. package/dist/production/src/mapper/insert/InsertBuilder.cjs +27 -31
  462. package/dist/production/src/mapper/insert/InsertBuilder.cjs.map +1 -1
  463. package/dist/production/src/mapper/insert/InsertBuilder.js +27 -31
  464. package/dist/production/src/mapper/insert/InsertBuilder.js.map +1 -1
  465. package/dist/production/src/mapper/insert/InsertBuilderFactory.cjs.map +1 -1
  466. package/dist/production/src/mapper/insert/InsertBuilderFactory.js.map +1 -1
  467. package/dist/production/src/mapper/insert/Inserter.cjs.map +1 -1
  468. package/dist/production/src/mapper/insert/Inserter.js.map +1 -1
  469. package/dist/production/src/mapper/insert/SqlCreateInputProcessor.cjs.map +1 -1
  470. package/dist/production/src/mapper/insert/SqlCreateInputProcessor.js.map +1 -1
  471. package/dist/production/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.cjs.map +1 -1
  472. package/dist/production/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.js.map +1 -1
  473. package/dist/production/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.cjs.map +1 -1
  474. package/dist/production/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.js.map +1 -1
  475. package/dist/production/src/mapper/insert/relations/OneHasManyCreateInputProcessor.cjs.map +1 -1
  476. package/dist/production/src/mapper/insert/relations/OneHasManyCreateInputProcessor.js.map +1 -1
  477. package/dist/production/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.cjs.map +1 -1
  478. package/dist/production/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.js.map +1 -1
  479. package/dist/production/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.cjs.map +1 -1
  480. package/dist/production/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.js.map +1 -1
  481. package/dist/production/src/mapper/select/ConditionBuilder.cjs +7 -5
  482. package/dist/production/src/mapper/select/ConditionBuilder.cjs.map +1 -1
  483. package/dist/production/src/mapper/select/ConditionBuilder.js +8 -6
  484. package/dist/production/src/mapper/select/ConditionBuilder.js.map +1 -1
  485. package/dist/production/src/mapper/select/JoinBuilder.cjs.map +1 -1
  486. package/dist/production/src/mapper/select/JoinBuilder.js.map +1 -1
  487. package/dist/production/src/mapper/select/JoinVisitor.cjs.map +1 -1
  488. package/dist/production/src/mapper/select/JoinVisitor.js.map +1 -1
  489. package/dist/production/src/mapper/select/OrderByBuilder.cjs.map +1 -1
  490. package/dist/production/src/mapper/select/OrderByBuilder.js.map +1 -1
  491. package/dist/production/src/mapper/select/OrderByHelper.cjs.map +1 -1
  492. package/dist/production/src/mapper/select/OrderByHelper.js.map +1 -1
  493. package/dist/production/src/mapper/select/Path.cjs.map +1 -1
  494. package/dist/production/src/mapper/select/Path.js.map +1 -1
  495. package/dist/production/src/mapper/select/RelationFetcher.cjs.map +1 -1
  496. package/dist/production/src/mapper/select/RelationFetcher.js.map +1 -1
  497. package/dist/production/src/mapper/select/SelectBuilder.cjs +7 -10
  498. package/dist/production/src/mapper/select/SelectBuilder.cjs.map +1 -1
  499. package/dist/production/src/mapper/select/SelectBuilder.js +7 -10
  500. package/dist/production/src/mapper/select/SelectBuilder.js.map +1 -1
  501. package/dist/production/src/mapper/select/SelectHydrator.cjs +1 -1
  502. package/dist/production/src/mapper/select/SelectHydrator.cjs.map +1 -1
  503. package/dist/production/src/mapper/select/SelectHydrator.js +1 -1
  504. package/dist/production/src/mapper/select/SelectHydrator.js.map +1 -1
  505. package/dist/production/src/mapper/select/WhereBuilder.cjs +20 -18
  506. package/dist/production/src/mapper/select/WhereBuilder.cjs.map +1 -1
  507. package/dist/production/src/mapper/select/WhereBuilder.js +20 -18
  508. package/dist/production/src/mapper/select/WhereBuilder.js.map +1 -1
  509. package/dist/production/src/mapper/select/handlers/FieldsVisitor.cjs +1 -1
  510. package/dist/production/src/mapper/select/handlers/FieldsVisitor.cjs.map +1 -1
  511. package/dist/production/src/mapper/select/handlers/FieldsVisitor.js +1 -1
  512. package/dist/production/src/mapper/select/handlers/FieldsVisitor.js.map +1 -1
  513. package/dist/production/src/mapper/select/handlers/FieldsVisitorFactory.cjs.map +1 -1
  514. package/dist/production/src/mapper/select/handlers/FieldsVisitorFactory.js.map +1 -1
  515. package/dist/production/src/mapper/select/handlers/MetaHandler.cjs.map +1 -1
  516. package/dist/production/src/mapper/select/handlers/MetaHandler.js.map +1 -1
  517. package/dist/production/src/mapper/select/optimizer/ConditionOptimizer.cjs.map +1 -1
  518. package/dist/production/src/mapper/select/optimizer/ConditionOptimizer.js.map +1 -1
  519. package/dist/production/src/mapper/select/optimizer/WhereOptimizer.cjs +7 -3
  520. package/dist/production/src/mapper/select/optimizer/WhereOptimizer.cjs.map +1 -1
  521. package/dist/production/src/mapper/select/optimizer/WhereOptimizer.js +7 -3
  522. package/dist/production/src/mapper/select/optimizer/WhereOptimizer.js.map +1 -1
  523. package/dist/production/src/mapper/select/optimizer/WhereReplacer.cjs.map +1 -1
  524. package/dist/production/src/mapper/select/optimizer/WhereReplacer.js.map +1 -1
  525. package/dist/production/src/mapper/select/optimizer/helpers.cjs.map +1 -1
  526. package/dist/production/src/mapper/select/optimizer/helpers.js.map +1 -1
  527. package/dist/production/src/mapper/update/SqlUpdateInputProcessor.cjs.map +1 -1
  528. package/dist/production/src/mapper/update/SqlUpdateInputProcessor.js.map +1 -1
  529. package/dist/production/src/mapper/update/UpdateBuilder.cjs +64 -68
  530. package/dist/production/src/mapper/update/UpdateBuilder.cjs.map +1 -1
  531. package/dist/production/src/mapper/update/UpdateBuilder.js +64 -68
  532. package/dist/production/src/mapper/update/UpdateBuilder.js.map +1 -1
  533. package/dist/production/src/mapper/update/UpdateBuilderFactory.cjs.map +1 -1
  534. package/dist/production/src/mapper/update/UpdateBuilderFactory.js.map +1 -1
  535. package/dist/production/src/mapper/update/Updater.cjs +15 -3
  536. package/dist/production/src/mapper/update/Updater.cjs.map +1 -1
  537. package/dist/production/src/mapper/update/Updater.js +16 -4
  538. package/dist/production/src/mapper/update/Updater.js.map +1 -1
  539. package/dist/production/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.cjs.map +1 -1
  540. package/dist/production/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.js.map +1 -1
  541. package/dist/production/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.cjs.map +1 -1
  542. package/dist/production/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.js.map +1 -1
  543. package/dist/production/src/mapper/update/relations/OneHasManyUpdateInputProcessor.cjs.map +1 -1
  544. package/dist/production/src/mapper/update/relations/OneHasManyUpdateInputProcessor.js.map +1 -1
  545. package/dist/production/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.cjs.map +1 -1
  546. package/dist/production/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.js.map +1 -1
  547. package/dist/production/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.cjs.map +1 -1
  548. package/dist/production/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.js.map +1 -1
  549. package/dist/production/src/resolvers/GraphQlQueryAstFactory.cjs.map +1 -1
  550. package/dist/production/src/resolvers/GraphQlQueryAstFactory.js.map +1 -1
  551. package/dist/production/src/resolvers/MutationResolver.cjs.map +1 -1
  552. package/dist/production/src/resolvers/MutationResolver.js.map +1 -1
  553. package/dist/production/src/resolvers/ReadHelpers.cjs.map +1 -1
  554. package/dist/production/src/resolvers/ReadHelpers.js.map +1 -1
  555. package/dist/production/src/resolvers/ReadResolver.cjs.map +1 -1
  556. package/dist/production/src/resolvers/ReadResolver.js.map +1 -1
  557. package/dist/production/src/resolvers/RefreshViewResolver.cjs.map +1 -1
  558. package/dist/production/src/resolvers/RefreshViewResolver.js.map +1 -1
  559. package/dist/production/src/resolvers/ValidationResolver.cjs.map +1 -1
  560. package/dist/production/src/resolvers/ValidationResolver.js.map +1 -1
  561. package/dist/production/src/schema/ColumnTypeResolver.cjs.map +1 -1
  562. package/dist/production/src/schema/ColumnTypeResolver.js.map +1 -1
  563. package/dist/production/src/schema/ConditionTypeProvider.cjs +2 -0
  564. package/dist/production/src/schema/ConditionTypeProvider.cjs.map +1 -1
  565. package/dist/production/src/schema/ConditionTypeProvider.js +3 -1
  566. package/dist/production/src/schema/ConditionTypeProvider.js.map +1 -1
  567. package/dist/production/src/schema/CustomTypesProvider.cjs.map +1 -1
  568. package/dist/production/src/schema/CustomTypesProvider.js.map +1 -1
  569. package/dist/production/src/schema/EntityTypeProvider.cjs +1 -3
  570. package/dist/production/src/schema/EntityTypeProvider.cjs.map +1 -1
  571. package/dist/production/src/schema/EntityTypeProvider.js +1 -3
  572. package/dist/production/src/schema/EntityTypeProvider.js.map +1 -1
  573. package/dist/production/src/schema/EnumsProvider.cjs.map +1 -1
  574. package/dist/production/src/schema/EnumsProvider.js.map +1 -1
  575. package/dist/production/src/schema/FieldAccessVisitor.cjs.map +1 -1
  576. package/dist/production/src/schema/FieldAccessVisitor.js.map +1 -1
  577. package/dist/production/src/schema/GraphQlSchemaBuilder.cjs +5 -11
  578. package/dist/production/src/schema/GraphQlSchemaBuilder.cjs.map +1 -1
  579. package/dist/production/src/schema/GraphQlSchemaBuilder.js +5 -11
  580. package/dist/production/src/schema/GraphQlSchemaBuilder.js.map +1 -1
  581. package/dist/production/src/schema/GraphQlSchemaBuilderFactory.cjs +103 -3
  582. package/dist/production/src/schema/GraphQlSchemaBuilderFactory.cjs.map +1 -1
  583. package/dist/production/src/schema/GraphQlSchemaBuilderFactory.js +103 -3
  584. package/dist/production/src/schema/GraphQlSchemaBuilderFactory.js.map +1 -1
  585. package/dist/production/src/schema/MutationProvider.cjs.map +1 -1
  586. package/dist/production/src/schema/MutationProvider.js +2 -2
  587. package/dist/production/src/schema/MutationProvider.js.map +1 -1
  588. package/dist/production/src/schema/OperationExtension.cjs +0 -1
  589. package/dist/production/src/schema/OperationExtension.cjs.map +1 -1
  590. package/dist/production/src/schema/OperationExtension.js +0 -1
  591. package/dist/production/src/schema/OperationExtension.js.map +1 -1
  592. package/dist/production/src/schema/OrderByTypeProvider.cjs.map +1 -1
  593. package/dist/production/src/schema/OrderByTypeProvider.js +1 -1
  594. package/dist/production/src/schema/OrderByTypeProvider.js.map +1 -1
  595. package/dist/production/src/schema/PaginatedFieldConfigFactory.cjs.map +1 -1
  596. package/dist/production/src/schema/PaginatedFieldConfigFactory.js +1 -1
  597. package/dist/production/src/schema/PaginatedFieldConfigFactory.js.map +1 -1
  598. package/dist/production/src/schema/QueryProvider.cjs.map +1 -1
  599. package/dist/production/src/schema/QueryProvider.js +2 -2
  600. package/dist/production/src/schema/QueryProvider.js.map +1 -1
  601. package/dist/production/src/schema/RefreshViewMutationProvider.cjs.map +1 -1
  602. package/dist/production/src/schema/RefreshViewMutationProvider.js.map +1 -1
  603. package/dist/production/src/schema/ResultSchemaTypeProvider.cjs.map +1 -1
  604. package/dist/production/src/schema/ResultSchemaTypeProvider.js.map +1 -1
  605. package/dist/production/src/schema/ValidationQueriesProvider.cjs +2 -8
  606. package/dist/production/src/schema/ValidationQueriesProvider.cjs.map +1 -1
  607. package/dist/production/src/schema/ValidationQueriesProvider.js +2 -8
  608. package/dist/production/src/schema/ValidationQueriesProvider.js.map +1 -1
  609. package/dist/production/src/schema/WhereTypeProvider.cjs +1 -3
  610. package/dist/production/src/schema/WhereTypeProvider.cjs.map +1 -1
  611. package/dist/production/src/schema/WhereTypeProvider.js +1 -3
  612. package/dist/production/src/schema/WhereTypeProvider.js.map +1 -1
  613. package/dist/production/src/schema/entities/FieldArgsVisitor.cjs.map +1 -1
  614. package/dist/production/src/schema/entities/FieldArgsVisitor.js.map +1 -1
  615. package/dist/production/src/schema/entities/FieldTypeVisitor.cjs.map +1 -1
  616. package/dist/production/src/schema/entities/FieldTypeVisitor.js.map +1 -1
  617. package/dist/production/src/schema/mutations/ConnectOrCreateRelationInputProvider.cjs.map +1 -1
  618. package/dist/production/src/schema/mutations/ConnectOrCreateRelationInputProvider.js.map +1 -1
  619. package/dist/production/src/schema/mutations/CreateEntityInputFieldVisitor.cjs.map +1 -1
  620. package/dist/production/src/schema/mutations/CreateEntityInputFieldVisitor.js.map +1 -1
  621. package/dist/production/src/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.cjs.map +1 -1
  622. package/dist/production/src/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.js.map +1 -1
  623. package/dist/production/src/schema/mutations/CreateEntityRelationInputFieldVisitor.cjs.map +1 -1
  624. package/dist/production/src/schema/mutations/CreateEntityRelationInputFieldVisitor.js.map +1 -1
  625. package/dist/production/src/schema/mutations/CreateEntityRelationInputProvider.cjs.map +1 -1
  626. package/dist/production/src/schema/mutations/CreateEntityRelationInputProvider.js.map +1 -1
  627. package/dist/production/src/schema/mutations/EntityInputProvider.cjs.map +1 -1
  628. package/dist/production/src/schema/mutations/EntityInputProvider.js.map +1 -1
  629. package/dist/production/src/schema/mutations/UpdateEntityInputFieldVisitor.cjs.map +1 -1
  630. package/dist/production/src/schema/mutations/UpdateEntityInputFieldVisitor.js.map +1 -1
  631. package/dist/production/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.cjs.map +1 -1
  632. package/dist/production/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.js.map +1 -1
  633. package/dist/production/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.cjs.map +1 -1
  634. package/dist/production/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.js +1 -1
  635. package/dist/production/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.js.map +1 -1
  636. package/dist/production/src/schema/mutations/UpdateEntityRelationInputProvider.cjs.map +1 -1
  637. package/dist/production/src/schema/mutations/UpdateEntityRelationInputProvider.js.map +1 -1
  638. package/dist/production/src/schema/utils.cjs.map +1 -1
  639. package/dist/production/src/schema/utils.js.map +1 -1
  640. package/dist/production/src/utils/Mutex.cjs.map +1 -1
  641. package/dist/production/src/utils/Mutex.js.map +1 -1
  642. package/dist/production/src/utils/ResolveInfoUtils.cjs.map +1 -1
  643. package/dist/production/src/utils/ResolveInfoUtils.js.map +1 -1
  644. package/dist/production/src/utils/accessor.cjs.map +1 -1
  645. package/dist/production/src/utils/accessor.js.map +1 -1
  646. package/dist/production/src/utils/assertNever.cjs.map +1 -1
  647. package/dist/production/src/utils/assertNever.js.map +1 -1
  648. package/dist/production/src/utils/isIt.cjs.map +1 -1
  649. package/dist/production/src/utils/isIt.js.map +1 -1
  650. package/dist/production/src/utils/object.cjs.map +1 -1
  651. package/dist/production/src/utils/object.js.map +1 -1
  652. package/dist/production/src/utils/paginationUtils.cjs.map +1 -1
  653. package/dist/production/src/utils/paginationUtils.js.map +1 -1
  654. package/dist/production/src/utils/promises.cjs.map +1 -1
  655. package/dist/production/src/utils/promises.js.map +1 -1
  656. package/dist/production/src/utils/singletonFactory.cjs.map +1 -1
  657. package/dist/production/src/utils/singletonFactory.js.map +1 -1
  658. package/dist/production/src/utils/strings.cjs.map +1 -1
  659. package/dist/production/src/utils/strings.js.map +1 -1
  660. package/dist/production/src/utils/tuple.cjs.map +1 -1
  661. package/dist/production/src/utils/tuple.js.map +1 -1
  662. package/dist/production/src/utils/uniqueWhereFields.cjs.map +1 -1
  663. package/dist/production/src/utils/uniqueWhereFields.js.map +1 -1
  664. package/dist/production/src/utils/viewComputedId.cjs.map +1 -1
  665. package/dist/production/src/utils/viewComputedId.js.map +1 -1
  666. package/dist/tests/cases/integration/graphQlRequests/insert/subOperationFail.test.d.ts +2 -0
  667. package/dist/tests/cases/integration/graphQlRequests/insert/subOperationFail.test.d.ts.map +1 -0
  668. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/schema.d.ts.map +1 -1
  669. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/schema.d.ts.map +1 -1
  670. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/schema.d.ts.map +1 -1
  671. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/schema.d.ts.map +1 -1
  672. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/schema.d.ts.map +1 -1
  673. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/schema.d.ts.map +1 -1
  674. package/dist/tests/cases/integration/graphQlRequests/validation/conditions.test.d.ts.map +1 -1
  675. package/dist/tests/cases/integration/graphQlRequests/validation/requiredWhen.test.d.ts.map +1 -1
  676. package/dist/tests/cases/integration/graphQlRequests/validation/utils.d.ts.map +1 -1
  677. package/dist/tests/src/test.d.ts.map +1 -1
  678. package/dist/tests/tsconfig.tsbuildinfo +1 -1
  679. package/dist/types/ExecutionContainer.d.ts +13 -3
  680. package/dist/types/ExecutionContainer.d.ts.map +1 -1
  681. package/dist/types/acl/Authorizator.d.ts.map +1 -1
  682. package/dist/types/acl/EvaluatedPredicateReplacer.d.ts.map +1 -1
  683. package/dist/types/acl/PermissionFactory.d.ts.map +1 -1
  684. package/dist/types/acl/PredicateFactory.d.ts.map +1 -1
  685. package/dist/types/acl/PredicatesInjector.d.ts +15 -1
  686. package/dist/types/acl/PredicatesInjector.d.ts.map +1 -1
  687. package/dist/types/acl/VariableUtils.d.ts.map +1 -1
  688. package/dist/types/extensions/hasManyToHasOneReducer/HasManyToHasOneReducerExecutionHandler.d.ts.map +1 -1
  689. package/dist/types/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.d.ts.map +1 -1
  690. package/dist/types/extensions/paginatedHasMany/PaginatedHasManyCountVisitor.d.ts.map +1 -1
  691. package/dist/types/extensions/paginatedHasMany/PaginatedHasManyFieldProviderVisitor.d.ts.map +1 -1
  692. package/dist/types/extensions/paginatedHasMany/PaginatedHasManyNodesVisitor.d.ts.map +1 -1
  693. package/dist/types/index.d.ts +1 -1
  694. package/dist/types/index.d.ts.map +1 -1
  695. package/dist/types/input-validation/preValidation/InputPreValidator.d.ts.map +1 -1
  696. package/dist/types/inputProcessing/CreateInputProcessor.d.ts +1 -1
  697. package/dist/types/inputProcessing/CreateInputProcessor.d.ts.map +1 -1
  698. package/dist/types/inputProcessing/CreateInputVisitor.d.ts.map +1 -1
  699. package/dist/types/inputProcessing/UpdateInputProcessor.d.ts +1 -1
  700. package/dist/types/inputProcessing/UpdateInputProcessor.d.ts.map +1 -1
  701. package/dist/types/inputProcessing/UpdateInputVisitor.d.ts.map +1 -1
  702. package/dist/types/introspection/IntrospectionSchemaFactory.d.ts.map +1 -1
  703. package/dist/types/introspection/introspection.schema.d.ts.map +1 -1
  704. package/dist/types/mapper/ColumnValue.d.ts.map +1 -1
  705. package/dist/types/mapper/ErrorUtils.d.ts.map +1 -1
  706. package/dist/types/mapper/EventManager.d.ts.map +1 -1
  707. package/dist/types/mapper/JunctionTableManager.d.ts.map +1 -1
  708. package/dist/types/mapper/Mapper.d.ts.map +1 -1
  709. package/dist/types/mapper/MapperFactory.d.ts.map +1 -1
  710. package/dist/types/mapper/Result.d.ts +2 -2
  711. package/dist/types/mapper/Result.d.ts.map +1 -1
  712. package/dist/types/mapper/delete/DeleteExecutor.d.ts.map +1 -1
  713. package/dist/types/mapper/delete/DeleteState.d.ts.map +1 -1
  714. package/dist/types/mapper/delete/helpers.d.ts.map +1 -1
  715. package/dist/types/mapper/insert/InsertBuilder.d.ts.map +1 -1
  716. package/dist/types/mapper/insert/SqlCreateInputProcessor.d.ts.map +1 -1
  717. package/dist/types/mapper/insert/relations/ManyHasManyCreateInputProcessor.d.ts +2 -2
  718. package/dist/types/mapper/insert/relations/ManyHasManyCreateInputProcessor.d.ts.map +1 -1
  719. package/dist/types/mapper/insert/relations/ManyHasOneCreateInputProcessor.d.ts +2 -2
  720. package/dist/types/mapper/insert/relations/ManyHasOneCreateInputProcessor.d.ts.map +1 -1
  721. package/dist/types/mapper/insert/relations/OneHasManyCreateInputProcessor.d.ts.map +1 -1
  722. package/dist/types/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.d.ts +1 -1
  723. package/dist/types/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.d.ts.map +1 -1
  724. package/dist/types/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.d.ts.map +1 -1
  725. package/dist/types/mapper/select/ConditionBuilder.d.ts.map +1 -1
  726. package/dist/types/mapper/select/JoinBuilder.d.ts.map +1 -1
  727. package/dist/types/mapper/select/Path.d.ts +0 -1
  728. package/dist/types/mapper/select/Path.d.ts.map +1 -1
  729. package/dist/types/mapper/select/RelationFetcher.d.ts.map +1 -1
  730. package/dist/types/mapper/select/SelectBuilder.d.ts.map +1 -1
  731. package/dist/types/mapper/select/SelectExecutionHandler.d.ts.map +1 -1
  732. package/dist/types/mapper/select/WhereBuilder.d.ts.map +1 -1
  733. package/dist/types/mapper/select/handlers/FieldsVisitor.d.ts.map +1 -1
  734. package/dist/types/mapper/select/optimizer/ConditionOptimizer.d.ts.map +1 -1
  735. package/dist/types/mapper/select/optimizer/WhereOptimizer.d.ts +6 -1
  736. package/dist/types/mapper/select/optimizer/WhereOptimizer.d.ts.map +1 -1
  737. package/dist/types/mapper/select/optimizer/WhereReplacer.d.ts.map +1 -1
  738. package/dist/types/mapper/types.d.ts +1 -1
  739. package/dist/types/mapper/types.d.ts.map +1 -1
  740. package/dist/types/mapper/update/SqlUpdateInputProcessor.d.ts.map +1 -1
  741. package/dist/types/mapper/update/UpdateBuilder.d.ts.map +1 -1
  742. package/dist/types/mapper/update/Updater.d.ts +1 -5
  743. package/dist/types/mapper/update/Updater.d.ts.map +1 -1
  744. package/dist/types/mapper/update/relations/ManyHasManyUpdateInputProcessor.d.ts +7 -7
  745. package/dist/types/mapper/update/relations/ManyHasOneUpdateInputProcessor.d.ts +5 -5
  746. package/dist/types/mapper/update/relations/ManyHasOneUpdateInputProcessor.d.ts.map +1 -1
  747. package/dist/types/mapper/update/relations/OneHasManyUpdateInputProcessor.d.ts +7 -7
  748. package/dist/types/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.d.ts.map +1 -1
  749. package/dist/types/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.d.ts +3 -3
  750. package/dist/types/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.d.ts.map +1 -1
  751. package/dist/types/resolvers/GraphQlQueryAstFactory.d.ts.map +1 -1
  752. package/dist/types/resolvers/MutationResolver.d.ts.map +1 -1
  753. package/dist/types/schema/ConditionTypeProvider.d.ts.map +1 -1
  754. package/dist/types/schema/CustomTypesProvider.d.ts.map +1 -1
  755. package/dist/types/schema/EntityTypeProvider.d.ts.map +1 -1
  756. package/dist/types/schema/GraphQlSchemaBuilder.d.ts.map +1 -1
  757. package/dist/types/schema/GraphQlSchemaBuilderFactory.d.ts +0 -1
  758. package/dist/types/schema/GraphQlSchemaBuilderFactory.d.ts.map +1 -1
  759. package/dist/types/schema/MutationProvider.d.ts.map +1 -1
  760. package/dist/types/schema/OperationExtension.d.ts +1 -1
  761. package/dist/types/schema/OperationExtension.d.ts.map +1 -1
  762. package/dist/types/schema/ValidationQueriesProvider.d.ts.map +1 -1
  763. package/dist/types/schema/WhereTypeProvider.d.ts.map +1 -1
  764. package/dist/types/schema/entities/FieldArgsVisitor.d.ts.map +1 -1
  765. package/dist/types/schema/mutations/ConnectOrCreateRelationInputProvider.d.ts.map +1 -1
  766. package/dist/types/schema/mutations/CreateEntityInputFieldVisitor.d.ts.map +1 -1
  767. package/dist/types/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.d.ts.map +1 -1
  768. package/dist/types/schema/mutations/CreateEntityRelationInputFieldVisitor.d.ts.map +1 -1
  769. package/dist/types/schema/mutations/EntityInputProvider.d.ts.map +1 -1
  770. package/dist/types/schema/mutations/UpdateEntityInputFieldVisitor.d.ts +1 -1
  771. package/dist/types/schema/mutations/UpdateEntityInputFieldVisitor.d.ts.map +1 -1
  772. package/dist/types/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.d.ts.map +1 -1
  773. package/dist/types/schema/mutations/UpdateEntityRelationInputFieldVisitor.d.ts.map +1 -1
  774. package/dist/types/tsconfig.tsbuildinfo +1 -1
  775. package/dist/types/utils/object.d.ts.map +1 -1
  776. package/graphql.codegen.yml +1 -1
  777. package/package.json +21 -16
  778. package/src/ExecutionContainer.ts +137 -122
  779. package/src/acl/Authorizator.ts +5 -3
  780. package/src/acl/EvaluatedPredicateReplacer.ts +0 -5
  781. package/src/acl/PermissionFactory.ts +9 -10
  782. package/src/acl/PredicateFactory.ts +0 -1
  783. package/src/acl/PredicatesInjector.ts +162 -12
  784. package/src/acl/VariableUtils.ts +0 -2
  785. package/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducerExecutionHandler.ts +0 -2
  786. package/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.ts +9 -13
  787. package/src/extensions/paginatedHasMany/PaginatedHasManyCountVisitor.ts +3 -4
  788. package/src/extensions/paginatedHasMany/PaginatedHasManyExecutionHandler.ts +2 -2
  789. package/src/extensions/paginatedHasMany/PaginatedHasManyFieldProviderVisitor.ts +2 -5
  790. package/src/extensions/paginatedHasMany/PaginatedHasManyNodesVisitor.ts +3 -4
  791. package/src/index.ts +8 -7
  792. package/src/input-validation/ValidationEvaluation.ts +3 -6
  793. package/src/input-validation/dependencies/DependencyCollector.ts +3 -3
  794. package/src/input-validation/preValidation/InputPreValidator.ts +6 -8
  795. package/src/inputProcessing/CreateInputProcessor.ts +1 -2
  796. package/src/inputProcessing/CreateInputVisitor.ts +7 -8
  797. package/src/inputProcessing/UpdateInputProcessor.ts +1 -2
  798. package/src/inputProcessing/UpdateInputVisitor.ts +9 -10
  799. package/src/introspection/IntrospectionSchemaFactory.ts +3 -4
  800. package/src/introspection/content-schema.types.ts +3 -3
  801. package/src/introspection/introspection.schema.ts +0 -2
  802. package/src/mapper/ColumnValue.ts +0 -1
  803. package/src/mapper/ErrorUtils.ts +19 -7
  804. package/src/mapper/EventManager.ts +0 -2
  805. package/src/mapper/JunctionTableManager.ts +19 -17
  806. package/src/mapper/Mapper.ts +13 -6
  807. package/src/mapper/MapperFactory.ts +0 -1
  808. package/src/mapper/Result.ts +2 -2
  809. package/src/mapper/delete/DeleteExecutor.ts +6 -7
  810. package/src/mapper/delete/DeleteState.ts +0 -1
  811. package/src/mapper/delete/helpers.ts +2 -3
  812. package/src/mapper/insert/InsertBuilder.ts +32 -35
  813. package/src/mapper/insert/Inserter.ts +0 -1
  814. package/src/mapper/insert/SqlCreateInputProcessor.ts +3 -6
  815. package/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.ts +0 -1
  816. package/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.ts +1 -2
  817. package/src/mapper/insert/relations/OneHasManyCreateInputProcessor.ts +0 -1
  818. package/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.ts +1 -4
  819. package/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.ts +2 -9
  820. package/src/mapper/select/ConditionBuilder.ts +19 -13
  821. package/src/mapper/select/JoinBuilder.ts +4 -2
  822. package/src/mapper/select/OrderByHelper.ts +2 -2
  823. package/src/mapper/select/Path.ts +0 -2
  824. package/src/mapper/select/RelationFetcher.ts +31 -26
  825. package/src/mapper/select/SelectBuilder.ts +16 -14
  826. package/src/mapper/select/SelectExecutionHandler.ts +30 -28
  827. package/src/mapper/select/SelectHydrator.ts +1 -1
  828. package/src/mapper/select/WhereBuilder.ts +49 -43
  829. package/src/mapper/select/handlers/FieldsVisitor.ts +1 -2
  830. package/src/mapper/select/optimizer/ConditionOptimizer.ts +0 -7
  831. package/src/mapper/select/optimizer/WhereOptimizer.ts +37 -15
  832. package/src/mapper/select/optimizer/WhereReplacer.ts +6 -3
  833. package/src/mapper/select/optimizer/helpers.ts +1 -1
  834. package/src/mapper/types.ts +19 -18
  835. package/src/mapper/update/SqlUpdateInputProcessor.ts +1 -1
  836. package/src/mapper/update/UpdateBuilder.ts +77 -81
  837. package/src/mapper/update/Updater.ts +23 -5
  838. package/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.ts +2 -4
  839. package/src/mapper/update/relations/OneHasManyUpdateInputProcessor.ts +2 -2
  840. package/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.ts +7 -4
  841. package/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.ts +23 -9
  842. package/src/resolvers/GraphQlQueryAstFactory.ts +0 -1
  843. package/src/resolvers/MutationResolver.ts +13 -15
  844. package/src/schema/ColumnTypeResolver.ts +1 -1
  845. package/src/schema/ConditionTypeProvider.ts +3 -1
  846. package/src/schema/CustomTypesProvider.ts +1 -2
  847. package/src/schema/EntityTypeProvider.ts +1 -3
  848. package/src/schema/GraphQlSchemaBuilder.ts +8 -7
  849. package/src/schema/GraphQlSchemaBuilderFactory.ts +150 -68
  850. package/src/schema/MutationProvider.ts +5 -10
  851. package/src/schema/OperationExtension.ts +1 -2
  852. package/src/schema/ValidationQueriesProvider.ts +2 -6
  853. package/src/schema/WhereTypeProvider.ts +1 -3
  854. package/src/schema/entities/FieldArgsVisitor.ts +5 -4
  855. package/src/schema/mutations/ConnectOrCreateRelationInputProvider.ts +0 -2
  856. package/src/schema/mutations/CreateEntityInputFieldVisitor.ts +3 -4
  857. package/src/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.ts +3 -4
  858. package/src/schema/mutations/CreateEntityRelationInputFieldVisitor.ts +10 -10
  859. package/src/schema/mutations/EntityInputProvider.ts +1 -7
  860. package/src/schema/mutations/UpdateEntityInputFieldVisitor.ts +3 -4
  861. package/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.ts +3 -4
  862. package/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.ts +6 -13
  863. package/src/utils/object.ts +3 -2
  864. package/tests/cases/bugs/bug-filter-or.test.ts +1 -5
  865. package/tests/cases/bugs/bug-update-by-nested-unique.test.ts +3 -6
  866. package/tests/cases/bugs/bug102.test.ts +2 -9
  867. package/tests/cases/integration/graphQlRequests/delete/aclDelete.test.ts +2 -3
  868. package/tests/cases/integration/graphQlRequests/delete/additionalDeleteFilter.test.ts +1 -2
  869. package/tests/cases/integration/graphQlRequests/delete/cascadeDelete.test.ts +12 -19
  870. package/tests/cases/integration/graphQlRequests/delete/deleteById.test.ts +0 -2
  871. package/tests/cases/integration/graphQlRequests/delete/orphanRemoval.test.ts +4 -5
  872. package/tests/cases/integration/graphQlRequests/delete/restrictOnDelete.test.ts +6 -13
  873. package/tests/cases/integration/graphQlRequests/delete/setNullOnDelete.test.ts +9 -13
  874. package/tests/cases/integration/graphQlRequests/insert/acl/setField.test.ts +0 -2
  875. package/tests/cases/integration/graphQlRequests/insert/aclInsert.test.ts +0 -1
  876. package/tests/cases/integration/graphQlRequests/insert/basicInsert.test.ts +0 -1
  877. package/tests/cases/integration/graphQlRequests/insert/insertCustomId.test.ts +0 -1
  878. package/tests/cases/integration/graphQlRequests/insert/jsonInsert.test.ts +2 -2
  879. package/tests/cases/integration/graphQlRequests/insert/manyHasManyInverse/create.test.ts +1 -3
  880. package/tests/cases/integration/graphQlRequests/insert/manyHasManyOwning/create.test.ts +1 -4
  881. package/tests/cases/integration/graphQlRequests/insert/manyHasOne/connectOrCreate.test.ts +2 -10
  882. package/tests/cases/integration/graphQlRequests/insert/manyHasOne/create.test.ts +1 -5
  883. package/tests/cases/integration/graphQlRequests/insert/oneHasMany/connect.test.ts +3 -4
  884. package/tests/cases/integration/graphQlRequests/insert/oneHasMany/create.test.ts +2 -5
  885. package/tests/cases/integration/graphQlRequests/insert/oneHasOneInverse/create.test.ts +1 -3
  886. package/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/create.test.ts +1 -3
  887. package/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/empty.test.ts +1 -3
  888. package/tests/cases/integration/graphQlRequests/insert/subOperationFail.test.ts +107 -0
  889. package/tests/cases/integration/graphQlRequests/insert/validation/toBeFixed.test.ts +1 -9
  890. package/tests/cases/integration/graphQlRequests/query/acl/differentRowAndFieldPredicate.test.ts +0 -4
  891. package/tests/cases/integration/graphQlRequests/query/acl/fieldRestrictedByLocale.test.ts +1 -4
  892. package/tests/cases/integration/graphQlRequests/query/acl/isNullAcl.test.ts +0 -4
  893. package/tests/cases/integration/graphQlRequests/query/acl/nestedPredicate.test.ts +1 -6
  894. package/tests/cases/integration/graphQlRequests/query/acl/orPredicate.test.ts +0 -2
  895. package/tests/cases/integration/graphQlRequests/query/acl/predicateElimination.test.ts +676 -2
  896. package/tests/cases/integration/graphQlRequests/query/acl/relationAcl.test.ts +8 -11
  897. package/tests/cases/integration/graphQlRequests/query/acl/rowPredicateSubset.test.ts +2 -6
  898. package/tests/cases/integration/graphQlRequests/query/acl/sameRowAndFieldPredicate.test.ts +0 -2
  899. package/tests/cases/integration/graphQlRequests/query/filter/backReferencedFilter.test.ts +1 -4
  900. package/tests/cases/integration/graphQlRequests/query/filter/complexCondition.test.ts +0 -1
  901. package/tests/cases/integration/graphQlRequests/query/filter/composedFilter.test.ts +0 -1
  902. package/tests/cases/integration/graphQlRequests/query/filter/containsQuery.test.ts +0 -1
  903. package/tests/cases/integration/graphQlRequests/query/filter/manyHasManyOwnerRelation.test.ts +16 -18
  904. package/tests/cases/integration/graphQlRequests/query/filter/manyHasOneRelation.test.ts +0 -1
  905. package/tests/cases/integration/graphQlRequests/query/filter/oneHasManyRelation.test.ts +1 -3
  906. package/tests/cases/integration/graphQlRequests/query/formatting/dateFormat.test.ts +0 -1
  907. package/tests/cases/integration/graphQlRequests/query/graphqlFeatures/alias.test.ts +0 -1
  908. package/tests/cases/integration/graphQlRequests/query/graphqlFeatures/fragments.test.ts +6 -8
  909. package/tests/cases/integration/graphQlRequests/query/misc/aliasedType.test.ts +0 -1
  910. package/tests/cases/integration/graphQlRequests/query/misc/longAliasHash.test.ts +1 -3
  911. package/tests/cases/integration/graphQlRequests/query/misc/reducedHasMany.test.ts +2 -10
  912. package/tests/cases/integration/graphQlRequests/query/misc/transaction.test.ts +0 -2
  913. package/tests/cases/integration/graphQlRequests/query/pagination/hasManyLimit.test.ts +3 -10
  914. package/tests/cases/integration/graphQlRequests/query/pagination/paginate.test.ts +1 -3
  915. package/tests/cases/integration/graphQlRequests/query/pagination/paginateAliased.test.ts +1 -3
  916. package/tests/cases/integration/graphQlRequests/query/pagination/simpleLimit.test.ts +0 -1
  917. package/tests/cases/integration/graphQlRequests/query/relations/advanced.test.ts +3 -7
  918. package/tests/cases/integration/graphQlRequests/query/relations/manyHasManyInverse.test.ts +4 -9
  919. package/tests/cases/integration/graphQlRequests/query/relations/manyHasManyOwning.test.ts +5 -8
  920. package/tests/cases/integration/graphQlRequests/query/relations/manyHasOne.test.ts +0 -2
  921. package/tests/cases/integration/graphQlRequests/query/relations/oneHasMany.test.ts +2 -5
  922. package/tests/cases/integration/graphQlRequests/query/relations/oneHasOneInverse.test.ts +1 -3
  923. package/tests/cases/integration/graphQlRequests/query/relations/oneHasOneOwner.test.ts +1 -3
  924. package/tests/cases/integration/graphQlRequests/query/sorting/byRelations.test.ts +6 -8
  925. package/tests/cases/integration/graphQlRequests/query/sorting/defaultOrdering.test.ts +8 -8
  926. package/tests/cases/integration/graphQlRequests/query/sorting/orderBy.test.ts +0 -1
  927. package/tests/cases/integration/graphQlRequests/query/sorting/randomSort.test.ts +1 -5
  928. package/tests/cases/integration/graphQlRequests/query/sorting/sortNulls.test.ts +0 -1
  929. package/tests/cases/integration/graphQlRequests/query/sorting/sortedHasMany.test.ts +0 -1
  930. package/tests/cases/integration/graphQlRequests/query/unique/basicQueryById.test.ts +0 -1
  931. package/tests/cases/integration/graphQlRequests/query/unique/composedUnique.test.ts +2 -5
  932. package/tests/cases/integration/graphQlRequests/query/unique/oneHasManyUnique.test.ts +2 -5
  933. package/tests/cases/integration/graphQlRequests/query/unique/uniqueWithFilter.test.ts +0 -1
  934. package/tests/cases/integration/graphQlRequests/query/view/view.test.ts +0 -1
  935. package/tests/cases/integration/graphQlRequests/update/acl/aclUpdate.test.ts +8 -11
  936. package/tests/cases/integration/graphQlRequests/update/additionalFilter.test.ts +53 -3
  937. package/tests/cases/integration/graphQlRequests/update/basic/columnUpdate.test.ts +2 -3
  938. package/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/connect.test.ts +0 -1
  939. package/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/create.test.ts +0 -1
  940. package/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/delete.test.ts +0 -1
  941. package/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/disconnect.test.ts +0 -1
  942. package/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/schema.ts +1 -2
  943. package/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/update.test.ts +2 -2
  944. package/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/upsert.test.ts +2 -2
  945. package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/connect.test.ts +0 -1
  946. package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/connectOrCreate.test.ts +0 -2
  947. package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/create.test.ts +0 -1
  948. package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/delete.test.ts +0 -1
  949. package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/disconnect.test.ts +0 -1
  950. package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/schema.ts +1 -2
  951. package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/update.test.ts +2 -2
  952. package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/upsert.test.ts +7 -6
  953. package/tests/cases/integration/graphQlRequests/update/manyHasOne/connect.test.ts +2 -2
  954. package/tests/cases/integration/graphQlRequests/update/manyHasOne/create.test.ts +2 -2
  955. package/tests/cases/integration/graphQlRequests/update/manyHasOne/delete.test.ts +8 -6
  956. package/tests/cases/integration/graphQlRequests/update/manyHasOne/disconnect.test.ts +2 -3
  957. package/tests/cases/integration/graphQlRequests/update/manyHasOne/schema.ts +2 -5
  958. package/tests/cases/integration/graphQlRequests/update/manyHasOne/update.test.ts +2 -2
  959. package/tests/cases/integration/graphQlRequests/update/manyHasOne/upsert.test.ts +4 -3
  960. package/tests/cases/integration/graphQlRequests/update/oneHasMany/combination.test.ts +0 -1
  961. package/tests/cases/integration/graphQlRequests/update/oneHasMany/connect.test.ts +2 -2
  962. package/tests/cases/integration/graphQlRequests/update/oneHasMany/connectOrCreate.test.ts +2 -2
  963. package/tests/cases/integration/graphQlRequests/update/oneHasMany/create.test.ts +0 -1
  964. package/tests/cases/integration/graphQlRequests/update/oneHasMany/delete.test.ts +0 -1
  965. package/tests/cases/integration/graphQlRequests/update/oneHasMany/disconnect.test.ts +2 -2
  966. package/tests/cases/integration/graphQlRequests/update/oneHasMany/schema.ts +2 -8
  967. package/tests/cases/integration/graphQlRequests/update/oneHasMany/update.test.ts +7 -8
  968. package/tests/cases/integration/graphQlRequests/update/oneHasMany/upsert.test.ts +2 -2
  969. package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/connect.test.ts +10 -6
  970. package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/create.test.ts +2 -2
  971. package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/delete.test.ts +1 -4
  972. package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/disconnect.test.ts +2 -2
  973. package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/schema.ts +2 -6
  974. package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/update.test.ts +2 -2
  975. package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/upsert.test.ts +2 -2
  976. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/connect.test.ts +8 -5
  977. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/connectOrCreate.test.ts +2 -1
  978. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/create.test.ts +4 -2
  979. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/delete.test.ts +5 -5
  980. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/disconnect.test.ts +2 -2
  981. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/schema.ts +2 -6
  982. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/update.test.ts +2 -2
  983. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/upsert.test.ts +4 -3
  984. package/tests/cases/integration/graphQlRequests/update/queryPortal.test.ts +4 -4
  985. package/tests/cases/integration/graphQlRequests/update/transaction.test.ts +6 -5
  986. package/tests/cases/integration/graphQlRequests/update/validation/toBeFixed.test.ts +9 -10
  987. package/tests/cases/integration/graphQlRequests/upsert/basicUpsert.test.ts +5 -9
  988. package/tests/cases/integration/graphQlRequests/validation/conditions.test.ts +1 -1
  989. package/tests/cases/integration/graphQlRequests/validation/nestedValidation.test.ts +0 -2
  990. package/tests/cases/integration/graphQlRequests/validation/optionalAssert.test.ts +0 -2
  991. package/tests/cases/integration/graphQlRequests/validation/required.test.ts +0 -2
  992. package/tests/cases/integration/graphQlRequests/validation/requiredWhen.test.ts +1 -2
  993. package/tests/cases/integration/graphQlRequests/validation/rules/andRule.test.ts +0 -1
  994. package/tests/cases/integration/graphQlRequests/validation/rules/lengthRangeRule.test.ts +0 -1
  995. package/tests/cases/integration/graphQlRequests/validation/rules/maxLengthRule.test.ts +0 -1
  996. package/tests/cases/integration/graphQlRequests/validation/rules/minLength.test.ts +0 -3
  997. package/tests/cases/integration/graphQlRequests/validation/rules/notEmptyRule.test.ts +0 -4
  998. package/tests/cases/integration/graphQlRequests/validation/rules/notRule.test.ts +0 -2
  999. package/tests/cases/integration/graphQlRequests/validation/rules/orRule.test.ts +0 -3
  1000. package/tests/cases/integration/graphQlRequests/validation/rules/patternRule.test.ts +0 -1
  1001. package/tests/cases/integration/graphQlRequests/validation/rules/rangeRule.test.ts +0 -1
  1002. package/tests/cases/integration/graphQlRequests/validation/utils.ts +2 -6
  1003. package/tests/cases/integration/graphQlSchema/graphQlSchemaBuilder.test.ts +31 -61
  1004. package/tests/cases/integration/graphQlSchema/schema-column-types.gql +1 -0
  1005. package/tests/cases/unit/aclVariablesFactory.test.ts +3 -7
  1006. package/tests/cases/unit/conditionOptimizer.test.ts +122 -77
  1007. package/tests/cases/unit/inputPreValidator.test.ts +5 -17
  1008. package/tests/cases/unit/inputValidation.test.ts +2 -7
  1009. package/tests/cases/unit/orderbyHelper.test.ts +8 -6
  1010. package/tests/cases/unit/permissionMerger.test.ts +1 -7
  1011. package/tests/cases/unit/predicatesFactory.test.ts +0 -1
  1012. package/tests/cases/unit/predicatesInjector.test.ts +1065 -13
  1013. package/tests/cases/unit/uuidType.test.ts +1 -2
  1014. package/tests/cases/unit/variableInjector.test.ts +1 -4
  1015. package/tests/cases/unit/whereBuilder.test.ts +8 -5
  1016. package/tests/cases/unit/whereOptimizer.test.ts +337 -244
  1017. package/tests/src/test.ts +3 -2
  1018. package/tests/src/testGraphql.ts +1 -1
  1019. package/tests/.eslintrc.cjs +0 -5
@@ -1,5 +1,5 @@
1
1
  import { PermissionFactory, PredicateFactory, PredicatesInjector, VariableInjector } from '../../../src/acl'
2
- import { SchemaBuilder, SchemaDefinition as def, AclDefinition as acl, createSchema, PermissionsBuilder } from '@contember/schema-definition'
2
+ import { AclDefinition as acl, createSchema, PermissionsBuilder, SchemaBuilder, SchemaDefinition as def } from '@contember/schema-definition'
3
3
  import { Acl, Model } from '@contember/schema'
4
4
  import { describe, it } from 'bun:test'
5
5
  import { WhereOptimizer } from '../../../src/mapper/select/optimizer/WhereOptimizer'
@@ -8,8 +8,6 @@ import { acceptFieldVisitor, AllowAllPermissionFactory } from '@contember/schema
8
8
  import { testUuid } from '../../src/testUuid'
9
9
  import { assert } from '../../src/assert'
10
10
 
11
-
12
-
13
11
  const schema = new SchemaBuilder()
14
12
  .enum('locale', ['cs', 'en'])
15
13
  .entity('Post', entityBuilder => entityBuilder.oneHasMany('locales', c => c.target('PostLocale')))
@@ -17,8 +15,7 @@ const schema = new SchemaBuilder()
17
15
  entity
18
16
  .column('title', column => column.type(Model.ColumnType.String))
19
17
  .column('content', column => column.type(Model.ColumnType.String))
20
- .column('locale', column => column.type(Model.ColumnType.Enum, { enumName: 'locale' })),
21
- )
18
+ .column('locale', column => column.type(Model.ColumnType.Enum, { enumName: 'locale' })))
22
19
  .buildSchema()
23
20
 
24
21
  const permissions: Acl.Permissions = {
@@ -50,9 +47,7 @@ const permissions: Acl.Permissions = {
50
47
  },
51
48
  }
52
49
 
53
-
54
50
  describe('Predicates injector', () => {
55
-
56
51
  const variables: Acl.VariablesMap = {
57
52
  localeVariable: { in: ['cs'] },
58
53
  }
@@ -113,8 +108,6 @@ describe('Predicates injector', () => {
113
108
  ],
114
109
  })
115
110
  })
116
-
117
-
118
111
  })
119
112
 
120
113
  namespace DeepFilterModel {
@@ -157,7 +150,6 @@ namespace DeepFilterModel {
157
150
  }
158
151
  }
159
152
 
160
-
161
153
  describe('predicates injector elimination', () => {
162
154
  const schema = createSchema(DeepFilterModel)
163
155
  const permissions = new PermissionFactory().create(schema, ['reader'])
@@ -183,9 +175,16 @@ describe('predicates injector elimination', () => {
183
175
  },
184
176
  visitRelation: ctx => ctx,
185
177
  })
186
- const injected = injector.inject(schema.model.entities.ImageUse, {
187
- articles: { id: { in: [testUuid(1)] } },
188
- }, relation)
178
+ // Pass ancestorPath to indicate Article->coverPhoto is in our traversal path
179
+ const ancestorPath = [relation]
180
+ const injected = injector.inject(
181
+ schema.model.entities.ImageUse,
182
+ {
183
+ articles: { id: { in: [testUuid(1)] } },
184
+ },
185
+ relation,
186
+ ancestorPath,
187
+ )
189
188
 
190
189
  assert.deepStrictEqual(injected, {
191
190
  and: [
@@ -205,6 +204,1059 @@ describe('predicates injector elimination', () => {
205
204
  })
206
205
  })
207
206
 
207
+ // Self-referencing model to test edge cases
208
+ namespace SelfReferencingModel {
209
+ export const readerRole = acl.createRole('reader')
210
+
211
+ @acl.allow(readerRole, {
212
+ when: { isActive: { eq: true } },
213
+ read: true,
214
+ })
215
+ export class Category {
216
+ name = def.stringColumn()
217
+ isActive = def.boolColumn()
218
+ parent = def.manyHasOne(Category, 'children')
219
+ children = def.oneHasMany(Category, 'parent')
220
+ }
221
+ }
222
+
223
+ // Model with multiple relations between same entities
224
+ namespace MultipleRelationsModel {
225
+ export const readerRole = acl.createRole('reader')
226
+
227
+ @acl.allow(readerRole, {
228
+ when: { isPublished: { eq: true } },
229
+ read: true,
230
+ })
231
+ export class Article {
232
+ title = def.stringColumn()
233
+ isPublished = def.boolColumn()
234
+ author = def.manyHasOne(Person, 'authoredArticles')
235
+ editor = def.manyHasOne(Person, 'editedArticles')
236
+ }
237
+
238
+ @acl.allow(readerRole, {
239
+ when: { isActive: { eq: true } },
240
+ read: true,
241
+ })
242
+ export class Person {
243
+ name = def.stringColumn()
244
+ isActive = def.boolColumn()
245
+ authoredArticles = def.oneHasMany(Article, 'author')
246
+ editedArticles = def.oneHasMany(Article, 'editor')
247
+ }
248
+ }
249
+
250
+ describe('predicates injector - self referencing relations', () => {
251
+ const schema = createSchema(SelfReferencingModel)
252
+ const permissions = new PermissionFactory().create(schema, ['reader'])
253
+
254
+ const injector = new PredicatesInjector(
255
+ schema.model,
256
+ new PredicateFactory(permissions, schema.model, new VariableInjector(schema.model, {})),
257
+ )
258
+
259
+ // Helper to get relation context and ancestors for Category -> children -> Category
260
+ const getChildrenContext = () => {
261
+ const relation = acceptFieldVisitor(schema.model, schema.model.entities.Category, 'children', {
262
+ visitColumn: () => {
263
+ throw new Error()
264
+ },
265
+ visitRelation: ctx => ctx,
266
+ })
267
+ const ancestorPath = [relation] // Path contains the relation we traversed
268
+ return { relation, ancestorPath }
269
+ }
270
+
271
+ it('should handle back-reference inside OR block', () => {
272
+ const { relation, ancestorPath } = getChildrenContext()
273
+
274
+ const injected = injector.inject(
275
+ schema.model.entities.Category,
276
+ {
277
+ or: [
278
+ { parent: { name: { eq: 'Root' } } },
279
+ { name: { eq: 'Special' } },
280
+ ],
281
+ },
282
+ relation,
283
+ ancestorPath,
284
+ )
285
+
286
+ assert.deepStrictEqual(injected, {
287
+ and: [
288
+ {
289
+ or: [
290
+ { parent: { and: [{ name: { eq: 'Root' } }, { id: { always: true } }] } },
291
+ { name: { eq: 'Special' } },
292
+ ],
293
+ },
294
+ { isActive: { eq: true } },
295
+ ],
296
+ })
297
+ })
298
+
299
+ it('should handle back-reference inside AND block', () => {
300
+ const { relation, ancestorPath } = getChildrenContext()
301
+
302
+ const injected = injector.inject(
303
+ schema.model.entities.Category,
304
+ {
305
+ and: [
306
+ { parent: { name: { eq: 'Root' } } },
307
+ { name: { contains: 'test' } },
308
+ ],
309
+ },
310
+ relation,
311
+ ancestorPath,
312
+ )
313
+
314
+ assert.deepStrictEqual(injected, {
315
+ and: [
316
+ {
317
+ and: [
318
+ { parent: { and: [{ name: { eq: 'Root' } }, { id: { always: true } }] } },
319
+ { name: { contains: 'test' } },
320
+ ],
321
+ },
322
+ { isActive: { eq: true } },
323
+ ],
324
+ })
325
+ })
326
+
327
+ it('should handle back-reference inside NOT block', () => {
328
+ const { relation, ancestorPath } = getChildrenContext()
329
+
330
+ const injected = injector.inject(
331
+ schema.model.entities.Category,
332
+ {
333
+ not: { parent: { name: { eq: 'Excluded' } } },
334
+ },
335
+ relation,
336
+ ancestorPath,
337
+ )
338
+
339
+ assert.deepStrictEqual(injected, {
340
+ and: [
341
+ {
342
+ not: { parent: { and: [{ name: { eq: 'Excluded' } }, { id: { always: true } }] } },
343
+ },
344
+ { isActive: { eq: true } },
345
+ ],
346
+ })
347
+ })
348
+
349
+ it('should handle mix of back-reference and forward-reference at same level', () => {
350
+ const { relation, ancestorPath } = getChildrenContext()
351
+
352
+ const injected = injector.inject(
353
+ schema.model.entities.Category,
354
+ {
355
+ parent: { name: { eq: 'Root' } },
356
+ children: { name: { eq: 'Grandchild' } },
357
+ },
358
+ relation,
359
+ ancestorPath,
360
+ )
361
+
362
+ assert.deepStrictEqual(injected, {
363
+ and: [
364
+ {
365
+ parent: { and: [{ name: { eq: 'Root' } }, { id: { always: true } }] },
366
+ children: { and: [{ name: { eq: 'Grandchild' } }, { isActive: { eq: true } }] },
367
+ },
368
+ { isActive: { eq: true } },
369
+ ],
370
+ })
371
+ })
372
+
373
+ it('should handle empty filter on back-reference relation', () => {
374
+ const { relation, ancestorPath } = getChildrenContext()
375
+
376
+ const injected = injector.inject(
377
+ schema.model.entities.Category,
378
+ {
379
+ parent: {},
380
+ },
381
+ relation,
382
+ ancestorPath,
383
+ )
384
+
385
+ // Empty filter stays empty - back-reference simplification only affects predicates
386
+ assert.deepStrictEqual(injected, {
387
+ and: [
388
+ { parent: {} },
389
+ { isActive: { eq: true } },
390
+ ],
391
+ })
392
+ })
393
+
394
+ it('should NOT simplify forward reference in self-referencing relation', () => {
395
+ const { relation, ancestorPath } = getChildrenContext()
396
+
397
+ const injected = injector.inject(
398
+ schema.model.entities.Category,
399
+ {
400
+ children: { name: { eq: 'Grandchild' } },
401
+ },
402
+ relation,
403
+ ancestorPath,
404
+ )
405
+
406
+ assert.deepStrictEqual(injected, {
407
+ and: [
408
+ {
409
+ children: { and: [{ name: { eq: 'Grandchild' } }, { isActive: { eq: true } }] },
410
+ },
411
+ { isActive: { eq: true } },
412
+ ],
413
+ })
414
+ })
415
+
416
+ it('should NOT eliminate predicate for self-referencing - children have their own predicate', () => {
417
+ const { relation, ancestorPath } = getChildrenContext()
418
+
419
+ // Query child categories with a filter
420
+ const injected = injector.inject(
421
+ schema.model.entities.Category,
422
+ {
423
+ name: { eq: 'test' },
424
+ },
425
+ relation,
426
+ ancestorPath,
427
+ )
428
+
429
+ // The child Category should still have its own predicate { isActive: true }
430
+ // It should NOT be replaced with { id: { always: true } }
431
+ assert.deepStrictEqual(injected, {
432
+ and: [
433
+ { name: { eq: 'test' } },
434
+ { isActive: { eq: true } },
435
+ ],
436
+ })
437
+ })
438
+
439
+ it('should preserve user filter when filtering on parent relation', () => {
440
+ const { relation, ancestorPath } = getChildrenContext()
441
+
442
+ // Query child categories with filter on parent (back-reference)
443
+ const injected = injector.inject(
444
+ schema.model.entities.Category,
445
+ {
446
+ parent: { id: { in: [testUuid(1)] } },
447
+ },
448
+ relation,
449
+ ancestorPath,
450
+ )
451
+
452
+ // User's filter { parent: { id: ... } } should be preserved
453
+ // The nested parent predicate can be simplified since we came from parent
454
+ assert.deepStrictEqual(injected, {
455
+ and: [
456
+ {
457
+ parent: {
458
+ and: [
459
+ { id: { in: [testUuid(1)] } },
460
+ { id: { always: true } },
461
+ ],
462
+ },
463
+ },
464
+ { isActive: { eq: true } },
465
+ ],
466
+ })
467
+ })
468
+ })
469
+
470
+ describe('predicates injector - multiple relations between entities', () => {
471
+ const schema = createSchema(MultipleRelationsModel)
472
+ const permissions = new PermissionFactory().create(schema, ['reader'])
473
+
474
+ const injector = new PredicatesInjector(
475
+ schema.model,
476
+ new PredicateFactory(permissions, schema.model, new VariableInjector(schema.model, {})),
477
+ )
478
+
479
+ it('should NOT eliminate predicate when filtering on different relation than we came from', () => {
480
+ // We came from Person via authoredArticles relation
481
+ const relation = acceptFieldVisitor(schema.model, schema.model.entities.Person, 'authoredArticles', {
482
+ visitColumn: () => {
483
+ throw new Error()
484
+ },
485
+ visitRelation: ctx => ctx,
486
+ })
487
+ const ancestorPath = [relation]
488
+
489
+ // Query articles with filter on editor (different relation to Person)
490
+ const injected = injector.inject(
491
+ schema.model.entities.Article,
492
+ {
493
+ editor: { name: { eq: 'John' } },
494
+ },
495
+ relation,
496
+ ancestorPath,
497
+ )
498
+
499
+ // Editor filter should have full predicate (not simplified)
500
+ // because we came via author, not editor
501
+ assert.deepStrictEqual(injected, {
502
+ and: [
503
+ {
504
+ editor: {
505
+ and: [
506
+ { name: { eq: 'John' } },
507
+ { isActive: { eq: true } },
508
+ ],
509
+ },
510
+ },
511
+ { isPublished: { eq: true } },
512
+ ],
513
+ })
514
+ })
515
+
516
+ it('should eliminate predicate only for the relation we came from', () => {
517
+ // We came from Person via authoredArticles relation
518
+ const relation = acceptFieldVisitor(schema.model, schema.model.entities.Person, 'authoredArticles', {
519
+ visitColumn: () => {
520
+ throw new Error()
521
+ },
522
+ visitRelation: ctx => ctx,
523
+ })
524
+ const ancestorPath = [relation]
525
+
526
+ // Query articles with filter on author (same relation we came from)
527
+ const injected = injector.inject(
528
+ schema.model.entities.Article,
529
+ {
530
+ author: { name: { eq: 'John' } },
531
+ },
532
+ relation,
533
+ ancestorPath,
534
+ )
535
+
536
+ // Author filter should have simplified predicate
537
+ // because we came via author
538
+ assert.deepStrictEqual(injected, {
539
+ and: [
540
+ {
541
+ author: {
542
+ and: [
543
+ { name: { eq: 'John' } },
544
+ { id: { always: true } },
545
+ ],
546
+ },
547
+ },
548
+ { isPublished: { eq: true } },
549
+ ],
550
+ })
551
+ })
552
+ })
553
+
554
+ describe('predicates injector - non back-reference filter', () => {
555
+ const schema = createSchema(DeepFilterModel)
556
+ const permissions = new PermissionFactory().create(schema, ['reader'])
557
+
558
+ const injector = new PredicatesInjector(
559
+ schema.model,
560
+ new PredicateFactory(permissions, schema.model, new VariableInjector(schema.model, {})),
561
+ )
562
+
563
+ it('should NOT eliminate predicate when filtering on unrelated relation', () => {
564
+ // We came from Article via coverPhoto
565
+ const relation = acceptFieldVisitor(schema.model, schema.model.entities.Article, 'coverPhoto', {
566
+ visitColumn: () => {
567
+ throw new Error()
568
+ },
569
+ visitRelation: ctx => ctx,
570
+ })
571
+ const ancestorPath = [relation]
572
+
573
+ // Query ImageUse with filter on image (not the back-reference)
574
+ const injected = injector.inject(
575
+ schema.model.entities.ImageUse,
576
+ {
577
+ image: { url: { eq: 'test.jpg' } },
578
+ },
579
+ relation,
580
+ ancestorPath,
581
+ )
582
+
583
+ // Image filter should have full predicate (uses: canRead)
584
+ // The main ImageUse predicate (articles: canRead) should be simplified
585
+ assert.deepStrictEqual(injected, {
586
+ and: [
587
+ {
588
+ image: {
589
+ and: [
590
+ { url: { eq: 'test.jpg' } },
591
+ { uses: { id: { always: true } } },
592
+ ],
593
+ },
594
+ },
595
+ { articles: { id: { always: true } } },
596
+ ],
597
+ })
598
+ })
599
+ })
600
+
601
+ // Multi-level back-reference model for testing deep ancestry
602
+ namespace MultiLevelModel {
603
+ export const readerRole = acl.createRole('reader')
604
+
605
+ @acl.allow(readerRole, {
606
+ when: { isActive: { eq: true } },
607
+ read: true,
608
+ })
609
+ export class Company {
610
+ name = def.stringColumn()
611
+ isActive = def.boolColumn()
612
+ departments = def.oneHasMany(Department, 'company')
613
+ }
614
+
615
+ @acl.allow(readerRole, {
616
+ when: { company: { isActive: { eq: true } } },
617
+ read: true,
618
+ })
619
+ export class Department {
620
+ name = def.stringColumn()
621
+ company = def.manyHasOne(Company, 'departments')
622
+ employees = def.oneHasMany(Employee, 'department')
623
+ }
624
+
625
+ @acl.allow(readerRole, {
626
+ when: { department: { company: { isActive: { eq: true } } } },
627
+ read: true,
628
+ })
629
+ export class Employee {
630
+ name = def.stringColumn()
631
+ department = def.manyHasOne(Department, 'employees')
632
+ }
633
+ }
634
+
635
+ describe('predicates injector - multi-level back-reference', () => {
636
+ const schema = createSchema(MultiLevelModel)
637
+ const permissions = new PermissionFactory().create(schema, ['reader'])
638
+
639
+ const injector = new PredicatesInjector(
640
+ schema.model,
641
+ new PredicateFactory(permissions, schema.model, new VariableInjector(schema.model, {})),
642
+ )
643
+
644
+ // Helper to build ancestor path for Company -> departments -> Department -> employees -> Employee
645
+ const buildEmployeePath = () => {
646
+ const companyDepartmentsRelation = acceptFieldVisitor(schema.model, schema.model.entities.Company, 'departments', {
647
+ visitColumn: () => {
648
+ throw new Error()
649
+ },
650
+ visitRelation: ctx => ctx,
651
+ })
652
+ const departmentEmployeesRelation = acceptFieldVisitor(schema.model, schema.model.entities.Department, 'employees', {
653
+ visitColumn: () => {
654
+ throw new Error()
655
+ },
656
+ visitRelation: ctx => ctx,
657
+ })
658
+ return {
659
+ relation: departmentEmployeesRelation,
660
+ ancestorPath: [companyDepartmentsRelation, departmentEmployeesRelation],
661
+ }
662
+ }
663
+
664
+ it('should simplify predicate when ancestor entity is in the path', () => {
665
+ // Simulating: Company -> departments -> Department -> employees -> Employee
666
+ // Employee has predicate: { department: { company: { isActive: true } } }
667
+ const { relation, ancestorPath } = buildEmployeePath()
668
+
669
+ const injected = injector.inject(schema.model.entities.Employee, {}, relation, ancestorPath)
670
+
671
+ // The predicate { department: { company: { isActive: true } } } is simplified because:
672
+ // 1. department is back-reference (we came from Department via employees)
673
+ // 2. Department->employees is in ancestorPath with targetRelation='department'
674
+ // 3. Since Department was already verified (its predicate includes company.isActive check),
675
+ // the entire department predicate becomes { id: always }
676
+ assert.deepStrictEqual(injected, {
677
+ department: { id: { always: true } },
678
+ })
679
+ })
680
+
681
+ it('should simplify Department predicate when Company is ancestor', () => {
682
+ // Simulating: Company -> departments -> Department
683
+ // Department has predicate: { company: { isActive: true } }
684
+
685
+ const relation = acceptFieldVisitor(schema.model, schema.model.entities.Company, 'departments', {
686
+ visitColumn: () => {
687
+ throw new Error()
688
+ },
689
+ visitRelation: ctx => ctx,
690
+ })
691
+ const ancestorPath = [relation]
692
+
693
+ const injected = injector.inject(schema.model.entities.Department, {}, relation, ancestorPath)
694
+
695
+ // company is back-reference matching Company->departments in path -> simplify
696
+ assert.deepStrictEqual(injected, {
697
+ company: { id: { always: true } },
698
+ })
699
+ })
700
+
701
+ it('should NOT simplify when filtering via non-ancestor relation', () => {
702
+ // If we query Employee directly (not through Company->Department chain)
703
+ // the predicate should NOT be simplified AND nested predicates should be applied
704
+ const injected = injector.inject(schema.model.entities.Employee, {})
705
+
706
+ // Full predicate with nested entity predicates applied:
707
+ // - Employee predicate: { department: { company: { isActive: true } } }
708
+ // - Department predicate: { company: { isActive: true } } is added
709
+ // - Company predicate: { isActive: true } is added inside company traversal
710
+ assert.deepStrictEqual(injected, {
711
+ department: {
712
+ and: [
713
+ {
714
+ company: {
715
+ and: [
716
+ { isActive: { eq: true } }, // from Employee predicate
717
+ { isActive: { eq: true } }, // Company's own predicate
718
+ ],
719
+ },
720
+ },
721
+ { company: { isActive: { eq: true } } }, // Department's predicate
722
+ ],
723
+ },
724
+ })
725
+ })
726
+
727
+ it('should handle user filter combined with multi-level back-reference', () => {
728
+ const { relation, ancestorPath } = buildEmployeePath()
729
+
730
+ const injected = injector.inject(
731
+ schema.model.entities.Employee,
732
+ {
733
+ name: { eq: 'Alice' },
734
+ },
735
+ relation,
736
+ ancestorPath,
737
+ )
738
+
739
+ // User filter preserved, predicate simplified (Department is back-reference,
740
+ // so entire department predicate becomes { id: always })
741
+ assert.deepStrictEqual(injected, {
742
+ and: [
743
+ { name: { eq: 'Alice' } },
744
+ { department: { id: { always: true } } },
745
+ ],
746
+ })
747
+ })
748
+
749
+ it('should NOT simplify predicate for entity not in ancestors', () => {
750
+ // Query: Company -> departments -> Department with filter on employees
751
+ const relation = acceptFieldVisitor(schema.model, schema.model.entities.Company, 'departments', {
752
+ visitColumn: () => {
753
+ throw new Error()
754
+ },
755
+ visitRelation: ctx => ctx,
756
+ })
757
+ const ancestorPath = [relation] // Only Company->departments, not Department->employees
758
+
759
+ // Query Department with filter on employees
760
+ const injected = injector.inject(
761
+ schema.model.entities.Department,
762
+ {
763
+ employees: { name: { eq: 'Alice' } },
764
+ },
765
+ relation,
766
+ ancestorPath,
767
+ )
768
+
769
+ // employees is NOT back-reference (we came via Company->departments, not via employees)
770
+ // Inside employees filter, Employee.department IS a back-reference because we're
771
+ // traversing Department->employees->Employee and the ancestorPath grows to include
772
+ // the employees relation context
773
+ // So Employee predicate { department: { company: ... } } gets simplified:
774
+ // - department becomes { id: always } because it matches the traversal
775
+ assert.deepStrictEqual(injected, {
776
+ and: [
777
+ {
778
+ employees: {
779
+ and: [
780
+ { name: { eq: 'Alice' } },
781
+ { department: { id: { always: true } } },
782
+ ],
783
+ },
784
+ },
785
+ { company: { id: { always: true } } },
786
+ ],
787
+ })
788
+ })
789
+ })
790
+
791
+ // Edge case: Company with subsidiaries (self-reference) where we must NOT
792
+ // incorrectly simplify predicates for different instances of the same entity
793
+ namespace SubsidiaryModel {
794
+ export const readerRole = acl.createRole('reader')
795
+
796
+ @acl.allow(readerRole, {
797
+ when: { isActive: { eq: true } },
798
+ read: true,
799
+ })
800
+ export class Company {
801
+ name = def.stringColumn()
802
+ isActive = def.boolColumn()
803
+ subsidiaries = def.oneHasMany(Company, 'parent')
804
+ parent = def.manyHasOne(Company, 'subsidiaries')
805
+ departments = def.oneHasMany(Department, 'company')
806
+ }
807
+
808
+ @acl.allow(readerRole, {
809
+ // Department's predicate checks its company's isActive
810
+ when: { company: { isActive: { eq: true } } },
811
+ read: true,
812
+ })
813
+ export class Department {
814
+ name = def.stringColumn()
815
+ company = def.manyHasOne(Company, 'departments')
816
+ }
817
+ }
818
+
819
+ describe('predicates injector - subsidiary edge case', () => {
820
+ const schema = createSchema(SubsidiaryModel)
821
+ const permissions = new PermissionFactory().create(schema, ['reader'])
822
+
823
+ const injector = new PredicatesInjector(
824
+ schema.model,
825
+ new PredicateFactory(permissions, schema.model, new VariableInjector(schema.model, {})),
826
+ )
827
+
828
+ it('should NOT simplify predicate when traversing through different Company instance', () => {
829
+ // Query path: Company[root] -> subsidiaries -> Company[subsidiary] -> departments -> Department
830
+ // Department's predicate: { company: { isActive: true } }
831
+ // The "company" in the predicate refers to Company[subsidiary], NOT Company[root]
832
+ // So we MUST check isActive on the subsidiary, not assume it's verified
833
+
834
+ // Build the path: Company -> subsidiaries -> Company -> departments
835
+ const companySubsidiariesRelation = acceptFieldVisitor(schema.model, schema.model.entities.Company, 'subsidiaries', {
836
+ visitColumn: () => {
837
+ throw new Error()
838
+ },
839
+ visitRelation: ctx => ctx,
840
+ })
841
+ const companyDepartmentsRelation = acceptFieldVisitor(schema.model, schema.model.entities.Company, 'departments', {
842
+ visitColumn: () => {
843
+ throw new Error()
844
+ },
845
+ visitRelation: ctx => ctx,
846
+ })
847
+
848
+ // Path represents: root Company -> subsidiaries (to subsidiary Company) -> departments (to Department)
849
+ const ancestorPath = [companySubsidiariesRelation, companyDepartmentsRelation]
850
+
851
+ const injected = injector.inject(schema.model.entities.Department, {}, companyDepartmentsRelation, ancestorPath)
852
+
853
+ // Department's predicate { company: { isActive: true } }:
854
+ // - "company" relation points to Company[subsidiary]
855
+ // - Company[subsidiary] was traversed via "departments" relation
856
+ // - In ancestorPath, Company->departments has targetRelation='company'
857
+ // - So this IS a back-reference to the subsidiary Company
858
+ // Therefore it gets simplified
859
+ assert.deepStrictEqual(injected, {
860
+ company: { id: { always: true } },
861
+ })
862
+ })
863
+
864
+ it('should correctly handle predicate when Company in predicate is NOT in path', () => {
865
+ // Query Department directly (not through Company chain)
866
+ // Department's predicate: { company: { isActive: true } }
867
+ // Since we didn't traverse through Company, the predicate MUST be fully applied
868
+ // AND Company's own predicate should also be applied
869
+
870
+ const injected = injector.inject(schema.model.entities.Department, {})
871
+
872
+ // Full predicate with nested Company predicate:
873
+ // - Department predicate: { company: { isActive: true } }
874
+ // - Company predicate: { isActive: true } is also added when traversing company
875
+ assert.deepStrictEqual(injected, {
876
+ company: {
877
+ and: [
878
+ { isActive: { eq: true } }, // from Department predicate
879
+ { isActive: { eq: true } }, // Company's own predicate
880
+ ],
881
+ },
882
+ })
883
+ })
884
+
885
+ it('should NOT confuse root Company with subsidiary Company in nested predicates', () => {
886
+ // Query: Company[root] -> subsidiaries -> Company[subsidiary]
887
+ // Company predicate: { isActive: true }
888
+ // When querying subsidiaries, we must check EACH subsidiary's isActive
889
+
890
+ const companySubsidiariesRelation = acceptFieldVisitor(schema.model, schema.model.entities.Company, 'subsidiaries', {
891
+ visitColumn: () => {
892
+ throw new Error()
893
+ },
894
+ visitRelation: ctx => ctx,
895
+ })
896
+
897
+ const ancestorPath = [companySubsidiariesRelation]
898
+
899
+ // Query subsidiary Companies with a filter
900
+ const injected = injector.inject(
901
+ schema.model.entities.Company,
902
+ {
903
+ name: { eq: 'Sub Co' },
904
+ },
905
+ companySubsidiariesRelation,
906
+ ancestorPath,
907
+ )
908
+
909
+ // Subsidiary Company is NOT a back-reference (subsidiaries != parent)
910
+ // So the full predicate { isActive: true } must be applied
911
+ assert.deepStrictEqual(injected, {
912
+ and: [
913
+ { name: { eq: 'Sub Co' } },
914
+ { isActive: { eq: true } },
915
+ ],
916
+ })
917
+ })
918
+
919
+ it('should simplify only when filtering back through parent relation', () => {
920
+ // Query: Company[root] -> subsidiaries -> Company[subsidiary]
921
+ // with filter on parent (back to root)
922
+
923
+ const companySubsidiariesRelation = acceptFieldVisitor(schema.model, schema.model.entities.Company, 'subsidiaries', {
924
+ visitColumn: () => {
925
+ throw new Error()
926
+ },
927
+ visitRelation: ctx => ctx,
928
+ })
929
+
930
+ const ancestorPath = [companySubsidiariesRelation]
931
+
932
+ // Query subsidiary with filter on parent (the back-reference)
933
+ const injected = injector.inject(
934
+ schema.model.entities.Company,
935
+ {
936
+ parent: { name: { eq: 'Root Co' } },
937
+ },
938
+ companySubsidiariesRelation,
939
+ ancestorPath,
940
+ )
941
+
942
+ // Parent IS a back-reference (subsidiaries.targetRelation = parent)
943
+ // So parent predicate gets simplified
944
+ assert.deepStrictEqual(injected, {
945
+ and: [
946
+ {
947
+ parent: {
948
+ and: [
949
+ { name: { eq: 'Root Co' } },
950
+ { id: { always: true } }, // Parent Company predicate simplified
951
+ ],
952
+ },
953
+ },
954
+ { isActive: { eq: true } }, // Subsidiary's own predicate still applied
955
+ ],
956
+ })
957
+ })
958
+ })
959
+
960
+ // SECURITY TEST: Child predicate checks DIFFERENT field than parent predicate
961
+ // This tests the scenario where simplification would be INCORRECT
962
+ namespace InconsistentPredicateModel {
963
+ export const readerRole = acl.createRole('reader')
964
+
965
+ @acl.allow(readerRole, {
966
+ // Company predicate checks isActive
967
+ when: { isActive: { eq: true } },
968
+ read: true,
969
+ })
970
+ export class Company {
971
+ name = def.stringColumn()
972
+ isActive = def.boolColumn()
973
+ departments = def.oneHasMany(Department, 'company')
974
+ }
975
+
976
+ @acl.allow(readerRole, {
977
+ // Department predicate checks company.isActive (consistent with Company predicate)
978
+ when: { company: { isActive: { eq: true } } },
979
+ read: true,
980
+ })
981
+ export class Department {
982
+ name = def.stringColumn()
983
+ company = def.manyHasOne(Company, 'departments')
984
+ employees = def.oneHasMany(Employee, 'department')
985
+ }
986
+
987
+ @acl.allow(readerRole, {
988
+ // SECURITY CONCERN: Employee predicate checks company.NAME, not company.isActive!
989
+ // This is DIFFERENT from what Company's predicate checks.
990
+ // If we simplify this predicate just because we came through Company,
991
+ // we would skip the name='Acme' check, exposing employees of other companies!
992
+ when: { department: { company: { name: { eq: 'Acme' } } } },
993
+ read: true,
994
+ })
995
+ export class Employee {
996
+ name = def.stringColumn()
997
+ department = def.manyHasOne(Department, 'employees')
998
+ }
999
+ }
1000
+
1001
+ describe('predicates injector - SECURITY: inconsistent predicates must NOT be simplified', () => {
1002
+ const schema = createSchema(InconsistentPredicateModel)
1003
+ const permissions = new PermissionFactory().create(schema, ['reader'])
1004
+
1005
+ const injector = new PredicatesInjector(
1006
+ schema.model,
1007
+ new PredicateFactory(permissions, schema.model, new VariableInjector(schema.model, {})),
1008
+ )
1009
+
1010
+ it('should NOT simplify Employee predicate when it checks DIFFERENT field than Company predicate', () => {
1011
+ // Query path: Company -> departments -> Department -> employees -> Employee
1012
+ // Company predicate: { isActive: true } - verified when querying Company
1013
+ // Employee predicate: { department: { company: { name: 'Acme' } } } - checks DIFFERENT field!
1014
+ //
1015
+ // SECURITY: The name='Acme' condition MUST be preserved (not simplified).
1016
+ // But Department and Company predicates CAN be simplified because we came through them.
1017
+
1018
+ const companyDepartmentsRelation = acceptFieldVisitor(schema.model, schema.model.entities.Company, 'departments', {
1019
+ visitColumn: () => {
1020
+ throw new Error()
1021
+ },
1022
+ visitRelation: ctx => ctx,
1023
+ })
1024
+ const departmentEmployeesRelation = acceptFieldVisitor(schema.model, schema.model.entities.Department, 'employees', {
1025
+ visitColumn: () => {
1026
+ throw new Error()
1027
+ },
1028
+ visitRelation: ctx => ctx,
1029
+ })
1030
+
1031
+ const ancestorPath = [companyDepartmentsRelation, departmentEmployeesRelation]
1032
+
1033
+ const injected = injector.inject(schema.model.entities.Employee, {}, departmentEmployeesRelation, ancestorPath)
1034
+
1035
+ // The name='Acme' condition is preserved (not simplified)
1036
+ // Department's predicate is simplified to { id: always } (we came from Department)
1037
+ // Company's predicate is simplified to { id: always } (we came through Company)
1038
+ assert.deepStrictEqual(injected, {
1039
+ department: {
1040
+ and: [
1041
+ {
1042
+ company: {
1043
+ and: [
1044
+ { name: { eq: 'Acme' } },
1045
+ { id: { always: true } }, // Company predicate simplified
1046
+ ],
1047
+ },
1048
+ },
1049
+ { id: { always: true } }, // Department predicate simplified
1050
+ ],
1051
+ },
1052
+ })
1053
+ })
1054
+
1055
+ it('direct Employee query: ALL nested predicates MUST be applied (no ancestor path)', () => {
1056
+ // Query Employee DIRECTLY (not through Company -> Department path)
1057
+ // In this case, neither Company nor Department was verified at any parent level.
1058
+ // So BOTH Department's and Company's predicates MUST be applied.
1059
+
1060
+ const injected = injector.inject(schema.model.entities.Employee, {})
1061
+
1062
+ // Employee's condition (name='Acme') is preserved
1063
+ // Department's predicate { company: { isActive: true } } is applied
1064
+ // Company's predicate { isActive: true } is applied inside the traversal
1065
+ assert.deepStrictEqual(injected, {
1066
+ department: {
1067
+ and: [
1068
+ {
1069
+ company: {
1070
+ and: [
1071
+ { name: { eq: 'Acme' } },
1072
+ { isActive: { eq: true } }, // Company predicate
1073
+ ],
1074
+ },
1075
+ },
1076
+ { company: { isActive: { eq: true } } }, // Department predicate
1077
+ ],
1078
+ },
1079
+ })
1080
+ })
1081
+
1082
+ it('user filter on back-reference: Company predicate CAN be simplified (already verified at root)', () => {
1083
+ // Query: Company -> departments -> Department
1084
+ // User filter: { company: { name: { eq: 'Test' } } }
1085
+ //
1086
+ // The Company was already verified at root level (isActive=true).
1087
+ // The user's filter traverses back to that same Company.
1088
+ // So Company's predicate CAN be simplified inside the user filter.
1089
+ // This is NOT a security issue - the Company is the same one we already verified.
1090
+
1091
+ const relation = acceptFieldVisitor(schema.model, schema.model.entities.Company, 'departments', {
1092
+ visitColumn: () => {
1093
+ throw new Error()
1094
+ },
1095
+ visitRelation: ctx => ctx,
1096
+ })
1097
+ const ancestorPath = [relation]
1098
+
1099
+ const injected = injector.inject(
1100
+ schema.model.entities.Department,
1101
+ {
1102
+ company: { name: { eq: 'Test' } },
1103
+ },
1104
+ relation,
1105
+ ancestorPath,
1106
+ )
1107
+
1108
+ // The user's filter { company: { name: 'Test' } } is preserved
1109
+ // Company's predicate inside user filter is simplified (already verified)
1110
+ // Department's own predicate is also simplified (references same verified Company)
1111
+ assert.deepStrictEqual(injected, {
1112
+ and: [
1113
+ {
1114
+ company: {
1115
+ and: [
1116
+ { name: { eq: 'Test' } },
1117
+ { id: { always: true } }, // Company predicate simplified - already verified
1118
+ ],
1119
+ },
1120
+ },
1121
+ {
1122
+ company: { id: { always: true } }, // Department predicate simplified (duplicates optimized away)
1123
+ },
1124
+ ],
1125
+ })
1126
+ })
1127
+ })
1128
+
1129
+ // Many-to-many relation model
1130
+ namespace ManyToManyModel {
1131
+ export const readerRole = acl.createRole('reader')
1132
+
1133
+ @acl.allow(readerRole, {
1134
+ when: { isPublished: { eq: true } },
1135
+ read: true,
1136
+ })
1137
+ export class Post {
1138
+ title = def.stringColumn()
1139
+ isPublished = def.boolColumn()
1140
+ tags = def.manyHasMany(Tag, 'posts')
1141
+ }
1142
+
1143
+ @acl.allow(readerRole, {
1144
+ when: { isActive: { eq: true } },
1145
+ read: true,
1146
+ })
1147
+ export class Tag {
1148
+ name = def.stringColumn()
1149
+ isActive = def.boolColumn()
1150
+ posts = def.manyHasManyInverse(Post, 'tags')
1151
+ }
1152
+ }
1153
+
1154
+ describe('predicates injector - many-to-many relations', () => {
1155
+ const schema = createSchema(ManyToManyModel)
1156
+ const permissions = new PermissionFactory().create(schema, ['reader'])
1157
+
1158
+ const injector = new PredicatesInjector(
1159
+ schema.model,
1160
+ new PredicateFactory(permissions, schema.model, new VariableInjector(schema.model, {})),
1161
+ )
1162
+
1163
+ const getOwningContext = () => {
1164
+ const relation = acceptFieldVisitor(schema.model, schema.model.entities.Post, 'tags', {
1165
+ visitColumn: () => {
1166
+ throw new Error()
1167
+ },
1168
+ visitRelation: ctx => ctx,
1169
+ })
1170
+ return { relation, ancestorPath: [relation] }
1171
+ }
1172
+
1173
+ const getInverseContext = () => {
1174
+ const relation = acceptFieldVisitor(schema.model, schema.model.entities.Tag, 'posts', {
1175
+ visitColumn: () => {
1176
+ throw new Error()
1177
+ },
1178
+ visitRelation: ctx => ctx,
1179
+ })
1180
+ return { relation, ancestorPath: [relation] }
1181
+ }
1182
+
1183
+ it('should apply Tag predicate when traversing Post -> tags (owning side)', () => {
1184
+ const { relation, ancestorPath } = getOwningContext()
1185
+ const injected = injector.inject(schema.model.entities.Tag, {}, relation, ancestorPath)
1186
+
1187
+ assert.deepStrictEqual(injected, {
1188
+ isActive: { eq: true },
1189
+ })
1190
+ })
1191
+
1192
+ it('should apply Post predicate when traversing Tag -> posts (inverse side)', () => {
1193
+ const { relation, ancestorPath } = getInverseContext()
1194
+ const injected = injector.inject(schema.model.entities.Post, {}, relation, ancestorPath)
1195
+
1196
+ assert.deepStrictEqual(injected, {
1197
+ isPublished: { eq: true },
1198
+ })
1199
+ })
1200
+
1201
+ it('should simplify Post predicate when filtering back via posts (m:n inverse is a back-reference)', () => {
1202
+ const { relation, ancestorPath } = getOwningContext()
1203
+
1204
+ const injected = injector.inject(
1205
+ schema.model.entities.Tag,
1206
+ {
1207
+ posts: { title: { eq: 'Hello' } },
1208
+ },
1209
+ relation,
1210
+ ancestorPath,
1211
+ )
1212
+
1213
+ // Post.tags has targetRelation=posts, so Tag.posts IS a back-reference
1214
+ // Post's predicate is simplified, but user filter preserved
1215
+ assert.deepStrictEqual(injected, {
1216
+ and: [
1217
+ {
1218
+ posts: {
1219
+ and: [
1220
+ { title: { eq: 'Hello' } },
1221
+ { id: { always: true } },
1222
+ ],
1223
+ },
1224
+ },
1225
+ { isActive: { eq: true } },
1226
+ ],
1227
+ })
1228
+ })
1229
+
1230
+ it('should simplify Tag predicate when filtering back via tags (m:n owning is a back-reference)', () => {
1231
+ const { relation, ancestorPath } = getInverseContext()
1232
+
1233
+ const injected = injector.inject(
1234
+ schema.model.entities.Post,
1235
+ {
1236
+ tags: { name: { eq: 'featured' } },
1237
+ },
1238
+ relation,
1239
+ ancestorPath,
1240
+ )
1241
+
1242
+ // Tag.posts has targetRelation=tags, so Post.tags IS a back-reference
1243
+ // Tag's predicate is simplified, but user filter preserved
1244
+ assert.deepStrictEqual(injected, {
1245
+ and: [
1246
+ {
1247
+ tags: {
1248
+ and: [
1249
+ { name: { eq: 'featured' } },
1250
+ { id: { always: true } },
1251
+ ],
1252
+ },
1253
+ },
1254
+ { isPublished: { eq: true } },
1255
+ ],
1256
+ })
1257
+ })
1258
+ })
1259
+
208
1260
  describe('predicate injector input handling', () => {
209
1261
  const schema = createSchema(DeepFilterModel)
210
1262
  const permissions = new AllowAllPermissionFactory().create(schema.model)