@contember/engine-content-api 1.1.0-alpha.5 → 1.1.0-alpha.8

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 (590) hide show
  1. package/dist/src/acl/Authorizator.d.ts +2 -1
  2. package/dist/src/acl/Authorizator.d.ts.map +1 -1
  3. package/dist/src/acl/Authorizator.js +4 -3
  4. package/dist/src/acl/Authorizator.js.map +1 -1
  5. package/dist/src/acl/PermissionFactory.d.ts +1 -1
  6. package/dist/src/acl/PermissionFactory.d.ts.map +1 -1
  7. package/dist/src/acl/PermissionFactory.js +2 -2
  8. package/dist/src/acl/PermissionFactory.js.map +1 -1
  9. package/dist/src/acl/PredicatesInjector.d.ts.map +1 -1
  10. package/dist/src/acl/PredicatesInjector.js.map +1 -1
  11. package/dist/src/acl/index.js +5 -1
  12. package/dist/src/acl/index.js.map +1 -1
  13. package/dist/src/extensions/hasManyToHasOneReducer/index.js +5 -1
  14. package/dist/src/extensions/hasManyToHasOneReducer/index.js.map +1 -1
  15. package/dist/src/extensions/index.js +5 -1
  16. package/dist/src/extensions/index.js.map +1 -1
  17. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyFieldProviderVisitor.d.ts.map +1 -1
  18. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyFieldProviderVisitor.js +2 -0
  19. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyFieldProviderVisitor.js.map +1 -1
  20. package/dist/src/index.js +5 -1
  21. package/dist/src/index.js.map +1 -1
  22. package/dist/src/input-validation/ValidationEvaluation.js.map +1 -1
  23. package/dist/src/input-validation/dependencies/index.js +5 -1
  24. package/dist/src/input-validation/dependencies/index.js.map +1 -1
  25. package/dist/src/input-validation/index.js +5 -1
  26. package/dist/src/input-validation/index.js.map +1 -1
  27. package/dist/src/input-validation/preValidation/index.js +5 -1
  28. package/dist/src/input-validation/preValidation/index.js.map +1 -1
  29. package/dist/src/inputProcessing/UniqueWhereExpander.d.ts.map +1 -1
  30. package/dist/src/inputProcessing/UniqueWhereExpander.js.map +1 -1
  31. package/dist/src/inputProcessing/index.js +5 -1
  32. package/dist/src/inputProcessing/index.js.map +1 -1
  33. package/dist/src/introspection/IntrospectionSchemaFactory.d.ts +1 -1
  34. package/dist/src/introspection/IntrospectionSchemaFactory.d.ts.map +1 -1
  35. package/dist/src/introspection/IntrospectionSchemaFactory.js +5 -1
  36. package/dist/src/introspection/IntrospectionSchemaFactory.js.map +1 -1
  37. package/dist/src/introspection/index.js +5 -1
  38. package/dist/src/introspection/index.js.map +1 -1
  39. package/dist/src/mapper/ErrorUtils.js +5 -1
  40. package/dist/src/mapper/ErrorUtils.js.map +1 -1
  41. package/dist/src/mapper/Mapper.d.ts.map +1 -1
  42. package/dist/src/mapper/Mapper.js +10 -12
  43. package/dist/src/mapper/Mapper.js.map +1 -1
  44. package/dist/src/mapper/delete/index.js +5 -1
  45. package/dist/src/mapper/delete/index.js.map +1 -1
  46. package/dist/src/mapper/index.js +5 -1
  47. package/dist/src/mapper/index.js.map +1 -1
  48. package/dist/src/mapper/insert/SqlCreateInputProcessor.js.map +1 -1
  49. package/dist/src/mapper/insert/index.js +5 -1
  50. package/dist/src/mapper/insert/index.js.map +1 -1
  51. package/dist/src/mapper/select/JoinBuilder.js +2 -2
  52. package/dist/src/mapper/select/JoinBuilder.js.map +1 -1
  53. package/dist/src/mapper/select/JoinVisitor.js +4 -4
  54. package/dist/src/mapper/select/JoinVisitor.js.map +1 -1
  55. package/dist/src/mapper/select/OrderByBuilder.js +2 -2
  56. package/dist/src/mapper/select/OrderByBuilder.js.map +1 -1
  57. package/dist/src/mapper/select/OrderByHelper.d.ts +1 -1
  58. package/dist/src/mapper/select/OrderByHelper.d.ts.map +1 -1
  59. package/dist/src/mapper/select/OrderByHelper.js +3 -3
  60. package/dist/src/mapper/select/OrderByHelper.js.map +1 -1
  61. package/dist/src/mapper/select/Path.d.ts +2 -1
  62. package/dist/src/mapper/select/Path.d.ts.map +1 -1
  63. package/dist/src/mapper/select/Path.js +3 -2
  64. package/dist/src/mapper/select/Path.js.map +1 -1
  65. package/dist/src/mapper/select/RelationFetcher.js +2 -2
  66. package/dist/src/mapper/select/RelationFetcher.js.map +1 -1
  67. package/dist/src/mapper/select/SelectBuilder.d.ts +1 -1
  68. package/dist/src/mapper/select/SelectBuilder.d.ts.map +1 -1
  69. package/dist/src/mapper/select/SelectBuilder.js +7 -10
  70. package/dist/src/mapper/select/SelectBuilder.js.map +1 -1
  71. package/dist/src/mapper/select/SelectHydrator.d.ts +2 -1
  72. package/dist/src/mapper/select/SelectHydrator.d.ts.map +1 -1
  73. package/dist/src/mapper/select/SelectHydrator.js +34 -11
  74. package/dist/src/mapper/select/SelectHydrator.js.map +1 -1
  75. package/dist/src/mapper/select/WhereBuilder.d.ts.map +1 -1
  76. package/dist/src/mapper/select/WhereBuilder.js +4 -4
  77. package/dist/src/mapper/select/WhereBuilder.js.map +1 -1
  78. package/dist/src/mapper/select/handlers/FieldsVisitor.js +2 -2
  79. package/dist/src/mapper/select/handlers/FieldsVisitor.js.map +1 -1
  80. package/dist/src/mapper/select/handlers/MetaHandler.js +1 -1
  81. package/dist/src/mapper/select/handlers/MetaHandler.js.map +1 -1
  82. package/dist/src/mapper/select/handlers/index.js +5 -1
  83. package/dist/src/mapper/select/handlers/index.js.map +1 -1
  84. package/dist/src/mapper/select/index.js +5 -1
  85. package/dist/src/mapper/select/index.js.map +1 -1
  86. package/dist/src/mapper/update/index.js +5 -1
  87. package/dist/src/mapper/update/index.js.map +1 -1
  88. package/dist/src/resolvers/MutationResolver.d.ts.map +1 -1
  89. package/dist/src/resolvers/MutationResolver.js +4 -3
  90. package/dist/src/resolvers/MutationResolver.js.map +1 -1
  91. package/dist/src/resolvers/index.js +5 -1
  92. package/dist/src/resolvers/index.js.map +1 -1
  93. package/dist/src/schema/CustomTypesProvider.d.ts.map +1 -1
  94. package/dist/src/schema/CustomTypesProvider.js +18 -3
  95. package/dist/src/schema/CustomTypesProvider.js.map +1 -1
  96. package/dist/src/schema/OrderByTypeProvider.d.ts.map +1 -1
  97. package/dist/src/schema/OrderByTypeProvider.js +2 -0
  98. package/dist/src/schema/OrderByTypeProvider.js.map +1 -1
  99. package/dist/src/schema/WhereTypeProvider.d.ts +1 -1
  100. package/dist/src/schema/WhereTypeProvider.d.ts.map +1 -1
  101. package/dist/src/schema/WhereTypeProvider.js.map +1 -1
  102. package/dist/src/schema/entities/index.js +5 -1
  103. package/dist/src/schema/entities/index.js.map +1 -1
  104. package/dist/src/schema/index.js +5 -1
  105. package/dist/src/schema/index.js.map +1 -1
  106. package/dist/src/schema/mutations/index.js +5 -1
  107. package/dist/src/schema/mutations/index.js.map +1 -1
  108. package/dist/src/tsconfig.tsbuildinfo +1 -1
  109. package/dist/src/utils/index.js +5 -1
  110. package/dist/src/utils/index.js.map +1 -1
  111. package/dist/src/utils/uniqueWhereFields.d.ts +3 -1
  112. package/dist/src/utils/uniqueWhereFields.d.ts.map +1 -1
  113. package/dist/src/utils/uniqueWhereFields.js.map +1 -1
  114. package/dist/tests/cases/bugs/bug-filter-or.test.js +3 -4
  115. package/dist/tests/cases/bugs/bug-filter-or.test.js.map +1 -1
  116. package/dist/tests/cases/bugs/bug-update-by-nested-unique.test.js +2 -3
  117. package/dist/tests/cases/bugs/bug-update-by-nested-unique.test.js.map +1 -1
  118. package/dist/tests/cases/bugs/bug102.test.js +2 -3
  119. package/dist/tests/cases/bugs/bug102.test.js.map +1 -1
  120. package/dist/tests/cases/integration/graphQlDb/update/bug-freeze-connect-missing-one.test.js +2 -3
  121. package/dist/tests/cases/integration/graphQlDb/update/bug-freeze-connect-missing-one.test.js.map +1 -1
  122. package/dist/tests/cases/integration/graphQlDb/update/deferedConstraints.test.js +4 -5
  123. package/dist/tests/cases/integration/graphQlDb/update/deferedConstraints.test.js.map +1 -1
  124. package/dist/tests/cases/integration/graphQlDb/update/failedDelete.test.js +2 -3
  125. package/dist/tests/cases/integration/graphQlDb/update/failedDelete.test.js.map +1 -1
  126. package/dist/tests/cases/integration/graphQlDb/update/invalidInput.test.js +2 -46
  127. package/dist/tests/cases/integration/graphQlDb/update/invalidInput.test.js.map +1 -1
  128. package/dist/tests/cases/integration/graphQlDb/update/nullChecksNotNull.test.js +3 -4
  129. package/dist/tests/cases/integration/graphQlDb/update/nullChecksNotNull.test.js.map +1 -1
  130. package/dist/tests/cases/integration/graphQlDb/update/nullChecksNullable.test.js +3 -4
  131. package/dist/tests/cases/integration/graphQlDb/update/nullChecksNullable.test.js.map +1 -1
  132. package/dist/tests/cases/integration/graphQlDb/update/uniqueConstraint.test.js +2 -3
  133. package/dist/tests/cases/integration/graphQlDb/update/uniqueConstraint.test.js.map +1 -1
  134. package/dist/tests/cases/integration/graphQlRequests/delete/aclDelete.test.js +2 -3
  135. package/dist/tests/cases/integration/graphQlRequests/delete/aclDelete.test.js.map +1 -1
  136. package/dist/tests/cases/integration/graphQlRequests/delete/additionalDeleteFilter.test.js +2 -3
  137. package/dist/tests/cases/integration/graphQlRequests/delete/additionalDeleteFilter.test.js.map +1 -1
  138. package/dist/tests/cases/integration/graphQlRequests/delete/cascadeDelete.test.js +2 -3
  139. package/dist/tests/cases/integration/graphQlRequests/delete/cascadeDelete.test.js.map +1 -1
  140. package/dist/tests/cases/integration/graphQlRequests/delete/deleteById.test.js +2 -3
  141. package/dist/tests/cases/integration/graphQlRequests/delete/deleteById.test.js.map +1 -1
  142. package/dist/tests/cases/integration/graphQlRequests/delete/orphanRemoval.test.js +2 -3
  143. package/dist/tests/cases/integration/graphQlRequests/delete/orphanRemoval.test.js.map +1 -1
  144. package/dist/tests/cases/integration/graphQlRequests/delete/setNullOnDelete.test.js +2 -3
  145. package/dist/tests/cases/integration/graphQlRequests/delete/setNullOnDelete.test.js.map +1 -1
  146. package/dist/tests/cases/integration/graphQlRequests/insert/acl/setField.test.js +3 -4
  147. package/dist/tests/cases/integration/graphQlRequests/insert/acl/setField.test.js.map +1 -1
  148. package/dist/tests/cases/integration/graphQlRequests/insert/aclInsert.test.js +2 -3
  149. package/dist/tests/cases/integration/graphQlRequests/insert/aclInsert.test.js.map +1 -1
  150. package/dist/tests/cases/integration/graphQlRequests/insert/basicInsert.test.js +2 -3
  151. package/dist/tests/cases/integration/graphQlRequests/insert/basicInsert.test.js.map +1 -1
  152. package/dist/tests/cases/integration/graphQlRequests/insert/insertCustomId.test.js +2 -3
  153. package/dist/tests/cases/integration/graphQlRequests/insert/insertCustomId.test.js.map +1 -1
  154. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyInverse/insertRelationCreate.test.js +2 -3
  155. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyInverse/insertRelationCreate.test.js.map +1 -1
  156. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyOwning/insertRelationCreate.test.js +2 -3
  157. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyOwning/insertRelationCreate.test.js.map +1 -1
  158. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasOne/insertRelationCreate.test.js +2 -3
  159. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasOne/insertRelationCreate.test.js.map +1 -1
  160. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/insertRelationConnect.test.js +2 -3
  161. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/insertRelationConnect.test.js.map +1 -1
  162. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/insertRelationCreate.test.js +2 -3
  163. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/insertRelationCreate.test.js.map +1 -1
  164. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneInverse/insertRelationCreate.test.js +2 -3
  165. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneInverse/insertRelationCreate.test.js.map +1 -1
  166. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/insertRelationCreate.test.js +2 -3
  167. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/insertRelationCreate.test.js.map +1 -1
  168. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/insertRelationEmpty.test.js +2 -3
  169. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/insertRelationEmpty.test.js.map +1 -1
  170. package/dist/tests/cases/integration/graphQlRequests/insert/validation/toBeFixed.test.js +3 -4
  171. package/dist/tests/cases/integration/graphQlRequests/insert/validation/toBeFixed.test.js.map +1 -1
  172. package/dist/tests/cases/integration/graphQlRequests/query/acl/differentRowAndFieldPredicate.test.js +2 -3
  173. package/dist/tests/cases/integration/graphQlRequests/query/acl/differentRowAndFieldPredicate.test.js.map +1 -1
  174. package/dist/tests/cases/integration/graphQlRequests/query/acl/fieldRestrictedByLocale.test.js +6 -7
  175. package/dist/tests/cases/integration/graphQlRequests/query/acl/fieldRestrictedByLocale.test.js.map +1 -1
  176. package/dist/tests/cases/integration/graphQlRequests/query/acl/nestedPredicate.test.js +2 -3
  177. package/dist/tests/cases/integration/graphQlRequests/query/acl/nestedPredicate.test.js.map +1 -1
  178. package/dist/tests/cases/integration/graphQlRequests/query/acl/orPredicate.test.js +2 -3
  179. package/dist/tests/cases/integration/graphQlRequests/query/acl/orPredicate.test.js.map +1 -1
  180. package/dist/tests/cases/integration/graphQlRequests/query/acl/sameRowAndFieldPredicate.test.js +2 -3
  181. package/dist/tests/cases/integration/graphQlRequests/query/acl/sameRowAndFieldPredicate.test.js.map +1 -1
  182. package/dist/tests/cases/integration/graphQlRequests/query/filter/backReferencedFilter.test.js +2 -3
  183. package/dist/tests/cases/integration/graphQlRequests/query/filter/backReferencedFilter.test.js.map +1 -1
  184. package/dist/tests/cases/integration/graphQlRequests/query/filter/complexCondition.test.js +2 -3
  185. package/dist/tests/cases/integration/graphQlRequests/query/filter/complexCondition.test.js.map +1 -1
  186. package/dist/tests/cases/integration/graphQlRequests/query/filter/composedFilter.test.js +2 -3
  187. package/dist/tests/cases/integration/graphQlRequests/query/filter/composedFilter.test.js.map +1 -1
  188. package/dist/tests/cases/integration/graphQlRequests/query/filter/containsQuery.test.js +2 -3
  189. package/dist/tests/cases/integration/graphQlRequests/query/filter/containsQuery.test.js.map +1 -1
  190. package/dist/tests/cases/integration/graphQlRequests/query/filter/manyHasManyOwnerRelation.test.js +3 -4
  191. package/dist/tests/cases/integration/graphQlRequests/query/filter/manyHasManyOwnerRelation.test.js.map +1 -1
  192. package/dist/tests/cases/integration/graphQlRequests/query/filter/manyHasOneRelation.test.js +2 -3
  193. package/dist/tests/cases/integration/graphQlRequests/query/filter/manyHasOneRelation.test.js.map +1 -1
  194. package/dist/tests/cases/integration/graphQlRequests/query/filter/oneHasManyRelation.test.js +2 -3
  195. package/dist/tests/cases/integration/graphQlRequests/query/filter/oneHasManyRelation.test.js.map +1 -1
  196. package/dist/tests/cases/integration/graphQlRequests/query/formatting/dateFormat.test.js +2 -3
  197. package/dist/tests/cases/integration/graphQlRequests/query/formatting/dateFormat.test.js.map +1 -1
  198. package/dist/tests/cases/integration/graphQlRequests/query/graphqlFeatures/alias.test.js +3 -4
  199. package/dist/tests/cases/integration/graphQlRequests/query/graphqlFeatures/alias.test.js.map +1 -1
  200. package/dist/tests/cases/integration/graphQlRequests/query/graphqlFeatures/fragments.test.js +3 -4
  201. package/dist/tests/cases/integration/graphQlRequests/query/graphqlFeatures/fragments.test.js.map +1 -1
  202. package/dist/tests/cases/integration/graphQlRequests/query/misc/aliasedType.test.js +2 -3
  203. package/dist/tests/cases/integration/graphQlRequests/query/misc/aliasedType.test.js.map +1 -1
  204. package/dist/tests/cases/integration/graphQlRequests/query/misc/longAliasHash.test.js +2 -3
  205. package/dist/tests/cases/integration/graphQlRequests/query/misc/longAliasHash.test.js.map +1 -1
  206. package/dist/tests/cases/integration/graphQlRequests/query/misc/reducedHasMany.test.js +2 -3
  207. package/dist/tests/cases/integration/graphQlRequests/query/misc/reducedHasMany.test.js.map +1 -1
  208. package/dist/tests/cases/integration/graphQlRequests/query/misc/transaction.test.js +2 -3
  209. package/dist/tests/cases/integration/graphQlRequests/query/misc/transaction.test.js.map +1 -1
  210. package/dist/tests/cases/integration/graphQlRequests/query/pagination/hasManyLimit.test.js +3 -4
  211. package/dist/tests/cases/integration/graphQlRequests/query/pagination/hasManyLimit.test.js.map +1 -1
  212. package/dist/tests/cases/integration/graphQlRequests/query/pagination/paginate.test.js +2 -3
  213. package/dist/tests/cases/integration/graphQlRequests/query/pagination/paginate.test.js.map +1 -1
  214. package/dist/tests/cases/integration/graphQlRequests/query/pagination/paginateAliased.test.js +2 -3
  215. package/dist/tests/cases/integration/graphQlRequests/query/pagination/paginateAliased.test.js.map +1 -1
  216. package/dist/tests/cases/integration/graphQlRequests/query/pagination/simpleLimit.test.js +2 -3
  217. package/dist/tests/cases/integration/graphQlRequests/query/pagination/simpleLimit.test.js.map +1 -1
  218. package/dist/tests/cases/integration/graphQlRequests/query/relations/advanced.test.js +3 -4
  219. package/dist/tests/cases/integration/graphQlRequests/query/relations/advanced.test.js.map +1 -1
  220. package/dist/tests/cases/integration/graphQlRequests/query/relations/manyHasManyInverse.test.js +3 -4
  221. package/dist/tests/cases/integration/graphQlRequests/query/relations/manyHasManyInverse.test.js.map +1 -1
  222. package/dist/tests/cases/integration/graphQlRequests/query/relations/manyHasManyOwning.test.js +2 -3
  223. package/dist/tests/cases/integration/graphQlRequests/query/relations/manyHasManyOwning.test.js.map +1 -1
  224. package/dist/tests/cases/integration/graphQlRequests/query/relations/manyHasOne.test.js +4 -5
  225. package/dist/tests/cases/integration/graphQlRequests/query/relations/manyHasOne.test.js.map +1 -1
  226. package/dist/tests/cases/integration/graphQlRequests/query/relations/oneHasMany.test.js +93 -7
  227. package/dist/tests/cases/integration/graphQlRequests/query/relations/oneHasMany.test.js.map +1 -1
  228. package/dist/tests/cases/integration/graphQlRequests/query/relations/oneHasOneInverse.test.js +2 -3
  229. package/dist/tests/cases/integration/graphQlRequests/query/relations/oneHasOneInverse.test.js.map +1 -1
  230. package/dist/tests/cases/integration/graphQlRequests/query/relations/oneHasOneOwner.test.js +2 -3
  231. package/dist/tests/cases/integration/graphQlRequests/query/relations/oneHasOneOwner.test.js.map +1 -1
  232. package/dist/tests/cases/integration/graphQlRequests/query/sorting/byRelations.test.js +2 -3
  233. package/dist/tests/cases/integration/graphQlRequests/query/sorting/byRelations.test.js.map +1 -1
  234. package/dist/tests/cases/integration/graphQlRequests/query/sorting/defaultOrdering.test.js +3 -4
  235. package/dist/tests/cases/integration/graphQlRequests/query/sorting/defaultOrdering.test.js.map +1 -1
  236. package/dist/tests/cases/integration/graphQlRequests/query/sorting/randomSort.test.js +4 -5
  237. package/dist/tests/cases/integration/graphQlRequests/query/sorting/randomSort.test.js.map +1 -1
  238. package/dist/tests/cases/integration/graphQlRequests/query/sorting/sortNulls.test.d.ts +2 -0
  239. package/dist/tests/cases/integration/graphQlRequests/query/sorting/sortNulls.test.d.ts.map +1 -0
  240. package/dist/tests/cases/integration/graphQlRequests/query/sorting/sortNulls.test.js +35 -0
  241. package/dist/tests/cases/integration/graphQlRequests/query/sorting/sortNulls.test.js.map +1 -0
  242. package/dist/tests/cases/integration/graphQlRequests/query/sorting/sortedHasMany.test.js +2 -3
  243. package/dist/tests/cases/integration/graphQlRequests/query/sorting/sortedHasMany.test.js.map +1 -1
  244. package/dist/tests/cases/integration/graphQlRequests/query/unique/basicQueryById.test.js +2 -3
  245. package/dist/tests/cases/integration/graphQlRequests/query/unique/basicQueryById.test.js.map +1 -1
  246. package/dist/tests/cases/integration/graphQlRequests/query/unique/composedUnique.test.js +2 -3
  247. package/dist/tests/cases/integration/graphQlRequests/query/unique/composedUnique.test.js.map +1 -1
  248. package/dist/tests/cases/integration/graphQlRequests/query/unique/oneHasManyUnique.test.js +2 -3
  249. package/dist/tests/cases/integration/graphQlRequests/query/unique/oneHasManyUnique.test.js.map +1 -1
  250. package/dist/tests/cases/integration/graphQlRequests/query/unique/uniqueWithFilter.test.js +2 -3
  251. package/dist/tests/cases/integration/graphQlRequests/query/unique/uniqueWithFilter.test.js.map +1 -1
  252. package/dist/tests/cases/integration/graphQlRequests/query/view/view.test.js +2 -3
  253. package/dist/tests/cases/integration/graphQlRequests/query/view/view.test.js.map +1 -1
  254. package/dist/tests/cases/integration/graphQlRequests/update/acl/aclUpdate.test.js +4 -5
  255. package/dist/tests/cases/integration/graphQlRequests/update/acl/aclUpdate.test.js.map +1 -1
  256. package/dist/tests/cases/integration/graphQlRequests/update/additionalFilter.test.js +2 -3
  257. package/dist/tests/cases/integration/graphQlRequests/update/additionalFilter.test.js.map +1 -1
  258. package/dist/tests/cases/integration/graphQlRequests/update/basic/columnUpdate.test.js +2 -3
  259. package/dist/tests/cases/integration/graphQlRequests/update/basic/columnUpdate.test.js.map +1 -1
  260. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/connect.test.js +2 -3
  261. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/connect.test.js.map +1 -1
  262. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/create.test.js +2 -3
  263. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/create.test.js.map +1 -1
  264. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/delete.test.js +2 -3
  265. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/delete.test.js.map +1 -1
  266. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/disconnect.test.js +2 -3
  267. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/disconnect.test.js.map +1 -1
  268. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/update.test.js +2 -3
  269. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/update.test.js.map +1 -1
  270. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/upsert.test.js +3 -4
  271. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/upsert.test.js.map +1 -1
  272. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/connect.test.js +2 -3
  273. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/connect.test.js.map +1 -1
  274. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/create.test.js +2 -3
  275. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/create.test.js.map +1 -1
  276. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/delete.test.js +2 -3
  277. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/delete.test.js.map +1 -1
  278. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/disconnect.test.js +2 -3
  279. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/disconnect.test.js.map +1 -1
  280. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/update.test.js +2 -3
  281. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/update.test.js.map +1 -1
  282. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/upsert.test.js +3 -4
  283. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/upsert.test.js.map +1 -1
  284. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/connect.test.js +2 -3
  285. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/connect.test.js.map +1 -1
  286. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/create.test.js +2 -3
  287. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/create.test.js.map +1 -1
  288. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/delete.test.js +3 -4
  289. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/delete.test.js.map +1 -1
  290. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/disconnect.test.js +2 -3
  291. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/disconnect.test.js.map +1 -1
  292. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/update.test.js +2 -3
  293. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/update.test.js.map +1 -1
  294. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/upsert.test.js +3 -4
  295. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/upsert.test.js.map +1 -1
  296. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/combination.test.js +2 -3
  297. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/combination.test.js.map +1 -1
  298. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/connect.test.js +2 -3
  299. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/connect.test.js.map +1 -1
  300. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/create.test.js +2 -3
  301. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/create.test.js.map +1 -1
  302. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/delete.test.js +2 -3
  303. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/delete.test.js.map +1 -1
  304. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/disconnect.test.js +2 -3
  305. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/disconnect.test.js.map +1 -1
  306. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/update.test.js +3 -4
  307. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/update.test.js.map +1 -1
  308. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/upsert.test.js +3 -4
  309. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/upsert.test.js.map +1 -1
  310. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/connect.test.js +4 -5
  311. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/connect.test.js.map +1 -1
  312. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/create.test.js +3 -4
  313. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/create.test.js.map +1 -1
  314. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/delete.test.js +2 -3
  315. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/delete.test.js.map +1 -1
  316. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/disconnect.test.js +2 -3
  317. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/disconnect.test.js.map +1 -1
  318. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/update.test.js +2 -3
  319. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/update.test.js.map +1 -1
  320. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/upsert.test.js +3 -4
  321. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/upsert.test.js.map +1 -1
  322. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/connect.test.js +4 -5
  323. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/connect.test.js.map +1 -1
  324. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/create.test.js +2 -3
  325. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/create.test.js.map +1 -1
  326. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/delete.test.js +2 -3
  327. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/delete.test.js.map +1 -1
  328. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/disconnect.test.d.ts +2 -0
  329. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/disconnect.test.d.ts.map +1 -0
  330. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/disconnect.test.js +50 -0
  331. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/disconnect.test.js.map +1 -0
  332. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/update.test.js +2 -3
  333. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/update.test.js.map +1 -1
  334. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/upsert.test.js +3 -4
  335. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/upsert.test.js.map +1 -1
  336. package/dist/tests/cases/integration/graphQlRequests/update/queryPortal.test.js +3 -4
  337. package/dist/tests/cases/integration/graphQlRequests/update/queryPortal.test.js.map +1 -1
  338. package/dist/tests/cases/integration/graphQlRequests/update/transaction.test.js +3 -4
  339. package/dist/tests/cases/integration/graphQlRequests/update/transaction.test.js.map +1 -1
  340. package/dist/tests/cases/integration/graphQlRequests/update/validation/toBeFixed.test.js +2 -3
  341. package/dist/tests/cases/integration/graphQlRequests/update/validation/toBeFixed.test.js.map +1 -1
  342. package/dist/tests/cases/integration/graphQlRequests/upsert/basicUpsert.test.js +48 -6
  343. package/dist/tests/cases/integration/graphQlRequests/upsert/basicUpsert.test.js.map +1 -1
  344. package/dist/tests/cases/integration/graphQlRequests/validation/conditions.test.js +26 -26
  345. package/dist/tests/cases/integration/graphQlRequests/validation/conditions.test.js.map +1 -1
  346. package/dist/tests/cases/integration/graphQlRequests/validation/nestedValidation.test.js +94 -94
  347. package/dist/tests/cases/integration/graphQlRequests/validation/nestedValidation.test.js.map +1 -1
  348. package/dist/tests/cases/integration/graphQlRequests/validation/optionalAssert.test.js +44 -44
  349. package/dist/tests/cases/integration/graphQlRequests/validation/optionalAssert.test.js.map +1 -1
  350. package/dist/tests/cases/integration/graphQlRequests/validation/required.test.js +210 -210
  351. package/dist/tests/cases/integration/graphQlRequests/validation/required.test.js.map +1 -1
  352. package/dist/tests/cases/integration/graphQlRequests/validation/requiredWhen.test.js +67 -67
  353. package/dist/tests/cases/integration/graphQlRequests/validation/requiredWhen.test.js.map +1 -1
  354. package/dist/tests/cases/integration/graphQlRequests/validation/rules/andRule.test.js +16 -16
  355. package/dist/tests/cases/integration/graphQlRequests/validation/rules/andRule.test.js.map +1 -1
  356. package/dist/tests/cases/integration/graphQlRequests/validation/rules/lengthRangeRule.test.js +23 -23
  357. package/dist/tests/cases/integration/graphQlRequests/validation/rules/lengthRangeRule.test.js.map +1 -1
  358. package/dist/tests/cases/integration/graphQlRequests/validation/rules/maxLengthRule.test.js +16 -16
  359. package/dist/tests/cases/integration/graphQlRequests/validation/rules/maxLengthRule.test.js.map +1 -1
  360. package/dist/tests/cases/integration/graphQlRequests/validation/rules/minLength.test.js +16 -16
  361. package/dist/tests/cases/integration/graphQlRequests/validation/rules/minLength.test.js.map +1 -1
  362. package/dist/tests/cases/integration/graphQlRequests/validation/rules/notEmptyRule.test.js +30 -30
  363. package/dist/tests/cases/integration/graphQlRequests/validation/rules/notEmptyRule.test.js.map +1 -1
  364. package/dist/tests/cases/integration/graphQlRequests/validation/rules/notRule.test.js +16 -16
  365. package/dist/tests/cases/integration/graphQlRequests/validation/rules/notRule.test.js.map +1 -1
  366. package/dist/tests/cases/integration/graphQlRequests/validation/rules/orRule.test.js +23 -23
  367. package/dist/tests/cases/integration/graphQlRequests/validation/rules/orRule.test.js.map +1 -1
  368. package/dist/tests/cases/integration/graphQlRequests/validation/rules/patternRule.test.js +16 -16
  369. package/dist/tests/cases/integration/graphQlRequests/validation/rules/patternRule.test.js.map +1 -1
  370. package/dist/tests/cases/integration/graphQlRequests/validation/rules/rangeRule.test.js +23 -23
  371. package/dist/tests/cases/integration/graphQlRequests/validation/rules/rangeRule.test.js.map +1 -1
  372. package/dist/tests/cases/integration/graphQlSchema/graphQlSchemaBuilder.test.js +229 -227
  373. package/dist/tests/cases/integration/graphQlSchema/graphQlSchemaBuilder.test.js.map +1 -1
  374. package/dist/tests/cases/integration/graphQlSchema/schema-acl-allowed.gql +2 -0
  375. package/dist/tests/cases/integration/graphQlSchema/schema-acl-predicate.gql +2 -0
  376. package/dist/tests/cases/integration/graphQlSchema/schema-acl-predicate2.gql +2 -0
  377. package/dist/tests/cases/integration/graphQlSchema/schema-acl-restricted-create.gql +2 -0
  378. package/dist/tests/cases/integration/graphQlSchema/schema-acl-restricted-delete.gql +2 -0
  379. package/dist/tests/cases/integration/graphQlSchema/schema-acl-restricted-update.gql +2 -0
  380. package/dist/tests/cases/integration/graphQlSchema/schema-acl.gql +2 -0
  381. package/dist/tests/cases/integration/graphQlSchema/schema-aliased-type.gql +2 -0
  382. package/dist/tests/cases/integration/graphQlSchema/schema-basic.gql +2 -0
  383. package/dist/tests/cases/integration/graphQlSchema/schema-bug-66.gql +2 -0
  384. package/dist/tests/cases/integration/graphQlSchema/schema-custom-primary.gql +2 -0
  385. package/dist/tests/cases/integration/graphQlSchema/schema-has-many-reduction.gql +2 -0
  386. package/dist/tests/cases/integration/graphQlSchema/schema-new-builder.gql +2 -0
  387. package/dist/tests/cases/integration/graphQlSchema/schema-view-entity.gql +2 -0
  388. package/dist/tests/cases/unit/aclVariablesFactory.test.js +50 -70
  389. package/dist/tests/cases/unit/aclVariablesFactory.test.js.map +1 -1
  390. package/dist/tests/cases/unit/inputPreValidator.test.js +318 -338
  391. package/dist/tests/cases/unit/inputPreValidator.test.js.map +1 -1
  392. package/dist/tests/cases/unit/inputValidation.test.js +122 -142
  393. package/dist/tests/cases/unit/inputValidation.test.js.map +1 -1
  394. package/dist/tests/cases/unit/orderbyHelper.test.js +33 -52
  395. package/dist/tests/cases/unit/orderbyHelper.test.js.map +1 -1
  396. package/dist/tests/cases/unit/permissionMerger.test.js +378 -399
  397. package/dist/tests/cases/unit/permissionMerger.test.js.map +1 -1
  398. package/dist/tests/cases/unit/predicatesInjector.test.js +49 -69
  399. package/dist/tests/cases/unit/predicatesInjector.test.js.map +1 -1
  400. package/dist/tests/cases/unit/uuidType.test.d.ts +2 -0
  401. package/dist/tests/cases/unit/uuidType.test.d.ts.map +1 -0
  402. package/dist/tests/cases/unit/uuidType.test.js +23 -0
  403. package/dist/tests/cases/unit/uuidType.test.js.map +1 -0
  404. package/dist/tests/cases/unit/variableInjector.test.js +57 -77
  405. package/dist/tests/cases/unit/variableInjector.test.js.map +1 -1
  406. package/dist/tests/src/test.js +1 -1
  407. package/dist/tests/src/test.js.map +1 -1
  408. package/dist/tests/src/testGraphql.d.ts.map +1 -1
  409. package/dist/tests/src/testGraphql.js +2 -25
  410. package/dist/tests/src/testGraphql.js.map +1 -1
  411. package/dist/tests/tsconfig.tsbuildinfo +1 -1
  412. package/package.json +13 -14
  413. package/src/acl/Authorizator.ts +5 -2
  414. package/src/acl/PermissionFactory.ts +9 -9
  415. package/src/acl/PredicatesInjector.ts +2 -2
  416. package/src/extensions/paginatedHasMany/PaginatedHasManyFieldProviderVisitor.ts +2 -0
  417. package/src/input-validation/ValidationEvaluation.ts +1 -1
  418. package/src/inputProcessing/UniqueWhereExpander.ts +2 -2
  419. package/src/introspection/IntrospectionSchemaFactory.ts +1 -1
  420. package/src/mapper/Mapper.ts +10 -13
  421. package/src/mapper/insert/SqlCreateInputProcessor.ts +1 -1
  422. package/src/mapper/select/JoinBuilder.ts +2 -2
  423. package/src/mapper/select/JoinVisitor.ts +4 -4
  424. package/src/mapper/select/OrderByBuilder.ts +2 -2
  425. package/src/mapper/select/OrderByHelper.ts +5 -5
  426. package/src/mapper/select/Path.ts +4 -2
  427. package/src/mapper/select/RelationFetcher.ts +2 -2
  428. package/src/mapper/select/SelectBuilder.ts +7 -11
  429. package/src/mapper/select/SelectHydrator.ts +52 -19
  430. package/src/mapper/select/WhereBuilder.ts +9 -5
  431. package/src/mapper/select/handlers/FieldsVisitor.ts +2 -2
  432. package/src/mapper/select/handlers/MetaHandler.ts +1 -1
  433. package/src/resolvers/MutationResolver.ts +4 -3
  434. package/src/schema/CustomTypesProvider.ts +21 -4
  435. package/src/schema/OrderByTypeProvider.ts +2 -0
  436. package/src/schema/WhereTypeProvider.ts +2 -2
  437. package/src/utils/uniqueWhereFields.ts +2 -1
  438. package/tests/cases/bugs/bug-filter-or.test.ts +2 -2
  439. package/tests/cases/bugs/bug-update-by-nested-unique.test.ts +2 -2
  440. package/tests/cases/bugs/bug102.test.ts +2 -2
  441. package/tests/cases/integration/graphQlDb/update/bug-freeze-connect-missing-one.test.ts +2 -2
  442. package/tests/cases/integration/graphQlDb/update/deferedConstraints.test.ts +2 -2
  443. package/tests/cases/integration/graphQlDb/update/failedDelete.test.ts +2 -2
  444. package/tests/cases/integration/graphQlDb/update/invalidInput.test.ts +1 -28
  445. package/tests/cases/integration/graphQlDb/update/nullChecksNotNull.test.ts +2 -2
  446. package/tests/cases/integration/graphQlDb/update/nullChecksNullable.test.ts +2 -2
  447. package/tests/cases/integration/graphQlDb/update/uniqueConstraint.test.ts +2 -2
  448. package/tests/cases/integration/graphQlRequests/delete/aclDelete.test.ts +2 -2
  449. package/tests/cases/integration/graphQlRequests/delete/additionalDeleteFilter.test.ts +2 -2
  450. package/tests/cases/integration/graphQlRequests/delete/cascadeDelete.test.ts +2 -2
  451. package/tests/cases/integration/graphQlRequests/delete/deleteById.test.ts +2 -2
  452. package/tests/cases/integration/graphQlRequests/delete/orphanRemoval.test.ts +2 -2
  453. package/tests/cases/integration/graphQlRequests/delete/setNullOnDelete.test.ts +2 -2
  454. package/tests/cases/integration/graphQlRequests/insert/acl/setField.test.ts +2 -2
  455. package/tests/cases/integration/graphQlRequests/insert/aclInsert.test.ts +2 -2
  456. package/tests/cases/integration/graphQlRequests/insert/basicInsert.test.ts +2 -2
  457. package/tests/cases/integration/graphQlRequests/insert/insertCustomId.test.ts +2 -2
  458. package/tests/cases/integration/graphQlRequests/insert/manyHasManyInverse/insertRelationCreate.test.ts +2 -2
  459. package/tests/cases/integration/graphQlRequests/insert/manyHasManyOwning/insertRelationCreate.test.ts +2 -2
  460. package/tests/cases/integration/graphQlRequests/insert/manyHasOne/insertRelationCreate.test.ts +2 -2
  461. package/tests/cases/integration/graphQlRequests/insert/oneHasMany/insertRelationConnect.test.ts +2 -2
  462. package/tests/cases/integration/graphQlRequests/insert/oneHasMany/insertRelationCreate.test.ts +2 -2
  463. package/tests/cases/integration/graphQlRequests/insert/oneHasOneInverse/insertRelationCreate.test.ts +2 -2
  464. package/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/insertRelationCreate.test.ts +2 -2
  465. package/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/insertRelationEmpty.test.ts +2 -2
  466. package/tests/cases/integration/graphQlRequests/insert/validation/toBeFixed.test.ts +2 -2
  467. package/tests/cases/integration/graphQlRequests/query/acl/differentRowAndFieldPredicate.test.ts +2 -2
  468. package/tests/cases/integration/graphQlRequests/query/acl/fieldRestrictedByLocale.test.ts +2 -2
  469. package/tests/cases/integration/graphQlRequests/query/acl/nestedPredicate.test.ts +2 -2
  470. package/tests/cases/integration/graphQlRequests/query/acl/orPredicate.test.ts +2 -2
  471. package/tests/cases/integration/graphQlRequests/query/acl/sameRowAndFieldPredicate.test.ts +2 -2
  472. package/tests/cases/integration/graphQlRequests/query/filter/backReferencedFilter.test.ts +2 -2
  473. package/tests/cases/integration/graphQlRequests/query/filter/complexCondition.test.ts +2 -2
  474. package/tests/cases/integration/graphQlRequests/query/filter/composedFilter.test.ts +2 -2
  475. package/tests/cases/integration/graphQlRequests/query/filter/containsQuery.test.ts +2 -2
  476. package/tests/cases/integration/graphQlRequests/query/filter/manyHasManyOwnerRelation.test.ts +2 -2
  477. package/tests/cases/integration/graphQlRequests/query/filter/manyHasOneRelation.test.ts +2 -2
  478. package/tests/cases/integration/graphQlRequests/query/filter/oneHasManyRelation.test.ts +2 -2
  479. package/tests/cases/integration/graphQlRequests/query/formatting/dateFormat.test.ts +2 -2
  480. package/tests/cases/integration/graphQlRequests/query/graphqlFeatures/alias.test.ts +2 -2
  481. package/tests/cases/integration/graphQlRequests/query/graphqlFeatures/fragments.test.ts +2 -2
  482. package/tests/cases/integration/graphQlRequests/query/misc/aliasedType.test.ts +2 -2
  483. package/tests/cases/integration/graphQlRequests/query/misc/longAliasHash.test.ts +2 -2
  484. package/tests/cases/integration/graphQlRequests/query/misc/reducedHasMany.test.ts +2 -2
  485. package/tests/cases/integration/graphQlRequests/query/misc/transaction.test.ts +2 -2
  486. package/tests/cases/integration/graphQlRequests/query/pagination/hasManyLimit.test.ts +2 -2
  487. package/tests/cases/integration/graphQlRequests/query/pagination/paginate.test.ts +2 -2
  488. package/tests/cases/integration/graphQlRequests/query/pagination/paginateAliased.test.ts +2 -2
  489. package/tests/cases/integration/graphQlRequests/query/pagination/simpleLimit.test.ts +2 -2
  490. package/tests/cases/integration/graphQlRequests/query/relations/advanced.test.ts +2 -2
  491. package/tests/cases/integration/graphQlRequests/query/relations/manyHasManyInverse.test.ts +2 -2
  492. package/tests/cases/integration/graphQlRequests/query/relations/manyHasManyOwning.test.ts +2 -2
  493. package/tests/cases/integration/graphQlRequests/query/relations/manyHasOne.test.ts +2 -2
  494. package/tests/cases/integration/graphQlRequests/query/relations/oneHasMany.test.ts +89 -2
  495. package/tests/cases/integration/graphQlRequests/query/relations/oneHasOneInverse.test.ts +2 -2
  496. package/tests/cases/integration/graphQlRequests/query/relations/oneHasOneOwner.test.ts +2 -2
  497. package/tests/cases/integration/graphQlRequests/query/sorting/byRelations.test.ts +2 -2
  498. package/tests/cases/integration/graphQlRequests/query/sorting/defaultOrdering.test.ts +2 -2
  499. package/tests/cases/integration/graphQlRequests/query/sorting/randomSort.test.ts +2 -2
  500. package/tests/cases/integration/graphQlRequests/query/sorting/sortNulls.test.ts +34 -0
  501. package/tests/cases/integration/graphQlRequests/query/sorting/sortedHasMany.test.ts +2 -2
  502. package/tests/cases/integration/graphQlRequests/query/unique/basicQueryById.test.ts +2 -2
  503. package/tests/cases/integration/graphQlRequests/query/unique/composedUnique.test.ts +2 -2
  504. package/tests/cases/integration/graphQlRequests/query/unique/oneHasManyUnique.test.ts +2 -2
  505. package/tests/cases/integration/graphQlRequests/query/unique/uniqueWithFilter.test.ts +2 -2
  506. package/tests/cases/integration/graphQlRequests/query/view/view.test.ts +2 -2
  507. package/tests/cases/integration/graphQlRequests/update/acl/aclUpdate.test.ts +2 -2
  508. package/tests/cases/integration/graphQlRequests/update/additionalFilter.test.ts +2 -2
  509. package/tests/cases/integration/graphQlRequests/update/basic/columnUpdate.test.ts +2 -2
  510. package/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/connect.test.ts +2 -2
  511. package/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/create.test.ts +2 -2
  512. package/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/delete.test.ts +2 -2
  513. package/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/disconnect.test.ts +2 -2
  514. package/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/update.test.ts +2 -2
  515. package/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/upsert.test.ts +2 -2
  516. package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/connect.test.ts +2 -2
  517. package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/create.test.ts +2 -2
  518. package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/delete.test.ts +2 -2
  519. package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/disconnect.test.ts +2 -2
  520. package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/update.test.ts +2 -2
  521. package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/upsert.test.ts +2 -2
  522. package/tests/cases/integration/graphQlRequests/update/manyHasOne/connect.test.ts +2 -2
  523. package/tests/cases/integration/graphQlRequests/update/manyHasOne/create.test.ts +2 -2
  524. package/tests/cases/integration/graphQlRequests/update/manyHasOne/delete.test.ts +2 -2
  525. package/tests/cases/integration/graphQlRequests/update/manyHasOne/disconnect.test.ts +2 -2
  526. package/tests/cases/integration/graphQlRequests/update/manyHasOne/update.test.ts +2 -2
  527. package/tests/cases/integration/graphQlRequests/update/manyHasOne/upsert.test.ts +2 -2
  528. package/tests/cases/integration/graphQlRequests/update/oneHasMany/combination.test.ts +2 -2
  529. package/tests/cases/integration/graphQlRequests/update/oneHasMany/connect.test.ts +2 -2
  530. package/tests/cases/integration/graphQlRequests/update/oneHasMany/create.test.ts +2 -2
  531. package/tests/cases/integration/graphQlRequests/update/oneHasMany/delete.test.ts +2 -2
  532. package/tests/cases/integration/graphQlRequests/update/oneHasMany/disconnect.test.ts +2 -2
  533. package/tests/cases/integration/graphQlRequests/update/oneHasMany/update.test.ts +2 -2
  534. package/tests/cases/integration/graphQlRequests/update/oneHasMany/upsert.test.ts +2 -2
  535. package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/connect.test.ts +2 -2
  536. package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/create.test.ts +2 -2
  537. package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/delete.test.ts +2 -2
  538. package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/disconnect.test.ts +2 -2
  539. package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/update.test.ts +2 -2
  540. package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/upsert.test.ts +2 -2
  541. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/connect.test.ts +2 -2
  542. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/create.test.ts +2 -2
  543. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/delete.test.ts +2 -2
  544. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/{disconnect.test → disconnect.test.ts} +2 -2
  545. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/update.test.ts +2 -2
  546. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/upsert.test.ts +2 -2
  547. package/tests/cases/integration/graphQlRequests/update/queryPortal.test.ts +2 -2
  548. package/tests/cases/integration/graphQlRequests/update/transaction.test.ts +2 -2
  549. package/tests/cases/integration/graphQlRequests/update/validation/toBeFixed.test.ts +2 -2
  550. package/tests/cases/integration/graphQlRequests/upsert/basicUpsert.test.ts +51 -4
  551. package/tests/cases/integration/graphQlRequests/validation/conditions.test.ts +27 -26
  552. package/tests/cases/integration/graphQlRequests/validation/nestedValidation.test.ts +83 -82
  553. package/tests/cases/integration/graphQlRequests/validation/optionalAssert.test.ts +46 -44
  554. package/tests/cases/integration/graphQlRequests/validation/required.test.ts +201 -200
  555. package/tests/cases/integration/graphQlRequests/validation/requiredWhen.test.ts +68 -68
  556. package/tests/cases/integration/graphQlRequests/validation/rules/andRule.test.ts +17 -16
  557. package/tests/cases/integration/graphQlRequests/validation/rules/lengthRangeRule.test.ts +24 -24
  558. package/tests/cases/integration/graphQlRequests/validation/rules/maxLengthRule.test.ts +16 -17
  559. package/tests/cases/integration/graphQlRequests/validation/rules/minLength.test.ts +19 -17
  560. package/tests/cases/integration/graphQlRequests/validation/rules/notEmptyRule.test.ts +32 -31
  561. package/tests/cases/integration/graphQlRequests/validation/rules/notRule.test.ts +18 -16
  562. package/tests/cases/integration/graphQlRequests/validation/rules/orRule.test.ts +25 -24
  563. package/tests/cases/integration/graphQlRequests/validation/rules/patternRule.test.ts +18 -17
  564. package/tests/cases/integration/graphQlRequests/validation/rules/rangeRule.test.ts +24 -23
  565. package/tests/cases/integration/graphQlSchema/graphQlSchemaBuilder.test.ts +269 -263
  566. package/tests/cases/integration/graphQlSchema/schema-acl-allowed.gql +2 -0
  567. package/tests/cases/integration/graphQlSchema/schema-acl-predicate.gql +2 -0
  568. package/tests/cases/integration/graphQlSchema/schema-acl-predicate2.gql +2 -0
  569. package/tests/cases/integration/graphQlSchema/schema-acl-restricted-create.gql +2 -0
  570. package/tests/cases/integration/graphQlSchema/schema-acl-restricted-delete.gql +2 -0
  571. package/tests/cases/integration/graphQlSchema/schema-acl-restricted-update.gql +2 -0
  572. package/tests/cases/integration/graphQlSchema/schema-acl.gql +2 -0
  573. package/tests/cases/integration/graphQlSchema/schema-aliased-type.gql +2 -0
  574. package/tests/cases/integration/graphQlSchema/schema-basic.gql +2 -0
  575. package/tests/cases/integration/graphQlSchema/schema-bug-66.gql +2 -0
  576. package/tests/cases/integration/graphQlSchema/schema-custom-primary.gql +2 -0
  577. package/tests/cases/integration/graphQlSchema/schema-has-many-reduction.gql +2 -0
  578. package/tests/cases/integration/graphQlSchema/schema-new-builder.gql +2 -0
  579. package/tests/cases/integration/graphQlSchema/schema-view-entity.gql +2 -0
  580. package/tests/cases/unit/aclVariablesFactory.test.ts +51 -54
  581. package/tests/cases/unit/inputPreValidator.test.ts +327 -326
  582. package/tests/cases/unit/inputValidation.test.ts +175 -173
  583. package/tests/cases/unit/orderbyHelper.test.ts +48 -47
  584. package/tests/cases/unit/permissionMerger.test.ts +380 -381
  585. package/tests/cases/unit/predicatesInjector.test.ts +60 -59
  586. package/tests/cases/unit/uuidType.test.ts +25 -0
  587. package/tests/cases/unit/variableInjector.test.ts +61 -60
  588. package/tests/src/test.ts +1 -1
  589. package/tests/src/testGraphql.ts +2 -5
  590. package/vite.config.js +3 -0
package/package.json CHANGED
@@ -1,36 +1,35 @@
1
1
  {
2
2
  "name": "@contember/engine-content-api",
3
- "version": "1.1.0-alpha.5",
3
+ "version": "1.1.0-alpha.8",
4
4
  "license": "Apache-2.0",
5
5
  "main": "dist/src/index.js",
6
6
  "typings": "dist/src/index.d.ts",
7
7
  "scripts": {
8
8
  "build-copy": "mkdir -p dist && find ./tests/ -name '*.gql' -type f -exec cp --parents {} ./dist \\;",
9
9
  "generate": "gql-gen --config graphql.codegen.yml",
10
- "test": "uvu dist/tests/cases/ \\.js$"
10
+ "test": "vitest --no-threads"
11
11
  },
12
12
  "dependencies": {
13
- "@contember/database": "^1.1.0-alpha.5",
14
- "@contember/dic": "^1.1.0-alpha.5",
15
- "@contember/engine-common": "^1.1.0-alpha.5",
16
- "@contember/graphql-utils": "^1.1.0-alpha.5",
17
- "@contember/schema": "^1.1.0-alpha.5",
18
- "@contember/schema-utils": "^1.1.0-alpha.5",
19
- "@graphql-tools/schema": "^7.1.5",
13
+ "@contember/database": "^1.1.0-alpha.8",
14
+ "@contember/dic": "^1.1.0-alpha.8",
15
+ "@contember/engine-common": "^1.1.0-alpha.8",
16
+ "@contember/graphql-utils": "^1.1.0-alpha.8",
17
+ "@contember/schema": "^1.1.0-alpha.8",
18
+ "@contember/schema-utils": "^1.1.0-alpha.8",
19
+ "@graphql-tools/schema": "^8.3.5",
20
20
  "graphql-tag": "^2.12.5"
21
21
  },
22
22
  "devDependencies": {
23
- "@contember/database-tester": "^1.1.0-alpha.5",
24
- "@contember/engine-api-tester": "^1.1.0-alpha.5",
25
- "@contember/schema-definition": "^1.1.0-alpha.5",
23
+ "@contember/database-tester": "^1.1.0-alpha.8",
24
+ "@contember/engine-api-tester": "^1.1.0-alpha.8",
25
+ "@contember/schema-definition": "^1.1.0-alpha.8",
26
26
  "@graphql-codegen/cli": "^1.15.2",
27
27
  "@graphql-codegen/typescript": "^1.15.2",
28
28
  "@graphql-codegen/typescript-operations": "^1.15.2",
29
29
  "@graphql-codegen/typescript-resolvers": "^1.15.2",
30
30
  "@types/node": "^17.0.5",
31
31
  "graphql": "^15.4.0",
32
- "pg": "^8.5.0",
33
- "uvu": "^0.5.3"
32
+ "pg": "^8.5.0"
34
33
  },
35
34
  "peerDependencies": {
36
35
  "graphql": ">= 14.6.0",
@@ -4,7 +4,10 @@ import { Acl } from '@contember/schema'
4
4
  export type AuthorizationResult = 'yes' | 'no' | 'maybe'
5
5
 
6
6
  export class Authorizator {
7
- constructor(private readonly permissions: Acl.Permissions) {
7
+ constructor(
8
+ private readonly permissions: Acl.Permissions,
9
+ private readonly defaultCustomPrimary: boolean,
10
+ ) {
8
11
  }
9
12
 
10
13
  getEntityPermission(operation: Acl.Operation, entity: string): AuthorizationResult {
@@ -47,6 +50,6 @@ export class Authorizator {
47
50
 
48
51
 
49
52
  isCustomPrimaryAllowed(entity: string): boolean {
50
- return this.permissions?.[entity]?.operations?.customPrimary || false
53
+ return this.permissions?.[entity]?.operations?.customPrimary ?? this.defaultCustomPrimary
51
54
  }
52
55
  }
@@ -1,4 +1,4 @@
1
- import { Acl, Model } from '@contember/schema'
1
+ import { Acl, Model, Writable } from '@contember/schema'
2
2
  import { getEntity, PredicateDefinitionProcessor } from '@contember/schema-utils'
3
3
  import { mapObject } from '../utils'
4
4
  import { prefixVariable } from './VariableUtils'
@@ -6,7 +6,7 @@ import { prefixVariable } from './VariableUtils'
6
6
  export class PermissionFactory {
7
7
  constructor(private readonly schema: Model.Schema) {}
8
8
 
9
- public create(acl: Acl.Schema, roles: string[], prefix?: string): Acl.Permissions {
9
+ public create(acl: Acl.Schema, roles: readonly string[], prefix?: string): Acl.Permissions {
10
10
  let result: Acl.Permissions = {}
11
11
  for (let role of roles) {
12
12
  const roleDefinition = acl.roles[role] || { entities: {} }
@@ -49,10 +49,11 @@ export class PermissionFactory {
49
49
  for (let entityName in permissions) {
50
50
  const entity = getEntity(this.schema, entityName)
51
51
  const entityPermissions: Acl.EntityPermissions = permissions[entityName]
52
+ const entityPredicates: Writable<Acl.PredicateMap> = entityPermissions.predicates
52
53
 
53
54
  const operationNames = ['read', 'create', 'update'] as const
54
55
  for (let operation of operationNames) {
55
- const fieldPermissions: Acl.FieldPermissions | undefined = entityPermissions.operations[operation]
56
+ const fieldPermissions: Writable<Acl.FieldPermissions> | undefined = entityPermissions.operations[operation]
56
57
  if (fieldPermissions === undefined) {
57
58
  continue
58
59
  }
@@ -85,8 +86,7 @@ export class PermissionFactory {
85
86
  predicates[predicate] = predicateDefinition
86
87
  }
87
88
  fieldPermissions[entity.primary] = idPermissions
88
- entityPermissions.predicates[idPermissions as Acl.PredicateReference] =
89
- predicates[idPermissions as Acl.PredicateReference]
89
+ entityPredicates[idPermissions as Acl.PredicateReference] = predicates[idPermissions as Acl.PredicateReference]
90
90
  }
91
91
  }
92
92
  }
@@ -104,8 +104,8 @@ export class PermissionFactory {
104
104
  }
105
105
 
106
106
  private mergeEntityPermissions(left: Acl.EntityPermissions, right: Acl.EntityPermissions): Acl.EntityPermissions {
107
- let predicates: Acl.PredicateMap = {}
108
- const operations: Acl.EntityOperations = {}
107
+ let predicates: Writable<Acl.PredicateMap> = {}
108
+ const operations: Writable<Acl.EntityOperations> = {}
109
109
  if (left.operations.customPrimary || right.operations.customPrimary) {
110
110
  operations.customPrimary = true
111
111
  }
@@ -156,8 +156,8 @@ export class PermissionFactory {
156
156
  rightPredicates: Acl.PredicateMap,
157
157
  rightFieldPermissions: Acl.FieldPermissions,
158
158
  ): [Acl.PredicateMap, Acl.FieldPermissions] {
159
- const fields: Acl.FieldPermissions = {}
160
- const predicates: Acl.PredicateMap = {}
159
+ const fields: Writable<Acl.FieldPermissions> = {}
160
+ const predicates: Writable<Acl.PredicateMap> = {}
161
161
 
162
162
  for (let field in { ...leftFieldPermissions, ...rightFieldPermissions }) {
163
163
  const [predicateDefinition, predicate] = this.mergePredicates(
@@ -1,4 +1,4 @@
1
- import { Acl, Input, Model } from '@contember/schema'
1
+ import { Acl, Input, Model, Writable } from '@contember/schema'
2
2
  import { acceptFieldVisitor } from '@contember/schema-utils'
3
3
  import { PredicateFactory } from './PredicateFactory'
4
4
 
@@ -28,7 +28,7 @@ export class PredicatesInjector {
28
28
  }
29
29
 
30
30
  private injectToWhere(where: Input.OptionalWhere, entity: Model.Entity): Input.OptionalWhere {
31
- const resultWhere: Input.OptionalWhere = {}
31
+ const resultWhere: Writable<Input.OptionalWhere> = {}
32
32
  if (where.and) {
33
33
  resultWhere.and = where.and.filter((it): it is Input.Where => !!it).map(it => this.injectToWhere(it, entity))
34
34
  }
@@ -3,6 +3,7 @@ import { FieldMap } from '../EntityFieldsProvider'
3
3
  import { PaginatedHasManyFieldProviderExtension } from './PaginatedHasManyFieldProvider'
4
4
  import { capitalizeFirstLetter } from '../../utils'
5
5
  import { PaginatedFieldConfigFactory } from '../../schema/PaginatedFieldConfigFactory'
6
+ import { aliasAwareResolver } from '../../schema'
6
7
 
7
8
  export class PaginatedHasManyFieldProviderVisitor implements
8
9
  Model.ColumnVisitor<FieldMap<PaginatedHasManyFieldProviderExtension>>,
@@ -47,6 +48,7 @@ export class PaginatedHasManyFieldProviderVisitor implements
47
48
  extensions: {
48
49
  relationName: relation.name,
49
50
  },
51
+ resolve: aliasAwareResolver,
50
52
  },
51
53
  }
52
54
  }
@@ -97,7 +97,7 @@ const validatorEvaluators: {
97
97
  visitUndefinedContext: fixedResult(false),
98
98
  })
99
99
  },
100
- pattern: (context: ValidationContext.AnyContext, patternArgument: Validation.LiteralArgument<[string, string]>) => {
100
+ pattern: (context: ValidationContext.AnyContext, patternArgument: Validation.LiteralArgument<readonly [string, string]>) => {
101
101
  return acceptContextVisitor(context, {
102
102
  visitNodeContext: cannotApplyOnNode('pattern', 'node'),
103
103
  visitNodeListContext: cannotApplyOnNode('pattern', 'node list'),
@@ -1,4 +1,4 @@
1
- import { Input, Model } from '@contember/schema'
1
+ import { Input, Model, Writable } from '@contember/schema'
2
2
  import { getTargetEntity } from '@contember/schema-utils'
3
3
  import { UserError } from '../exception'
4
4
  import { getFieldsForUniqueWhere } from '../utils'
@@ -30,7 +30,7 @@ export class UniqueWhereExpander {
30
30
  throw new UniqueWhereError(this.formatErrorMessage(entity, where, path))
31
31
  }
32
32
 
33
- const whereExpanded: Input.Where = {}
33
+ const whereExpanded: Writable<Input.Where> = {}
34
34
  for (const field in where) {
35
35
  if (!isFilled(field)) {
36
36
  continue
@@ -116,7 +116,7 @@ export class IntrospectionSchemaFactory {
116
116
  }))
117
117
  }
118
118
 
119
- createValidationSchema(rules: Validation.ValidationRule[]): Pick<ContentSchema._Field, 'rules' | 'validators'> {
119
+ createValidationSchema(rules: readonly Validation.ValidationRule[]): Pick<ContentSchema._Field, 'rules' | 'validators'> {
120
120
  const validators: ContentSchema._Validator[] = []
121
121
 
122
122
  const processValidator = (validator: Validation.Validator) => {
@@ -72,8 +72,8 @@ export class Mapper {
72
72
  let indexByAlias: string | null = null
73
73
  if (indexBy) {
74
74
  const path = this.pathFactory.create([])
75
- indexByAlias = path.for(indexBy).getAlias()
76
- qb = qb.select([path.getAlias(), getColumnName(this.schema, entity, indexBy)], indexByAlias)
75
+ indexByAlias = path.for(indexBy).alias
76
+ qb = qb.select([path.alias, getColumnName(this.schema, entity, indexBy)], indexByAlias)
77
77
  }
78
78
  const rows = await this.selectRows(hydrator, qb, entity, input)
79
79
 
@@ -100,7 +100,7 @@ export class Mapper {
100
100
  let qb: SelectBuilder<SelectBuilder.Result> = SelectBuilder.create()
101
101
  const path = this.pathFactory.create([])
102
102
  const groupingKey = '__grouping_key'
103
- qb = qb.select([path.getAlias(), relation.joiningColumn.columnName], groupingKey)
103
+ qb = qb.select([path.alias, relation.joiningColumn.columnName], groupingKey)
104
104
 
105
105
  const rows = await this.selectRows(hydrator, qb, entity, input, relation.name)
106
106
  return await hydrator.hydrateGroups(rows, groupingKey)
@@ -115,22 +115,19 @@ export class Mapper {
115
115
  ) {
116
116
  const inputWithOrder = OrderByHelper.appendDefaultOrderBy(entity, input, [])
117
117
  const path = this.pathFactory.create([])
118
- const augmentedBuilder = qb.from(entity.tableName, path.getAlias()).meta('path', [...input.path, input.alias])
118
+ const augmentedBuilder = qb.from(entity.tableName, path.alias).meta('path', [...input.path, input.alias])
119
119
 
120
120
  const selector = this.selectBuilderFactory.create(augmentedBuilder, hydrator)
121
121
  const filterWithPredicates = this.predicatesInjector.inject(entity, inputWithOrder.args.filter || {})
122
122
  const inputWithPredicates = inputWithOrder.withArg('filter', filterWithPredicates)
123
- const selectPromise = selector.select(this, entity, inputWithPredicates, path, groupBy)
124
- const rows = await selector.execute(this.db)
125
- await selectPromise
126
-
127
- return rows
123
+ selector.select(this, entity, inputWithPredicates, path, groupBy)
124
+ return await selector.execute(this.db)
128
125
  }
129
126
 
130
127
  public async count(entity: Model.Entity, filter: Input.OptionalWhere) {
131
128
  const path = this.pathFactory.create([])
132
129
  const qb = SelectBuilder.create()
133
- .from(entity.tableName, path.getAlias())
130
+ .from(entity.tableName, path.alias)
134
131
  .select(expr => expr.raw('count(*)'), 'row_count')
135
132
  const withPredicates = this.predicatesInjector.inject(entity, filter)
136
133
  const qbWithWhere = this.whereBuilder.build(qb, entity, path, withPredicates)
@@ -145,10 +142,10 @@ export class Mapper {
145
142
  ): Promise<Record<string, number>> {
146
143
  const path = this.pathFactory.create([])
147
144
  const qb = SelectBuilder.create()
148
- .from(entity.tableName, path.getAlias())
145
+ .from(entity.tableName, path.alias)
149
146
  .select(expr => expr.raw('count(*)'), 'row_count')
150
- .select([path.getAlias(), relation.joiningColumn.columnName])
151
- .groupBy([path.getAlias(), relation.joiningColumn.columnName])
147
+ .select([path.alias, relation.joiningColumn.columnName])
148
+ .groupBy([path.alias, relation.joiningColumn.columnName])
152
149
  const withPredicates = this.predicatesInjector.inject(entity, filter)
153
150
  const qbWithWhere = this.whereBuilder.build(qb, entity, path, withPredicates)
154
151
  const rows = await qbWithWhere.getResult(this.db)
@@ -18,7 +18,7 @@ export class SqlCreateInputProcessor implements CreateInputProcessor<MutationRes
18
18
  public async column(context: Context.ColumnContext): Promise<MutationResultList> {
19
19
  this.insertBuilder.addFieldValue(
20
20
  context.column.name,
21
- ((): Value.GenericValueLike<Value.AtomicValue> => {
21
+ ((): Value.GenericValueLike<Value.AtomicValue | undefined> => {
22
22
  return resolveColumnValue(context, this.providers)
23
23
  })(),
24
24
  )
@@ -22,11 +22,11 @@ export class JoinBuilder {
22
22
  const joins = acceptRelationTypeVisitor(this.schema, entity, relationName, new JoinVisitor(path))
23
23
 
24
24
  return joins.reduce<SelectBuilder<SelectBuilder.Result>>((qb, join) => {
25
- const targetAlias = join.targetAlias || path.getAlias()
25
+ const targetAlias = join.targetAlias || path.alias
26
26
  if (qb.options.join.find(it => it.alias === targetAlias)) {
27
27
  return qb
28
28
  }
29
- const sourceAlias = join.sourceAlias || path.back().getAlias()
29
+ const sourceAlias = join.sourceAlias || path.back().alias
30
30
 
31
31
  return qb.leftJoin(join.tableName, targetAlias, clause =>
32
32
  clause.compareColumns([sourceAlias, join.sourceColumn], Operator.eq, [targetAlias, join.targetColumn]),
@@ -68,8 +68,8 @@ export class JoinVisitor implements Model.RelationByTypeVisitor<JoinDefinition[]
68
68
  relation: Model.ManyHasManyOwningRelation,
69
69
  targetEntity: Model.Entity,
70
70
  ): JoinDefinition[] {
71
- const sourceAlias = this.path.back().getAlias()
72
- const targetAlias = this.path.getAlias()
71
+ const sourceAlias = this.path.back().alias
72
+ const targetAlias = this.path.alias
73
73
  const joiningAlias = `${sourceAlias}_x_${targetAlias}`
74
74
  return [
75
75
  {
@@ -96,8 +96,8 @@ export class JoinVisitor implements Model.RelationByTypeVisitor<JoinDefinition[]
96
96
  targetEntity: Model.Entity,
97
97
  targetRelation: Model.ManyHasManyOwningRelation,
98
98
  ): JoinDefinition[] {
99
- const sourceAlias = this.path.back().getAlias()
100
- const targetAlias = this.path.getAlias()
99
+ const sourceAlias = this.path.back().alias
100
+ const targetAlias = this.path.alias
101
101
  const joiningAlias = `${sourceAlias}_x_${targetAlias}`
102
102
  return [
103
103
  {
@@ -30,7 +30,7 @@ export class OrderByBuilder {
30
30
  ): [SelectBuilder<SelectBuilder.Result>, Orderable] {
31
31
  const entries = Object.entries(orderBy)
32
32
  if (entries.length !== 1) {
33
- const fields = entries.join(', ')
33
+ const fields = entries.map(it => it[0]).join(', ')
34
34
  throw new UserError('Order by: only one field is expected in each item of order by clause, got: ' + fields)
35
35
  }
36
36
  if (orderBy._random || orderBy._randomSeeded) {
@@ -56,7 +56,7 @@ export class OrderByBuilder {
56
56
  if (typeof value === 'string') {
57
57
  const columnName = getColumnName(this.schema, entity, fieldName)
58
58
  const applyOrder = <Orderable extends QueryBuilder.Orderable<any>>(orderable: Orderable) =>
59
- orderable.orderBy([path.getAlias(), columnName], value as Input.OrderDirection)
59
+ orderable.orderBy([path.alias, columnName], value)
60
60
 
61
61
  qb = applyOrder(qb)
62
62
  if (orderable !== null) {
@@ -5,7 +5,7 @@ export class OrderByHelper {
5
5
  public static appendDefaultOrderBy(
6
6
  entity: Model.Entity,
7
7
  objectNode: ObjectNode<Input.ListQueryInput>,
8
- defaultOrderBy: Model.OrderBy[],
8
+ defaultOrderBy: readonly Model.OrderBy[],
9
9
  ): ObjectNode<Input.ListQueryInput> {
10
10
  const inputOrder = objectNode.args.orderBy || []
11
11
  const hasOrderBy = inputOrder.length > 0
@@ -26,16 +26,16 @@ export class OrderByHelper {
26
26
  return objectNode.withArg('orderBy', [...(inputOrder || []), ...orderBy])
27
27
  }
28
28
 
29
- private static buildOrderBy(defaultOrderBy: Model.OrderBy[]): Input.OrderByFields[] {
29
+ private static buildOrderBy(defaultOrderBy: readonly Model.OrderBy[]): Input.OrderByFields[] {
30
30
  return defaultOrderBy
31
31
  .map(({ path, direction }): Input.OrderByFields | null => {
32
- path = [...path]
33
- const lastItem = path.pop()
32
+ const mutablePath = [...path]
33
+ const lastItem = mutablePath.pop()
34
34
  if (!lastItem) {
35
35
  return null
36
36
  }
37
37
  const columnOrderBy = { [lastItem]: direction }
38
- return path.reverse().reduce<Input.OrderByFields>((value, field) => ({ [field]: value }), columnOrderBy)
38
+ return mutablePath.reverse().reduce<Input.OrderByFields>((value, field) => ({ [field]: value }), columnOrderBy)
39
39
  })
40
40
  .filter((it): it is Input.OrderByFields => !!it)
41
41
  }
@@ -25,6 +25,8 @@ export class PathFactory {
25
25
  }
26
26
 
27
27
  export class Path {
28
+ public readonly alias = this.createAlias()
29
+
28
30
  constructor(
29
31
  public readonly path: string[],
30
32
  private readonly aliasContext: AliasContext,
@@ -41,7 +43,7 @@ export class Path {
41
43
  return new Path([...this.path, path], this.aliasContext, this.rootAlias)
42
44
  }
43
45
 
44
- public getAlias(): string {
46
+ private createAlias(): string {
45
47
  const alias = this.rootAlias + this.path.join('_')
46
48
 
47
49
  // intentionally not allowing == MAX_IDENTIFIER_LENGTH
@@ -49,6 +51,6 @@ export class Path {
49
51
  return alias
50
52
  }
51
53
  const index = this.aliasContext.getAliasIndex(alias).toString()
52
- return alias.substr(0, MAX_IDENTIFIER_LENGTH - index.length - 1) + '_' + index
54
+ return alias.substring(0, MAX_IDENTIFIER_LENGTH - index.length - 1) + '_' + index
53
55
  }
54
56
  }
@@ -209,9 +209,9 @@ export class RelationFetcher {
209
209
 
210
210
  if (hasWhere || hasFieldOrderBy) {
211
211
  const path = this.pathFactory.create([])
212
- qb = qb.join(targetEntity.tableName, path.getAlias(), condition =>
212
+ qb = qb.join(targetEntity.tableName, path.alias, condition =>
213
213
  condition.compareColumns(['junction_', column.targetColumn.columnName], Operator.eq, [
214
- path.getAlias(),
214
+ path.alias,
215
215
  targetEntity.primaryColumn,
216
216
  ]),
217
217
  )
@@ -43,14 +43,14 @@ export class SelectBuilder {
43
43
  return result
44
44
  }
45
45
 
46
- public async select(
46
+ public select(
47
47
  mapper: Mapper,
48
48
  entity: Model.Entity,
49
49
  input: ObjectNode<Input.ListQueryInput>,
50
50
  path: Path,
51
51
  groupBy?: string,
52
52
  ) {
53
- const promise = this.selectInternal(mapper, entity, path, input)
53
+ this.selectInternal(mapper, entity, path, input)
54
54
  const where = input.args.filter
55
55
  if (where) {
56
56
  this.qb = this.whereBuilder.build(this.qb, entity, path, where)
@@ -60,7 +60,7 @@ export class SelectBuilder {
60
60
  if (groupBy) {
61
61
  const groupByColumn = getColumnName(this.schema, entity, groupBy)
62
62
  this.queryWrapper = new LimitByGroupWrapper(
63
- [path.getAlias(), groupByColumn],
63
+ [path.alias, groupByColumn],
64
64
  (orderable, qb) => {
65
65
  if (orderBy.length > 0) {
66
66
  [qb, orderable] = this.orderByBuilder.build(qb, orderable, entity, this.pathFactory.create([]), orderBy)
@@ -76,11 +76,9 @@ export class SelectBuilder {
76
76
  }
77
77
  this.qb = this.qb.limit(input.args.limit, input.args.offset)
78
78
  }
79
-
80
- await promise
81
79
  }
82
80
 
83
- private async selectInternal(mapper: Mapper, entity: Model.Entity, path: Path, input: ObjectNode) {
81
+ private selectInternal(mapper: Mapper, entity: Model.Entity, path: Path, input: ObjectNode) {
84
82
  if (!input.fields.find(it => it.name === entity.primary && it.alias === entity.primary)) {
85
83
  input = input.withField(new FieldNode(entity.primary, entity.primary, {}))
86
84
  }
@@ -139,11 +137,9 @@ export class SelectBuilder {
139
137
  }
140
138
 
141
139
  private async getColumnValues(columnPath: Path, columnName: string): Promise<Input.PrimaryValue[]> {
142
- this.qb = this.qb.select([columnPath.back().getAlias(), columnName], columnPath.getAlias())
140
+ this.qb = this.qb.select([columnPath.back().alias, columnName], columnPath.alias)
143
141
  const rows = await this.rows
144
- const columnAlias = columnPath.getAlias()
145
- return rows
146
- .map((it): Input.PrimaryValue => it[columnAlias] as Input.PrimaryValue)
147
- .filter((val, index, all) => all.indexOf(val) === index)
142
+ const columnAlias = columnPath.alias
143
+ return Array.from(new Set(rows.map((it): Input.PrimaryValue => it[columnAlias] as Input.PrimaryValue)))
148
144
  }
149
145
  }
@@ -1,14 +1,24 @@
1
1
  import { Path } from './Path'
2
2
  import { Value } from '@contember/schema'
3
+ import { getFulfilledValues, getRejections } from '../../utils'
4
+
5
+ type DataPromises = {
6
+ path: Path
7
+ parentKeyPath: Path
8
+ data: Promise<SelectNestedData>
9
+ defaultValue: SelectNestedDefaultValue
10
+ }
11
+
12
+ type ResolvedData = {
13
+ path: Path
14
+ parentKeyPath: Path
15
+ data: SelectNestedData
16
+ defaultValue: SelectNestedDefaultValue
17
+ }
3
18
 
4
19
  export class SelectHydrator {
5
20
  private columns: Path[] = []
6
- private promises: {
7
- path: Path
8
- parentKeyPath: Path
9
- data: PromiseLike<SelectNestedData>
10
- defaultValue: SelectNestedDefaultValue
11
- }[] = []
21
+ private promises: DataPromises[] = []
12
22
 
13
23
  public addColumn(path: Path) {
14
24
  this.columns.push(path)
@@ -17,21 +27,21 @@ export class SelectHydrator {
17
27
  public addPromise(
18
28
  path: Path,
19
29
  parentKeyPath: Path,
20
- data: PromiseLike<SelectNestedData>,
30
+ data: Promise<SelectNestedData>,
21
31
  defaultValue: SelectNestedDefaultValue,
22
32
  ) {
23
33
  this.promises.push({ path, parentKeyPath, data, defaultValue })
24
34
  }
25
35
 
26
36
  public async hydrateGroups(rows: SelectRow[], groupBy: string): Promise<SelectGroupedObjects> {
27
- await Promise.all(this.promises.map(it => it.data))
37
+ const resolved = await this.resolveDataPromises()
28
38
  const result: SelectGroupedObjects = {}
29
39
  for (let row of rows) {
30
40
  const key = row[groupBy] as Value.PrimaryValue
31
41
  if (!result[key]) {
32
42
  result[key] = []
33
43
  }
34
- result[key].push(await this.hydrateRow(row))
44
+ result[key].push(this.hydrateRow(row, resolved))
35
45
  }
36
46
  return result
37
47
  }
@@ -43,19 +53,22 @@ export class SelectHydrator {
43
53
  rows: SelectRow[],
44
54
  indexBy?: string,
45
55
  ): Promise<SelectResultObject[] | SelectIndexedResultObjects> {
46
- await Promise.all(this.promises.map(it => it.data))
56
+ const resolved = await this.resolveDataPromises()
47
57
  if (indexBy) {
48
58
  const result: SelectIndexedResultObjects = {}
49
59
  for (let row of rows) {
50
- result[row[indexBy] as Value.PrimaryValue] = await this.hydrateRow(row)
60
+ result[row[indexBy] as Value.PrimaryValue] = this.hydrateRow(row, resolved)
51
61
  }
52
62
  return result
53
63
  }
54
-
55
- return Promise.all(rows.map(row => this.hydrateRow(row)))
64
+ const result: SelectResultObject[] = []
65
+ for (const row of rows) {
66
+ result.push(this.hydrateRow(row, resolved))
67
+ }
68
+ return result
56
69
  }
57
70
 
58
- private async hydrateRow(row: SelectRow): Promise<SelectResultObject> {
71
+ private hydrateRow(row: SelectRow, resolvedData: ResolvedData[]): SelectResultObject {
59
72
  const result: SelectResultObject = {}
60
73
 
61
74
  for (let columnPath of this.columns) {
@@ -63,24 +76,44 @@ export class SelectHydrator {
63
76
  const last: string = path.pop() as string
64
77
  const currentObject = path.reduce<any>((obj, part) => (obj[part] = obj[part] || {}), result)
65
78
 
66
- const field = row[columnPath.getAlias()]
79
+ const field = row[columnPath.alias]
67
80
  currentObject[last] = this.formatValue(field)
68
81
  }
69
82
 
70
- for (let { path, parentKeyPath, data, defaultValue } of this.promises) {
71
- const awaitedData = await data
83
+ for (let { path, parentKeyPath, data, defaultValue } of resolvedData) {
72
84
  const pathTmp = [...path.path]
73
85
  const last = pathTmp.pop() as string
74
86
  const currentObject = pathTmp.reduce<any>((obj, part) => (obj && obj[part]) || undefined, result)
75
- const parentValue = row[parentKeyPath.getAlias()] as Value.PrimaryValue
87
+ const parentValue = row[parentKeyPath.alias] as Value.PrimaryValue
76
88
  if (currentObject) {
77
- currentObject[last] = (parentValue ? awaitedData[parentValue] : undefined) || defaultValue
89
+ currentObject[last] = (parentValue ? data[parentValue] : undefined) || defaultValue
78
90
  }
79
91
  }
80
92
 
81
93
  return result
82
94
  }
83
95
 
96
+ private async resolveDataPromises(): Promise<ResolvedData[]> {
97
+ const results = await Promise.allSettled(this.promises.map(async (it): Promise<ResolvedData> => ({
98
+ defaultValue: it.defaultValue,
99
+ parentKeyPath: it.parentKeyPath,
100
+ path: it.path,
101
+ data: await it.data,
102
+ })))
103
+ const failures = getRejections(results)
104
+ if (failures.length > 0) {
105
+ if (failures.length > 1) {
106
+ // eslint-disable-next-line no-console
107
+ console.error('Multiple error has occurred, printing them & rethrowing the first one')
108
+ // eslint-disable-next-line no-console
109
+ failures.slice(1).map(e => console.error(e))
110
+ }
111
+ throw failures[0]
112
+ }
113
+
114
+ return getFulfilledValues(results)
115
+ }
116
+
84
117
  private formatValue(value: any) {
85
118
  if (value instanceof Date) {
86
119
  return value.toISOString()
@@ -48,7 +48,7 @@ export class WhereBuilder {
48
48
  allowManyJoin: boolean,
49
49
  joinList: WhereJoinDefinition[],
50
50
  ): SqlConditionBuilder {
51
- const tableName = path.getAlias()
51
+ const tableName = path.alias
52
52
 
53
53
  if (where.and !== undefined && where.and.length > 0) {
54
54
  const expr = where.and
@@ -216,7 +216,11 @@ export class WhereBuilder {
216
216
  if (keys.filter(it => !['and', 'or', 'not', primaryField].includes(it)).length > 0) {
217
217
  return null
218
218
  }
219
- let condition: Input.Condition<never> = {}
219
+ let condition: {
220
+ and?: Array<Input.Condition<never>>
221
+ or?: Array<Input.Condition<never>>
222
+ not?: Input.Condition<never>
223
+ } = {}
220
224
  if (where.and) {
221
225
  const conditions = where.and
222
226
  .filter((it): it is Input.Where => !!it)
@@ -236,11 +240,11 @@ export class WhereBuilder {
236
240
  condition.or = conditions as Input.Condition<never>[]
237
241
  }
238
242
  if (where.not) {
239
- const condition = this.transformWhereToPrimaryCondition(where.not, primaryField)
240
- if (condition === null) {
243
+ const conditions = this.transformWhereToPrimaryCondition(where.not, primaryField)
244
+ if (conditions === null) {
241
245
  return null
242
246
  }
243
- condition.not = condition as Input.Condition<never>
247
+ condition.not = conditions as Input.Condition<never>
244
248
  }
245
249
  if (where[primaryField]) {
246
250
  if (Object.keys(condition).length > 0) {
@@ -19,8 +19,8 @@ export class FieldsVisitor implements Model.RelationByTypeVisitor<void>, Model.C
19
19
  visitColumn(entity: Model.Entity, column: Model.AnyColumn): void {
20
20
  const columnPath = this.executionContext.path
21
21
  this.executionContext.addColumn(qb => {
22
- const tableAlias = columnPath.back().getAlias()
23
- const columnAlias = columnPath.getAlias()
22
+ const tableAlias = columnPath.back().alias
23
+ const columnAlias = columnPath.alias
24
24
 
25
25
  const fieldPredicate = this.predicateFactory.shouldApplyCellLevelPredicate(
26
26
  entity,
@@ -48,7 +48,7 @@ export class MetaHandler implements SelectExecutionHandler<{}> {
48
48
  }
49
49
  return condition
50
50
  }),
51
- metaPath.getAlias(),
51
+ metaPath.alias,
52
52
  ),
53
53
  )
54
54
  }, metaPath)