@contember/engine-content-api 0.12.0-beta.2 → 1.0.0-alpha.0

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 (471) hide show
  1. package/dist/src/acl/PermissionFactory.js +6 -6
  2. package/dist/src/acl/PermissionFactory.js.map +1 -1
  3. package/dist/src/acl/PermissionsByIdentityFactory.js +1 -1
  4. package/dist/src/acl/PermissionsByIdentityFactory.js.map +1 -1
  5. package/dist/src/acl/PredicatesInjector.js +1 -1
  6. package/dist/src/acl/PredicatesInjector.js.map +1 -1
  7. package/dist/src/acl/VariableUtils.js +1 -1
  8. package/dist/src/acl/VariableUtils.js.map +1 -1
  9. package/dist/src/bridges/system/EntitiesSelector.js +2 -2
  10. package/dist/src/bridges/system/EntitiesSelector.js.map +1 -1
  11. package/dist/src/bridges/system/index.d.ts +0 -1
  12. package/dist/src/bridges/system/index.d.ts.map +1 -1
  13. package/dist/src/bridges/system/index.js +0 -1
  14. package/dist/src/bridges/system/index.js.map +1 -1
  15. package/dist/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducer.js +1 -1
  16. package/dist/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducer.js.map +1 -1
  17. package/dist/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducerExecutionHandler.js +2 -2
  18. package/dist/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducerExecutionHandler.js.map +1 -1
  19. package/dist/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.js +4 -4
  20. package/dist/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.js.map +1 -1
  21. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyExecutionHandler.js +3 -3
  22. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyExecutionHandler.js.map +1 -1
  23. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyFieldProvider.js +1 -1
  24. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyFieldProvider.js.map +1 -1
  25. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyFieldProviderVisitor.js +1 -1
  26. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyFieldProviderVisitor.js.map +1 -1
  27. package/dist/src/input-validation/ColumnValueResolver.js +1 -1
  28. package/dist/src/input-validation/ColumnValueResolver.js.map +1 -1
  29. package/dist/src/input-validation/EntityRulesResolver.js +5 -5
  30. package/dist/src/input-validation/EntityRulesResolver.js.map +1 -1
  31. package/dist/src/input-validation/QueryAstFactory.js +2 -2
  32. package/dist/src/input-validation/QueryAstFactory.js.map +1 -1
  33. package/dist/src/input-validation/ValidationContext.js +1 -1
  34. package/dist/src/input-validation/ValidationContext.js.map +1 -1
  35. package/dist/src/input-validation/ValidationEvaluation.js +8 -8
  36. package/dist/src/input-validation/ValidationEvaluation.js.map +1 -1
  37. package/dist/src/input-validation/dependencies/DependencyCollector.js +1 -1
  38. package/dist/src/input-validation/dependencies/DependencyCollector.js.map +1 -1
  39. package/dist/src/input-validation/dependencies/DependencyMerger.js +1 -1
  40. package/dist/src/input-validation/dependencies/DependencyMerger.js.map +1 -1
  41. package/dist/src/input-validation/preValidation/CreateInputPreValidationProcessor.js +1 -1
  42. package/dist/src/input-validation/preValidation/CreateInputPreValidationProcessor.js.map +1 -1
  43. package/dist/src/input-validation/preValidation/InputPreValidator.js +6 -6
  44. package/dist/src/input-validation/preValidation/InputPreValidator.js.map +1 -1
  45. package/dist/src/input-validation/preValidation/UpdateInputPreValidationProcessor.js +3 -3
  46. package/dist/src/input-validation/preValidation/UpdateInputPreValidationProcessor.js.map +1 -1
  47. package/dist/src/inputProcessing/CreateInputVisitor.js +6 -6
  48. package/dist/src/inputProcessing/CreateInputVisitor.js.map +1 -1
  49. package/dist/src/inputProcessing/UniqueWhereExpander.js +3 -3
  50. package/dist/src/inputProcessing/UniqueWhereExpander.js.map +1 -1
  51. package/dist/src/inputProcessing/UpdateInputVisitor.js +14 -14
  52. package/dist/src/inputProcessing/UpdateInputVisitor.js.map +1 -1
  53. package/dist/src/introspection/IntrospectionSchemaFactory.js +4 -4
  54. package/dist/src/introspection/IntrospectionSchemaFactory.js.map +1 -1
  55. package/dist/src/introspection/content-schema.graphql.js +1 -1
  56. package/dist/src/introspection/content-schema.graphql.js.map +1 -1
  57. package/dist/src/introspection/content-schema.types.d.ts +4 -1
  58. package/dist/src/introspection/content-schema.types.d.ts.map +1 -1
  59. package/dist/src/mapper/ColumnValue.js +2 -2
  60. package/dist/src/mapper/ColumnValue.js.map +1 -1
  61. package/dist/src/mapper/ErrorUtils.d.ts +2 -9
  62. package/dist/src/mapper/ErrorUtils.d.ts.map +1 -1
  63. package/dist/src/mapper/ErrorUtils.js +48 -37
  64. package/dist/src/mapper/ErrorUtils.js.map +1 -1
  65. package/dist/src/mapper/JunctionTableManager.js +1 -1
  66. package/dist/src/mapper/JunctionTableManager.js.map +1 -1
  67. package/dist/src/mapper/Mapper.js +7 -7
  68. package/dist/src/mapper/Mapper.js.map +1 -1
  69. package/dist/src/mapper/MutationProcessorHelper.js +2 -2
  70. package/dist/src/mapper/MutationProcessorHelper.js.map +1 -1
  71. package/dist/src/mapper/Result.d.ts +4 -4
  72. package/dist/src/mapper/Result.d.ts.map +1 -1
  73. package/dist/src/mapper/Result.js +8 -8
  74. package/dist/src/mapper/Result.js.map +1 -1
  75. package/dist/src/mapper/delete/DeleteExecutor.d.ts.map +1 -1
  76. package/dist/src/mapper/delete/DeleteExecutor.js +5 -14
  77. package/dist/src/mapper/delete/DeleteExecutor.js.map +1 -1
  78. package/dist/src/mapper/insert/InsertBuilder.d.ts.map +1 -1
  79. package/dist/src/mapper/insert/InsertBuilder.js +5 -6
  80. package/dist/src/mapper/insert/InsertBuilder.js.map +1 -1
  81. package/dist/src/mapper/insert/Inserter.js +4 -4
  82. package/dist/src/mapper/insert/Inserter.js.map +1 -1
  83. package/dist/src/mapper/insert/SqlCreateInputProcessor.js +17 -17
  84. package/dist/src/mapper/insert/SqlCreateInputProcessor.js.map +1 -1
  85. package/dist/src/mapper/select/JoinBuilder.js +2 -2
  86. package/dist/src/mapper/select/JoinBuilder.js.map +1 -1
  87. package/dist/src/mapper/select/OrderByBuilder.js +2 -2
  88. package/dist/src/mapper/select/OrderByBuilder.js.map +1 -1
  89. package/dist/src/mapper/select/SelectBuilder.js +4 -4
  90. package/dist/src/mapper/select/SelectBuilder.js.map +1 -1
  91. package/dist/src/mapper/select/WhereBuilder.js +2 -2
  92. package/dist/src/mapper/select/WhereBuilder.js.map +1 -1
  93. package/dist/src/mapper/update/SqlUpdateInputProcessor.js +44 -44
  94. package/dist/src/mapper/update/SqlUpdateInputProcessor.js.map +1 -1
  95. package/dist/src/mapper/update/UpdateBuilder.d.ts.map +1 -1
  96. package/dist/src/mapper/update/UpdateBuilder.js +8 -9
  97. package/dist/src/mapper/update/UpdateBuilder.js.map +1 -1
  98. package/dist/src/mapper/update/Updater.js +3 -3
  99. package/dist/src/mapper/update/Updater.js.map +1 -1
  100. package/dist/src/resolvers/ExecutionContainerFactory.js +2 -2
  101. package/dist/src/resolvers/ExecutionContainerFactory.js.map +1 -1
  102. package/dist/src/resolvers/GraphQlQueryAstFactory.js +7 -7
  103. package/dist/src/resolvers/GraphQlQueryAstFactory.js.map +1 -1
  104. package/dist/src/resolvers/MutationResolver.d.ts +6 -2
  105. package/dist/src/resolvers/MutationResolver.d.ts.map +1 -1
  106. package/dist/src/resolvers/MutationResolver.js +27 -13
  107. package/dist/src/resolvers/MutationResolver.js.map +1 -1
  108. package/dist/src/resolvers/ReadHelpers.js +4 -4
  109. package/dist/src/resolvers/ReadHelpers.js.map +1 -1
  110. package/dist/src/resolvers/ReadResolver.js +3 -3
  111. package/dist/src/resolvers/ReadResolver.js.map +1 -1
  112. package/dist/src/resolvers/ValidationResolver.js +1 -1
  113. package/dist/src/resolvers/ValidationResolver.js.map +1 -1
  114. package/dist/src/schema/ColumnTypeResolver.js +1 -1
  115. package/dist/src/schema/ColumnTypeResolver.js.map +1 -1
  116. package/dist/src/schema/ConditionTypeProvider.js +2 -2
  117. package/dist/src/schema/ConditionTypeProvider.js.map +1 -1
  118. package/dist/src/schema/EntityTypeProvider.js +10 -10
  119. package/dist/src/schema/EntityTypeProvider.js.map +1 -1
  120. package/dist/src/schema/EnumsProvider.js +2 -2
  121. package/dist/src/schema/EnumsProvider.js.map +1 -1
  122. package/dist/src/schema/GraphQlSchemaBuilder.d.ts.map +1 -1
  123. package/dist/src/schema/GraphQlSchemaBuilder.js +16 -1
  124. package/dist/src/schema/GraphQlSchemaBuilder.js.map +1 -1
  125. package/dist/src/schema/MutationProvider.js +2 -2
  126. package/dist/src/schema/MutationProvider.js.map +1 -1
  127. package/dist/src/schema/OrderByTypeProvider.js +4 -4
  128. package/dist/src/schema/OrderByTypeProvider.js.map +1 -1
  129. package/dist/src/schema/ValidationQueriesProvider.js +1 -1
  130. package/dist/src/schema/ValidationQueriesProvider.js.map +1 -1
  131. package/dist/src/schema/WhereTypeProvider.js +10 -10
  132. package/dist/src/schema/WhereTypeProvider.js.map +1 -1
  133. package/dist/src/schema/mutations/CreateEntityRelationInputFieldVisitor.js +2 -2
  134. package/dist/src/schema/mutations/CreateEntityRelationInputFieldVisitor.js.map +1 -1
  135. package/dist/src/schema/mutations/CreateEntityRelationInputProvider.js +2 -2
  136. package/dist/src/schema/mutations/CreateEntityRelationInputProvider.js.map +1 -1
  137. package/dist/src/schema/mutations/EntityInputProvider.js +4 -4
  138. package/dist/src/schema/mutations/EntityInputProvider.js.map +1 -1
  139. package/dist/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.js +7 -7
  140. package/dist/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.js.map +1 -1
  141. package/dist/src/schema/mutations/UpdateEntityRelationInputProvider.js +2 -2
  142. package/dist/src/schema/mutations/UpdateEntityRelationInputProvider.js.map +1 -1
  143. package/dist/src/schema/utils.js +1 -1
  144. package/dist/src/schema/utils.js.map +1 -1
  145. package/dist/src/tsconfig.tsbuildinfo +1 -1
  146. package/dist/src/utils/uniqueWhereFields.js +1 -1
  147. package/dist/src/utils/uniqueWhereFields.js.map +1 -1
  148. package/dist/tests/cases/bugs/bug-filter-or.test.js +13 -13
  149. package/dist/tests/cases/bugs/bug-filter-or.test.js.map +1 -1
  150. package/dist/tests/cases/bugs/bug-update-by-nested-unique.test.js +8 -8
  151. package/dist/tests/cases/bugs/bug-update-by-nested-unique.test.js.map +1 -1
  152. package/dist/tests/cases/bugs/bug102.test.js +9 -9
  153. package/dist/tests/cases/bugs/bug102.test.js.map +1 -1
  154. package/dist/tests/cases/integration/graphQlDb/update/bug-freeze-connect-missing-one.test.js +3 -3
  155. package/dist/tests/cases/integration/graphQlDb/update/bug-freeze-connect-missing-one.test.js.map +1 -1
  156. package/dist/tests/cases/integration/graphQlDb/update/deferedConstraints.test.d.ts +2 -0
  157. package/dist/tests/cases/integration/graphQlDb/update/deferedConstraints.test.d.ts.map +1 -0
  158. package/dist/tests/cases/integration/graphQlDb/update/deferedConstraints.test.js +185 -0
  159. package/dist/tests/cases/integration/graphQlDb/update/deferedConstraints.test.js.map +1 -0
  160. package/dist/tests/cases/integration/graphQlDb/update/failedDelete.test.d.ts +2 -0
  161. package/dist/tests/cases/integration/graphQlDb/update/failedDelete.test.d.ts.map +1 -0
  162. package/dist/tests/cases/integration/graphQlDb/update/failedDelete.test.js +43 -0
  163. package/dist/tests/cases/integration/graphQlDb/update/failedDelete.test.js.map +1 -0
  164. package/dist/tests/cases/integration/graphQlDb/update/invalidInput.test.js +7 -7
  165. package/dist/tests/cases/integration/graphQlDb/update/invalidInput.test.js.map +1 -1
  166. package/dist/tests/cases/integration/graphQlDb/update/nullChecksNotNull.test.js +12 -12
  167. package/dist/tests/cases/integration/graphQlDb/update/nullChecksNotNull.test.js.map +1 -1
  168. package/dist/tests/cases/integration/graphQlDb/update/nullChecksNullable.test.js +12 -12
  169. package/dist/tests/cases/integration/graphQlDb/update/nullChecksNullable.test.js.map +1 -1
  170. package/dist/tests/cases/integration/graphQlDb/update/uniqueConstraint.test.d.ts +2 -0
  171. package/dist/tests/cases/integration/graphQlDb/update/uniqueConstraint.test.d.ts.map +1 -0
  172. package/dist/tests/cases/integration/graphQlDb/update/uniqueConstraint.test.js +38 -0
  173. package/dist/tests/cases/integration/graphQlDb/update/uniqueConstraint.test.js.map +1 -0
  174. package/dist/tests/cases/integration/graphQlRequests/delete/aclDelete.test.js +16 -16
  175. package/dist/tests/cases/integration/graphQlRequests/delete/aclDelete.test.js.map +1 -1
  176. package/dist/tests/cases/integration/graphQlRequests/delete/additionalDeleteFilter.test.js +16 -16
  177. package/dist/tests/cases/integration/graphQlRequests/delete/additionalDeleteFilter.test.js.map +1 -1
  178. package/dist/tests/cases/integration/graphQlRequests/delete/cascadeDelete.test.js +22 -22
  179. package/dist/tests/cases/integration/graphQlRequests/delete/cascadeDelete.test.js.map +1 -1
  180. package/dist/tests/cases/integration/graphQlRequests/delete/deleteById.test.js +20 -20
  181. package/dist/tests/cases/integration/graphQlRequests/delete/deleteById.test.js.map +1 -1
  182. package/dist/tests/cases/integration/graphQlRequests/delete/orphanRemoval.test.js +19 -19
  183. package/dist/tests/cases/integration/graphQlRequests/delete/orphanRemoval.test.js.map +1 -1
  184. package/dist/tests/cases/integration/graphQlRequests/delete/setNullOnDelete.test.js +18 -18
  185. package/dist/tests/cases/integration/graphQlRequests/delete/setNullOnDelete.test.js.map +1 -1
  186. package/dist/tests/cases/integration/graphQlRequests/insert/acl/setField.test.js +13 -13
  187. package/dist/tests/cases/integration/graphQlRequests/insert/acl/setField.test.js.map +1 -1
  188. package/dist/tests/cases/integration/graphQlRequests/insert/aclInsert.test.js +11 -11
  189. package/dist/tests/cases/integration/graphQlRequests/insert/aclInsert.test.js.map +1 -1
  190. package/dist/tests/cases/integration/graphQlRequests/insert/basicInsert.test.js +11 -11
  191. package/dist/tests/cases/integration/graphQlRequests/insert/basicInsert.test.js.map +1 -1
  192. package/dist/tests/cases/integration/graphQlRequests/insert/insertCustomId.test.js +12 -12
  193. package/dist/tests/cases/integration/graphQlRequests/insert/insertCustomId.test.js.map +1 -1
  194. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyInverse/insertRelationCreate.test.js +21 -21
  195. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyInverse/insertRelationCreate.test.js.map +1 -1
  196. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyOwning/insertRelationCreate.test.js +21 -21
  197. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyOwning/insertRelationCreate.test.js.map +1 -1
  198. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasOne/insertRelationCreate.test.js +14 -14
  199. package/dist/tests/cases/integration/graphQlRequests/insert/manyHasOne/insertRelationCreate.test.js.map +1 -1
  200. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/insertRelationConnect.test.js +17 -17
  201. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/insertRelationConnect.test.js.map +1 -1
  202. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/insertRelationCreate.test.js +17 -17
  203. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/insertRelationCreate.test.js.map +1 -1
  204. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneInverse/insertRelationCreate.test.js +14 -14
  205. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneInverse/insertRelationCreate.test.js.map +1 -1
  206. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/insertRelationCreate.test.js +14 -14
  207. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/insertRelationCreate.test.js.map +1 -1
  208. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/insertRelationEmpty.test.js +11 -11
  209. package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/insertRelationEmpty.test.js.map +1 -1
  210. package/dist/tests/cases/integration/graphQlRequests/insert/validation/toBeFixed.test.js +15 -15
  211. package/dist/tests/cases/integration/graphQlRequests/insert/validation/toBeFixed.test.js.map +1 -1
  212. package/dist/tests/cases/integration/graphQlRequests/query/acl/differentRowAndFieldPredicate.test.js +6 -6
  213. package/dist/tests/cases/integration/graphQlRequests/query/acl/differentRowAndFieldPredicate.test.js.map +1 -1
  214. package/dist/tests/cases/integration/graphQlRequests/query/acl/fieldRestrictedByLocale.test.js +38 -38
  215. package/dist/tests/cases/integration/graphQlRequests/query/acl/fieldRestrictedByLocale.test.js.map +1 -1
  216. package/dist/tests/cases/integration/graphQlRequests/query/acl/nestedPredicate.test.js +13 -13
  217. package/dist/tests/cases/integration/graphQlRequests/query/acl/nestedPredicate.test.js.map +1 -1
  218. package/dist/tests/cases/integration/graphQlRequests/query/acl/orPredicate.test.js +6 -6
  219. package/dist/tests/cases/integration/graphQlRequests/query/acl/orPredicate.test.js.map +1 -1
  220. package/dist/tests/cases/integration/graphQlRequests/query/acl/sameRowAndFieldPredicate.test.js +6 -6
  221. package/dist/tests/cases/integration/graphQlRequests/query/acl/sameRowAndFieldPredicate.test.js.map +1 -1
  222. package/dist/tests/cases/integration/graphQlRequests/query/filter/backReferencedFilter.test.js +15 -15
  223. package/dist/tests/cases/integration/graphQlRequests/query/filter/backReferencedFilter.test.js.map +1 -1
  224. package/dist/tests/cases/integration/graphQlRequests/query/filter/complexCondition.test.js +6 -6
  225. package/dist/tests/cases/integration/graphQlRequests/query/filter/complexCondition.test.js.map +1 -1
  226. package/dist/tests/cases/integration/graphQlRequests/query/filter/composedFilter.test.js +6 -6
  227. package/dist/tests/cases/integration/graphQlRequests/query/filter/composedFilter.test.js.map +1 -1
  228. package/dist/tests/cases/integration/graphQlRequests/query/filter/containsQuery.test.js +6 -6
  229. package/dist/tests/cases/integration/graphQlRequests/query/filter/containsQuery.test.js.map +1 -1
  230. package/dist/tests/cases/integration/graphQlRequests/query/filter/manyHasManyOwnerRelation.test.js +18 -18
  231. package/dist/tests/cases/integration/graphQlRequests/query/filter/manyHasManyOwnerRelation.test.js.map +1 -1
  232. package/dist/tests/cases/integration/graphQlRequests/query/filter/manyHasOneRelation.test.js +8 -8
  233. package/dist/tests/cases/integration/graphQlRequests/query/filter/manyHasOneRelation.test.js.map +1 -1
  234. package/dist/tests/cases/integration/graphQlRequests/query/filter/oneHasManyRelation.test.js +8 -8
  235. package/dist/tests/cases/integration/graphQlRequests/query/filter/oneHasManyRelation.test.js.map +1 -1
  236. package/dist/tests/cases/integration/graphQlRequests/query/formatting/dateFormat.test.js +7 -7
  237. package/dist/tests/cases/integration/graphQlRequests/query/formatting/dateFormat.test.js.map +1 -1
  238. package/dist/tests/cases/integration/graphQlRequests/query/graphqlFeatures/alias.test.js +13 -13
  239. package/dist/tests/cases/integration/graphQlRequests/query/graphqlFeatures/alias.test.js.map +1 -1
  240. package/dist/tests/cases/integration/graphQlRequests/query/graphqlFeatures/fragments.test.js +18 -18
  241. package/dist/tests/cases/integration/graphQlRequests/query/graphqlFeatures/fragments.test.js.map +1 -1
  242. package/dist/tests/cases/integration/graphQlRequests/query/misc/aliasedType.test.js +6 -6
  243. package/dist/tests/cases/integration/graphQlRequests/query/misc/aliasedType.test.js.map +1 -1
  244. package/dist/tests/cases/integration/graphQlRequests/query/misc/longAliasHash.test.js +6 -6
  245. package/dist/tests/cases/integration/graphQlRequests/query/misc/longAliasHash.test.js.map +1 -1
  246. package/dist/tests/cases/integration/graphQlRequests/query/misc/reducedHasMany.test.js +13 -13
  247. package/dist/tests/cases/integration/graphQlRequests/query/misc/reducedHasMany.test.js.map +1 -1
  248. package/dist/tests/cases/integration/graphQlRequests/query/misc/transaction.test.js +13 -13
  249. package/dist/tests/cases/integration/graphQlRequests/query/misc/transaction.test.js.map +1 -1
  250. package/dist/tests/cases/integration/graphQlRequests/query/pagination/hasManyLimit.test.js +39 -39
  251. package/dist/tests/cases/integration/graphQlRequests/query/pagination/hasManyLimit.test.js.map +1 -1
  252. package/dist/tests/cases/integration/graphQlRequests/query/pagination/paginate.test.js +14 -14
  253. package/dist/tests/cases/integration/graphQlRequests/query/pagination/paginate.test.js.map +1 -1
  254. package/dist/tests/cases/integration/graphQlRequests/query/pagination/paginateAliased.test.js +14 -14
  255. package/dist/tests/cases/integration/graphQlRequests/query/pagination/paginateAliased.test.js.map +1 -1
  256. package/dist/tests/cases/integration/graphQlRequests/query/pagination/simpleLimit.test.js +8 -8
  257. package/dist/tests/cases/integration/graphQlRequests/query/pagination/simpleLimit.test.js.map +1 -1
  258. package/dist/tests/cases/integration/graphQlRequests/query/relations/advanced.test.js +73 -73
  259. package/dist/tests/cases/integration/graphQlRequests/query/relations/advanced.test.js.map +1 -1
  260. package/dist/tests/cases/integration/graphQlRequests/query/relations/manyHasManyInverse.test.js +29 -29
  261. package/dist/tests/cases/integration/graphQlRequests/query/relations/manyHasManyInverse.test.js.map +1 -1
  262. package/dist/tests/cases/integration/graphQlRequests/query/relations/manyHasManyOwning.test.js +20 -20
  263. package/dist/tests/cases/integration/graphQlRequests/query/relations/manyHasManyOwning.test.js.map +1 -1
  264. package/dist/tests/cases/integration/graphQlRequests/query/relations/manyHasOne.test.js +34 -34
  265. package/dist/tests/cases/integration/graphQlRequests/query/relations/manyHasOne.test.js.map +1 -1
  266. package/dist/tests/cases/integration/graphQlRequests/query/relations/oneHasMany.test.js +65 -65
  267. package/dist/tests/cases/integration/graphQlRequests/query/relations/oneHasMany.test.js.map +1 -1
  268. package/dist/tests/cases/integration/graphQlRequests/query/relations/oneHasOneInverse.test.js +16 -16
  269. package/dist/tests/cases/integration/graphQlRequests/query/relations/oneHasOneInverse.test.js.map +1 -1
  270. package/dist/tests/cases/integration/graphQlRequests/query/relations/oneHasOneOwner.test.js +16 -16
  271. package/dist/tests/cases/integration/graphQlRequests/query/relations/oneHasOneOwner.test.js.map +1 -1
  272. package/dist/tests/cases/integration/graphQlRequests/query/sorting/byRelations.test.js +6 -6
  273. package/dist/tests/cases/integration/graphQlRequests/query/sorting/byRelations.test.js.map +1 -1
  274. package/dist/tests/cases/integration/graphQlRequests/query/sorting/defaultOrdering.test.js +28 -28
  275. package/dist/tests/cases/integration/graphQlRequests/query/sorting/defaultOrdering.test.js.map +1 -1
  276. package/dist/tests/cases/integration/graphQlRequests/query/sorting/randomSort.test.js +39 -39
  277. package/dist/tests/cases/integration/graphQlRequests/query/sorting/randomSort.test.js.map +1 -1
  278. package/dist/tests/cases/integration/graphQlRequests/query/sorting/sortedHasMany.test.js +17 -17
  279. package/dist/tests/cases/integration/graphQlRequests/query/sorting/sortedHasMany.test.js.map +1 -1
  280. package/dist/tests/cases/integration/graphQlRequests/query/unique/basicQueryById.test.js +8 -8
  281. package/dist/tests/cases/integration/graphQlRequests/query/unique/basicQueryById.test.js.map +1 -1
  282. package/dist/tests/cases/integration/graphQlRequests/query/unique/composedUnique.test.js +8 -8
  283. package/dist/tests/cases/integration/graphQlRequests/query/unique/composedUnique.test.js.map +1 -1
  284. package/dist/tests/cases/integration/graphQlRequests/query/unique/oneHasManyUnique.test.js +8 -8
  285. package/dist/tests/cases/integration/graphQlRequests/query/unique/oneHasManyUnique.test.js.map +1 -1
  286. package/dist/tests/cases/integration/graphQlRequests/query/unique/uniqueWithFilter.test.js +8 -8
  287. package/dist/tests/cases/integration/graphQlRequests/query/unique/uniqueWithFilter.test.js.map +1 -1
  288. package/dist/tests/cases/integration/graphQlRequests/query/view/view.test.js +10 -10
  289. package/dist/tests/cases/integration/graphQlRequests/query/view/view.test.js.map +1 -1
  290. package/dist/tests/cases/integration/graphQlRequests/update/acl/aclUpdate.test.js +40 -40
  291. package/dist/tests/cases/integration/graphQlRequests/update/acl/aclUpdate.test.js.map +1 -1
  292. package/dist/tests/cases/integration/graphQlRequests/update/additionalFilter.test.js +14 -14
  293. package/dist/tests/cases/integration/graphQlRequests/update/additionalFilter.test.js.map +1 -1
  294. package/dist/tests/cases/integration/graphQlRequests/update/basic/columnUpdate.test.js +14 -14
  295. package/dist/tests/cases/integration/graphQlRequests/update/basic/columnUpdate.test.js.map +1 -1
  296. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/connect.test.js +14 -14
  297. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/connect.test.js.map +1 -1
  298. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/create.test.js +13 -13
  299. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/create.test.js.map +1 -1
  300. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/delete.test.js +16 -16
  301. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/delete.test.js.map +1 -1
  302. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/disconnect.test.js +14 -14
  303. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/disconnect.test.js.map +1 -1
  304. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/update.test.js +16 -16
  305. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/update.test.js.map +1 -1
  306. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/upsert.test.js +32 -32
  307. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/upsert.test.js.map +1 -1
  308. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/connect.test.js +14 -14
  309. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/connect.test.js.map +1 -1
  310. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/create.test.js +13 -13
  311. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/create.test.js.map +1 -1
  312. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/delete.test.js +16 -16
  313. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/delete.test.js.map +1 -1
  314. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/disconnect.test.js +14 -14
  315. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/disconnect.test.js.map +1 -1
  316. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/update.test.js +16 -16
  317. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/update.test.js.map +1 -1
  318. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/upsert.test.js +32 -32
  319. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/upsert.test.js.map +1 -1
  320. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/connect.test.js +14 -14
  321. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/connect.test.js.map +1 -1
  322. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/create.test.js +13 -13
  323. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/create.test.js.map +1 -1
  324. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/delete.test.js +41 -41
  325. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/delete.test.js.map +1 -1
  326. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/disconnect.test.js +10 -10
  327. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/disconnect.test.js.map +1 -1
  328. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/update.test.js +16 -16
  329. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/update.test.js.map +1 -1
  330. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/upsert.test.js +31 -31
  331. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/upsert.test.js.map +1 -1
  332. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/combination.test.js +18 -18
  333. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/combination.test.js.map +1 -1
  334. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/connect.test.js +14 -14
  335. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/connect.test.js.map +1 -1
  336. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/create.test.js +11 -11
  337. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/create.test.js.map +1 -1
  338. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/delete.test.js +15 -15
  339. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/delete.test.js.map +1 -1
  340. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/disconnect.test.js +14 -14
  341. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/disconnect.test.js.map +1 -1
  342. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/update.test.js +21 -21
  343. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/update.test.js.map +1 -1
  344. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/upsert.test.js +26 -26
  345. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/upsert.test.js.map +1 -1
  346. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/connect.test.js +50 -50
  347. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/connect.test.js.map +1 -1
  348. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/create.test.js +29 -29
  349. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/create.test.js.map +1 -1
  350. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/delete.test.js +15 -15
  351. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/delete.test.js.map +1 -1
  352. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/disconnect.test.js +13 -13
  353. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/disconnect.test.js.map +1 -1
  354. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/update.test.js +13 -13
  355. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/update.test.js.map +1 -1
  356. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/upsert.test.js +26 -26
  357. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/upsert.test.js.map +1 -1
  358. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/connect.test.js +50 -50
  359. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/connect.test.js.map +1 -1
  360. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/create.test.js +13 -13
  361. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/create.test.js.map +1 -1
  362. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/delete.test.js +17 -17
  363. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/delete.test.js.map +1 -1
  364. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/update.test.js +16 -16
  365. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/update.test.js.map +1 -1
  366. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/upsert.test.js +31 -31
  367. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/upsert.test.js.map +1 -1
  368. package/dist/tests/cases/integration/graphQlRequests/update/queryPortal.test.js +26 -26
  369. package/dist/tests/cases/integration/graphQlRequests/update/queryPortal.test.js.map +1 -1
  370. package/dist/tests/cases/integration/graphQlRequests/update/transaction.test.js +40 -40
  371. package/dist/tests/cases/integration/graphQlRequests/update/transaction.test.js.map +1 -1
  372. package/dist/tests/cases/integration/graphQlRequests/update/validation/toBeFixed.test.js +10 -10
  373. package/dist/tests/cases/integration/graphQlRequests/update/validation/toBeFixed.test.js.map +1 -1
  374. package/dist/tests/cases/integration/graphQlRequests/upsert/basicUpsert.test.js +24 -24
  375. package/dist/tests/cases/integration/graphQlRequests/upsert/basicUpsert.test.js.map +1 -1
  376. package/dist/tests/cases/integration/graphQlRequests/validation/conditions.test.js +5 -5
  377. package/dist/tests/cases/integration/graphQlRequests/validation/conditions.test.js.map +1 -1
  378. package/dist/tests/cases/integration/graphQlRequests/validation/nestedValidation.test.js +9 -9
  379. package/dist/tests/cases/integration/graphQlRequests/validation/nestedValidation.test.js.map +1 -1
  380. package/dist/tests/cases/integration/graphQlRequests/validation/optionalAssert.test.js +11 -11
  381. package/dist/tests/cases/integration/graphQlRequests/validation/optionalAssert.test.js.map +1 -1
  382. package/dist/tests/cases/integration/graphQlRequests/validation/required.test.js +26 -26
  383. package/dist/tests/cases/integration/graphQlRequests/validation/required.test.js.map +1 -1
  384. package/dist/tests/cases/integration/graphQlRequests/validation/requiredWhen.test.js +18 -18
  385. package/dist/tests/cases/integration/graphQlRequests/validation/requiredWhen.test.js.map +1 -1
  386. package/dist/tests/cases/integration/graphQlRequests/validation/rules/andRule.test.js +4 -4
  387. package/dist/tests/cases/integration/graphQlRequests/validation/rules/andRule.test.js.map +1 -1
  388. package/dist/tests/cases/integration/graphQlRequests/validation/rules/lengthRangeRule.test.js +5 -5
  389. package/dist/tests/cases/integration/graphQlRequests/validation/rules/lengthRangeRule.test.js.map +1 -1
  390. package/dist/tests/cases/integration/graphQlRequests/validation/rules/maxLengthRule.test.js +4 -4
  391. package/dist/tests/cases/integration/graphQlRequests/validation/rules/maxLengthRule.test.js.map +1 -1
  392. package/dist/tests/cases/integration/graphQlRequests/validation/rules/minLength.test.js +4 -4
  393. package/dist/tests/cases/integration/graphQlRequests/validation/rules/minLength.test.js.map +1 -1
  394. package/dist/tests/cases/integration/graphQlRequests/validation/rules/notEmptyRule.test.js +6 -6
  395. package/dist/tests/cases/integration/graphQlRequests/validation/rules/notEmptyRule.test.js.map +1 -1
  396. package/dist/tests/cases/integration/graphQlRequests/validation/rules/notRule.test.js +4 -4
  397. package/dist/tests/cases/integration/graphQlRequests/validation/rules/notRule.test.js.map +1 -1
  398. package/dist/tests/cases/integration/graphQlRequests/validation/rules/orRule.test.js +5 -5
  399. package/dist/tests/cases/integration/graphQlRequests/validation/rules/orRule.test.js.map +1 -1
  400. package/dist/tests/cases/integration/graphQlRequests/validation/rules/patternRule.test.js +4 -4
  401. package/dist/tests/cases/integration/graphQlRequests/validation/rules/patternRule.test.js.map +1 -1
  402. package/dist/tests/cases/integration/graphQlRequests/validation/rules/rangeRule.test.js +5 -5
  403. package/dist/tests/cases/integration/graphQlRequests/validation/rules/rangeRule.test.js.map +1 -1
  404. package/dist/tests/cases/integration/graphQlRequests/validation/utils.js +4 -4
  405. package/dist/tests/cases/integration/graphQlRequests/validation/utils.js.map +1 -1
  406. package/dist/tests/cases/integration/graphQlSchema/graphQlSchemaBuilder.test.js +3 -3
  407. package/dist/tests/cases/integration/graphQlSchema/graphQlSchemaBuilder.test.js.map +1 -1
  408. package/dist/tests/cases/integration/graphQlSchema/schema-acl-allowed.gql +5 -1
  409. package/dist/tests/cases/integration/graphQlSchema/schema-acl-create-only.gql +5 -1
  410. package/dist/tests/cases/integration/graphQlSchema/schema-acl-restricted-create.gql +5 -1
  411. package/dist/tests/cases/integration/graphQlSchema/schema-acl-restricted-delete.gql +5 -1
  412. package/dist/tests/cases/integration/graphQlSchema/schema-acl-restricted-update.gql +5 -1
  413. package/dist/tests/cases/integration/graphQlSchema/schema-acl.gql +5 -1
  414. package/dist/tests/cases/integration/graphQlSchema/schema-aliased-type.gql +5 -1
  415. package/dist/tests/cases/integration/graphQlSchema/schema-basic.gql +5 -1
  416. package/dist/tests/cases/integration/graphQlSchema/schema-bug-66.gql +5 -1
  417. package/dist/tests/cases/integration/graphQlSchema/schema-custom-primary.gql +5 -1
  418. package/dist/tests/cases/integration/graphQlSchema/schema-has-many-reduction.gql +5 -1
  419. package/dist/tests/cases/integration/graphQlSchema/schema-new-builder.gql +5 -1
  420. package/dist/tests/cases/unit/inputPreValidator.test.js +20 -20
  421. package/dist/tests/cases/unit/inputPreValidator.test.js.map +1 -1
  422. package/dist/tests/cases/unit/inputValidation.test.js +7 -7
  423. package/dist/tests/cases/unit/inputValidation.test.js.map +1 -1
  424. package/dist/tests/cases/unit/orderbyHelper.test.js +1 -1
  425. package/dist/tests/cases/unit/orderbyHelper.test.js.map +1 -1
  426. package/dist/tests/cases/unit/permissionMerger.test.js +1 -1
  427. package/dist/tests/cases/unit/permissionMerger.test.js.map +1 -1
  428. package/dist/tests/cases/unit/predicatesInjector.test.js +1 -1
  429. package/dist/tests/cases/unit/predicatesInjector.test.js.map +1 -1
  430. package/dist/tests/cases/unit/variableInjector.test.js +1 -1
  431. package/dist/tests/cases/unit/variableInjector.test.js.map +1 -1
  432. package/dist/tests/src/test.js +6 -6
  433. package/dist/tests/src/test.js.map +1 -1
  434. package/dist/tests/src/testGraphql.js +1 -1
  435. package/dist/tests/src/testGraphql.js.map +1 -1
  436. package/dist/tests/tsconfig.tsbuildinfo +1 -1
  437. package/package.json +11 -11
  438. package/src/bridges/system/index.ts +0 -1
  439. package/src/introspection/content-schema.types.ts +5 -0
  440. package/src/mapper/ColumnValue.ts +1 -1
  441. package/src/mapper/ErrorUtils.ts +64 -41
  442. package/src/mapper/Mapper.ts +5 -5
  443. package/src/mapper/Result.ts +7 -4
  444. package/src/mapper/delete/DeleteExecutor.ts +3 -10
  445. package/src/mapper/insert/InsertBuilder.ts +1 -2
  446. package/src/mapper/insert/Inserter.ts +2 -2
  447. package/src/mapper/update/UpdateBuilder.ts +1 -2
  448. package/src/mapper/update/Updater.ts +1 -1
  449. package/src/resolvers/ExecutionContainerFactory.ts +1 -1
  450. package/src/resolvers/MutationResolver.ts +18 -2
  451. package/src/schema/GraphQlSchemaBuilder.ts +15 -3
  452. package/tests/cases/integration/graphQlDb/update/deferedConstraints.test.ts +208 -0
  453. package/tests/cases/integration/graphQlDb/update/failedDelete.test.ts +47 -0
  454. package/tests/cases/integration/graphQlDb/update/uniqueConstraint.test.ts +40 -0
  455. package/tests/cases/integration/graphQlSchema/schema-acl-allowed.gql +5 -1
  456. package/tests/cases/integration/graphQlSchema/schema-acl-create-only.gql +5 -1
  457. package/tests/cases/integration/graphQlSchema/schema-acl-restricted-create.gql +5 -1
  458. package/tests/cases/integration/graphQlSchema/schema-acl-restricted-delete.gql +5 -1
  459. package/tests/cases/integration/graphQlSchema/schema-acl-restricted-update.gql +5 -1
  460. package/tests/cases/integration/graphQlSchema/schema-acl.gql +5 -1
  461. package/tests/cases/integration/graphQlSchema/schema-aliased-type.gql +5 -1
  462. package/tests/cases/integration/graphQlSchema/schema-basic.gql +5 -1
  463. package/tests/cases/integration/graphQlSchema/schema-bug-66.gql +5 -1
  464. package/tests/cases/integration/graphQlSchema/schema-custom-primary.gql +5 -1
  465. package/tests/cases/integration/graphQlSchema/schema-has-many-reduction.gql +5 -1
  466. package/tests/cases/integration/graphQlSchema/schema-new-builder.gql +5 -1
  467. package/dist/src/bridges/system/ContentEventApplier.d.ts +0 -50
  468. package/dist/src/bridges/system/ContentEventApplier.d.ts.map +0 -1
  469. package/dist/src/bridges/system/ContentEventApplier.js +0 -249
  470. package/dist/src/bridges/system/ContentEventApplier.js.map +0 -1
  471. package/src/bridges/system/ContentEventApplier.ts +0 -399
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@contember/engine-content-api",
3
- "version": "0.12.0-beta.2",
3
+ "version": "1.0.0-alpha.0",
4
4
  "license": "Apache-2.0",
5
5
  "main": "dist/src/index.js",
6
6
  "typings": "dist/src/index.d.ts",
@@ -9,24 +9,24 @@
9
9
  "test": "uvu dist/tests/cases/ \\.js$"
10
10
  },
11
11
  "dependencies": {
12
- "@contember/database": "^0.12.0-beta.2",
13
- "@contember/dic": "^0.12.0-beta.2",
14
- "@contember/engine-common": "^0.12.0-beta.2",
15
- "@contember/graphql-utils": "^0.12.0-beta.2",
16
- "@contember/schema": "^0.12.0-beta.2",
17
- "@contember/schema-utils": "^0.12.0-beta.2",
12
+ "@contember/database": "^1.0.0-alpha.0",
13
+ "@contember/dic": "^1.0.0-alpha.0",
14
+ "@contember/engine-common": "^1.0.0-alpha.0",
15
+ "@contember/graphql-utils": "^1.0.0-alpha.0",
16
+ "@contember/schema": "^1.0.0-alpha.0",
17
+ "@contember/schema-utils": "^1.0.0-alpha.0",
18
18
  "@graphql-tools/schema": "^7.1.5",
19
19
  "graphql-tag": "^2.12.5"
20
20
  },
21
21
  "devDependencies": {
22
- "@contember/database-tester": "^0.12.0-beta.2",
23
- "@contember/engine-api-tester": "^0.12.0-beta.2",
24
- "@contember/schema-definition": "^0.12.0-beta.2",
22
+ "@contember/database-tester": "^1.0.0-alpha.0",
23
+ "@contember/engine-api-tester": "^1.0.0-alpha.0",
24
+ "@contember/schema-definition": "^1.0.0-alpha.0",
25
25
  "@graphql-codegen/cli": "^1.15.2",
26
26
  "@graphql-codegen/typescript": "^1.15.2",
27
27
  "@graphql-codegen/typescript-operations": "^1.15.2",
28
28
  "@graphql-codegen/typescript-resolvers": "^1.15.2",
29
- "@types/node": "^15.12.5",
29
+ "@types/node": "^17.0.5",
30
30
  "graphql": "^15.4.0",
31
31
  "pg": "^8.5.0",
32
32
  "uvu": "^0.5.1"
@@ -1,2 +1 @@
1
- export * from './ContentEventApplier'
2
1
  export * from './EntitiesSelector'
@@ -141,6 +141,10 @@ export type _ValidatorArgument = {
141
141
  export type ResolverTypeWrapper<T> = Promise<T> | T
142
142
 
143
143
 
144
+ export type ResolverWithResolve<TResult, TParent, TContext, TArgs> = {
145
+ resolve: ResolverFn<TResult, TParent, TContext, TArgs>
146
+ }
147
+
144
148
  export type LegacyStitchingResolver<TResult, TParent, TContext, TArgs> = {
145
149
  fragment: string
146
150
  resolve: ResolverFn<TResult, TParent, TContext, TArgs>
@@ -153,6 +157,7 @@ export type NewStitchingResolver<TResult, TParent, TContext, TArgs> = {
153
157
  export type StitchingResolver<TResult, TParent, TContext, TArgs> = LegacyStitchingResolver<TResult, TParent, TContext, TArgs> | NewStitchingResolver<TResult, TParent, TContext, TArgs>
154
158
  export type Resolver<TResult, TParent = {}, TContext = {}, TArgs = {}> =
155
159
  | ResolverFn<TResult, TParent, TContext, TArgs>
160
+ | ResolverWithResolve<TResult, TParent, TContext, TArgs>
156
161
  | StitchingResolver<TResult, TParent, TContext, TArgs>
157
162
 
158
163
  export type ResolverFn<TResult, TParent, TContext, TArgs> = (
@@ -22,7 +22,7 @@ export const resolveGenericValue = <T>(value: Value.GenericValueLike<T>): Promis
22
22
  export const resolveRowData = async <E>(
23
23
  values: ColumnValue<E>[],
24
24
  ): Promise<ResolvedColumnValue<Exclude<E, undefined>>[]> => {
25
- const valuePromises = values.map(async it => ({ ...it, resolvedValue: await it.value }))
25
+ const valuePromises = values.map(async (it): Promise<ResolvedColumnValue<E | undefined>> => ({ ...it, resolvedValue: await it.value }))
26
26
  const settledValues = await Promise.allSettled(valuePromises)
27
27
  const failed = getRejections(settledValues)
28
28
  if (failed.length > 0) {
@@ -11,64 +11,87 @@ import {
11
11
  import * as Database from '@contember/database'
12
12
  import { UniqueWhereError } from '../inputProcessing'
13
13
  import { Model } from '@contember/schema'
14
- import { ResolvedColumnValue } from './ColumnValue'
15
- import { isOwningRelation, NamingHelper } from '@contember/schema-utils'
14
+ import { isOwningRelation, isRelation, NamingHelper } from '@contember/schema-utils'
16
15
  import RelationType = Model.RelationType
17
16
 
18
- export class EnrichedError {
19
- constructor(
20
- public readonly entity: Model.Entity,
21
- public readonly values: ResolvedColumnValue[] | null,
22
- public readonly originalError: any,
23
- ) {}
24
- }
25
17
 
26
- const findConstraint = (entity: Model.Entity, constraintName: string): Model.UniqueConstraint | null => {
27
- for (const constraint of Object.values(entity.unique)) {
28
- if (constraint.name === constraintName) {
29
- return constraint
18
+ const findUniqueConstraint = (schema: Model.Schema, constraintName: string): [Model.Entity, Model.UniqueConstraint] | [null, null] => {
19
+ for (const entity of Object.values(schema.entities)) {
20
+ for (const constraint of Object.values(entity.unique)) {
21
+ if (constraint.name === constraintName) {
22
+ return [entity, constraint]
23
+ }
30
24
  }
31
25
  }
32
- for (const field of Object.values(entity.fields)) {
33
- if (
34
- field.type === RelationType.OneHasOne &&
35
- isOwningRelation(field) &&
36
- NamingHelper.createUniqueConstraintName(entity.name, [field.name]) === constraintName
37
- ) {
38
- return { name: constraintName, fields: [field.name] }
26
+ for (const entity of Object.values(schema.entities)) {
27
+ for (const field of Object.values(entity.fields)) {
28
+ if (
29
+ field.type === RelationType.OneHasOne &&
30
+ isOwningRelation(field) &&
31
+ NamingHelper.createUniqueConstraintName(entity.name, [field.name]) === constraintName
32
+ ) {
33
+ return [entity, { name: constraintName, fields: [field.name] }]
34
+ }
39
35
  }
40
36
  }
41
- return null
37
+ return [null, null]
38
+ }
39
+
40
+ type RelationInfo = {
41
+ owningEntity: Model.Entity
42
+ owningRelation: Model.Relation
43
+ targetEntity: Model.Entity
42
44
  }
43
45
 
44
- export const convertError = (e: any): MutationResult => {
45
- let entity: Model.Entity | null = null
46
- let values: ResolvedColumnValue[] | null = null
47
- if (e instanceof EnrichedError) {
48
- entity = e.entity
49
- values = e.values
50
- e = e.originalError
46
+ const findForeignConstraint = (schema: Model.Schema, constraintName: string): RelationInfo | null => {
47
+ for (const owningEntity of Object.values(schema.entities)) {
48
+ for (const field of Object.values(owningEntity.fields)) {
49
+ if (!isRelation(field) || !isOwningRelation(field) || !('joiningColumn' in field)) {
50
+ continue
51
+ }
52
+ const targetEntity = schema.entities[field.target]
53
+ const fkName = NamingHelper.createForeignKeyName(
54
+ owningEntity.tableName,
55
+ field.joiningColumn.columnName,
56
+ targetEntity.tableName,
57
+ targetEntity.primaryColumn,
58
+ )
59
+ if (fkName === constraintName) {
60
+ return { owningEntity, targetEntity, owningRelation: field }
61
+ }
62
+ }
51
63
  }
64
+ return null
65
+ }
66
+
67
+ export const convertError = (schema: Model.Schema, e: any): MutationResult => {
68
+
52
69
  if (e instanceof Database.NotNullViolationError) {
53
70
  return new MutationConstraintViolationError([], ConstraintType.notNull, e.originalMessage, [
54
71
  MutationResultHint.sqlError,
55
72
  ])
56
73
  }
57
74
  if (e instanceof Database.ForeignKeyViolationError) {
58
- return new MutationConstraintViolationError([], ConstraintType.foreignKey, e.originalMessage, [
59
- MutationResultHint.sqlError,
60
- ])
75
+ const relationInfo = e.constraint ? findForeignConstraint(schema, e.constraint) : null
76
+ const violationDetail: string = 'detail' in e.previous ? e.previous.detail : ''
77
+ const matchResult = violationDetail.match(/^Key \(.+\)=\((.+)\) is still referenced from table/)
78
+ const message = relationInfo
79
+ ? `Cannot delete ${matchResult ? `row ${matchResult[1]}` : 'unknown row'}`
80
+ + ` of entity ${relationInfo.targetEntity.name},`
81
+ + ` because it is still referenced from ${relationInfo.owningEntity.name}::${relationInfo.owningRelation.name}.`
82
+ + ' This is possibly caused by ACL denial or by missing "on delete cascade"'
83
+ : e.originalMessage
84
+ return new MutationConstraintViolationError([], ConstraintType.foreignKey, message, [MutationResultHint.sqlError])
61
85
  }
62
86
  if (e instanceof Database.UniqueViolationError) {
63
- const constraint = entity && e.constraint ? findConstraint(entity, e.constraint) : null
64
- const valuesInConstraint = constraint
65
- ? constraint.fields.map(it => values?.find(v => v.fieldName === it)?.resolvedValue)
66
- : []
67
- const message = constraint
68
- ? `Value (${valuesInConstraint.map(it => JSON.stringify(it)).join(', ')})` +
69
- ` of unique constraint (${constraint.fields.join(', ')}) already exists`
87
+ const [entity, constraint] = e.constraint ? findUniqueConstraint(schema, e.constraint) : [null, null]
88
+ const violationDetail: string = 'detail' in e.previous ? e.previous.detail : ''
89
+ const matchResult = violationDetail.match(/^Key \(.+\)=\((.+)\) already exists\.$/)
90
+ const values = matchResult?.[1]
91
+ const message = constraint && entity
92
+ ? `${values ? `Value (${values})` : 'Unknown value'}` +
93
+ ` already exists in unique columns (${constraint.fields.join(', ')}) on entity ${entity.name}`
70
94
  : e.originalMessage
71
-
72
95
  const paths = constraint ? constraint.fields.map(it => [{ field: it }]) : []
73
96
  return new MutationConstraintViolationError(paths, ConstraintType.uniqueKey, message, [MutationResultHint.sqlError])
74
97
  }
@@ -92,10 +115,10 @@ export const convertError = (e: any): MutationResult => {
92
115
  throw e
93
116
  }
94
117
 
95
- export const tryMutation = async (cb: () => Promise<MutationResultList>): Promise<MutationResultList> => {
118
+ export const tryMutation = async (schema: Model.Schema, cb: () => Promise<MutationResultList>): Promise<MutationResultList> => {
96
119
  try {
97
120
  return await cb()
98
121
  } catch (e) {
99
- return [convertError(e)]
122
+ return [convertError(schema, e)]
100
123
  }
101
124
  }
@@ -163,7 +163,7 @@ export class Mapper {
163
163
  if (entity.view) {
164
164
  throw new ImplementationException()
165
165
  }
166
- return tryMutation(() =>
166
+ return tryMutation(this.schema, () =>
167
167
  this.inserter.insert(this, entity, data, id => {
168
168
  const where = { [entity.primary]: id }
169
169
  this.primaryKeyCache[this.hashWhere(entity.name, where)] = id
@@ -180,7 +180,7 @@ export class Mapper {
180
180
  if (entity.view) {
181
181
  throw new ImplementationException()
182
182
  }
183
- return tryMutation(async () => {
183
+ return tryMutation(this.schema, async () => {
184
184
  const primaryValue = await this.getPrimaryValue(entity, by)
185
185
  if (primaryValue === undefined) {
186
186
  return [new MutationEntryNotFoundError([], by)]
@@ -195,7 +195,7 @@ export class Mapper {
195
195
  predicateFields: string[],
196
196
  builderCb: (builder: UpdateBuilder) => void,
197
197
  ): Promise<MutationResultList> {
198
- return tryMutation(async () => {
198
+ return tryMutation(this.schema, async () => {
199
199
  const primaryValue = await this.getPrimaryValue(entity, by)
200
200
  if (primaryValue === undefined) {
201
201
  return [new MutationEntryNotFoundError([], by)]
@@ -214,7 +214,7 @@ export class Mapper {
214
214
  if (entity.view) {
215
215
  throw new ImplementationException()
216
216
  }
217
- return tryMutation(async () => {
217
+ return tryMutation(this.schema, async () => {
218
218
  const primaryValue = await this.getPrimaryValue(entity, by)
219
219
  if (primaryValue === undefined) {
220
220
  return await this.inserter.insert(this, entity, create, id => {
@@ -234,7 +234,7 @@ export class Mapper {
234
234
  if (entity.view) {
235
235
  throw new ImplementationException()
236
236
  }
237
- return tryMutation(() => this.deleteExecutor.execute(this, entity, by, filter))
237
+ return tryMutation(this.schema, () => this.deleteExecutor.execute(this, entity, by, filter))
238
238
  }
239
239
 
240
240
  public async connectJunction(
@@ -177,10 +177,12 @@ export class MutationEntryNotFoundError implements MutationResultInterface {
177
177
  // possibly denied by acl
178
178
  export class MutationNoResultError implements MutationResultInterface {
179
179
  result = MutationResultType.noResultError as const
180
- hints: MutationResultHint[] = []
181
- message = undefined
182
180
 
183
- constructor(public readonly paths: Path[]) {}
181
+ constructor(
182
+ public readonly paths: Path[],
183
+ public readonly message?: string,
184
+ public readonly hints: MutationResultHint[] = [],
185
+ ) {}
184
186
  }
185
187
 
186
188
  export const prependPath = (path: Path, results: MutationResultList): MutationResultList =>
@@ -207,6 +209,7 @@ export const flattenResult = (result: (MutationResultList | MutationResultList[]
207
209
  export type ResultListNotFlatten = MutationResultList | MutationResultList[]
208
210
 
209
211
  export const collectResults = async (
212
+ schema: Model.Schema,
210
213
  mainPromise: Promise<ResultListNotFlatten | undefined> | undefined,
211
214
  otherPromises: (Promise<ResultListNotFlatten | undefined> | undefined)[],
212
215
  ): Promise<MutationResultList> => {
@@ -215,7 +218,7 @@ export const collectResults = async (
215
218
  .filter((it): it is Promise<ResultListNotFlatten> => !!it)
216
219
  .map(it =>
217
220
  it //
218
- .catch(e => [convertError(e)])
221
+ .catch(e => [convertError(schema, e)])
219
222
  .then(value => ({ value, index: index++ })),
220
223
  )
221
224
  const results = await Promise.allSettled(allPromises)
@@ -10,6 +10,7 @@ import {
10
10
  MutationEntryNotFoundError,
11
11
  MutationNoResultError,
12
12
  MutationNothingToDo,
13
+ MutationResultHint,
13
14
  MutationResultList,
14
15
  NothingToDoReason,
15
16
  } from '../Result'
@@ -35,7 +36,6 @@ export class DeleteExecutor {
35
36
  filter?: Input.OptionalWhere,
36
37
  ): Promise<MutationResultList> {
37
38
  return mapper.mutex.execute(async () => {
38
- const db = mapper.db
39
39
  await mapper.constraintHelper.setFkConstraintsDeferred()
40
40
  const primaryValue = await mapper.getPrimaryValue(entity, by)
41
41
  if (!primaryValue) {
@@ -50,15 +50,8 @@ export class DeleteExecutor {
50
50
  return [new MutationNoResultError([])]
51
51
  }
52
52
 
53
- try {
54
- await mapper.constraintHelper.setFkConstraintsImmediate()
55
- return [new MutationDeleteOk([], entity, primaryValue)]
56
- } catch (e) {
57
- if (e instanceof ForeignKeyViolationError) {
58
- return [new MutationNoResultError([])]
59
- }
60
- throw e
61
- }
53
+ await mapper.constraintHelper.setFkConstraintsImmediate()
54
+ return [new MutationDeleteOk([], entity, primaryValue)]
62
55
  })
63
56
  }
64
57
 
@@ -5,7 +5,6 @@ import { getColumnName, getColumnType } from '@contember/schema-utils'
5
5
  import { ColumnValue, ResolvedColumnValue, resolveGenericValue, resolveRowData } from '../ColumnValue'
6
6
  import { ImplementationException } from '../../exception'
7
7
  import { AbortInsert } from './Inserter'
8
- import { EnrichedError } from '../ErrorUtils'
9
8
 
10
9
  export interface InsertResult {
11
10
  values: ResolvedColumnValue[]
@@ -79,7 +78,7 @@ export class InsertBuilder {
79
78
  return { values: resolvedData as ResolvedColumnValue[], executed: true, primaryValue: result, aborted: false }
80
79
  } catch (e) {
81
80
  this.resolver(null)
82
- throw new EnrichedError(this.entity, resolvedDataFinal, e)
81
+ throw e
83
82
  }
84
83
  }
85
84
  }
@@ -55,7 +55,7 @@ export class Inserter {
55
55
  new MutationCreateOk([], entity, primary, data, values)
56
56
  const insertPromise = this.executeInsert(insertBuilder, mapper.db, okResultFactory)
57
57
 
58
- return await collectResults(insertPromise, Object.values(promises))
58
+ return await collectResults(this.schema, insertPromise, Object.values(promises))
59
59
  }
60
60
 
61
61
  private async executeInsert(
@@ -63,7 +63,7 @@ export class Inserter {
63
63
  db: Client,
64
64
  okResultFactory: (primary: Value.PrimaryValue, values: RowValues) => MutationCreateOk,
65
65
  ): Promise<MutationResultList> {
66
- return tryMutation(async () => {
66
+ return tryMutation(this.schema, async () => {
67
67
  const result = await insertBuilder.execute(db)
68
68
  if (result.aborted) {
69
69
  return [new MutationNothingToDo([], NothingToDoReason.aborted)]
@@ -5,7 +5,6 @@ import { Client, Operator, QueryBuilder, UpdateBuilder as DbUpdateBuilder, Value
5
5
  import { PathFactory, WhereBuilder } from '../select'
6
6
  import { ColumnValue, ResolvedColumnValue, resolveGenericValue, resolveRowData } from '../ColumnValue'
7
7
  import { AbortUpdate } from './Updater'
8
- import { EnrichedError } from '../ErrorUtils'
9
8
 
10
9
  export interface UpdateResult {
11
10
  values: ResolvedColumnValue[]
@@ -120,7 +119,7 @@ export class UpdateBuilder {
120
119
  return { values: resolvedData as ResolvedColumnValue[], affectedRows: result, executed: true, aborted: false }
121
120
  } catch (e) {
122
121
  this.resolver(null)
123
- throw new EnrichedError(this.entity, resolvedDataFinal, e)
122
+ throw e
124
123
  }
125
124
  }
126
125
  }
@@ -52,7 +52,7 @@ export class Updater {
52
52
  const okResultFactory = (values: RowValues) => new MutationUpdateOk([], entity, primaryValue, data, values)
53
53
  const mutationResultPromise = Updater.executeUpdate(updateBuilder, mapper.db, okResultFactory)
54
54
 
55
- return await collectResults(mutationResultPromise, Object.values(promises))
55
+ return await collectResults(this.schema, mutationResultPromise, Object.values(promises))
56
56
  }
57
57
 
58
58
  public async updateCb(
@@ -64,7 +64,7 @@ export class ExecutionContainerFactory {
64
64
  .addService('inputPreValidator', ({ entityRulesResolver, columnValueResolver, dataSelector }) =>
65
65
  new InputPreValidator(this.schema.model, entityRulesResolver, columnValueResolver, dataSelector))
66
66
  .addService('mutationResolver', ({ db, mapperFactory, inputPreValidator, queryAstFactory }) =>
67
- new MutationResolver(db, mapperFactory, this.setupSystemVariables, inputPreValidator, queryAstFactory))
67
+ new MutationResolver(this.schema.model, db, mapperFactory, this.setupSystemVariables, inputPreValidator, queryAstFactory))
68
68
  .addService('validationResolver', ({ inputPreValidator, db, mapperFactory }) =>
69
69
  new ValidationResolver(db, mapperFactory, inputPreValidator))
70
70
  .build()
@@ -8,7 +8,7 @@ import {
8
8
  MapperFactory,
9
9
  MutationResultHint,
10
10
  MutationResultList,
11
- MutationResultType,
11
+ MutationResultType, tryMutation,
12
12
  } from '../mapper'
13
13
  import { ValidationResolver } from './ValidationResolver'
14
14
  import { GraphQLResolveInfo } from 'graphql'
@@ -23,8 +23,11 @@ import { executeReadOperations } from './ReadHelpers'
23
23
 
24
24
  type WithoutNode<T extends { node: any }> = Pick<T, Exclude<keyof T, 'node'>>
25
25
 
26
+ type TransactionOptions = { deferForeignKeyConstraints?: boolean }
27
+
26
28
  export class MutationResolver {
27
29
  constructor(
30
+ private readonly schema: Model.Schema,
28
31
  private readonly db: Client,
29
32
  private readonly mapperFactory: MapperFactory,
30
33
  private readonly systemVariablesSetup: (db: Client) => Promise<void>,
@@ -32,7 +35,7 @@ export class MutationResolver {
32
35
  private readonly graphqlQueryAstFactory: GraphQlQueryAstFactory,
33
36
  ) {}
34
37
 
35
- public async resolveTransaction(info: GraphQLResolveInfo): Promise<Result.TransactionResult> {
38
+ public async resolveTransaction(info: GraphQLResolveInfo, options: TransactionOptions): Promise<Result.TransactionResult> {
36
39
  const queryAst = this.graphqlQueryAstFactory.create(info, (node, path) => {
37
40
  return (
38
41
  (path.length === 1 && !['ok', 'validation', 'errorMessage', 'errors'].includes(node.name.value)) ||
@@ -57,6 +60,9 @@ export class MutationResolver {
57
60
  }))
58
61
 
59
62
  return this.transaction(async (mapper, trx) => {
63
+ if (options?.deferForeignKeyConstraints) {
64
+ await mapper.constraintHelper.setFkConstraintsDeferred()
65
+ }
60
66
  const validationResult: Record<string, Result.MutationFieldResult> = {}
61
67
  const validationErrors: Result.ValidationError[] = []
62
68
  for (const field of queryAst.fields) {
@@ -181,6 +187,16 @@ export class MutationResolver {
181
187
  }
182
188
  trxResult[field.alias] = result
183
189
  }
190
+ if (options?.deferForeignKeyConstraints) {
191
+ const constraintsResult = await tryMutation(this.schema, async () => {
192
+ await mapper.constraintHelper.setFkConstraintsImmediate()
193
+ return []
194
+ })
195
+ const errorResponse = this.createErrorResponse(constraintsResult)
196
+ if (errorResponse) {
197
+ return { ...errorResponse, ...validationResult }
198
+ }
199
+ }
184
200
 
185
201
  return { ok: true, errors: [], validation: { valid: true, errors: [] }, ...trxResult }
186
202
  })
@@ -4,7 +4,7 @@ import {
4
4
  GraphQLNonNull,
5
5
  GraphQLObjectType,
6
6
  GraphQLSchema,
7
- GraphQLString,
7
+ GraphQLString, GraphQLInputObjectType,
8
8
  } from 'graphql'
9
9
  import { Model } from '@contember/schema'
10
10
  import { MutationProvider } from './MutationProvider'
@@ -59,6 +59,16 @@ export class GraphQlSchemaBuilder {
59
59
  })
60
60
  if (mutations.size > 0) {
61
61
  mutations.set('transaction', {
62
+ args: {
63
+ options: {
64
+ type: new GraphQLInputObjectType({
65
+ name: 'MutationTransactionOptions',
66
+ fields: {
67
+ deferForeignKeyConstraints: { type: GraphQLBoolean },
68
+ },
69
+ }),
70
+ },
71
+ },
62
72
  type: new GraphQLNonNull(
63
73
  new GraphQLObjectType({
64
74
  name: 'MutationTransaction',
@@ -76,9 +86,11 @@ export class GraphQlSchemaBuilder {
76
86
  },
77
87
  }),
78
88
  ),
79
- resolve: async (parent, args, context: Context, info) => {
89
+ resolve: async (parent, args: { options?: { deferForeignKeyConstraints?: boolean } }, context: Context, info) => {
80
90
  return context.timer(`GraphQL.mutation.${info.fieldName}`, () =>
81
- context.executionContainer.mutationResolver.resolveTransaction(info),
91
+ context.executionContainer.mutationResolver.resolveTransaction(info, {
92
+ deferForeignKeyConstraints: args.options?.deferForeignKeyConstraints ?? false,
93
+ }),
82
94
  )
83
95
  },
84
96
  })