@contember/engine-content-api 2.1.0-alpha.8 → 2.1.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +54 -0
- package/dist/development/index.cjs +0 -2
- package/dist/development/index.cjs.map +1 -1
- package/dist/development/index.js +0 -2
- package/dist/development/index.js.map +1 -1
- package/dist/development/src/ExecutionContainer.cjs +82 -29
- package/dist/development/src/ExecutionContainer.cjs.map +1 -1
- package/dist/development/src/ExecutionContainer.js +82 -29
- package/dist/development/src/ExecutionContainer.js.map +1 -1
- package/dist/development/src/acl/Authorizator.cjs.map +1 -1
- package/dist/development/src/acl/Authorizator.js.map +1 -1
- package/dist/development/src/acl/EvaluatedPredicateReplacer.cjs.map +1 -1
- package/dist/development/src/acl/EvaluatedPredicateReplacer.js.map +1 -1
- package/dist/development/src/acl/PermissionFactory.cjs.map +1 -1
- package/dist/development/src/acl/PermissionFactory.js.map +1 -1
- package/dist/development/src/acl/PredicateFactory.cjs.map +1 -1
- package/dist/development/src/acl/PredicateFactory.js.map +1 -1
- package/dist/development/src/acl/PredicatesInjector.cjs +101 -12
- package/dist/development/src/acl/PredicatesInjector.cjs.map +1 -1
- package/dist/development/src/acl/PredicatesInjector.js +101 -12
- package/dist/development/src/acl/PredicatesInjector.js.map +1 -1
- package/dist/development/src/acl/VariableInjector.cjs.map +1 -1
- package/dist/development/src/acl/VariableInjector.js.map +1 -1
- package/dist/development/src/acl/VariableUtils.cjs.map +1 -1
- package/dist/development/src/acl/VariableUtils.js.map +1 -1
- package/dist/development/src/exception.cjs.map +1 -1
- package/dist/development/src/exception.js.map +1 -1
- package/dist/development/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducer.cjs.map +1 -1
- package/dist/development/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducer.js.map +1 -1
- package/dist/development/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducerExecutionHandler.cjs.map +1 -1
- package/dist/development/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducerExecutionHandler.js.map +1 -1
- package/dist/development/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.cjs +4 -4
- package/dist/development/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.cjs.map +1 -1
- package/dist/development/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.js +4 -4
- package/dist/development/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.js.map +1 -1
- package/dist/development/src/extensions/paginatedHasMany/PaginatedHasManyCountVisitor.cjs.map +1 -1
- package/dist/development/src/extensions/paginatedHasMany/PaginatedHasManyCountVisitor.js.map +1 -1
- package/dist/development/src/extensions/paginatedHasMany/PaginatedHasManyExecutionHandler.cjs.map +1 -1
- package/dist/development/src/extensions/paginatedHasMany/PaginatedHasManyExecutionHandler.js.map +1 -1
- package/dist/development/src/extensions/paginatedHasMany/PaginatedHasManyFieldProvider.cjs.map +1 -1
- package/dist/development/src/extensions/paginatedHasMany/PaginatedHasManyFieldProvider.js.map +1 -1
- package/dist/development/src/extensions/paginatedHasMany/PaginatedHasManyFieldProviderVisitor.cjs.map +1 -1
- package/dist/development/src/extensions/paginatedHasMany/PaginatedHasManyFieldProviderVisitor.js.map +1 -1
- package/dist/development/src/extensions/paginatedHasMany/PaginatedHasManyNodesVisitor.cjs.map +1 -1
- package/dist/development/src/extensions/paginatedHasMany/PaginatedHasManyNodesVisitor.js.map +1 -1
- package/dist/development/src/input-validation/ColumnValueResolver.cjs.map +1 -1
- package/dist/development/src/input-validation/ColumnValueResolver.js.map +1 -1
- package/dist/development/src/input-validation/EntityRulesResolver.cjs.map +1 -1
- package/dist/development/src/input-validation/EntityRulesResolver.js.map +1 -1
- package/dist/development/src/input-validation/QueryAstFactory.cjs.map +1 -1
- package/dist/development/src/input-validation/QueryAstFactory.js.map +1 -1
- package/dist/development/src/input-validation/ValidationContext.cjs.map +1 -1
- package/dist/development/src/input-validation/ValidationContext.js.map +1 -1
- package/dist/development/src/input-validation/ValidationDataSelector.cjs.map +1 -1
- package/dist/development/src/input-validation/ValidationDataSelector.js.map +1 -1
- package/dist/development/src/input-validation/ValidationEvaluation.cjs.map +1 -1
- package/dist/development/src/input-validation/ValidationEvaluation.js.map +1 -1
- package/dist/development/src/input-validation/ValidationPath.cjs.map +1 -1
- package/dist/development/src/input-validation/ValidationPath.js.map +1 -1
- package/dist/development/src/input-validation/dependencies/DependencyCollector.cjs +3 -3
- package/dist/development/src/input-validation/dependencies/DependencyCollector.cjs.map +1 -1
- package/dist/development/src/input-validation/dependencies/DependencyCollector.js +3 -3
- package/dist/development/src/input-validation/dependencies/DependencyCollector.js.map +1 -1
- package/dist/development/src/input-validation/dependencies/DependencyMerger.cjs.map +1 -1
- package/dist/development/src/input-validation/dependencies/DependencyMerger.js.map +1 -1
- package/dist/development/src/input-validation/preValidation/CreateInputPreValidationProcessor.cjs.map +1 -1
- package/dist/development/src/input-validation/preValidation/CreateInputPreValidationProcessor.js.map +1 -1
- package/dist/development/src/input-validation/preValidation/InputPreValidator.cjs +2 -4
- package/dist/development/src/input-validation/preValidation/InputPreValidator.cjs.map +1 -1
- package/dist/development/src/input-validation/preValidation/InputPreValidator.js +2 -4
- package/dist/development/src/input-validation/preValidation/InputPreValidator.js.map +1 -1
- package/dist/development/src/input-validation/preValidation/UpdateInputPreValidationProcessor.cjs.map +1 -1
- package/dist/development/src/input-validation/preValidation/UpdateInputPreValidationProcessor.js.map +1 -1
- package/dist/development/src/inputProcessing/CreateInputVisitor.cjs +6 -4
- package/dist/development/src/inputProcessing/CreateInputVisitor.cjs.map +1 -1
- package/dist/development/src/inputProcessing/CreateInputVisitor.js +6 -4
- package/dist/development/src/inputProcessing/CreateInputVisitor.js.map +1 -1
- package/dist/development/src/inputProcessing/FieldNode.cjs.map +1 -1
- package/dist/development/src/inputProcessing/FieldNode.js.map +1 -1
- package/dist/development/src/inputProcessing/ObjectNode.cjs.map +1 -1
- package/dist/development/src/inputProcessing/ObjectNode.js.map +1 -1
- package/dist/development/src/inputProcessing/UniqueWhereExpander.cjs.map +1 -1
- package/dist/development/src/inputProcessing/UniqueWhereExpander.js.map +1 -1
- package/dist/development/src/inputProcessing/UpdateInputVisitor.cjs +7 -5
- package/dist/development/src/inputProcessing/UpdateInputVisitor.cjs.map +1 -1
- package/dist/development/src/inputProcessing/UpdateInputVisitor.js +7 -5
- package/dist/development/src/inputProcessing/UpdateInputVisitor.js.map +1 -1
- package/dist/development/src/introspection/IntrospectionSchemaDefinitionFactory.cjs.map +1 -1
- package/dist/development/src/introspection/IntrospectionSchemaDefinitionFactory.js.map +1 -1
- package/dist/development/src/introspection/IntrospectionSchemaFactory.cjs.map +1 -1
- package/dist/development/src/introspection/IntrospectionSchemaFactory.js.map +1 -1
- package/dist/development/src/introspection/content-schema.types.cjs.map +1 -1
- package/dist/development/src/introspection/content-schema.types.js.map +1 -1
- package/dist/development/src/introspection/introspection.schema.cjs.map +1 -1
- package/dist/development/src/introspection/introspection.schema.js.map +1 -1
- package/dist/development/src/mapper/CheckedPrimary.cjs.map +1 -1
- package/dist/development/src/mapper/CheckedPrimary.js.map +1 -1
- package/dist/development/src/mapper/ColumnValue.cjs.map +1 -1
- package/dist/development/src/mapper/ColumnValue.js.map +1 -1
- package/dist/development/src/mapper/ErrorUtils.cjs.map +1 -1
- package/dist/development/src/mapper/ErrorUtils.js +1 -1
- package/dist/development/src/mapper/ErrorUtils.js.map +1 -1
- package/dist/development/src/mapper/EventManager.cjs.map +1 -1
- package/dist/development/src/mapper/EventManager.js.map +1 -1
- package/dist/development/src/mapper/JunctionTableManager.cjs +16 -2
- package/dist/development/src/mapper/JunctionTableManager.cjs.map +1 -1
- package/dist/development/src/mapper/JunctionTableManager.js +17 -3
- package/dist/development/src/mapper/JunctionTableManager.js.map +1 -1
- package/dist/development/src/mapper/Mapper.cjs +8 -7
- package/dist/development/src/mapper/Mapper.cjs.map +1 -1
- package/dist/development/src/mapper/Mapper.js +8 -7
- package/dist/development/src/mapper/Mapper.js.map +1 -1
- package/dist/development/src/mapper/MapperFactory.cjs.map +1 -1
- package/dist/development/src/mapper/MapperFactory.js.map +1 -1
- package/dist/development/src/mapper/MutationProcessorHelper.cjs.map +1 -1
- package/dist/development/src/mapper/MutationProcessorHelper.js.map +1 -1
- package/dist/development/src/mapper/Result.cjs +1 -1
- package/dist/development/src/mapper/Result.cjs.map +1 -1
- package/dist/development/src/mapper/Result.js +1 -1
- package/dist/development/src/mapper/Result.js.map +1 -1
- package/dist/development/src/mapper/delete/DeleteExecutor.cjs.map +1 -1
- package/dist/development/src/mapper/delete/DeleteExecutor.js.map +1 -1
- package/dist/development/src/mapper/delete/DeleteState.cjs.map +1 -1
- package/dist/development/src/mapper/delete/DeleteState.js.map +1 -1
- package/dist/development/src/mapper/delete/DeletedEntitiesStorage.cjs.map +1 -1
- package/dist/development/src/mapper/delete/DeletedEntitiesStorage.js.map +1 -1
- package/dist/development/src/mapper/delete/helpers.cjs.map +1 -1
- package/dist/development/src/mapper/delete/helpers.js.map +1 -1
- package/dist/development/src/mapper/insert/InsertBuilder.cjs +27 -31
- package/dist/development/src/mapper/insert/InsertBuilder.cjs.map +1 -1
- package/dist/development/src/mapper/insert/InsertBuilder.js +27 -31
- package/dist/development/src/mapper/insert/InsertBuilder.js.map +1 -1
- package/dist/development/src/mapper/insert/InsertBuilderFactory.cjs.map +1 -1
- package/dist/development/src/mapper/insert/InsertBuilderFactory.js.map +1 -1
- package/dist/development/src/mapper/insert/Inserter.cjs.map +1 -1
- package/dist/development/src/mapper/insert/Inserter.js.map +1 -1
- package/dist/development/src/mapper/insert/SqlCreateInputProcessor.cjs.map +1 -1
- package/dist/development/src/mapper/insert/SqlCreateInputProcessor.js.map +1 -1
- package/dist/development/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.cjs.map +1 -1
- package/dist/development/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.js.map +1 -1
- package/dist/development/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.cjs.map +1 -1
- package/dist/development/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.js.map +1 -1
- package/dist/development/src/mapper/insert/relations/OneHasManyCreateInputProcessor.cjs.map +1 -1
- package/dist/development/src/mapper/insert/relations/OneHasManyCreateInputProcessor.js.map +1 -1
- package/dist/development/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.cjs.map +1 -1
- package/dist/development/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.js.map +1 -1
- package/dist/development/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.cjs.map +1 -1
- package/dist/development/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.js.map +1 -1
- package/dist/development/src/mapper/select/ConditionBuilder.cjs +7 -5
- package/dist/development/src/mapper/select/ConditionBuilder.cjs.map +1 -1
- package/dist/development/src/mapper/select/ConditionBuilder.js +8 -6
- package/dist/development/src/mapper/select/ConditionBuilder.js.map +1 -1
- package/dist/development/src/mapper/select/JoinBuilder.cjs.map +1 -1
- package/dist/development/src/mapper/select/JoinBuilder.js.map +1 -1
- package/dist/development/src/mapper/select/JoinVisitor.cjs.map +1 -1
- package/dist/development/src/mapper/select/JoinVisitor.js.map +1 -1
- package/dist/development/src/mapper/select/OrderByBuilder.cjs.map +1 -1
- package/dist/development/src/mapper/select/OrderByBuilder.js.map +1 -1
- package/dist/development/src/mapper/select/OrderByHelper.cjs.map +1 -1
- package/dist/development/src/mapper/select/OrderByHelper.js.map +1 -1
- package/dist/development/src/mapper/select/Path.cjs.map +1 -1
- package/dist/development/src/mapper/select/Path.js.map +1 -1
- package/dist/development/src/mapper/select/RelationFetcher.cjs.map +1 -1
- package/dist/development/src/mapper/select/RelationFetcher.js.map +1 -1
- package/dist/development/src/mapper/select/SelectBuilder.cjs +7 -10
- package/dist/development/src/mapper/select/SelectBuilder.cjs.map +1 -1
- package/dist/development/src/mapper/select/SelectBuilder.js +7 -10
- package/dist/development/src/mapper/select/SelectBuilder.js.map +1 -1
- package/dist/development/src/mapper/select/SelectHydrator.cjs +1 -1
- package/dist/development/src/mapper/select/SelectHydrator.cjs.map +1 -1
- package/dist/development/src/mapper/select/SelectHydrator.js +1 -1
- package/dist/development/src/mapper/select/SelectHydrator.js.map +1 -1
- package/dist/development/src/mapper/select/WhereBuilder.cjs +20 -18
- package/dist/development/src/mapper/select/WhereBuilder.cjs.map +1 -1
- package/dist/development/src/mapper/select/WhereBuilder.js +20 -18
- package/dist/development/src/mapper/select/WhereBuilder.js.map +1 -1
- package/dist/development/src/mapper/select/handlers/FieldsVisitor.cjs +1 -1
- package/dist/development/src/mapper/select/handlers/FieldsVisitor.cjs.map +1 -1
- package/dist/development/src/mapper/select/handlers/FieldsVisitor.js +1 -1
- package/dist/development/src/mapper/select/handlers/FieldsVisitor.js.map +1 -1
- package/dist/development/src/mapper/select/handlers/FieldsVisitorFactory.cjs.map +1 -1
- package/dist/development/src/mapper/select/handlers/FieldsVisitorFactory.js.map +1 -1
- package/dist/development/src/mapper/select/handlers/MetaHandler.cjs.map +1 -1
- package/dist/development/src/mapper/select/handlers/MetaHandler.js.map +1 -1
- package/dist/development/src/mapper/select/optimizer/ConditionOptimizer.cjs.map +1 -1
- package/dist/development/src/mapper/select/optimizer/ConditionOptimizer.js.map +1 -1
- package/dist/development/src/mapper/select/optimizer/WhereOptimizer.cjs +7 -3
- package/dist/development/src/mapper/select/optimizer/WhereOptimizer.cjs.map +1 -1
- package/dist/development/src/mapper/select/optimizer/WhereOptimizer.js +7 -3
- package/dist/development/src/mapper/select/optimizer/WhereOptimizer.js.map +1 -1
- package/dist/development/src/mapper/select/optimizer/WhereReplacer.cjs.map +1 -1
- package/dist/development/src/mapper/select/optimizer/WhereReplacer.js.map +1 -1
- package/dist/development/src/mapper/select/optimizer/helpers.cjs.map +1 -1
- package/dist/development/src/mapper/select/optimizer/helpers.js.map +1 -1
- package/dist/development/src/mapper/update/SqlUpdateInputProcessor.cjs.map +1 -1
- package/dist/development/src/mapper/update/SqlUpdateInputProcessor.js.map +1 -1
- package/dist/development/src/mapper/update/UpdateBuilder.cjs +64 -68
- package/dist/development/src/mapper/update/UpdateBuilder.cjs.map +1 -1
- package/dist/development/src/mapper/update/UpdateBuilder.js +64 -68
- package/dist/development/src/mapper/update/UpdateBuilder.js.map +1 -1
- package/dist/development/src/mapper/update/UpdateBuilderFactory.cjs.map +1 -1
- package/dist/development/src/mapper/update/UpdateBuilderFactory.js.map +1 -1
- package/dist/development/src/mapper/update/Updater.cjs +15 -3
- package/dist/development/src/mapper/update/Updater.cjs.map +1 -1
- package/dist/development/src/mapper/update/Updater.js +16 -4
- package/dist/development/src/mapper/update/Updater.js.map +1 -1
- package/dist/development/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.cjs.map +1 -1
- package/dist/development/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.js.map +1 -1
- package/dist/development/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.cjs.map +1 -1
- package/dist/development/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.js.map +1 -1
- package/dist/development/src/mapper/update/relations/OneHasManyUpdateInputProcessor.cjs.map +1 -1
- package/dist/development/src/mapper/update/relations/OneHasManyUpdateInputProcessor.js.map +1 -1
- package/dist/development/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.cjs.map +1 -1
- package/dist/development/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.js.map +1 -1
- package/dist/development/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.cjs.map +1 -1
- package/dist/development/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.js.map +1 -1
- package/dist/development/src/resolvers/GraphQlQueryAstFactory.cjs.map +1 -1
- package/dist/development/src/resolvers/GraphQlQueryAstFactory.js.map +1 -1
- package/dist/development/src/resolvers/MutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/MutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/ReadHelpers.cjs.map +1 -1
- package/dist/development/src/resolvers/ReadHelpers.js.map +1 -1
- package/dist/development/src/resolvers/ReadResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/ReadResolver.js.map +1 -1
- package/dist/development/src/resolvers/RefreshViewResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/RefreshViewResolver.js.map +1 -1
- package/dist/development/src/resolvers/ValidationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/ValidationResolver.js.map +1 -1
- package/dist/development/src/schema/ColumnTypeResolver.cjs.map +1 -1
- package/dist/development/src/schema/ColumnTypeResolver.js.map +1 -1
- package/dist/development/src/schema/ConditionTypeProvider.cjs +2 -0
- package/dist/development/src/schema/ConditionTypeProvider.cjs.map +1 -1
- package/dist/development/src/schema/ConditionTypeProvider.js +3 -1
- package/dist/development/src/schema/ConditionTypeProvider.js.map +1 -1
- package/dist/development/src/schema/CustomTypesProvider.cjs.map +1 -1
- package/dist/development/src/schema/CustomTypesProvider.js.map +1 -1
- package/dist/development/src/schema/EntityTypeProvider.cjs +1 -3
- package/dist/development/src/schema/EntityTypeProvider.cjs.map +1 -1
- package/dist/development/src/schema/EntityTypeProvider.js +1 -3
- package/dist/development/src/schema/EntityTypeProvider.js.map +1 -1
- package/dist/development/src/schema/EnumsProvider.cjs.map +1 -1
- package/dist/development/src/schema/EnumsProvider.js.map +1 -1
- package/dist/development/src/schema/FieldAccessVisitor.cjs.map +1 -1
- package/dist/development/src/schema/FieldAccessVisitor.js.map +1 -1
- package/dist/development/src/schema/GraphQlSchemaBuilder.cjs +5 -11
- package/dist/development/src/schema/GraphQlSchemaBuilder.cjs.map +1 -1
- package/dist/development/src/schema/GraphQlSchemaBuilder.js +5 -11
- package/dist/development/src/schema/GraphQlSchemaBuilder.js.map +1 -1
- package/dist/development/src/schema/GraphQlSchemaBuilderFactory.cjs +103 -3
- package/dist/development/src/schema/GraphQlSchemaBuilderFactory.cjs.map +1 -1
- package/dist/development/src/schema/GraphQlSchemaBuilderFactory.js +103 -3
- package/dist/development/src/schema/GraphQlSchemaBuilderFactory.js.map +1 -1
- package/dist/development/src/schema/MutationProvider.cjs.map +1 -1
- package/dist/development/src/schema/MutationProvider.js +2 -2
- package/dist/development/src/schema/MutationProvider.js.map +1 -1
- package/dist/development/src/schema/OperationExtension.cjs +0 -1
- package/dist/development/src/schema/OperationExtension.cjs.map +1 -1
- package/dist/development/src/schema/OperationExtension.js +0 -1
- package/dist/development/src/schema/OperationExtension.js.map +1 -1
- package/dist/development/src/schema/OrderByTypeProvider.cjs.map +1 -1
- package/dist/development/src/schema/OrderByTypeProvider.js +1 -1
- package/dist/development/src/schema/OrderByTypeProvider.js.map +1 -1
- package/dist/development/src/schema/PaginatedFieldConfigFactory.cjs.map +1 -1
- package/dist/development/src/schema/PaginatedFieldConfigFactory.js +1 -1
- package/dist/development/src/schema/PaginatedFieldConfigFactory.js.map +1 -1
- package/dist/development/src/schema/QueryProvider.cjs.map +1 -1
- package/dist/development/src/schema/QueryProvider.js +2 -2
- package/dist/development/src/schema/QueryProvider.js.map +1 -1
- package/dist/development/src/schema/RefreshViewMutationProvider.cjs.map +1 -1
- package/dist/development/src/schema/RefreshViewMutationProvider.js.map +1 -1
- package/dist/development/src/schema/ResultSchemaTypeProvider.cjs.map +1 -1
- package/dist/development/src/schema/ResultSchemaTypeProvider.js.map +1 -1
- package/dist/development/src/schema/ValidationQueriesProvider.cjs +2 -8
- package/dist/development/src/schema/ValidationQueriesProvider.cjs.map +1 -1
- package/dist/development/src/schema/ValidationQueriesProvider.js +2 -8
- package/dist/development/src/schema/ValidationQueriesProvider.js.map +1 -1
- package/dist/development/src/schema/WhereTypeProvider.cjs +1 -3
- package/dist/development/src/schema/WhereTypeProvider.cjs.map +1 -1
- package/dist/development/src/schema/WhereTypeProvider.js +1 -3
- package/dist/development/src/schema/WhereTypeProvider.js.map +1 -1
- package/dist/development/src/schema/entities/FieldArgsVisitor.cjs.map +1 -1
- package/dist/development/src/schema/entities/FieldArgsVisitor.js.map +1 -1
- package/dist/development/src/schema/entities/FieldTypeVisitor.cjs.map +1 -1
- package/dist/development/src/schema/entities/FieldTypeVisitor.js.map +1 -1
- package/dist/development/src/schema/mutations/ConnectOrCreateRelationInputProvider.cjs.map +1 -1
- package/dist/development/src/schema/mutations/ConnectOrCreateRelationInputProvider.js.map +1 -1
- package/dist/development/src/schema/mutations/CreateEntityInputFieldVisitor.cjs.map +1 -1
- package/dist/development/src/schema/mutations/CreateEntityInputFieldVisitor.js.map +1 -1
- package/dist/development/src/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.cjs.map +1 -1
- package/dist/development/src/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.js.map +1 -1
- package/dist/development/src/schema/mutations/CreateEntityRelationInputFieldVisitor.cjs.map +1 -1
- package/dist/development/src/schema/mutations/CreateEntityRelationInputFieldVisitor.js.map +1 -1
- package/dist/development/src/schema/mutations/CreateEntityRelationInputProvider.cjs.map +1 -1
- package/dist/development/src/schema/mutations/CreateEntityRelationInputProvider.js.map +1 -1
- package/dist/development/src/schema/mutations/EntityInputProvider.cjs.map +1 -1
- package/dist/development/src/schema/mutations/EntityInputProvider.js.map +1 -1
- package/dist/development/src/schema/mutations/UpdateEntityInputFieldVisitor.cjs.map +1 -1
- package/dist/development/src/schema/mutations/UpdateEntityInputFieldVisitor.js.map +1 -1
- package/dist/development/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.cjs.map +1 -1
- package/dist/development/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.js.map +1 -1
- package/dist/development/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.cjs.map +1 -1
- package/dist/development/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.js +1 -1
- package/dist/development/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.js.map +1 -1
- package/dist/development/src/schema/mutations/UpdateEntityRelationInputProvider.cjs.map +1 -1
- package/dist/development/src/schema/mutations/UpdateEntityRelationInputProvider.js.map +1 -1
- package/dist/development/src/schema/utils.cjs.map +1 -1
- package/dist/development/src/schema/utils.js.map +1 -1
- package/dist/development/src/utils/Mutex.cjs.map +1 -1
- package/dist/development/src/utils/Mutex.js.map +1 -1
- package/dist/development/src/utils/ResolveInfoUtils.cjs.map +1 -1
- package/dist/development/src/utils/ResolveInfoUtils.js.map +1 -1
- package/dist/development/src/utils/accessor.cjs.map +1 -1
- package/dist/development/src/utils/accessor.js.map +1 -1
- package/dist/development/src/utils/assertNever.cjs.map +1 -1
- package/dist/development/src/utils/assertNever.js.map +1 -1
- package/dist/development/src/utils/isIt.cjs.map +1 -1
- package/dist/development/src/utils/isIt.js.map +1 -1
- package/dist/development/src/utils/object.cjs.map +1 -1
- package/dist/development/src/utils/object.js.map +1 -1
- package/dist/development/src/utils/paginationUtils.cjs.map +1 -1
- package/dist/development/src/utils/paginationUtils.js.map +1 -1
- package/dist/development/src/utils/promises.cjs.map +1 -1
- package/dist/development/src/utils/promises.js.map +1 -1
- package/dist/development/src/utils/singletonFactory.cjs.map +1 -1
- package/dist/development/src/utils/singletonFactory.js.map +1 -1
- package/dist/development/src/utils/strings.cjs.map +1 -1
- package/dist/development/src/utils/strings.js.map +1 -1
- package/dist/development/src/utils/tuple.cjs.map +1 -1
- package/dist/development/src/utils/tuple.js.map +1 -1
- package/dist/development/src/utils/uniqueWhereFields.cjs.map +1 -1
- package/dist/development/src/utils/uniqueWhereFields.js.map +1 -1
- package/dist/development/src/utils/viewComputedId.cjs.map +1 -1
- package/dist/development/src/utils/viewComputedId.js.map +1 -1
- package/dist/production/index.cjs +0 -2
- package/dist/production/index.cjs.map +1 -1
- package/dist/production/index.js +0 -2
- package/dist/production/index.js.map +1 -1
- package/dist/production/src/ExecutionContainer.cjs +82 -29
- package/dist/production/src/ExecutionContainer.cjs.map +1 -1
- package/dist/production/src/ExecutionContainer.js +82 -29
- package/dist/production/src/ExecutionContainer.js.map +1 -1
- package/dist/production/src/acl/Authorizator.cjs.map +1 -1
- package/dist/production/src/acl/Authorizator.js.map +1 -1
- package/dist/production/src/acl/EvaluatedPredicateReplacer.cjs.map +1 -1
- package/dist/production/src/acl/EvaluatedPredicateReplacer.js.map +1 -1
- package/dist/production/src/acl/PermissionFactory.cjs.map +1 -1
- package/dist/production/src/acl/PermissionFactory.js.map +1 -1
- package/dist/production/src/acl/PredicateFactory.cjs.map +1 -1
- package/dist/production/src/acl/PredicateFactory.js.map +1 -1
- package/dist/production/src/acl/PredicatesInjector.cjs +101 -12
- package/dist/production/src/acl/PredicatesInjector.cjs.map +1 -1
- package/dist/production/src/acl/PredicatesInjector.js +101 -12
- package/dist/production/src/acl/PredicatesInjector.js.map +1 -1
- package/dist/production/src/acl/VariableInjector.cjs.map +1 -1
- package/dist/production/src/acl/VariableInjector.js.map +1 -1
- package/dist/production/src/acl/VariableUtils.cjs.map +1 -1
- package/dist/production/src/acl/VariableUtils.js.map +1 -1
- package/dist/production/src/exception.cjs.map +1 -1
- package/dist/production/src/exception.js.map +1 -1
- package/dist/production/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducer.cjs.map +1 -1
- package/dist/production/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducer.js.map +1 -1
- package/dist/production/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducerExecutionHandler.cjs.map +1 -1
- package/dist/production/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducerExecutionHandler.js.map +1 -1
- package/dist/production/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.cjs +4 -4
- package/dist/production/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.cjs.map +1 -1
- package/dist/production/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.js +4 -4
- package/dist/production/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.js.map +1 -1
- package/dist/production/src/extensions/paginatedHasMany/PaginatedHasManyCountVisitor.cjs.map +1 -1
- package/dist/production/src/extensions/paginatedHasMany/PaginatedHasManyCountVisitor.js.map +1 -1
- package/dist/production/src/extensions/paginatedHasMany/PaginatedHasManyExecutionHandler.cjs.map +1 -1
- package/dist/production/src/extensions/paginatedHasMany/PaginatedHasManyExecutionHandler.js.map +1 -1
- package/dist/production/src/extensions/paginatedHasMany/PaginatedHasManyFieldProvider.cjs.map +1 -1
- package/dist/production/src/extensions/paginatedHasMany/PaginatedHasManyFieldProvider.js.map +1 -1
- package/dist/production/src/extensions/paginatedHasMany/PaginatedHasManyFieldProviderVisitor.cjs.map +1 -1
- package/dist/production/src/extensions/paginatedHasMany/PaginatedHasManyFieldProviderVisitor.js.map +1 -1
- package/dist/production/src/extensions/paginatedHasMany/PaginatedHasManyNodesVisitor.cjs.map +1 -1
- package/dist/production/src/extensions/paginatedHasMany/PaginatedHasManyNodesVisitor.js.map +1 -1
- package/dist/production/src/input-validation/ColumnValueResolver.cjs.map +1 -1
- package/dist/production/src/input-validation/ColumnValueResolver.js.map +1 -1
- package/dist/production/src/input-validation/EntityRulesResolver.cjs.map +1 -1
- package/dist/production/src/input-validation/EntityRulesResolver.js.map +1 -1
- package/dist/production/src/input-validation/QueryAstFactory.cjs.map +1 -1
- package/dist/production/src/input-validation/QueryAstFactory.js.map +1 -1
- package/dist/production/src/input-validation/ValidationContext.cjs.map +1 -1
- package/dist/production/src/input-validation/ValidationContext.js.map +1 -1
- package/dist/production/src/input-validation/ValidationDataSelector.cjs.map +1 -1
- package/dist/production/src/input-validation/ValidationDataSelector.js.map +1 -1
- package/dist/production/src/input-validation/ValidationEvaluation.cjs.map +1 -1
- package/dist/production/src/input-validation/ValidationEvaluation.js.map +1 -1
- package/dist/production/src/input-validation/ValidationPath.cjs.map +1 -1
- package/dist/production/src/input-validation/ValidationPath.js.map +1 -1
- package/dist/production/src/input-validation/dependencies/DependencyCollector.cjs +3 -3
- package/dist/production/src/input-validation/dependencies/DependencyCollector.cjs.map +1 -1
- package/dist/production/src/input-validation/dependencies/DependencyCollector.js +3 -3
- package/dist/production/src/input-validation/dependencies/DependencyCollector.js.map +1 -1
- package/dist/production/src/input-validation/dependencies/DependencyMerger.cjs.map +1 -1
- package/dist/production/src/input-validation/dependencies/DependencyMerger.js.map +1 -1
- package/dist/production/src/input-validation/preValidation/CreateInputPreValidationProcessor.cjs.map +1 -1
- package/dist/production/src/input-validation/preValidation/CreateInputPreValidationProcessor.js.map +1 -1
- package/dist/production/src/input-validation/preValidation/InputPreValidator.cjs +2 -4
- package/dist/production/src/input-validation/preValidation/InputPreValidator.cjs.map +1 -1
- package/dist/production/src/input-validation/preValidation/InputPreValidator.js +2 -4
- package/dist/production/src/input-validation/preValidation/InputPreValidator.js.map +1 -1
- package/dist/production/src/input-validation/preValidation/UpdateInputPreValidationProcessor.cjs.map +1 -1
- package/dist/production/src/input-validation/preValidation/UpdateInputPreValidationProcessor.js.map +1 -1
- package/dist/production/src/inputProcessing/CreateInputVisitor.cjs +6 -4
- package/dist/production/src/inputProcessing/CreateInputVisitor.cjs.map +1 -1
- package/dist/production/src/inputProcessing/CreateInputVisitor.js +6 -4
- package/dist/production/src/inputProcessing/CreateInputVisitor.js.map +1 -1
- package/dist/production/src/inputProcessing/FieldNode.cjs.map +1 -1
- package/dist/production/src/inputProcessing/FieldNode.js.map +1 -1
- package/dist/production/src/inputProcessing/ObjectNode.cjs.map +1 -1
- package/dist/production/src/inputProcessing/ObjectNode.js.map +1 -1
- package/dist/production/src/inputProcessing/UniqueWhereExpander.cjs.map +1 -1
- package/dist/production/src/inputProcessing/UniqueWhereExpander.js.map +1 -1
- package/dist/production/src/inputProcessing/UpdateInputVisitor.cjs +7 -5
- package/dist/production/src/inputProcessing/UpdateInputVisitor.cjs.map +1 -1
- package/dist/production/src/inputProcessing/UpdateInputVisitor.js +7 -5
- package/dist/production/src/inputProcessing/UpdateInputVisitor.js.map +1 -1
- package/dist/production/src/introspection/IntrospectionSchemaDefinitionFactory.cjs.map +1 -1
- package/dist/production/src/introspection/IntrospectionSchemaDefinitionFactory.js.map +1 -1
- package/dist/production/src/introspection/IntrospectionSchemaFactory.cjs.map +1 -1
- package/dist/production/src/introspection/IntrospectionSchemaFactory.js.map +1 -1
- package/dist/production/src/introspection/content-schema.types.cjs.map +1 -1
- package/dist/production/src/introspection/content-schema.types.js.map +1 -1
- package/dist/production/src/introspection/introspection.schema.cjs.map +1 -1
- package/dist/production/src/introspection/introspection.schema.js.map +1 -1
- package/dist/production/src/mapper/CheckedPrimary.cjs.map +1 -1
- package/dist/production/src/mapper/CheckedPrimary.js.map +1 -1
- package/dist/production/src/mapper/ColumnValue.cjs.map +1 -1
- package/dist/production/src/mapper/ColumnValue.js.map +1 -1
- package/dist/production/src/mapper/ErrorUtils.cjs.map +1 -1
- package/dist/production/src/mapper/ErrorUtils.js +1 -1
- package/dist/production/src/mapper/ErrorUtils.js.map +1 -1
- package/dist/production/src/mapper/EventManager.cjs.map +1 -1
- package/dist/production/src/mapper/EventManager.js.map +1 -1
- package/dist/production/src/mapper/JunctionTableManager.cjs +16 -2
- package/dist/production/src/mapper/JunctionTableManager.cjs.map +1 -1
- package/dist/production/src/mapper/JunctionTableManager.js +17 -3
- package/dist/production/src/mapper/JunctionTableManager.js.map +1 -1
- package/dist/production/src/mapper/Mapper.cjs +8 -7
- package/dist/production/src/mapper/Mapper.cjs.map +1 -1
- package/dist/production/src/mapper/Mapper.js +8 -7
- package/dist/production/src/mapper/Mapper.js.map +1 -1
- package/dist/production/src/mapper/MapperFactory.cjs.map +1 -1
- package/dist/production/src/mapper/MapperFactory.js.map +1 -1
- package/dist/production/src/mapper/MutationProcessorHelper.cjs.map +1 -1
- package/dist/production/src/mapper/MutationProcessorHelper.js.map +1 -1
- package/dist/production/src/mapper/Result.cjs +1 -1
- package/dist/production/src/mapper/Result.cjs.map +1 -1
- package/dist/production/src/mapper/Result.js +1 -1
- package/dist/production/src/mapper/Result.js.map +1 -1
- package/dist/production/src/mapper/delete/DeleteExecutor.cjs.map +1 -1
- package/dist/production/src/mapper/delete/DeleteExecutor.js.map +1 -1
- package/dist/production/src/mapper/delete/DeleteState.cjs.map +1 -1
- package/dist/production/src/mapper/delete/DeleteState.js.map +1 -1
- package/dist/production/src/mapper/delete/DeletedEntitiesStorage.cjs.map +1 -1
- package/dist/production/src/mapper/delete/DeletedEntitiesStorage.js.map +1 -1
- package/dist/production/src/mapper/delete/helpers.cjs.map +1 -1
- package/dist/production/src/mapper/delete/helpers.js.map +1 -1
- package/dist/production/src/mapper/insert/InsertBuilder.cjs +27 -31
- package/dist/production/src/mapper/insert/InsertBuilder.cjs.map +1 -1
- package/dist/production/src/mapper/insert/InsertBuilder.js +27 -31
- package/dist/production/src/mapper/insert/InsertBuilder.js.map +1 -1
- package/dist/production/src/mapper/insert/InsertBuilderFactory.cjs.map +1 -1
- package/dist/production/src/mapper/insert/InsertBuilderFactory.js.map +1 -1
- package/dist/production/src/mapper/insert/Inserter.cjs.map +1 -1
- package/dist/production/src/mapper/insert/Inserter.js.map +1 -1
- package/dist/production/src/mapper/insert/SqlCreateInputProcessor.cjs.map +1 -1
- package/dist/production/src/mapper/insert/SqlCreateInputProcessor.js.map +1 -1
- package/dist/production/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.cjs.map +1 -1
- package/dist/production/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.js.map +1 -1
- package/dist/production/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.cjs.map +1 -1
- package/dist/production/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.js.map +1 -1
- package/dist/production/src/mapper/insert/relations/OneHasManyCreateInputProcessor.cjs.map +1 -1
- package/dist/production/src/mapper/insert/relations/OneHasManyCreateInputProcessor.js.map +1 -1
- package/dist/production/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.cjs.map +1 -1
- package/dist/production/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.js.map +1 -1
- package/dist/production/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.cjs.map +1 -1
- package/dist/production/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.js.map +1 -1
- package/dist/production/src/mapper/select/ConditionBuilder.cjs +7 -5
- package/dist/production/src/mapper/select/ConditionBuilder.cjs.map +1 -1
- package/dist/production/src/mapper/select/ConditionBuilder.js +8 -6
- package/dist/production/src/mapper/select/ConditionBuilder.js.map +1 -1
- package/dist/production/src/mapper/select/JoinBuilder.cjs.map +1 -1
- package/dist/production/src/mapper/select/JoinBuilder.js.map +1 -1
- package/dist/production/src/mapper/select/JoinVisitor.cjs.map +1 -1
- package/dist/production/src/mapper/select/JoinVisitor.js.map +1 -1
- package/dist/production/src/mapper/select/OrderByBuilder.cjs.map +1 -1
- package/dist/production/src/mapper/select/OrderByBuilder.js.map +1 -1
- package/dist/production/src/mapper/select/OrderByHelper.cjs.map +1 -1
- package/dist/production/src/mapper/select/OrderByHelper.js.map +1 -1
- package/dist/production/src/mapper/select/Path.cjs.map +1 -1
- package/dist/production/src/mapper/select/Path.js.map +1 -1
- package/dist/production/src/mapper/select/RelationFetcher.cjs.map +1 -1
- package/dist/production/src/mapper/select/RelationFetcher.js.map +1 -1
- package/dist/production/src/mapper/select/SelectBuilder.cjs +7 -10
- package/dist/production/src/mapper/select/SelectBuilder.cjs.map +1 -1
- package/dist/production/src/mapper/select/SelectBuilder.js +7 -10
- package/dist/production/src/mapper/select/SelectBuilder.js.map +1 -1
- package/dist/production/src/mapper/select/SelectHydrator.cjs +1 -1
- package/dist/production/src/mapper/select/SelectHydrator.cjs.map +1 -1
- package/dist/production/src/mapper/select/SelectHydrator.js +1 -1
- package/dist/production/src/mapper/select/SelectHydrator.js.map +1 -1
- package/dist/production/src/mapper/select/WhereBuilder.cjs +20 -18
- package/dist/production/src/mapper/select/WhereBuilder.cjs.map +1 -1
- package/dist/production/src/mapper/select/WhereBuilder.js +20 -18
- package/dist/production/src/mapper/select/WhereBuilder.js.map +1 -1
- package/dist/production/src/mapper/select/handlers/FieldsVisitor.cjs +1 -1
- package/dist/production/src/mapper/select/handlers/FieldsVisitor.cjs.map +1 -1
- package/dist/production/src/mapper/select/handlers/FieldsVisitor.js +1 -1
- package/dist/production/src/mapper/select/handlers/FieldsVisitor.js.map +1 -1
- package/dist/production/src/mapper/select/handlers/FieldsVisitorFactory.cjs.map +1 -1
- package/dist/production/src/mapper/select/handlers/FieldsVisitorFactory.js.map +1 -1
- package/dist/production/src/mapper/select/handlers/MetaHandler.cjs.map +1 -1
- package/dist/production/src/mapper/select/handlers/MetaHandler.js.map +1 -1
- package/dist/production/src/mapper/select/optimizer/ConditionOptimizer.cjs.map +1 -1
- package/dist/production/src/mapper/select/optimizer/ConditionOptimizer.js.map +1 -1
- package/dist/production/src/mapper/select/optimizer/WhereOptimizer.cjs +7 -3
- package/dist/production/src/mapper/select/optimizer/WhereOptimizer.cjs.map +1 -1
- package/dist/production/src/mapper/select/optimizer/WhereOptimizer.js +7 -3
- package/dist/production/src/mapper/select/optimizer/WhereOptimizer.js.map +1 -1
- package/dist/production/src/mapper/select/optimizer/WhereReplacer.cjs.map +1 -1
- package/dist/production/src/mapper/select/optimizer/WhereReplacer.js.map +1 -1
- package/dist/production/src/mapper/select/optimizer/helpers.cjs.map +1 -1
- package/dist/production/src/mapper/select/optimizer/helpers.js.map +1 -1
- package/dist/production/src/mapper/update/SqlUpdateInputProcessor.cjs.map +1 -1
- package/dist/production/src/mapper/update/SqlUpdateInputProcessor.js.map +1 -1
- package/dist/production/src/mapper/update/UpdateBuilder.cjs +64 -68
- package/dist/production/src/mapper/update/UpdateBuilder.cjs.map +1 -1
- package/dist/production/src/mapper/update/UpdateBuilder.js +64 -68
- package/dist/production/src/mapper/update/UpdateBuilder.js.map +1 -1
- package/dist/production/src/mapper/update/UpdateBuilderFactory.cjs.map +1 -1
- package/dist/production/src/mapper/update/UpdateBuilderFactory.js.map +1 -1
- package/dist/production/src/mapper/update/Updater.cjs +15 -3
- package/dist/production/src/mapper/update/Updater.cjs.map +1 -1
- package/dist/production/src/mapper/update/Updater.js +16 -4
- package/dist/production/src/mapper/update/Updater.js.map +1 -1
- package/dist/production/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.cjs.map +1 -1
- package/dist/production/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.js.map +1 -1
- package/dist/production/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.cjs.map +1 -1
- package/dist/production/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.js.map +1 -1
- package/dist/production/src/mapper/update/relations/OneHasManyUpdateInputProcessor.cjs.map +1 -1
- package/dist/production/src/mapper/update/relations/OneHasManyUpdateInputProcessor.js.map +1 -1
- package/dist/production/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.cjs.map +1 -1
- package/dist/production/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.js.map +1 -1
- package/dist/production/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.cjs.map +1 -1
- package/dist/production/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.js.map +1 -1
- package/dist/production/src/resolvers/GraphQlQueryAstFactory.cjs.map +1 -1
- package/dist/production/src/resolvers/GraphQlQueryAstFactory.js.map +1 -1
- package/dist/production/src/resolvers/MutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/MutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/ReadHelpers.cjs.map +1 -1
- package/dist/production/src/resolvers/ReadHelpers.js.map +1 -1
- package/dist/production/src/resolvers/ReadResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/ReadResolver.js.map +1 -1
- package/dist/production/src/resolvers/RefreshViewResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/RefreshViewResolver.js.map +1 -1
- package/dist/production/src/resolvers/ValidationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/ValidationResolver.js.map +1 -1
- package/dist/production/src/schema/ColumnTypeResolver.cjs.map +1 -1
- package/dist/production/src/schema/ColumnTypeResolver.js.map +1 -1
- package/dist/production/src/schema/ConditionTypeProvider.cjs +2 -0
- package/dist/production/src/schema/ConditionTypeProvider.cjs.map +1 -1
- package/dist/production/src/schema/ConditionTypeProvider.js +3 -1
- package/dist/production/src/schema/ConditionTypeProvider.js.map +1 -1
- package/dist/production/src/schema/CustomTypesProvider.cjs.map +1 -1
- package/dist/production/src/schema/CustomTypesProvider.js.map +1 -1
- package/dist/production/src/schema/EntityTypeProvider.cjs +1 -3
- package/dist/production/src/schema/EntityTypeProvider.cjs.map +1 -1
- package/dist/production/src/schema/EntityTypeProvider.js +1 -3
- package/dist/production/src/schema/EntityTypeProvider.js.map +1 -1
- package/dist/production/src/schema/EnumsProvider.cjs.map +1 -1
- package/dist/production/src/schema/EnumsProvider.js.map +1 -1
- package/dist/production/src/schema/FieldAccessVisitor.cjs.map +1 -1
- package/dist/production/src/schema/FieldAccessVisitor.js.map +1 -1
- package/dist/production/src/schema/GraphQlSchemaBuilder.cjs +5 -11
- package/dist/production/src/schema/GraphQlSchemaBuilder.cjs.map +1 -1
- package/dist/production/src/schema/GraphQlSchemaBuilder.js +5 -11
- package/dist/production/src/schema/GraphQlSchemaBuilder.js.map +1 -1
- package/dist/production/src/schema/GraphQlSchemaBuilderFactory.cjs +103 -3
- package/dist/production/src/schema/GraphQlSchemaBuilderFactory.cjs.map +1 -1
- package/dist/production/src/schema/GraphQlSchemaBuilderFactory.js +103 -3
- package/dist/production/src/schema/GraphQlSchemaBuilderFactory.js.map +1 -1
- package/dist/production/src/schema/MutationProvider.cjs.map +1 -1
- package/dist/production/src/schema/MutationProvider.js +2 -2
- package/dist/production/src/schema/MutationProvider.js.map +1 -1
- package/dist/production/src/schema/OperationExtension.cjs +0 -1
- package/dist/production/src/schema/OperationExtension.cjs.map +1 -1
- package/dist/production/src/schema/OperationExtension.js +0 -1
- package/dist/production/src/schema/OperationExtension.js.map +1 -1
- package/dist/production/src/schema/OrderByTypeProvider.cjs.map +1 -1
- package/dist/production/src/schema/OrderByTypeProvider.js +1 -1
- package/dist/production/src/schema/OrderByTypeProvider.js.map +1 -1
- package/dist/production/src/schema/PaginatedFieldConfigFactory.cjs.map +1 -1
- package/dist/production/src/schema/PaginatedFieldConfigFactory.js +1 -1
- package/dist/production/src/schema/PaginatedFieldConfigFactory.js.map +1 -1
- package/dist/production/src/schema/QueryProvider.cjs.map +1 -1
- package/dist/production/src/schema/QueryProvider.js +2 -2
- package/dist/production/src/schema/QueryProvider.js.map +1 -1
- package/dist/production/src/schema/RefreshViewMutationProvider.cjs.map +1 -1
- package/dist/production/src/schema/RefreshViewMutationProvider.js.map +1 -1
- package/dist/production/src/schema/ResultSchemaTypeProvider.cjs.map +1 -1
- package/dist/production/src/schema/ResultSchemaTypeProvider.js.map +1 -1
- package/dist/production/src/schema/ValidationQueriesProvider.cjs +2 -8
- package/dist/production/src/schema/ValidationQueriesProvider.cjs.map +1 -1
- package/dist/production/src/schema/ValidationQueriesProvider.js +2 -8
- package/dist/production/src/schema/ValidationQueriesProvider.js.map +1 -1
- package/dist/production/src/schema/WhereTypeProvider.cjs +1 -3
- package/dist/production/src/schema/WhereTypeProvider.cjs.map +1 -1
- package/dist/production/src/schema/WhereTypeProvider.js +1 -3
- package/dist/production/src/schema/WhereTypeProvider.js.map +1 -1
- package/dist/production/src/schema/entities/FieldArgsVisitor.cjs.map +1 -1
- package/dist/production/src/schema/entities/FieldArgsVisitor.js.map +1 -1
- package/dist/production/src/schema/entities/FieldTypeVisitor.cjs.map +1 -1
- package/dist/production/src/schema/entities/FieldTypeVisitor.js.map +1 -1
- package/dist/production/src/schema/mutations/ConnectOrCreateRelationInputProvider.cjs.map +1 -1
- package/dist/production/src/schema/mutations/ConnectOrCreateRelationInputProvider.js.map +1 -1
- package/dist/production/src/schema/mutations/CreateEntityInputFieldVisitor.cjs.map +1 -1
- package/dist/production/src/schema/mutations/CreateEntityInputFieldVisitor.js.map +1 -1
- package/dist/production/src/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.cjs.map +1 -1
- package/dist/production/src/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.js.map +1 -1
- package/dist/production/src/schema/mutations/CreateEntityRelationInputFieldVisitor.cjs.map +1 -1
- package/dist/production/src/schema/mutations/CreateEntityRelationInputFieldVisitor.js.map +1 -1
- package/dist/production/src/schema/mutations/CreateEntityRelationInputProvider.cjs.map +1 -1
- package/dist/production/src/schema/mutations/CreateEntityRelationInputProvider.js.map +1 -1
- package/dist/production/src/schema/mutations/EntityInputProvider.cjs.map +1 -1
- package/dist/production/src/schema/mutations/EntityInputProvider.js.map +1 -1
- package/dist/production/src/schema/mutations/UpdateEntityInputFieldVisitor.cjs.map +1 -1
- package/dist/production/src/schema/mutations/UpdateEntityInputFieldVisitor.js.map +1 -1
- package/dist/production/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.cjs.map +1 -1
- package/dist/production/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.js.map +1 -1
- package/dist/production/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.cjs.map +1 -1
- package/dist/production/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.js +1 -1
- package/dist/production/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.js.map +1 -1
- package/dist/production/src/schema/mutations/UpdateEntityRelationInputProvider.cjs.map +1 -1
- package/dist/production/src/schema/mutations/UpdateEntityRelationInputProvider.js.map +1 -1
- package/dist/production/src/schema/utils.cjs.map +1 -1
- package/dist/production/src/schema/utils.js.map +1 -1
- package/dist/production/src/utils/Mutex.cjs.map +1 -1
- package/dist/production/src/utils/Mutex.js.map +1 -1
- package/dist/production/src/utils/ResolveInfoUtils.cjs.map +1 -1
- package/dist/production/src/utils/ResolveInfoUtils.js.map +1 -1
- package/dist/production/src/utils/accessor.cjs.map +1 -1
- package/dist/production/src/utils/accessor.js.map +1 -1
- package/dist/production/src/utils/assertNever.cjs.map +1 -1
- package/dist/production/src/utils/assertNever.js.map +1 -1
- package/dist/production/src/utils/isIt.cjs.map +1 -1
- package/dist/production/src/utils/isIt.js.map +1 -1
- package/dist/production/src/utils/object.cjs.map +1 -1
- package/dist/production/src/utils/object.js.map +1 -1
- package/dist/production/src/utils/paginationUtils.cjs.map +1 -1
- package/dist/production/src/utils/paginationUtils.js.map +1 -1
- package/dist/production/src/utils/promises.cjs.map +1 -1
- package/dist/production/src/utils/promises.js.map +1 -1
- package/dist/production/src/utils/singletonFactory.cjs.map +1 -1
- package/dist/production/src/utils/singletonFactory.js.map +1 -1
- package/dist/production/src/utils/strings.cjs.map +1 -1
- package/dist/production/src/utils/strings.js.map +1 -1
- package/dist/production/src/utils/tuple.cjs.map +1 -1
- package/dist/production/src/utils/tuple.js.map +1 -1
- package/dist/production/src/utils/uniqueWhereFields.cjs.map +1 -1
- package/dist/production/src/utils/uniqueWhereFields.js.map +1 -1
- package/dist/production/src/utils/viewComputedId.cjs.map +1 -1
- package/dist/production/src/utils/viewComputedId.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/insert/subOperationFail.test.d.ts +2 -0
- package/dist/tests/cases/integration/graphQlRequests/insert/subOperationFail.test.d.ts.map +1 -0
- package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/schema.d.ts.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/schema.d.ts.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/schema.d.ts.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/schema.d.ts.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/schema.d.ts.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/schema.d.ts.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/validation/conditions.test.d.ts.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/validation/requiredWhen.test.d.ts.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/validation/utils.d.ts.map +1 -1
- package/dist/tests/src/test.d.ts.map +1 -1
- package/dist/tests/tsconfig.tsbuildinfo +1 -1
- package/dist/types/ExecutionContainer.d.ts +13 -3
- package/dist/types/ExecutionContainer.d.ts.map +1 -1
- package/dist/types/acl/Authorizator.d.ts.map +1 -1
- package/dist/types/acl/EvaluatedPredicateReplacer.d.ts.map +1 -1
- package/dist/types/acl/PermissionFactory.d.ts.map +1 -1
- package/dist/types/acl/PredicateFactory.d.ts.map +1 -1
- package/dist/types/acl/PredicatesInjector.d.ts +15 -1
- package/dist/types/acl/PredicatesInjector.d.ts.map +1 -1
- package/dist/types/acl/VariableUtils.d.ts.map +1 -1
- package/dist/types/extensions/hasManyToHasOneReducer/HasManyToHasOneReducerExecutionHandler.d.ts.map +1 -1
- package/dist/types/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.d.ts.map +1 -1
- package/dist/types/extensions/paginatedHasMany/PaginatedHasManyCountVisitor.d.ts.map +1 -1
- package/dist/types/extensions/paginatedHasMany/PaginatedHasManyFieldProviderVisitor.d.ts.map +1 -1
- package/dist/types/extensions/paginatedHasMany/PaginatedHasManyNodesVisitor.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/input-validation/preValidation/InputPreValidator.d.ts.map +1 -1
- package/dist/types/inputProcessing/CreateInputProcessor.d.ts +1 -1
- package/dist/types/inputProcessing/CreateInputProcessor.d.ts.map +1 -1
- package/dist/types/inputProcessing/CreateInputVisitor.d.ts.map +1 -1
- package/dist/types/inputProcessing/UpdateInputProcessor.d.ts +1 -1
- package/dist/types/inputProcessing/UpdateInputProcessor.d.ts.map +1 -1
- package/dist/types/inputProcessing/UpdateInputVisitor.d.ts.map +1 -1
- package/dist/types/introspection/IntrospectionSchemaFactory.d.ts.map +1 -1
- package/dist/types/introspection/introspection.schema.d.ts.map +1 -1
- package/dist/types/mapper/ColumnValue.d.ts.map +1 -1
- package/dist/types/mapper/ErrorUtils.d.ts.map +1 -1
- package/dist/types/mapper/EventManager.d.ts.map +1 -1
- package/dist/types/mapper/JunctionTableManager.d.ts.map +1 -1
- package/dist/types/mapper/Mapper.d.ts.map +1 -1
- package/dist/types/mapper/MapperFactory.d.ts.map +1 -1
- package/dist/types/mapper/Result.d.ts +2 -2
- package/dist/types/mapper/Result.d.ts.map +1 -1
- package/dist/types/mapper/delete/DeleteExecutor.d.ts.map +1 -1
- package/dist/types/mapper/delete/DeleteState.d.ts.map +1 -1
- package/dist/types/mapper/delete/helpers.d.ts.map +1 -1
- package/dist/types/mapper/insert/InsertBuilder.d.ts.map +1 -1
- package/dist/types/mapper/insert/SqlCreateInputProcessor.d.ts.map +1 -1
- package/dist/types/mapper/insert/relations/ManyHasManyCreateInputProcessor.d.ts +2 -2
- package/dist/types/mapper/insert/relations/ManyHasManyCreateInputProcessor.d.ts.map +1 -1
- package/dist/types/mapper/insert/relations/ManyHasOneCreateInputProcessor.d.ts +2 -2
- package/dist/types/mapper/insert/relations/ManyHasOneCreateInputProcessor.d.ts.map +1 -1
- package/dist/types/mapper/insert/relations/OneHasManyCreateInputProcessor.d.ts.map +1 -1
- package/dist/types/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.d.ts +1 -1
- package/dist/types/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.d.ts.map +1 -1
- package/dist/types/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.d.ts.map +1 -1
- package/dist/types/mapper/select/ConditionBuilder.d.ts.map +1 -1
- package/dist/types/mapper/select/JoinBuilder.d.ts.map +1 -1
- package/dist/types/mapper/select/Path.d.ts +0 -1
- package/dist/types/mapper/select/Path.d.ts.map +1 -1
- package/dist/types/mapper/select/RelationFetcher.d.ts.map +1 -1
- package/dist/types/mapper/select/SelectBuilder.d.ts.map +1 -1
- package/dist/types/mapper/select/SelectExecutionHandler.d.ts.map +1 -1
- package/dist/types/mapper/select/WhereBuilder.d.ts.map +1 -1
- package/dist/types/mapper/select/handlers/FieldsVisitor.d.ts.map +1 -1
- package/dist/types/mapper/select/optimizer/ConditionOptimizer.d.ts.map +1 -1
- package/dist/types/mapper/select/optimizer/WhereOptimizer.d.ts +6 -1
- package/dist/types/mapper/select/optimizer/WhereOptimizer.d.ts.map +1 -1
- package/dist/types/mapper/select/optimizer/WhereReplacer.d.ts.map +1 -1
- package/dist/types/mapper/types.d.ts +1 -1
- package/dist/types/mapper/types.d.ts.map +1 -1
- package/dist/types/mapper/update/SqlUpdateInputProcessor.d.ts.map +1 -1
- package/dist/types/mapper/update/UpdateBuilder.d.ts.map +1 -1
- package/dist/types/mapper/update/Updater.d.ts +1 -5
- package/dist/types/mapper/update/Updater.d.ts.map +1 -1
- package/dist/types/mapper/update/relations/ManyHasManyUpdateInputProcessor.d.ts +7 -7
- package/dist/types/mapper/update/relations/ManyHasOneUpdateInputProcessor.d.ts +5 -5
- package/dist/types/mapper/update/relations/ManyHasOneUpdateInputProcessor.d.ts.map +1 -1
- package/dist/types/mapper/update/relations/OneHasManyUpdateInputProcessor.d.ts +7 -7
- package/dist/types/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.d.ts.map +1 -1
- package/dist/types/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.d.ts +3 -3
- package/dist/types/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.d.ts.map +1 -1
- package/dist/types/resolvers/GraphQlQueryAstFactory.d.ts.map +1 -1
- package/dist/types/resolvers/MutationResolver.d.ts.map +1 -1
- package/dist/types/schema/ConditionTypeProvider.d.ts.map +1 -1
- package/dist/types/schema/CustomTypesProvider.d.ts.map +1 -1
- package/dist/types/schema/EntityTypeProvider.d.ts.map +1 -1
- package/dist/types/schema/GraphQlSchemaBuilder.d.ts.map +1 -1
- package/dist/types/schema/GraphQlSchemaBuilderFactory.d.ts +0 -1
- package/dist/types/schema/GraphQlSchemaBuilderFactory.d.ts.map +1 -1
- package/dist/types/schema/MutationProvider.d.ts.map +1 -1
- package/dist/types/schema/OperationExtension.d.ts +1 -1
- package/dist/types/schema/OperationExtension.d.ts.map +1 -1
- package/dist/types/schema/ValidationQueriesProvider.d.ts.map +1 -1
- package/dist/types/schema/WhereTypeProvider.d.ts.map +1 -1
- package/dist/types/schema/entities/FieldArgsVisitor.d.ts.map +1 -1
- package/dist/types/schema/mutations/ConnectOrCreateRelationInputProvider.d.ts.map +1 -1
- package/dist/types/schema/mutations/CreateEntityInputFieldVisitor.d.ts.map +1 -1
- package/dist/types/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.d.ts.map +1 -1
- package/dist/types/schema/mutations/CreateEntityRelationInputFieldVisitor.d.ts.map +1 -1
- package/dist/types/schema/mutations/EntityInputProvider.d.ts.map +1 -1
- package/dist/types/schema/mutations/UpdateEntityInputFieldVisitor.d.ts +1 -1
- package/dist/types/schema/mutations/UpdateEntityInputFieldVisitor.d.ts.map +1 -1
- package/dist/types/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.d.ts.map +1 -1
- package/dist/types/schema/mutations/UpdateEntityRelationInputFieldVisitor.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/dist/types/utils/object.d.ts.map +1 -1
- package/graphql.codegen.yml +1 -1
- package/package.json +21 -16
- package/src/ExecutionContainer.ts +137 -122
- package/src/acl/Authorizator.ts +5 -3
- package/src/acl/EvaluatedPredicateReplacer.ts +0 -5
- package/src/acl/PermissionFactory.ts +9 -10
- package/src/acl/PredicateFactory.ts +0 -1
- package/src/acl/PredicatesInjector.ts +162 -12
- package/src/acl/VariableUtils.ts +0 -2
- package/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducerExecutionHandler.ts +0 -2
- package/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.ts +9 -13
- package/src/extensions/paginatedHasMany/PaginatedHasManyCountVisitor.ts +3 -4
- package/src/extensions/paginatedHasMany/PaginatedHasManyExecutionHandler.ts +2 -2
- package/src/extensions/paginatedHasMany/PaginatedHasManyFieldProviderVisitor.ts +2 -5
- package/src/extensions/paginatedHasMany/PaginatedHasManyNodesVisitor.ts +3 -4
- package/src/index.ts +8 -7
- package/src/input-validation/ValidationEvaluation.ts +3 -6
- package/src/input-validation/dependencies/DependencyCollector.ts +3 -3
- package/src/input-validation/preValidation/InputPreValidator.ts +6 -8
- package/src/inputProcessing/CreateInputProcessor.ts +1 -2
- package/src/inputProcessing/CreateInputVisitor.ts +7 -8
- package/src/inputProcessing/UpdateInputProcessor.ts +1 -2
- package/src/inputProcessing/UpdateInputVisitor.ts +9 -10
- package/src/introspection/IntrospectionSchemaFactory.ts +3 -4
- package/src/introspection/content-schema.types.ts +3 -3
- package/src/introspection/introspection.schema.ts +0 -2
- package/src/mapper/ColumnValue.ts +0 -1
- package/src/mapper/ErrorUtils.ts +19 -7
- package/src/mapper/EventManager.ts +0 -2
- package/src/mapper/JunctionTableManager.ts +19 -17
- package/src/mapper/Mapper.ts +13 -6
- package/src/mapper/MapperFactory.ts +0 -1
- package/src/mapper/Result.ts +2 -2
- package/src/mapper/delete/DeleteExecutor.ts +6 -7
- package/src/mapper/delete/DeleteState.ts +0 -1
- package/src/mapper/delete/helpers.ts +2 -3
- package/src/mapper/insert/InsertBuilder.ts +32 -35
- package/src/mapper/insert/Inserter.ts +0 -1
- package/src/mapper/insert/SqlCreateInputProcessor.ts +3 -6
- package/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.ts +0 -1
- package/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.ts +1 -2
- package/src/mapper/insert/relations/OneHasManyCreateInputProcessor.ts +0 -1
- package/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.ts +1 -4
- package/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.ts +2 -9
- package/src/mapper/select/ConditionBuilder.ts +19 -13
- package/src/mapper/select/JoinBuilder.ts +4 -2
- package/src/mapper/select/OrderByHelper.ts +2 -2
- package/src/mapper/select/Path.ts +0 -2
- package/src/mapper/select/RelationFetcher.ts +31 -26
- package/src/mapper/select/SelectBuilder.ts +16 -14
- package/src/mapper/select/SelectExecutionHandler.ts +30 -28
- package/src/mapper/select/SelectHydrator.ts +1 -1
- package/src/mapper/select/WhereBuilder.ts +49 -43
- package/src/mapper/select/handlers/FieldsVisitor.ts +1 -2
- package/src/mapper/select/optimizer/ConditionOptimizer.ts +0 -7
- package/src/mapper/select/optimizer/WhereOptimizer.ts +37 -15
- package/src/mapper/select/optimizer/WhereReplacer.ts +6 -3
- package/src/mapper/select/optimizer/helpers.ts +1 -1
- package/src/mapper/types.ts +19 -18
- package/src/mapper/update/SqlUpdateInputProcessor.ts +1 -1
- package/src/mapper/update/UpdateBuilder.ts +77 -81
- package/src/mapper/update/Updater.ts +23 -5
- package/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.ts +2 -4
- package/src/mapper/update/relations/OneHasManyUpdateInputProcessor.ts +2 -2
- package/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.ts +7 -4
- package/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.ts +23 -9
- package/src/resolvers/GraphQlQueryAstFactory.ts +0 -1
- package/src/resolvers/MutationResolver.ts +13 -15
- package/src/schema/ColumnTypeResolver.ts +1 -1
- package/src/schema/ConditionTypeProvider.ts +3 -1
- package/src/schema/CustomTypesProvider.ts +1 -2
- package/src/schema/EntityTypeProvider.ts +1 -3
- package/src/schema/GraphQlSchemaBuilder.ts +8 -7
- package/src/schema/GraphQlSchemaBuilderFactory.ts +150 -68
- package/src/schema/MutationProvider.ts +5 -10
- package/src/schema/OperationExtension.ts +1 -2
- package/src/schema/ValidationQueriesProvider.ts +2 -6
- package/src/schema/WhereTypeProvider.ts +1 -3
- package/src/schema/entities/FieldArgsVisitor.ts +5 -4
- package/src/schema/mutations/ConnectOrCreateRelationInputProvider.ts +0 -2
- package/src/schema/mutations/CreateEntityInputFieldVisitor.ts +3 -4
- package/src/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.ts +3 -4
- package/src/schema/mutations/CreateEntityRelationInputFieldVisitor.ts +10 -10
- package/src/schema/mutations/EntityInputProvider.ts +1 -7
- package/src/schema/mutations/UpdateEntityInputFieldVisitor.ts +3 -4
- package/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.ts +3 -4
- package/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.ts +6 -13
- package/src/utils/object.ts +3 -2
- package/tests/cases/bugs/bug-filter-or.test.ts +1 -5
- package/tests/cases/bugs/bug-update-by-nested-unique.test.ts +3 -6
- package/tests/cases/bugs/bug102.test.ts +2 -9
- package/tests/cases/integration/graphQlRequests/delete/aclDelete.test.ts +2 -3
- package/tests/cases/integration/graphQlRequests/delete/additionalDeleteFilter.test.ts +1 -2
- package/tests/cases/integration/graphQlRequests/delete/cascadeDelete.test.ts +12 -19
- package/tests/cases/integration/graphQlRequests/delete/deleteById.test.ts +0 -2
- package/tests/cases/integration/graphQlRequests/delete/orphanRemoval.test.ts +4 -5
- package/tests/cases/integration/graphQlRequests/delete/restrictOnDelete.test.ts +6 -13
- package/tests/cases/integration/graphQlRequests/delete/setNullOnDelete.test.ts +9 -13
- package/tests/cases/integration/graphQlRequests/insert/acl/setField.test.ts +0 -2
- package/tests/cases/integration/graphQlRequests/insert/aclInsert.test.ts +0 -1
- package/tests/cases/integration/graphQlRequests/insert/basicInsert.test.ts +0 -1
- package/tests/cases/integration/graphQlRequests/insert/insertCustomId.test.ts +0 -1
- package/tests/cases/integration/graphQlRequests/insert/jsonInsert.test.ts +2 -2
- package/tests/cases/integration/graphQlRequests/insert/manyHasManyInverse/create.test.ts +1 -3
- package/tests/cases/integration/graphQlRequests/insert/manyHasManyOwning/create.test.ts +1 -4
- package/tests/cases/integration/graphQlRequests/insert/manyHasOne/connectOrCreate.test.ts +2 -10
- package/tests/cases/integration/graphQlRequests/insert/manyHasOne/create.test.ts +1 -5
- package/tests/cases/integration/graphQlRequests/insert/oneHasMany/connect.test.ts +3 -4
- package/tests/cases/integration/graphQlRequests/insert/oneHasMany/create.test.ts +2 -5
- package/tests/cases/integration/graphQlRequests/insert/oneHasOneInverse/create.test.ts +1 -3
- package/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/create.test.ts +1 -3
- package/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/empty.test.ts +1 -3
- package/tests/cases/integration/graphQlRequests/insert/subOperationFail.test.ts +107 -0
- package/tests/cases/integration/graphQlRequests/insert/validation/toBeFixed.test.ts +1 -9
- package/tests/cases/integration/graphQlRequests/query/acl/differentRowAndFieldPredicate.test.ts +0 -4
- package/tests/cases/integration/graphQlRequests/query/acl/fieldRestrictedByLocale.test.ts +1 -4
- package/tests/cases/integration/graphQlRequests/query/acl/isNullAcl.test.ts +0 -4
- package/tests/cases/integration/graphQlRequests/query/acl/nestedPredicate.test.ts +1 -6
- package/tests/cases/integration/graphQlRequests/query/acl/orPredicate.test.ts +0 -2
- package/tests/cases/integration/graphQlRequests/query/acl/predicateElimination.test.ts +676 -2
- package/tests/cases/integration/graphQlRequests/query/acl/relationAcl.test.ts +8 -11
- package/tests/cases/integration/graphQlRequests/query/acl/rowPredicateSubset.test.ts +2 -6
- package/tests/cases/integration/graphQlRequests/query/acl/sameRowAndFieldPredicate.test.ts +0 -2
- package/tests/cases/integration/graphQlRequests/query/filter/backReferencedFilter.test.ts +1 -4
- package/tests/cases/integration/graphQlRequests/query/filter/complexCondition.test.ts +0 -1
- package/tests/cases/integration/graphQlRequests/query/filter/composedFilter.test.ts +0 -1
- package/tests/cases/integration/graphQlRequests/query/filter/containsQuery.test.ts +0 -1
- package/tests/cases/integration/graphQlRequests/query/filter/manyHasManyOwnerRelation.test.ts +16 -18
- package/tests/cases/integration/graphQlRequests/query/filter/manyHasOneRelation.test.ts +0 -1
- package/tests/cases/integration/graphQlRequests/query/filter/oneHasManyRelation.test.ts +1 -3
- package/tests/cases/integration/graphQlRequests/query/formatting/dateFormat.test.ts +0 -1
- package/tests/cases/integration/graphQlRequests/query/graphqlFeatures/alias.test.ts +0 -1
- package/tests/cases/integration/graphQlRequests/query/graphqlFeatures/fragments.test.ts +6 -8
- package/tests/cases/integration/graphQlRequests/query/misc/aliasedType.test.ts +0 -1
- package/tests/cases/integration/graphQlRequests/query/misc/longAliasHash.test.ts +1 -3
- package/tests/cases/integration/graphQlRequests/query/misc/reducedHasMany.test.ts +2 -10
- package/tests/cases/integration/graphQlRequests/query/misc/transaction.test.ts +0 -2
- package/tests/cases/integration/graphQlRequests/query/pagination/hasManyLimit.test.ts +3 -10
- package/tests/cases/integration/graphQlRequests/query/pagination/paginate.test.ts +1 -3
- package/tests/cases/integration/graphQlRequests/query/pagination/paginateAliased.test.ts +1 -3
- package/tests/cases/integration/graphQlRequests/query/pagination/simpleLimit.test.ts +0 -1
- package/tests/cases/integration/graphQlRequests/query/relations/advanced.test.ts +3 -7
- package/tests/cases/integration/graphQlRequests/query/relations/manyHasManyInverse.test.ts +4 -9
- package/tests/cases/integration/graphQlRequests/query/relations/manyHasManyOwning.test.ts +5 -8
- package/tests/cases/integration/graphQlRequests/query/relations/manyHasOne.test.ts +0 -2
- package/tests/cases/integration/graphQlRequests/query/relations/oneHasMany.test.ts +2 -5
- package/tests/cases/integration/graphQlRequests/query/relations/oneHasOneInverse.test.ts +1 -3
- package/tests/cases/integration/graphQlRequests/query/relations/oneHasOneOwner.test.ts +1 -3
- package/tests/cases/integration/graphQlRequests/query/sorting/byRelations.test.ts +6 -8
- package/tests/cases/integration/graphQlRequests/query/sorting/defaultOrdering.test.ts +8 -8
- package/tests/cases/integration/graphQlRequests/query/sorting/orderBy.test.ts +0 -1
- package/tests/cases/integration/graphQlRequests/query/sorting/randomSort.test.ts +1 -5
- package/tests/cases/integration/graphQlRequests/query/sorting/sortNulls.test.ts +0 -1
- package/tests/cases/integration/graphQlRequests/query/sorting/sortedHasMany.test.ts +0 -1
- package/tests/cases/integration/graphQlRequests/query/unique/basicQueryById.test.ts +0 -1
- package/tests/cases/integration/graphQlRequests/query/unique/composedUnique.test.ts +2 -5
- package/tests/cases/integration/graphQlRequests/query/unique/oneHasManyUnique.test.ts +2 -5
- package/tests/cases/integration/graphQlRequests/query/unique/uniqueWithFilter.test.ts +0 -1
- package/tests/cases/integration/graphQlRequests/query/view/view.test.ts +0 -1
- package/tests/cases/integration/graphQlRequests/update/acl/aclUpdate.test.ts +8 -11
- package/tests/cases/integration/graphQlRequests/update/additionalFilter.test.ts +53 -3
- package/tests/cases/integration/graphQlRequests/update/basic/columnUpdate.test.ts +2 -3
- package/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/connect.test.ts +0 -1
- package/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/create.test.ts +0 -1
- package/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/delete.test.ts +0 -1
- package/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/disconnect.test.ts +0 -1
- package/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/schema.ts +1 -2
- package/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/update.test.ts +2 -2
- package/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/upsert.test.ts +2 -2
- package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/connect.test.ts +0 -1
- package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/connectOrCreate.test.ts +0 -2
- package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/create.test.ts +0 -1
- package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/delete.test.ts +0 -1
- package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/disconnect.test.ts +0 -1
- package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/schema.ts +1 -2
- package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/update.test.ts +2 -2
- package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/upsert.test.ts +7 -6
- package/tests/cases/integration/graphQlRequests/update/manyHasOne/connect.test.ts +2 -2
- package/tests/cases/integration/graphQlRequests/update/manyHasOne/create.test.ts +2 -2
- package/tests/cases/integration/graphQlRequests/update/manyHasOne/delete.test.ts +8 -6
- package/tests/cases/integration/graphQlRequests/update/manyHasOne/disconnect.test.ts +2 -3
- package/tests/cases/integration/graphQlRequests/update/manyHasOne/schema.ts +2 -5
- package/tests/cases/integration/graphQlRequests/update/manyHasOne/update.test.ts +2 -2
- package/tests/cases/integration/graphQlRequests/update/manyHasOne/upsert.test.ts +4 -3
- package/tests/cases/integration/graphQlRequests/update/oneHasMany/combination.test.ts +0 -1
- package/tests/cases/integration/graphQlRequests/update/oneHasMany/connect.test.ts +2 -2
- package/tests/cases/integration/graphQlRequests/update/oneHasMany/connectOrCreate.test.ts +2 -2
- package/tests/cases/integration/graphQlRequests/update/oneHasMany/create.test.ts +0 -1
- package/tests/cases/integration/graphQlRequests/update/oneHasMany/delete.test.ts +0 -1
- package/tests/cases/integration/graphQlRequests/update/oneHasMany/disconnect.test.ts +2 -2
- package/tests/cases/integration/graphQlRequests/update/oneHasMany/schema.ts +2 -8
- package/tests/cases/integration/graphQlRequests/update/oneHasMany/update.test.ts +7 -8
- package/tests/cases/integration/graphQlRequests/update/oneHasMany/upsert.test.ts +2 -2
- package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/connect.test.ts +10 -6
- package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/create.test.ts +2 -2
- package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/delete.test.ts +1 -4
- package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/disconnect.test.ts +2 -2
- package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/schema.ts +2 -6
- package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/update.test.ts +2 -2
- package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/upsert.test.ts +2 -2
- package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/connect.test.ts +8 -5
- package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/connectOrCreate.test.ts +2 -1
- package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/create.test.ts +4 -2
- package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/delete.test.ts +5 -5
- package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/disconnect.test.ts +2 -2
- package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/schema.ts +2 -6
- package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/update.test.ts +2 -2
- package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/upsert.test.ts +4 -3
- package/tests/cases/integration/graphQlRequests/update/queryPortal.test.ts +4 -4
- package/tests/cases/integration/graphQlRequests/update/transaction.test.ts +6 -5
- package/tests/cases/integration/graphQlRequests/update/validation/toBeFixed.test.ts +9 -10
- package/tests/cases/integration/graphQlRequests/upsert/basicUpsert.test.ts +5 -9
- package/tests/cases/integration/graphQlRequests/validation/conditions.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/validation/nestedValidation.test.ts +0 -2
- package/tests/cases/integration/graphQlRequests/validation/optionalAssert.test.ts +0 -2
- package/tests/cases/integration/graphQlRequests/validation/required.test.ts +0 -2
- package/tests/cases/integration/graphQlRequests/validation/requiredWhen.test.ts +1 -2
- package/tests/cases/integration/graphQlRequests/validation/rules/andRule.test.ts +0 -1
- package/tests/cases/integration/graphQlRequests/validation/rules/lengthRangeRule.test.ts +0 -1
- package/tests/cases/integration/graphQlRequests/validation/rules/maxLengthRule.test.ts +0 -1
- package/tests/cases/integration/graphQlRequests/validation/rules/minLength.test.ts +0 -3
- package/tests/cases/integration/graphQlRequests/validation/rules/notEmptyRule.test.ts +0 -4
- package/tests/cases/integration/graphQlRequests/validation/rules/notRule.test.ts +0 -2
- package/tests/cases/integration/graphQlRequests/validation/rules/orRule.test.ts +0 -3
- package/tests/cases/integration/graphQlRequests/validation/rules/patternRule.test.ts +0 -1
- package/tests/cases/integration/graphQlRequests/validation/rules/rangeRule.test.ts +0 -1
- package/tests/cases/integration/graphQlRequests/validation/utils.ts +2 -6
- package/tests/cases/integration/graphQlSchema/graphQlSchemaBuilder.test.ts +31 -61
- package/tests/cases/integration/graphQlSchema/schema-column-types.gql +1 -0
- package/tests/cases/unit/aclVariablesFactory.test.ts +3 -7
- package/tests/cases/unit/conditionOptimizer.test.ts +122 -77
- package/tests/cases/unit/inputPreValidator.test.ts +5 -17
- package/tests/cases/unit/inputValidation.test.ts +2 -7
- package/tests/cases/unit/orderbyHelper.test.ts +8 -6
- package/tests/cases/unit/permissionMerger.test.ts +1 -7
- package/tests/cases/unit/predicatesFactory.test.ts +0 -1
- package/tests/cases/unit/predicatesInjector.test.ts +1065 -13
- package/tests/cases/unit/uuidType.test.ts +1 -2
- package/tests/cases/unit/variableInjector.test.ts +1 -4
- package/tests/cases/unit/whereBuilder.test.ts +8 -5
- package/tests/cases/unit/whereOptimizer.test.ts +337 -244
- package/tests/src/test.ts +3 -2
- package/tests/src/testGraphql.ts +1 -1
- package/tests/.eslintrc.cjs +0 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ErrorUtils.js","sources":["../../../../../packages/engine-content-api/src/mapper/ErrorUtils.ts"],"sourcesContent":["import {\n\tConstraintType,\n\tInputErrorKind,\n\tMutationConstraintViolationError,\n\tMutationInputError,\n\tMutationResult,\n\tMutationResultHint,\n\tMutationResultList,\n\tMutationSqlError,\n} from './Result'\nimport * as Database from '@contember/database'\nimport { UniqueWhereError } from '../inputProcessing'\nimport { Model } from '@contember/schema'\nimport { acceptFieldVisitor, tryGetColumnName } from '@contember/schema-utils'\nimport { logger } from '@contember/logger'\nimport { DatabaseMetadata } from '@contember/database'\n\
|
|
1
|
+
{"version":3,"file":"ErrorUtils.js","sources":["../../../../../packages/engine-content-api/src/mapper/ErrorUtils.ts"],"sourcesContent":["import {\n\tConstraintType,\n\tInputErrorKind,\n\tMutationConstraintViolationError,\n\tMutationInputError,\n\tMutationResult,\n\tMutationResultHint,\n\tMutationResultList,\n\tMutationSqlError,\n} from './Result'\nimport * as Database from '@contember/database'\nimport { UniqueWhereError } from '../inputProcessing'\nimport { Model } from '@contember/schema'\nimport { acceptFieldVisitor, tryGetColumnName } from '@contember/schema-utils'\nimport { logger } from '@contember/logger'\nimport { DatabaseMetadata } from '@contember/database'\n\ntype UniqueConstraintResult = {\n\tentity: Model.Entity\n\tfields: string[]\n}\n\nconst getEntityByTableName = (model: Model.Schema, tableName: string) => Object.values(model.entities).find(it => it.tableName === tableName)\n\nconst findUniqueConstraint = (\n\tmodel: Model.Schema,\n\tdatabaseMetadata: DatabaseMetadata,\n\ttableName: string,\n\tconstraintName: string,\n): UniqueConstraintResult | null => {\n\tconst constraint = databaseMetadata.uniqueConstraints.filter({ tableName, constraintName }).first()\n\tif (!constraint) {\n\t\treturn null\n\t}\n\tconst entity = getEntityByTableName(model, constraint.tableName)\n\tif (!entity) {\n\t\treturn null\n\t}\n\tconst fieldsInConstraint: string[] = []\n\tfor (const field of Object.values(entity.fields)) {\n\t\tconst columnName = tryGetColumnName(model, entity, field.name)\n\t\tif (columnName && constraint.columnNames.includes(columnName)) {\n\t\t\tfieldsInConstraint.push(field.name)\n\t\t}\n\t}\n\tif (fieldsInConstraint.length === constraint.columnNames.length) {\n\t\treturn { entity, fields: fieldsInConstraint }\n\t}\n\treturn null\n}\n\ntype RelationInfo = {\n\towningEntity: Model.Entity\n\towningRelation: Model.Relation\n\ttargetEntity: Model.Entity\n}\n\nconst findForeignConstraint = (\n\tmodel: Model.Schema,\n\tdatabaseMetadata: DatabaseMetadata,\n\ttableName: string,\n\tconstraintName: string,\n): RelationInfo | null => {\n\tconst constraint = databaseMetadata.foreignKeys.filter({ fromTable: tableName, constraintName }).first()\n\tif (!constraint) {\n\t\treturn null\n\t}\n\tconst owningEntity = getEntityByTableName(model, constraint.fromTable)\n\tif (!owningEntity) {\n\t\t// todo m:n\n\t\treturn null\n\t}\n\n\tconst targetEntity = getEntityByTableName(model, constraint.toTable)\n\tif (!targetEntity) {\n\t\treturn null\n\t}\n\tfor (const field of Object.values(owningEntity.fields)) {\n\t\tconst relation = acceptFieldVisitor<(Model.Relation & Model.JoiningColumnRelation) | null>(model, owningEntity, field, {\n\t\t\tvisitColumn: () => null,\n\t\t\tvisitOneHasOneInverse: () => null,\n\t\t\tvisitManyHasManyInverse: () => null,\n\t\t\tvisitManyHasManyOwning: () => null,\n\t\t\tvisitOneHasMany: () => null,\n\t\t\tvisitOneHasOneOwning: ({ relation }) => relation,\n\t\t\tvisitManyHasOne: ({ relation }) => relation,\n\t\t})\n\t\tif (relation && relation.joiningColumn.columnName === constraint.fromColumn) {\n\t\t\treturn {\n\t\t\t\towningEntity,\n\t\t\t\towningRelation: relation,\n\t\t\t\ttargetEntity,\n\t\t\t}\n\t\t}\n\t}\n\treturn null\n}\n\nexport const convertError = (\n\tschema: Model.Schema,\n\tdatabaseMetadata: DatabaseMetadata,\n\te: any,\n): MutationResult => {\n\tif (e instanceof Database.NotNullViolationError) {\n\t\treturn new MutationConstraintViolationError([], ConstraintType.notNull, e.originalMessage, [\n\t\t\tMutationResultHint.sqlError,\n\t\t])\n\t}\n\tif (e instanceof Database.ForeignKeyViolationError) {\n\t\tconst relationInfo = e.constraint && e.table ? findForeignConstraint(schema, databaseMetadata, e.table, e.constraint) : null\n\t\tconst violationDetail: string = 'detail' in e.previous ? e.previous.detail : ''\n\t\tconst matchResult = violationDetail.match(/^Key \\(.+\\)=\\((.+)\\) is still referenced from table/)\n\t\tconst message = relationInfo\n\t\t\t? `Cannot delete ${matchResult ? `row ${matchResult[1]}` : 'unknown row'}`\n\t\t\t\t+ ` of entity ${relationInfo.targetEntity.name},`\n\t\t\t\t+ ` because it is still referenced from ${relationInfo.owningEntity.name}::${relationInfo.owningRelation.name}.`\n\t\t\t\t+ ' This is possibly caused by ACL denial or by missing \"on delete cascade\"'\n\t\t\t: e.originalMessage\n\t\treturn new MutationConstraintViolationError([], ConstraintType.foreignKey, message, [MutationResultHint.sqlError])\n\t}\n\tif (e instanceof Database.UniqueViolationError) {\n\t\tconst constraint = e.constraint && e.table ? findUniqueConstraint(schema, databaseMetadata, e.table, e.constraint) : null\n\t\tconst violationDetail: string = 'detail' in e.previous ? e.previous.detail : ''\n\t\tconst matchResult = violationDetail.match(/^Key \\(.+\\)=\\((.+)\\) already exists\\.$/)\n\t\tconst values = matchResult?.[1]\n\t\tconst message = constraint\n\t\t\t? `${values ? `Value (${values})` : 'Unknown value'}`\n\t\t\t\t+ ` already exists in unique columns (${constraint.fields.join(', ')}) on entity ${constraint.entity.name}`\n\t\t\t: e.originalMessage\n\t\tconst paths = constraint ? constraint.fields.map(it => [{ field: it }]) : []\n\t\treturn new MutationConstraintViolationError(paths, ConstraintType.uniqueKey, message, [MutationResultHint.sqlError])\n\t}\n\tif (e instanceof UniqueWhereError) {\n\t\treturn new MutationInputError([], InputErrorKind.nonUniqueWhere, e.message)\n\t}\n\tif (e instanceof Database.InvalidDataError) {\n\t\treturn new MutationInputError([], InputErrorKind.invalidData, e.originalMessage, [MutationResultHint.sqlError])\n\t}\n\tif (e instanceof Database.SerializationFailureError) {\n\t\tthrow e\n\t}\n\tif (e instanceof Database.TransactionAbortedError) {\n\t\treturn new MutationSqlError([], e.originalMessage, [MutationResultHint.subSequentSqlError])\n\t}\n\tif (e instanceof Database.QueryError || e instanceof Database.CannotCommitError) {\n\t\tlogger.error(e, { loc: 'convertError' })\n\t\treturn new MutationSqlError([], e.originalMessage, [MutationResultHint.sqlError])\n\t}\n\tthrow e\n}\n\nexport const tryMutation = async (\n\tschema: Model.Schema,\n\tdatabaseMetadata: DatabaseMetadata,\n\tcb: () => Promise<MutationResultList>,\n): Promise<MutationResultList> => {\n\ttry {\n\t\treturn await cb()\n\t} catch (e) {\n\t\treturn [convertError(schema, databaseMetadata, e)]\n\t}\n}\n"],"names":["relation"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventManager.cjs","sources":["../../../../../packages/engine-content-api/src/mapper/EventManager.ts"],"sourcesContent":["import { Input, Model, Value } from '@contember/schema'\nimport { Mapper } from './Mapper'\nimport { ColumnValue } from './ColumnValue'\n\nexport class BeforeInsertEvent {\n\tpublic type = 'BeforeInsertEvent' as const\n\n\tpublic afterEvent: AfterInsertEvent | undefined = undefined\n\n\tconstructor(\n\t\tpublic readonly entity: Model.Entity,\n\t\tpublic readonly data: ColumnValue[],\n\t) {\n\t}\n}\n\nexport class AfterInsertEvent {\n\tpublic type = 'AfterInsertEvent' as const\n\n\tconstructor(\n\t\tpublic readonly entity: Model.Entity,\n\t\tpublic readonly data: ColumnValue[],\n\t\tpublic readonly id: Input.PrimaryValue,\n\t) {\n\t}\n}\n\
|
|
1
|
+
{"version":3,"file":"EventManager.cjs","sources":["../../../../../packages/engine-content-api/src/mapper/EventManager.ts"],"sourcesContent":["import { Input, Model, Value } from '@contember/schema'\nimport { Mapper } from './Mapper'\nimport { ColumnValue } from './ColumnValue'\n\nexport class BeforeInsertEvent {\n\tpublic type = 'BeforeInsertEvent' as const\n\n\tpublic afterEvent: AfterInsertEvent | undefined = undefined\n\n\tconstructor(\n\t\tpublic readonly entity: Model.Entity,\n\t\tpublic readonly data: ColumnValue[],\n\t) {\n\t}\n}\n\nexport class AfterInsertEvent {\n\tpublic type = 'AfterInsertEvent' as const\n\n\tconstructor(\n\t\tpublic readonly entity: Model.Entity,\n\t\tpublic readonly data: ColumnValue[],\n\t\tpublic readonly id: Input.PrimaryValue,\n\t) {\n\t}\n}\n\nexport class BeforeUpdateEvent {\n\tpublic type = 'BeforeUpdateEvent' as const\n\n\tpublic afterEvent: AfterUpdateEvent | undefined = undefined\n\n\tconstructor(\n\t\tpublic readonly entity: Model.Entity,\n\t\tpublic readonly data: ColumnValue[],\n\t\tpublic readonly id: Input.PrimaryValue,\n\t) {\n\t}\n}\n\nexport class AfterUpdateEvent {\n\tpublic type = 'AfterUpdateEvent' as const\n\n\tprivate _hasChanges: boolean | undefined\n\n\tconstructor(\n\t\tpublic readonly entity: Model.Entity,\n\t\tpublic readonly data: (ColumnValue & { old: Value.FieldValue })[],\n\t\tpublic readonly id: Input.PrimaryValue,\n\t) {\n\t}\n\tget hasChanges() {\n\t\t// todo: deep equals\n\t\treturn this._hasChanges = this.data.some(it => it.value !== it.old)\n\t}\n}\n\nexport class BeforeDeleteEvent {\n\tpublic type = 'BeforeDeleteEvent' as const\n\n\tconstructor(\n\t\tpublic readonly entity: Model.Entity,\n\t\tpublic readonly id: Input.PrimaryValue,\n\t) {\n\t}\n}\n\nexport class BeforeJunctionUpdateEvent {\n\tpublic type = 'BeforeJunctionUpdateEvent' as const\n\n\tpublic afterEvent: AfterJunctionUpdateEvent | undefined = undefined\n\n\tconstructor(\n\t\tpublic readonly owningEntity: Model.Entity,\n\t\tpublic readonly owningRelation: Model.ManyHasManyOwningRelation,\n\t\tpublic readonly owningId: Input.PrimaryValue,\n\t\tpublic readonly inverseId: Input.PrimaryValue,\n\t\tpublic readonly operation: 'connect' | 'disconnect',\n\t) {\n\t}\n}\n\nexport class AfterJunctionUpdateEvent {\n\tpublic type = 'AfterJunctionUpdateEvent' as const\n\n\tconstructor(\n\t\tpublic readonly owningEntity: Model.Entity,\n\t\tpublic readonly owningRelation: Model.ManyHasManyOwningRelation,\n\t\tpublic readonly owningId: Input.PrimaryValue,\n\t\tpublic readonly inverseId: Input.PrimaryValue,\n\t\tpublic readonly operation: 'connect' | 'disconnect',\n\t\tpublic readonly hasChanges: boolean,\n\t) {\n\t}\n}\n\nexport class BeforeCommitEvent {\n\tpublic type = 'BeforeCommitEvent' as const\n}\n\nexport class AfterCommitEvent {\n\tpublic type = 'AfterCommitEvent' as const\n}\n\nexport type DataModificationEvent =\n\t| BeforeInsertEvent\n\t| AfterInsertEvent\n\t| BeforeUpdateEvent\n\t| AfterUpdateEvent\n\t| BeforeJunctionUpdateEvent\n\t| AfterJunctionUpdateEvent\n\t| BeforeDeleteEvent\n\nexport type AnyEvent =\n\t| DataModificationEvent\n\t| BeforeCommitEvent\n\t| AfterCommitEvent\n\nexport type EventMap<E extends AnyEvent = AnyEvent> = {\n\t[K in E['type']]: E extends { type: K } ? E : never\n}\n\nexport type EventListener<K extends keyof EventMap> = (event: EventMap[K], mapper: Mapper) => Promise<void>\n\nexport class EventManager {\n\tprivate listeners: { [K in keyof EventMap]: EventListener<K>[] } = {\n\t\tBeforeInsertEvent: [],\n\t\tAfterInsertEvent: [],\n\t\tBeforeUpdateEvent: [],\n\t\tAfterUpdateEvent: [],\n\t\tBeforeDeleteEvent: [],\n\t\tBeforeCommitEvent: [],\n\t\tAfterCommitEvent: [],\n\t\tBeforeJunctionUpdateEvent: [],\n\t\tAfterJunctionUpdateEvent: [],\n\t}\n\n\tconstructor(\n\t\tprivate readonly mapper: Mapper,\n\t) {\n\t}\n\n\tpublic listen<K extends keyof EventMap>(type: K, cb: EventListener<K>) {\n\t\tthis.listeners[type].push(cb)\n\t}\n\n\tpublic async fire<K extends keyof EventMap>(event: EventMap[K]) {\n\t\tfor (const listener of this.listeners[event.type]) {\n\t\t\tawait listener(event, this.mapper)\n\t\t}\n\t}\n}\n"],"names":[],"mappings":";;;;;AAIO,MAAM,kBAAkB;AAAA,EAK9B,YACiB,QACA,MACf;AAFe,SAAA,SAAA;AACA,SAAA,OAAA;AANjB,kBAAA,MAAO,QAAO,mBAAA;AAEd,kBAAA,MAAO,YAAA;AAAA,EAMP;AACD;AAEO,MAAM,iBAAiB;AAAA,EAG7B,YACiB,QACA,MACA,IACf;AAHe,SAAA,SAAA;AACA,SAAA,OAAA;AACA,SAAA,KAAA;AALjB,kBAAA,MAAO,QAAO,kBAAA;AAAA,EAOd;AACD;AAEO,MAAM,kBAAkB;AAAA,EAK9B,YACiB,QACA,MACA,IACf;AAHe,SAAA,SAAA;AACA,SAAA,OAAA;AACA,SAAA,KAAA;AAPjB,kBAAA,MAAO,QAAO,mBAAA;AAEd,kBAAA,MAAO,YAAA;AAAA,EAOP;AACD;AAEO,MAAM,iBAAiB;AAAA,EAK7B,YACiB,QACA,MACA,IACf;AAHe,SAAA,SAAA;AACA,SAAA,OAAA;AACA,SAAA,KAAA;AAPjB,kBAAA,MAAO,QAAO,kBAAA;AAEd,kBAAA,MAAQ,aAAA;AAAA,EAOR;AAAA,EACA,IAAI,aAAa;AAEhB,WAAO,KAAK,cAAc,KAAK,KAAK,KAAK,CAAA,OAAM,GAAG,UAAU,GAAG,GAAG;AAAA,EACnE;AACD;AAEO,MAAM,kBAAkB;AAAA,EAG9B,YACiB,QACA,IACf;AAFe,SAAA,SAAA;AACA,SAAA,KAAA;AAJjB,kBAAA,MAAO,QAAO,mBAAA;AAAA,EAMd;AACD;AAEO,MAAM,0BAA0B;AAAA,EAKtC,YACiB,cACA,gBACA,UACA,WACA,WACf;AALe,SAAA,eAAA;AACA,SAAA,iBAAA;AACA,SAAA,WAAA;AACA,SAAA,YAAA;AACA,SAAA,YAAA;AATjB,kBAAA,MAAO,QAAO,2BAAA;AAEd,kBAAA,MAAO,YAAA;AAAA,EASP;AACD;AAEO,MAAM,yBAAyB;AAAA,EAGrC,YACiB,cACA,gBACA,UACA,WACA,WACA,YACf;AANe,SAAA,eAAA;AACA,SAAA,iBAAA;AACA,SAAA,WAAA;AACA,SAAA,YAAA;AACA,SAAA,YAAA;AACA,SAAA,aAAA;AARjB,kBAAA,MAAO,QAAO,0BAAA;AAAA,EAUd;AACD;AAEO,MAAM,kBAAkB;AAAA,EAAxB,cAAA;AACN,kBAAA,MAAO,QAAO,mBAAA;AAAA,EAAA;AACf;AAEO,MAAM,iBAAiB;AAAA,EAAvB,cAAA;AACN,kBAAA,MAAO,QAAO,kBAAA;AAAA,EAAA;AACf;AAsBO,MAAM,aAAa;AAAA,EAazB,YACkB,QAChB;AADgB,SAAA,SAAA;AAblB,kBAAA,MAAQ,aAA2D;AAAA,MAClE,mBAAmB,CAAA;AAAA,MACnB,kBAAkB,CAAA;AAAA,MAClB,mBAAmB,CAAA;AAAA,MACnB,kBAAkB,CAAA;AAAA,MAClB,mBAAmB,CAAA;AAAA,MACnB,mBAAmB,CAAA;AAAA,MACnB,kBAAkB,CAAA;AAAA,MAClB,2BAA2B,CAAA;AAAA,MAC3B,0BAA0B,CAAA;AAAA,IAAC,CAC5B;AAAA,EAKA;AAAA,EAEO,OAAiC,MAAS,IAAsB;AACtE,SAAK,UAAU,IAAI,EAAE,KAAK,EAAE;AAAA,EAC7B;AAAA,EAEA,MAAa,KAA+B,OAAoB;AAC/D,eAAW,YAAY,KAAK,UAAU,MAAM,IAAI,GAAG;AAClD,YAAM,SAAS,OAAO,KAAK,MAAM;AAAA,IAClC;AAAA,EACD;AACD;;;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventManager.js","sources":["../../../../../packages/engine-content-api/src/mapper/EventManager.ts"],"sourcesContent":["import { Input, Model, Value } from '@contember/schema'\nimport { Mapper } from './Mapper'\nimport { ColumnValue } from './ColumnValue'\n\nexport class BeforeInsertEvent {\n\tpublic type = 'BeforeInsertEvent' as const\n\n\tpublic afterEvent: AfterInsertEvent | undefined = undefined\n\n\tconstructor(\n\t\tpublic readonly entity: Model.Entity,\n\t\tpublic readonly data: ColumnValue[],\n\t) {\n\t}\n}\n\nexport class AfterInsertEvent {\n\tpublic type = 'AfterInsertEvent' as const\n\n\tconstructor(\n\t\tpublic readonly entity: Model.Entity,\n\t\tpublic readonly data: ColumnValue[],\n\t\tpublic readonly id: Input.PrimaryValue,\n\t) {\n\t}\n}\n\
|
|
1
|
+
{"version":3,"file":"EventManager.js","sources":["../../../../../packages/engine-content-api/src/mapper/EventManager.ts"],"sourcesContent":["import { Input, Model, Value } from '@contember/schema'\nimport { Mapper } from './Mapper'\nimport { ColumnValue } from './ColumnValue'\n\nexport class BeforeInsertEvent {\n\tpublic type = 'BeforeInsertEvent' as const\n\n\tpublic afterEvent: AfterInsertEvent | undefined = undefined\n\n\tconstructor(\n\t\tpublic readonly entity: Model.Entity,\n\t\tpublic readonly data: ColumnValue[],\n\t) {\n\t}\n}\n\nexport class AfterInsertEvent {\n\tpublic type = 'AfterInsertEvent' as const\n\n\tconstructor(\n\t\tpublic readonly entity: Model.Entity,\n\t\tpublic readonly data: ColumnValue[],\n\t\tpublic readonly id: Input.PrimaryValue,\n\t) {\n\t}\n}\n\nexport class BeforeUpdateEvent {\n\tpublic type = 'BeforeUpdateEvent' as const\n\n\tpublic afterEvent: AfterUpdateEvent | undefined = undefined\n\n\tconstructor(\n\t\tpublic readonly entity: Model.Entity,\n\t\tpublic readonly data: ColumnValue[],\n\t\tpublic readonly id: Input.PrimaryValue,\n\t) {\n\t}\n}\n\nexport class AfterUpdateEvent {\n\tpublic type = 'AfterUpdateEvent' as const\n\n\tprivate _hasChanges: boolean | undefined\n\n\tconstructor(\n\t\tpublic readonly entity: Model.Entity,\n\t\tpublic readonly data: (ColumnValue & { old: Value.FieldValue })[],\n\t\tpublic readonly id: Input.PrimaryValue,\n\t) {\n\t}\n\tget hasChanges() {\n\t\t// todo: deep equals\n\t\treturn this._hasChanges = this.data.some(it => it.value !== it.old)\n\t}\n}\n\nexport class BeforeDeleteEvent {\n\tpublic type = 'BeforeDeleteEvent' as const\n\n\tconstructor(\n\t\tpublic readonly entity: Model.Entity,\n\t\tpublic readonly id: Input.PrimaryValue,\n\t) {\n\t}\n}\n\nexport class BeforeJunctionUpdateEvent {\n\tpublic type = 'BeforeJunctionUpdateEvent' as const\n\n\tpublic afterEvent: AfterJunctionUpdateEvent | undefined = undefined\n\n\tconstructor(\n\t\tpublic readonly owningEntity: Model.Entity,\n\t\tpublic readonly owningRelation: Model.ManyHasManyOwningRelation,\n\t\tpublic readonly owningId: Input.PrimaryValue,\n\t\tpublic readonly inverseId: Input.PrimaryValue,\n\t\tpublic readonly operation: 'connect' | 'disconnect',\n\t) {\n\t}\n}\n\nexport class AfterJunctionUpdateEvent {\n\tpublic type = 'AfterJunctionUpdateEvent' as const\n\n\tconstructor(\n\t\tpublic readonly owningEntity: Model.Entity,\n\t\tpublic readonly owningRelation: Model.ManyHasManyOwningRelation,\n\t\tpublic readonly owningId: Input.PrimaryValue,\n\t\tpublic readonly inverseId: Input.PrimaryValue,\n\t\tpublic readonly operation: 'connect' | 'disconnect',\n\t\tpublic readonly hasChanges: boolean,\n\t) {\n\t}\n}\n\nexport class BeforeCommitEvent {\n\tpublic type = 'BeforeCommitEvent' as const\n}\n\nexport class AfterCommitEvent {\n\tpublic type = 'AfterCommitEvent' as const\n}\n\nexport type DataModificationEvent =\n\t| BeforeInsertEvent\n\t| AfterInsertEvent\n\t| BeforeUpdateEvent\n\t| AfterUpdateEvent\n\t| BeforeJunctionUpdateEvent\n\t| AfterJunctionUpdateEvent\n\t| BeforeDeleteEvent\n\nexport type AnyEvent =\n\t| DataModificationEvent\n\t| BeforeCommitEvent\n\t| AfterCommitEvent\n\nexport type EventMap<E extends AnyEvent = AnyEvent> = {\n\t[K in E['type']]: E extends { type: K } ? E : never\n}\n\nexport type EventListener<K extends keyof EventMap> = (event: EventMap[K], mapper: Mapper) => Promise<void>\n\nexport class EventManager {\n\tprivate listeners: { [K in keyof EventMap]: EventListener<K>[] } = {\n\t\tBeforeInsertEvent: [],\n\t\tAfterInsertEvent: [],\n\t\tBeforeUpdateEvent: [],\n\t\tAfterUpdateEvent: [],\n\t\tBeforeDeleteEvent: [],\n\t\tBeforeCommitEvent: [],\n\t\tAfterCommitEvent: [],\n\t\tBeforeJunctionUpdateEvent: [],\n\t\tAfterJunctionUpdateEvent: [],\n\t}\n\n\tconstructor(\n\t\tprivate readonly mapper: Mapper,\n\t) {\n\t}\n\n\tpublic listen<K extends keyof EventMap>(type: K, cb: EventListener<K>) {\n\t\tthis.listeners[type].push(cb)\n\t}\n\n\tpublic async fire<K extends keyof EventMap>(event: EventMap[K]) {\n\t\tfor (const listener of this.listeners[event.type]) {\n\t\t\tawait listener(event, this.mapper)\n\t\t}\n\t}\n}\n"],"names":[],"mappings":";;;AAIO,MAAM,kBAAkB;AAAA,EAK9B,YACiB,QACA,MACf;AAFe,SAAA,SAAA;AACA,SAAA,OAAA;AANjB,kBAAA,MAAO,QAAO,mBAAA;AAEd,kBAAA,MAAO,YAAA;AAAA,EAMP;AACD;AAEO,MAAM,iBAAiB;AAAA,EAG7B,YACiB,QACA,MACA,IACf;AAHe,SAAA,SAAA;AACA,SAAA,OAAA;AACA,SAAA,KAAA;AALjB,kBAAA,MAAO,QAAO,kBAAA;AAAA,EAOd;AACD;AAEO,MAAM,kBAAkB;AAAA,EAK9B,YACiB,QACA,MACA,IACf;AAHe,SAAA,SAAA;AACA,SAAA,OAAA;AACA,SAAA,KAAA;AAPjB,kBAAA,MAAO,QAAO,mBAAA;AAEd,kBAAA,MAAO,YAAA;AAAA,EAOP;AACD;AAEO,MAAM,iBAAiB;AAAA,EAK7B,YACiB,QACA,MACA,IACf;AAHe,SAAA,SAAA;AACA,SAAA,OAAA;AACA,SAAA,KAAA;AAPjB,kBAAA,MAAO,QAAO,kBAAA;AAEd,kBAAA,MAAQ,aAAA;AAAA,EAOR;AAAA,EACA,IAAI,aAAa;AAEhB,WAAO,KAAK,cAAc,KAAK,KAAK,KAAK,CAAA,OAAM,GAAG,UAAU,GAAG,GAAG;AAAA,EACnE;AACD;AAEO,MAAM,kBAAkB;AAAA,EAG9B,YACiB,QACA,IACf;AAFe,SAAA,SAAA;AACA,SAAA,KAAA;AAJjB,kBAAA,MAAO,QAAO,mBAAA;AAAA,EAMd;AACD;AAEO,MAAM,0BAA0B;AAAA,EAKtC,YACiB,cACA,gBACA,UACA,WACA,WACf;AALe,SAAA,eAAA;AACA,SAAA,iBAAA;AACA,SAAA,WAAA;AACA,SAAA,YAAA;AACA,SAAA,YAAA;AATjB,kBAAA,MAAO,QAAO,2BAAA;AAEd,kBAAA,MAAO,YAAA;AAAA,EASP;AACD;AAEO,MAAM,yBAAyB;AAAA,EAGrC,YACiB,cACA,gBACA,UACA,WACA,WACA,YACf;AANe,SAAA,eAAA;AACA,SAAA,iBAAA;AACA,SAAA,WAAA;AACA,SAAA,YAAA;AACA,SAAA,YAAA;AACA,SAAA,aAAA;AARjB,kBAAA,MAAO,QAAO,0BAAA;AAAA,EAUd;AACD;AAEO,MAAM,kBAAkB;AAAA,EAAxB,cAAA;AACN,kBAAA,MAAO,QAAO,mBAAA;AAAA,EAAA;AACf;AAEO,MAAM,iBAAiB;AAAA,EAAvB,cAAA;AACN,kBAAA,MAAO,QAAO,kBAAA;AAAA,EAAA;AACf;AAsBO,MAAM,aAAa;AAAA,EAazB,YACkB,QAChB;AADgB,SAAA,SAAA;AAblB,kBAAA,MAAQ,aAA2D;AAAA,MAClE,mBAAmB,CAAA;AAAA,MACnB,kBAAkB,CAAA;AAAA,MAClB,mBAAmB,CAAA;AAAA,MACnB,kBAAkB,CAAA;AAAA,MAClB,mBAAmB,CAAA;AAAA,MACnB,mBAAmB,CAAA;AAAA,MACnB,kBAAkB,CAAA;AAAA,MAClB,2BAA2B,CAAA;AAAA,MAC3B,0BAA0B,CAAA;AAAA,IAAC,CAC5B;AAAA,EAKA;AAAA,EAEO,OAAiC,MAAS,IAAsB;AACtE,SAAK,UAAU,IAAI,EAAE,KAAK,EAAE;AAAA,EAC7B;AAAA,EAEA,MAAa,KAA+B,OAAoB;AAC/D,eAAW,YAAY,KAAK,UAAU,MAAM,IAAI,GAAG;AAClD,YAAM,SAAS,OAAO,KAAK,MAAM;AAAA,IAClC;AAAA,EACD;AACD;"}
|
|
@@ -27,7 +27,14 @@ class JunctionTableManager {
|
|
|
27
27
|
this.connectJunctionHandler
|
|
28
28
|
);
|
|
29
29
|
if (result.result !== Result.MutationResultType.noResultError) {
|
|
30
|
-
const afterEvent = new EventManager.AfterJunctionUpdateEvent(
|
|
30
|
+
const afterEvent = new EventManager.AfterJunctionUpdateEvent(
|
|
31
|
+
owningEntity,
|
|
32
|
+
relation,
|
|
33
|
+
owningUnique,
|
|
34
|
+
inverseUnique,
|
|
35
|
+
"connect",
|
|
36
|
+
result.result === Result.MutationResultType.ok
|
|
37
|
+
);
|
|
31
38
|
await mapper.eventManager.fire(afterEvent);
|
|
32
39
|
}
|
|
33
40
|
return [result];
|
|
@@ -44,7 +51,14 @@ class JunctionTableManager {
|
|
|
44
51
|
this.disconnectJunctionHandler
|
|
45
52
|
);
|
|
46
53
|
if (result.result !== Result.MutationResultType.noResultError) {
|
|
47
|
-
const afterEvent = new EventManager.AfterJunctionUpdateEvent(
|
|
54
|
+
const afterEvent = new EventManager.AfterJunctionUpdateEvent(
|
|
55
|
+
owningEntity,
|
|
56
|
+
relation,
|
|
57
|
+
owningUnique,
|
|
58
|
+
inverseUnique,
|
|
59
|
+
"disconnect",
|
|
60
|
+
result.result === Result.MutationResultType.ok
|
|
61
|
+
);
|
|
48
62
|
beforeEvent.afterEvent = afterEvent;
|
|
49
63
|
await mapper.eventManager.fire(afterEvent);
|
|
50
64
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JunctionTableManager.cjs","sources":["../../../../../packages/engine-content-api/src/mapper/JunctionTableManager.ts"],"sourcesContent":["import { getEntity } from '@contember/schema-utils'\nimport { PathFactory, WhereBuilder } from './select'\nimport { PredicateFactory } from '../acl'\nimport {\n\tClient,\n\tConflictActionType,\n\tDeleteBuilder,\n\tInsertBuilder,\n\tLiteral,\n\tOperator,\n\tSelectBuilder,\n} from '@contember/database'\nimport { Acl, Input, Model } from '@contember/schema'\nimport {\n\tMutationJunctionUpdateOk,\n\tMutationNoResultError,\n\tMutationNothingToDo,\n\tMutationResultList,\n\tMutationResultType,\n\tNothingToDoReason,\n} from './Result'\nimport { ImplementationException } from '../exception'\nimport { AfterJunctionUpdateEvent, BeforeJunctionUpdateEvent } from './EventManager'\nimport { Mapper } from './Mapper'\n\ntype OkResultFactory = () => MutationJunctionUpdateOk\n\ntype JunctionMutationResult =\n\t| MutationJunctionUpdateOk\n\t| MutationNothingToDo\n\t| MutationNoResultError\n\nexport class JunctionTableManager {\n\tconstructor(\n\t\tprivate readonly schema: Model.Schema,\n\t\tprivate readonly predicateFactory: PredicateFactory,\n\t\tprivate readonly whereBuilder: WhereBuilder,\n\t\tprivate readonly connectJunctionHandler: JunctionConnectHandler,\n\t\tprivate readonly disconnectJunctionHandler: JunctionDisconnectHandler,\n\t\tprivate readonly pathFactory: PathFactory,\n\t) {}\n\n\tpublic async connectJunction(\n\t\tmapper: Mapper,\n\t\towningEntity: Model.Entity,\n\t\trelation: Model.ManyHasManyOwningRelation,\n\t\towningUnique: Input.PrimaryValue,\n\t\tinverseUnique: Input.PrimaryValue,\n\t): Promise<MutationResultList> {\n\t\tconst beforeEvent = new BeforeJunctionUpdateEvent(owningEntity, relation, owningUnique, inverseUnique, 'connect')\n\t\tawait mapper.eventManager.fire(beforeEvent)\n\t\tconst result = await this.executeJunctionModification(\n\t\t\tmapper.db,\n\t\t\towningEntity,\n\t\t\trelation,\n\t\t\towningUnique,\n\t\t\tinverseUnique,\n\t\t\tthis.connectJunctionHandler,\n\t\t)\n\t\tif (result.result !== MutationResultType.noResultError) {\n\t\t\tconst afterEvent = new AfterJunctionUpdateEvent(owningEntity, relation, owningUnique, inverseUnique, 'connect', result.result === MutationResultType.ok)\n\t\t\tawait mapper.eventManager.fire(afterEvent)\n\t\t}\n\t\treturn [result]\n\t}\n\n\tpublic async disconnectJunction(\n\t\tmapper: Mapper,\n\t\towningEntity: Model.Entity,\n\t\trelation: Model.ManyHasManyOwningRelation,\n\t\towningUnique: Input.PrimaryValue,\n\t\tinverseUnique: Input.PrimaryValue,\n\t): Promise<MutationResultList> {\n\t\tconst beforeEvent = new BeforeJunctionUpdateEvent(owningEntity, relation, owningUnique, inverseUnique, 'connect')\n\t\tawait mapper.eventManager.fire(beforeEvent)\n\t\tconst result = await this.executeJunctionModification(\n\t\t\tmapper.db,\n\t\t\towningEntity,\n\t\t\trelation,\n\t\t\towningUnique,\n\t\t\tinverseUnique,\n\t\t\tthis.disconnectJunctionHandler,\n\t\t)\n\t\tif (result.result !== MutationResultType.noResultError) {\n\t\t\tconst afterEvent = new AfterJunctionUpdateEvent(owningEntity, relation, owningUnique, inverseUnique, 'disconnect', result.result === MutationResultType.ok)\n\t\t\tbeforeEvent.afterEvent = afterEvent\n\t\t\tawait mapper.eventManager.fire(afterEvent)\n\t\t}\n\t\treturn [result]\n\t}\n\n\n\tprivate async executeJunctionModification(\n\t\tdb: Client,\n\t\towningEntity: Model.Entity,\n\t\trelation: Model.ManyHasManyOwningRelation,\n\t\towningPrimary: Input.PrimaryValue,\n\t\tinversePrimary: Input.PrimaryValue,\n\t\thandler: JunctionHandler,\n\t): Promise<JunctionMutationResult> {\n\t\tconst joiningTable = relation.joiningTable\n\t\tconst inverseEntity = getEntity(this.schema, relation.target)\n\t\tif (inverseEntity.view || owningEntity.view) {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\n\t\tconst owningPredicate = this.predicateFactory.create(owningEntity, Acl.Operation.update, [relation.name])\n\t\tlet inversePredicate: Input.OptionalWhere = {}\n\t\tif (relation.inversedBy) {\n\t\t\tinversePredicate = this.predicateFactory.create(inverseEntity, Acl.Operation.update, [relation.inversedBy])\n\t\t}\n\n\t\tconst hasNoPredicates = Object.keys(owningPredicate).length === 0 && Object.keys(inversePredicate).length === 0\n\n\t\tconst okResultFactory = () =>\n\t\t\tnew MutationJunctionUpdateOk([], owningEntity, relation, owningPrimary, inversePrimary)\n\t\tif (hasNoPredicates) {\n\t\t\treturn await handler.executeSimple({ db, joiningTable, owningPrimary, inversePrimary, okResultFactory })\n\t\t} else {\n\t\t\tconst owningWhere: Input.OptionalWhere = {\n\t\t\t\tand: [owningPredicate, { [owningEntity.primary]: { eq: owningPrimary } }],\n\t\t\t}\n\n\t\t\tconst inverseWhere: Input.OptionalWhere = {\n\t\t\t\tand: [inversePredicate, { [inverseEntity.primary]: { eq: inversePrimary } }],\n\t\t\t}\n\n\t\t\tconst dataCallback: SelectBuilder.Callback = qb => {\n\t\t\t\tqb = qb\n\t\t\t\t\t.select(expr => expr.select(['owning', owningEntity.primaryColumn]), joiningTable.joiningColumn.columnName)\n\t\t\t\t\t.select(\n\t\t\t\t\t\texpr => expr.select(['inverse', inverseEntity.primaryColumn]),\n\t\t\t\t\t\tjoiningTable.inverseJoiningColumn.columnName,\n\t\t\t\t\t)\n\t\t\t\t\t.select(expr => expr.raw('true'), 'selected')\n\t\t\t\t\t.from(new Literal('(values (null))'), 't')\n\n\t\t\t\t\t.join(owningEntity.tableName, 'owning', condition => condition.raw('true'))\n\t\t\t\t\t.join(inverseEntity.tableName, 'inverse', condition => condition.raw('true'))\n\t\t\t\tqb = this.whereBuilder.build(qb, owningEntity, this.pathFactory.create([], 'owning'), owningWhere)\n\t\t\t\tqb = this.whereBuilder.build(qb, inverseEntity, this.pathFactory.create([], 'inverse'), inverseWhere)\n\t\t\t\treturn qb\n\t\t\t}\n\n\t\t\treturn await handler.executeComplex({ db, joiningTable, dataCallback, okResultFactory })\n\t\t}\n\t}\n}\n\ninterface JunctionSimpleExecutionArgs {\n\tdb: Client\n\tjoiningTable: Model.JoiningTable\n\towningPrimary: Input.PrimaryValue\n\tinversePrimary: Input.PrimaryValue\n\tokResultFactory: OkResultFactory\n}\n\ninterface JunctionComplexExecutionArgs {\n\tdb: Client\n\tjoiningTable: Model.JoiningTable\n\tdataCallback: SelectBuilder.Callback\n\tokResultFactory: OkResultFactory\n}\n\ninterface JunctionHandler {\n\texecuteSimple(args: JunctionSimpleExecutionArgs): Promise<JunctionMutationResult>\n\n\texecuteComplex(args: JunctionComplexExecutionArgs): Promise<JunctionMutationResult>\n}\n\nexport class JunctionConnectHandler implements JunctionHandler {\n\tasync executeSimple({\n\t\tdb,\n\t\tjoiningTable,\n\t\towningPrimary,\n\t\tinversePrimary,\n\t\tokResultFactory,\n\t}: JunctionSimpleExecutionArgs): Promise<JunctionMutationResult> {\n\t\tconst result = await InsertBuilder.create()\n\t\t\t.into(joiningTable.tableName)\n\t\t\t.values({\n\t\t\t\t[joiningTable.joiningColumn.columnName]: expr => expr.selectValue(owningPrimary),\n\t\t\t\t[joiningTable.inverseJoiningColumn.columnName]: expr => expr.selectValue(inversePrimary),\n\t\t\t})\n\t\t\t.onConflict(ConflictActionType.doNothing)\n\t\t\t.execute(db)\n\t\tif (result === 0) {\n\t\t\treturn new MutationNothingToDo([], NothingToDoReason.alreadyExists)\n\t\t}\n\t\treturn okResultFactory()\n\t}\n\n\tasync executeComplex({\n\t\tdb,\n\t\tjoiningTable,\n\t\tdataCallback,\n\t\tokResultFactory,\n\t}: JunctionComplexExecutionArgs): Promise<JunctionMutationResult> {\n\t\tconst insert = InsertBuilder.create()\n\t\t\t.into(joiningTable.tableName)\n\t\t\t.values({\n\t\t\t\t[joiningTable.joiningColumn.columnName]: expr => expr.select(['data', joiningTable.joiningColumn.columnName]),\n\t\t\t\t[joiningTable.inverseJoiningColumn.columnName]: expr =>\n\t\t\t\t\texpr.select(['data', joiningTable.inverseJoiningColumn.columnName]),\n\t\t\t})\n\t\t\t.returning(new Literal('true as inserted'))\n\t\t\t.from(qb => qb.from('data'))\n\t\t\t.onConflict(ConflictActionType.doNothing)\n\n\t\tconst qb = SelectBuilder.create()\n\t\t\t.with('data', dataCallback)\n\t\t\t.with('insert', insert)\n\t\t\t.from(new Literal('(values (null))'), 't')\n\t\t\t.leftJoin('data', 'data', condition => condition.raw('true'))\n\t\t\t.leftJoin('insert', 'insert', condition => condition.raw('true'))\n\t\t\t.select(expr => expr.raw('coalesce(data.selected, false)'), 'selected')\n\t\t\t.select(expr => expr.raw('coalesce(insert.inserted, false)'), 'inserted')\n\n\t\tconst result = await qb.getResult(db)\n\t\tif (result[0]['selected'] === false) {\n\t\t\treturn new MutationNoResultError([])\n\t\t}\n\t\tif (result[0]['inserted'] === false) {\n\t\t\treturn new MutationNothingToDo([], NothingToDoReason.alreadyExists)\n\t\t}\n\t\treturn okResultFactory()\n\t}\n}\n\nexport class JunctionDisconnectHandler implements JunctionHandler {\n\tpublic async executeSimple({\n\t\tdb,\n\t\tjoiningTable,\n\t\towningPrimary,\n\t\tinversePrimary,\n\t\tokResultFactory,\n\t}: JunctionSimpleExecutionArgs): Promise<JunctionMutationResult> {\n\t\tconst qb = DeleteBuilder.create()\n\t\t\t.from(joiningTable.tableName)\n\t\t\t.where(cond => cond.compare(joiningTable.joiningColumn.columnName, Operator.eq, owningPrimary))\n\t\t\t.where(cond => cond.compare(joiningTable.inverseJoiningColumn.columnName, Operator.eq, inversePrimary))\n\n\t\tconst result = await qb.execute(db)\n\t\tif (result === 0) {\n\t\t\treturn new MutationNothingToDo([], NothingToDoReason.alreadyExists)\n\t\t}\n\t\treturn okResultFactory()\n\t}\n\n\tpublic async executeComplex({\n\t\tdb,\n\t\tjoiningTable,\n\t\tdataCallback,\n\t\tokResultFactory,\n\t}: JunctionComplexExecutionArgs): Promise<JunctionMutationResult> {\n\t\tconst deleteQb = DeleteBuilder.create()\n\t\t\t.from(joiningTable.tableName)\n\t\t\t.using('data')\n\t\t\t.where(cond => {\n\t\t\t\tcond = cond.compareColumns([joiningTable.tableName, joiningTable.joiningColumn.columnName], Operator.eq, [\n\t\t\t\t\t'data',\n\t\t\t\t\tjoiningTable.joiningColumn.columnName,\n\t\t\t\t])\n\t\t\t\tcond = cond.compareColumns(\n\t\t\t\t\t[joiningTable.tableName, joiningTable.inverseJoiningColumn.columnName],\n\t\t\t\t\tOperator.eq,\n\t\t\t\t\t['data', joiningTable.inverseJoiningColumn.columnName],\n\t\t\t\t)\n\t\t\t\treturn cond\n\t\t\t})\n\t\t\t.returning(new Literal('true as deleted'))\n\n\t\tconst qb = SelectBuilder.create()\n\t\t\t.with('data', dataCallback)\n\t\t\t.with('delete', deleteQb)\n\t\t\t.from(new Literal('(values (null))'), 't')\n\t\t\t.leftJoin('data', 'data', condition => condition.raw('true'))\n\t\t\t.leftJoin('delete', 'delete', condition => condition.raw('true'))\n\t\t\t.select(expr => expr.raw('coalesce(data.selected, false)'), 'selected')\n\t\t\t.select(expr => expr.raw('coalesce(delete.deleted, false)'), 'deleted')\n\n\t\tconst result = await qb.getResult(db)\n\t\tif (result[0]['selected'] === false) {\n\t\t\treturn new MutationNoResultError([])\n\t\t}\n\t\tif (result[0]['inserted'] === false) {\n\t\t\treturn new MutationNothingToDo([], NothingToDoReason.alreadyExists)\n\t\t}\n\t\treturn okResultFactory()\n\t}\n}\n"],"names":["schema","BeforeJunctionUpdateEvent","MutationResultType","AfterJunctionUpdateEvent","getEntity","ImplementationException","Acl","MutationJunctionUpdateOk","Literal","InsertBuilder","ConflictActionType","MutationNothingToDo","NothingToDoReason","qb","SelectBuilder","MutationNoResultError","DeleteBuilder","Operator"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"JunctionTableManager.cjs","sources":["../../../../../packages/engine-content-api/src/mapper/JunctionTableManager.ts"],"sourcesContent":["import { getEntity } from '@contember/schema-utils'\nimport { PathFactory, WhereBuilder } from './select'\nimport { PredicateFactory } from '../acl'\nimport { Client, ConflictActionType, DeleteBuilder, InsertBuilder, Literal, Operator, SelectBuilder } from '@contember/database'\nimport { Acl, Input, Model } from '@contember/schema'\nimport {\n\tMutationJunctionUpdateOk,\n\tMutationNoResultError,\n\tMutationNothingToDo,\n\tMutationResultList,\n\tMutationResultType,\n\tNothingToDoReason,\n} from './Result'\nimport { ImplementationException } from '../exception'\nimport { AfterJunctionUpdateEvent, BeforeJunctionUpdateEvent } from './EventManager'\nimport { Mapper } from './Mapper'\n\ntype OkResultFactory = () => MutationJunctionUpdateOk\n\ntype JunctionMutationResult =\n\t| MutationJunctionUpdateOk\n\t| MutationNothingToDo\n\t| MutationNoResultError\n\nexport class JunctionTableManager {\n\tconstructor(\n\t\tprivate readonly schema: Model.Schema,\n\t\tprivate readonly predicateFactory: PredicateFactory,\n\t\tprivate readonly whereBuilder: WhereBuilder,\n\t\tprivate readonly connectJunctionHandler: JunctionConnectHandler,\n\t\tprivate readonly disconnectJunctionHandler: JunctionDisconnectHandler,\n\t\tprivate readonly pathFactory: PathFactory,\n\t) {}\n\n\tpublic async connectJunction(\n\t\tmapper: Mapper,\n\t\towningEntity: Model.Entity,\n\t\trelation: Model.ManyHasManyOwningRelation,\n\t\towningUnique: Input.PrimaryValue,\n\t\tinverseUnique: Input.PrimaryValue,\n\t): Promise<MutationResultList> {\n\t\tconst beforeEvent = new BeforeJunctionUpdateEvent(owningEntity, relation, owningUnique, inverseUnique, 'connect')\n\t\tawait mapper.eventManager.fire(beforeEvent)\n\t\tconst result = await this.executeJunctionModification(\n\t\t\tmapper.db,\n\t\t\towningEntity,\n\t\t\trelation,\n\t\t\towningUnique,\n\t\t\tinverseUnique,\n\t\t\tthis.connectJunctionHandler,\n\t\t)\n\t\tif (result.result !== MutationResultType.noResultError) {\n\t\t\tconst afterEvent = new AfterJunctionUpdateEvent(\n\t\t\t\towningEntity,\n\t\t\t\trelation,\n\t\t\t\towningUnique,\n\t\t\t\tinverseUnique,\n\t\t\t\t'connect',\n\t\t\t\tresult.result === MutationResultType.ok,\n\t\t\t)\n\t\t\tawait mapper.eventManager.fire(afterEvent)\n\t\t}\n\t\treturn [result]\n\t}\n\n\tpublic async disconnectJunction(\n\t\tmapper: Mapper,\n\t\towningEntity: Model.Entity,\n\t\trelation: Model.ManyHasManyOwningRelation,\n\t\towningUnique: Input.PrimaryValue,\n\t\tinverseUnique: Input.PrimaryValue,\n\t): Promise<MutationResultList> {\n\t\tconst beforeEvent = new BeforeJunctionUpdateEvent(owningEntity, relation, owningUnique, inverseUnique, 'connect')\n\t\tawait mapper.eventManager.fire(beforeEvent)\n\t\tconst result = await this.executeJunctionModification(\n\t\t\tmapper.db,\n\t\t\towningEntity,\n\t\t\trelation,\n\t\t\towningUnique,\n\t\t\tinverseUnique,\n\t\t\tthis.disconnectJunctionHandler,\n\t\t)\n\t\tif (result.result !== MutationResultType.noResultError) {\n\t\t\tconst afterEvent = new AfterJunctionUpdateEvent(\n\t\t\t\towningEntity,\n\t\t\t\trelation,\n\t\t\t\towningUnique,\n\t\t\t\tinverseUnique,\n\t\t\t\t'disconnect',\n\t\t\t\tresult.result === MutationResultType.ok,\n\t\t\t)\n\t\t\tbeforeEvent.afterEvent = afterEvent\n\t\t\tawait mapper.eventManager.fire(afterEvent)\n\t\t}\n\t\treturn [result]\n\t}\n\n\tprivate async executeJunctionModification(\n\t\tdb: Client,\n\t\towningEntity: Model.Entity,\n\t\trelation: Model.ManyHasManyOwningRelation,\n\t\towningPrimary: Input.PrimaryValue,\n\t\tinversePrimary: Input.PrimaryValue,\n\t\thandler: JunctionHandler,\n\t): Promise<JunctionMutationResult> {\n\t\tconst joiningTable = relation.joiningTable\n\t\tconst inverseEntity = getEntity(this.schema, relation.target)\n\t\tif (inverseEntity.view || owningEntity.view) {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\n\t\tconst owningPredicate = this.predicateFactory.create(owningEntity, Acl.Operation.update, [relation.name])\n\t\tlet inversePredicate: Input.OptionalWhere = {}\n\t\tif (relation.inversedBy) {\n\t\t\tinversePredicate = this.predicateFactory.create(inverseEntity, Acl.Operation.update, [relation.inversedBy])\n\t\t}\n\n\t\tconst hasNoPredicates = Object.keys(owningPredicate).length === 0 && Object.keys(inversePredicate).length === 0\n\n\t\tconst okResultFactory = () => new MutationJunctionUpdateOk([], owningEntity, relation, owningPrimary, inversePrimary)\n\t\tif (hasNoPredicates) {\n\t\t\treturn await handler.executeSimple({ db, joiningTable, owningPrimary, inversePrimary, okResultFactory })\n\t\t} else {\n\t\t\tconst owningWhere: Input.OptionalWhere = {\n\t\t\t\tand: [owningPredicate, { [owningEntity.primary]: { eq: owningPrimary } }],\n\t\t\t}\n\n\t\t\tconst inverseWhere: Input.OptionalWhere = {\n\t\t\t\tand: [inversePredicate, { [inverseEntity.primary]: { eq: inversePrimary } }],\n\t\t\t}\n\n\t\t\tconst dataCallback: SelectBuilder.Callback = qb => {\n\t\t\t\tqb = qb\n\t\t\t\t\t.select(expr => expr.select(['owning', owningEntity.primaryColumn]), joiningTable.joiningColumn.columnName)\n\t\t\t\t\t.select(\n\t\t\t\t\t\texpr => expr.select(['inverse', inverseEntity.primaryColumn]),\n\t\t\t\t\t\tjoiningTable.inverseJoiningColumn.columnName,\n\t\t\t\t\t)\n\t\t\t\t\t.select(expr => expr.raw('true'), 'selected')\n\t\t\t\t\t.from(new Literal('(values (null))'), 't')\n\t\t\t\t\t.join(owningEntity.tableName, 'owning', condition => condition.raw('true'))\n\t\t\t\t\t.join(inverseEntity.tableName, 'inverse', condition => condition.raw('true'))\n\t\t\t\tqb = this.whereBuilder.build(qb, owningEntity, this.pathFactory.create([], 'owning'), owningWhere)\n\t\t\t\tqb = this.whereBuilder.build(qb, inverseEntity, this.pathFactory.create([], 'inverse'), inverseWhere)\n\t\t\t\treturn qb\n\t\t\t}\n\n\t\t\treturn await handler.executeComplex({ db, joiningTable, dataCallback, okResultFactory })\n\t\t}\n\t}\n}\n\ninterface JunctionSimpleExecutionArgs {\n\tdb: Client\n\tjoiningTable: Model.JoiningTable\n\towningPrimary: Input.PrimaryValue\n\tinversePrimary: Input.PrimaryValue\n\tokResultFactory: OkResultFactory\n}\n\ninterface JunctionComplexExecutionArgs {\n\tdb: Client\n\tjoiningTable: Model.JoiningTable\n\tdataCallback: SelectBuilder.Callback\n\tokResultFactory: OkResultFactory\n}\n\ninterface JunctionHandler {\n\texecuteSimple(args: JunctionSimpleExecutionArgs): Promise<JunctionMutationResult>\n\n\texecuteComplex(args: JunctionComplexExecutionArgs): Promise<JunctionMutationResult>\n}\n\nexport class JunctionConnectHandler implements JunctionHandler {\n\tasync executeSimple({\n\t\tdb,\n\t\tjoiningTable,\n\t\towningPrimary,\n\t\tinversePrimary,\n\t\tokResultFactory,\n\t}: JunctionSimpleExecutionArgs): Promise<JunctionMutationResult> {\n\t\tconst result = await InsertBuilder.create()\n\t\t\t.into(joiningTable.tableName)\n\t\t\t.values({\n\t\t\t\t[joiningTable.joiningColumn.columnName]: expr => expr.selectValue(owningPrimary),\n\t\t\t\t[joiningTable.inverseJoiningColumn.columnName]: expr => expr.selectValue(inversePrimary),\n\t\t\t})\n\t\t\t.onConflict(ConflictActionType.doNothing)\n\t\t\t.execute(db)\n\t\tif (result === 0) {\n\t\t\treturn new MutationNothingToDo([], NothingToDoReason.alreadyExists)\n\t\t}\n\t\treturn okResultFactory()\n\t}\n\n\tasync executeComplex({\n\t\tdb,\n\t\tjoiningTable,\n\t\tdataCallback,\n\t\tokResultFactory,\n\t}: JunctionComplexExecutionArgs): Promise<JunctionMutationResult> {\n\t\tconst insert = InsertBuilder.create()\n\t\t\t.into(joiningTable.tableName)\n\t\t\t.values({\n\t\t\t\t[joiningTable.joiningColumn.columnName]: expr => expr.select(['data', joiningTable.joiningColumn.columnName]),\n\t\t\t\t[joiningTable.inverseJoiningColumn.columnName]: expr => expr.select(['data', joiningTable.inverseJoiningColumn.columnName]),\n\t\t\t})\n\t\t\t.returning(new Literal('true as inserted'))\n\t\t\t.from(qb => qb.from('data'))\n\t\t\t.onConflict(ConflictActionType.doNothing)\n\n\t\tconst qb = SelectBuilder.create()\n\t\t\t.with('data', dataCallback)\n\t\t\t.with('insert', insert)\n\t\t\t.from(new Literal('(values (null))'), 't')\n\t\t\t.leftJoin('data', 'data', condition => condition.raw('true'))\n\t\t\t.leftJoin('insert', 'insert', condition => condition.raw('true'))\n\t\t\t.select(expr => expr.raw('coalesce(data.selected, false)'), 'selected')\n\t\t\t.select(expr => expr.raw('coalesce(insert.inserted, false)'), 'inserted')\n\n\t\tconst result = await qb.getResult(db)\n\t\tif (result[0]['selected'] === false) {\n\t\t\treturn new MutationNoResultError([])\n\t\t}\n\t\tif (result[0]['inserted'] === false) {\n\t\t\treturn new MutationNothingToDo([], NothingToDoReason.alreadyExists)\n\t\t}\n\t\treturn okResultFactory()\n\t}\n}\n\nexport class JunctionDisconnectHandler implements JunctionHandler {\n\tpublic async executeSimple({\n\t\tdb,\n\t\tjoiningTable,\n\t\towningPrimary,\n\t\tinversePrimary,\n\t\tokResultFactory,\n\t}: JunctionSimpleExecutionArgs): Promise<JunctionMutationResult> {\n\t\tconst qb = DeleteBuilder.create()\n\t\t\t.from(joiningTable.tableName)\n\t\t\t.where(cond => cond.compare(joiningTable.joiningColumn.columnName, Operator.eq, owningPrimary))\n\t\t\t.where(cond => cond.compare(joiningTable.inverseJoiningColumn.columnName, Operator.eq, inversePrimary))\n\n\t\tconst result = await qb.execute(db)\n\t\tif (result === 0) {\n\t\t\treturn new MutationNothingToDo([], NothingToDoReason.alreadyExists)\n\t\t}\n\t\treturn okResultFactory()\n\t}\n\n\tpublic async executeComplex({\n\t\tdb,\n\t\tjoiningTable,\n\t\tdataCallback,\n\t\tokResultFactory,\n\t}: JunctionComplexExecutionArgs): Promise<JunctionMutationResult> {\n\t\tconst deleteQb = DeleteBuilder.create()\n\t\t\t.from(joiningTable.tableName)\n\t\t\t.using('data')\n\t\t\t.where(cond => {\n\t\t\t\tcond = cond.compareColumns([joiningTable.tableName, joiningTable.joiningColumn.columnName], Operator.eq, [\n\t\t\t\t\t'data',\n\t\t\t\t\tjoiningTable.joiningColumn.columnName,\n\t\t\t\t])\n\t\t\t\tcond = cond.compareColumns(\n\t\t\t\t\t[joiningTable.tableName, joiningTable.inverseJoiningColumn.columnName],\n\t\t\t\t\tOperator.eq,\n\t\t\t\t\t['data', joiningTable.inverseJoiningColumn.columnName],\n\t\t\t\t)\n\t\t\t\treturn cond\n\t\t\t})\n\t\t\t.returning(new Literal('true as deleted'))\n\n\t\tconst qb = SelectBuilder.create()\n\t\t\t.with('data', dataCallback)\n\t\t\t.with('delete', deleteQb)\n\t\t\t.from(new Literal('(values (null))'), 't')\n\t\t\t.leftJoin('data', 'data', condition => condition.raw('true'))\n\t\t\t.leftJoin('delete', 'delete', condition => condition.raw('true'))\n\t\t\t.select(expr => expr.raw('coalesce(data.selected, false)'), 'selected')\n\t\t\t.select(expr => expr.raw('coalesce(delete.deleted, false)'), 'deleted')\n\n\t\tconst result = await qb.getResult(db)\n\t\tif (result[0]['selected'] === false) {\n\t\t\treturn new MutationNoResultError([])\n\t\t}\n\t\tif (result[0]['inserted'] === false) {\n\t\t\treturn new MutationNothingToDo([], NothingToDoReason.alreadyExists)\n\t\t}\n\t\treturn okResultFactory()\n\t}\n}\n"],"names":["schema","BeforeJunctionUpdateEvent","MutationResultType","AfterJunctionUpdateEvent","getEntity","ImplementationException","Acl","MutationJunctionUpdateOk","Literal","InsertBuilder","ConflictActionType","MutationNothingToDo","NothingToDoReason","qb","SelectBuilder","MutationNoResultError","DeleteBuilder","Operator"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { getEntity } from "@contember/schema-utils";
|
|
2
2
|
import { InsertBuilder as InsertBuilder$1, ConflictActionType, Literal, SelectBuilder, DeleteBuilder, Operator } from "@contember/database";
|
|
3
3
|
import { Acl } from "@contember/schema";
|
|
4
|
-
import {
|
|
4
|
+
import { MutationNothingToDo, NothingToDoReason, MutationNoResultError, MutationResultType, MutationJunctionUpdateOk } from "./Result.js";
|
|
5
5
|
import { ImplementationException } from "../exception.js";
|
|
6
6
|
import { BeforeJunctionUpdateEvent, AfterJunctionUpdateEvent } from "./EventManager.js";
|
|
7
7
|
class JunctionTableManager {
|
|
@@ -25,7 +25,14 @@ class JunctionTableManager {
|
|
|
25
25
|
this.connectJunctionHandler
|
|
26
26
|
);
|
|
27
27
|
if (result.result !== MutationResultType.noResultError) {
|
|
28
|
-
const afterEvent = new AfterJunctionUpdateEvent(
|
|
28
|
+
const afterEvent = new AfterJunctionUpdateEvent(
|
|
29
|
+
owningEntity,
|
|
30
|
+
relation,
|
|
31
|
+
owningUnique,
|
|
32
|
+
inverseUnique,
|
|
33
|
+
"connect",
|
|
34
|
+
result.result === MutationResultType.ok
|
|
35
|
+
);
|
|
29
36
|
await mapper.eventManager.fire(afterEvent);
|
|
30
37
|
}
|
|
31
38
|
return [result];
|
|
@@ -42,7 +49,14 @@ class JunctionTableManager {
|
|
|
42
49
|
this.disconnectJunctionHandler
|
|
43
50
|
);
|
|
44
51
|
if (result.result !== MutationResultType.noResultError) {
|
|
45
|
-
const afterEvent = new AfterJunctionUpdateEvent(
|
|
52
|
+
const afterEvent = new AfterJunctionUpdateEvent(
|
|
53
|
+
owningEntity,
|
|
54
|
+
relation,
|
|
55
|
+
owningUnique,
|
|
56
|
+
inverseUnique,
|
|
57
|
+
"disconnect",
|
|
58
|
+
result.result === MutationResultType.ok
|
|
59
|
+
);
|
|
46
60
|
beforeEvent.afterEvent = afterEvent;
|
|
47
61
|
await mapper.eventManager.fire(afterEvent);
|
|
48
62
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JunctionTableManager.js","sources":["../../../../../packages/engine-content-api/src/mapper/JunctionTableManager.ts"],"sourcesContent":["import { getEntity } from '@contember/schema-utils'\nimport { PathFactory, WhereBuilder } from './select'\nimport { PredicateFactory } from '../acl'\nimport {\n\tClient,\n\tConflictActionType,\n\tDeleteBuilder,\n\tInsertBuilder,\n\tLiteral,\n\tOperator,\n\tSelectBuilder,\n} from '@contember/database'\nimport { Acl, Input, Model } from '@contember/schema'\nimport {\n\tMutationJunctionUpdateOk,\n\tMutationNoResultError,\n\tMutationNothingToDo,\n\tMutationResultList,\n\tMutationResultType,\n\tNothingToDoReason,\n} from './Result'\nimport { ImplementationException } from '../exception'\nimport { AfterJunctionUpdateEvent, BeforeJunctionUpdateEvent } from './EventManager'\nimport { Mapper } from './Mapper'\n\ntype OkResultFactory = () => MutationJunctionUpdateOk\n\ntype JunctionMutationResult =\n\t| MutationJunctionUpdateOk\n\t| MutationNothingToDo\n\t| MutationNoResultError\n\nexport class JunctionTableManager {\n\tconstructor(\n\t\tprivate readonly schema: Model.Schema,\n\t\tprivate readonly predicateFactory: PredicateFactory,\n\t\tprivate readonly whereBuilder: WhereBuilder,\n\t\tprivate readonly connectJunctionHandler: JunctionConnectHandler,\n\t\tprivate readonly disconnectJunctionHandler: JunctionDisconnectHandler,\n\t\tprivate readonly pathFactory: PathFactory,\n\t) {}\n\n\tpublic async connectJunction(\n\t\tmapper: Mapper,\n\t\towningEntity: Model.Entity,\n\t\trelation: Model.ManyHasManyOwningRelation,\n\t\towningUnique: Input.PrimaryValue,\n\t\tinverseUnique: Input.PrimaryValue,\n\t): Promise<MutationResultList> {\n\t\tconst beforeEvent = new BeforeJunctionUpdateEvent(owningEntity, relation, owningUnique, inverseUnique, 'connect')\n\t\tawait mapper.eventManager.fire(beforeEvent)\n\t\tconst result = await this.executeJunctionModification(\n\t\t\tmapper.db,\n\t\t\towningEntity,\n\t\t\trelation,\n\t\t\towningUnique,\n\t\t\tinverseUnique,\n\t\t\tthis.connectJunctionHandler,\n\t\t)\n\t\tif (result.result !== MutationResultType.noResultError) {\n\t\t\tconst afterEvent = new AfterJunctionUpdateEvent(owningEntity, relation, owningUnique, inverseUnique, 'connect', result.result === MutationResultType.ok)\n\t\t\tawait mapper.eventManager.fire(afterEvent)\n\t\t}\n\t\treturn [result]\n\t}\n\n\tpublic async disconnectJunction(\n\t\tmapper: Mapper,\n\t\towningEntity: Model.Entity,\n\t\trelation: Model.ManyHasManyOwningRelation,\n\t\towningUnique: Input.PrimaryValue,\n\t\tinverseUnique: Input.PrimaryValue,\n\t): Promise<MutationResultList> {\n\t\tconst beforeEvent = new BeforeJunctionUpdateEvent(owningEntity, relation, owningUnique, inverseUnique, 'connect')\n\t\tawait mapper.eventManager.fire(beforeEvent)\n\t\tconst result = await this.executeJunctionModification(\n\t\t\tmapper.db,\n\t\t\towningEntity,\n\t\t\trelation,\n\t\t\towningUnique,\n\t\t\tinverseUnique,\n\t\t\tthis.disconnectJunctionHandler,\n\t\t)\n\t\tif (result.result !== MutationResultType.noResultError) {\n\t\t\tconst afterEvent = new AfterJunctionUpdateEvent(owningEntity, relation, owningUnique, inverseUnique, 'disconnect', result.result === MutationResultType.ok)\n\t\t\tbeforeEvent.afterEvent = afterEvent\n\t\t\tawait mapper.eventManager.fire(afterEvent)\n\t\t}\n\t\treturn [result]\n\t}\n\n\n\tprivate async executeJunctionModification(\n\t\tdb: Client,\n\t\towningEntity: Model.Entity,\n\t\trelation: Model.ManyHasManyOwningRelation,\n\t\towningPrimary: Input.PrimaryValue,\n\t\tinversePrimary: Input.PrimaryValue,\n\t\thandler: JunctionHandler,\n\t): Promise<JunctionMutationResult> {\n\t\tconst joiningTable = relation.joiningTable\n\t\tconst inverseEntity = getEntity(this.schema, relation.target)\n\t\tif (inverseEntity.view || owningEntity.view) {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\n\t\tconst owningPredicate = this.predicateFactory.create(owningEntity, Acl.Operation.update, [relation.name])\n\t\tlet inversePredicate: Input.OptionalWhere = {}\n\t\tif (relation.inversedBy) {\n\t\t\tinversePredicate = this.predicateFactory.create(inverseEntity, Acl.Operation.update, [relation.inversedBy])\n\t\t}\n\n\t\tconst hasNoPredicates = Object.keys(owningPredicate).length === 0 && Object.keys(inversePredicate).length === 0\n\n\t\tconst okResultFactory = () =>\n\t\t\tnew MutationJunctionUpdateOk([], owningEntity, relation, owningPrimary, inversePrimary)\n\t\tif (hasNoPredicates) {\n\t\t\treturn await handler.executeSimple({ db, joiningTable, owningPrimary, inversePrimary, okResultFactory })\n\t\t} else {\n\t\t\tconst owningWhere: Input.OptionalWhere = {\n\t\t\t\tand: [owningPredicate, { [owningEntity.primary]: { eq: owningPrimary } }],\n\t\t\t}\n\n\t\t\tconst inverseWhere: Input.OptionalWhere = {\n\t\t\t\tand: [inversePredicate, { [inverseEntity.primary]: { eq: inversePrimary } }],\n\t\t\t}\n\n\t\t\tconst dataCallback: SelectBuilder.Callback = qb => {\n\t\t\t\tqb = qb\n\t\t\t\t\t.select(expr => expr.select(['owning', owningEntity.primaryColumn]), joiningTable.joiningColumn.columnName)\n\t\t\t\t\t.select(\n\t\t\t\t\t\texpr => expr.select(['inverse', inverseEntity.primaryColumn]),\n\t\t\t\t\t\tjoiningTable.inverseJoiningColumn.columnName,\n\t\t\t\t\t)\n\t\t\t\t\t.select(expr => expr.raw('true'), 'selected')\n\t\t\t\t\t.from(new Literal('(values (null))'), 't')\n\n\t\t\t\t\t.join(owningEntity.tableName, 'owning', condition => condition.raw('true'))\n\t\t\t\t\t.join(inverseEntity.tableName, 'inverse', condition => condition.raw('true'))\n\t\t\t\tqb = this.whereBuilder.build(qb, owningEntity, this.pathFactory.create([], 'owning'), owningWhere)\n\t\t\t\tqb = this.whereBuilder.build(qb, inverseEntity, this.pathFactory.create([], 'inverse'), inverseWhere)\n\t\t\t\treturn qb\n\t\t\t}\n\n\t\t\treturn await handler.executeComplex({ db, joiningTable, dataCallback, okResultFactory })\n\t\t}\n\t}\n}\n\ninterface JunctionSimpleExecutionArgs {\n\tdb: Client\n\tjoiningTable: Model.JoiningTable\n\towningPrimary: Input.PrimaryValue\n\tinversePrimary: Input.PrimaryValue\n\tokResultFactory: OkResultFactory\n}\n\ninterface JunctionComplexExecutionArgs {\n\tdb: Client\n\tjoiningTable: Model.JoiningTable\n\tdataCallback: SelectBuilder.Callback\n\tokResultFactory: OkResultFactory\n}\n\ninterface JunctionHandler {\n\texecuteSimple(args: JunctionSimpleExecutionArgs): Promise<JunctionMutationResult>\n\n\texecuteComplex(args: JunctionComplexExecutionArgs): Promise<JunctionMutationResult>\n}\n\nexport class JunctionConnectHandler implements JunctionHandler {\n\tasync executeSimple({\n\t\tdb,\n\t\tjoiningTable,\n\t\towningPrimary,\n\t\tinversePrimary,\n\t\tokResultFactory,\n\t}: JunctionSimpleExecutionArgs): Promise<JunctionMutationResult> {\n\t\tconst result = await InsertBuilder.create()\n\t\t\t.into(joiningTable.tableName)\n\t\t\t.values({\n\t\t\t\t[joiningTable.joiningColumn.columnName]: expr => expr.selectValue(owningPrimary),\n\t\t\t\t[joiningTable.inverseJoiningColumn.columnName]: expr => expr.selectValue(inversePrimary),\n\t\t\t})\n\t\t\t.onConflict(ConflictActionType.doNothing)\n\t\t\t.execute(db)\n\t\tif (result === 0) {\n\t\t\treturn new MutationNothingToDo([], NothingToDoReason.alreadyExists)\n\t\t}\n\t\treturn okResultFactory()\n\t}\n\n\tasync executeComplex({\n\t\tdb,\n\t\tjoiningTable,\n\t\tdataCallback,\n\t\tokResultFactory,\n\t}: JunctionComplexExecutionArgs): Promise<JunctionMutationResult> {\n\t\tconst insert = InsertBuilder.create()\n\t\t\t.into(joiningTable.tableName)\n\t\t\t.values({\n\t\t\t\t[joiningTable.joiningColumn.columnName]: expr => expr.select(['data', joiningTable.joiningColumn.columnName]),\n\t\t\t\t[joiningTable.inverseJoiningColumn.columnName]: expr =>\n\t\t\t\t\texpr.select(['data', joiningTable.inverseJoiningColumn.columnName]),\n\t\t\t})\n\t\t\t.returning(new Literal('true as inserted'))\n\t\t\t.from(qb => qb.from('data'))\n\t\t\t.onConflict(ConflictActionType.doNothing)\n\n\t\tconst qb = SelectBuilder.create()\n\t\t\t.with('data', dataCallback)\n\t\t\t.with('insert', insert)\n\t\t\t.from(new Literal('(values (null))'), 't')\n\t\t\t.leftJoin('data', 'data', condition => condition.raw('true'))\n\t\t\t.leftJoin('insert', 'insert', condition => condition.raw('true'))\n\t\t\t.select(expr => expr.raw('coalesce(data.selected, false)'), 'selected')\n\t\t\t.select(expr => expr.raw('coalesce(insert.inserted, false)'), 'inserted')\n\n\t\tconst result = await qb.getResult(db)\n\t\tif (result[0]['selected'] === false) {\n\t\t\treturn new MutationNoResultError([])\n\t\t}\n\t\tif (result[0]['inserted'] === false) {\n\t\t\treturn new MutationNothingToDo([], NothingToDoReason.alreadyExists)\n\t\t}\n\t\treturn okResultFactory()\n\t}\n}\n\nexport class JunctionDisconnectHandler implements JunctionHandler {\n\tpublic async executeSimple({\n\t\tdb,\n\t\tjoiningTable,\n\t\towningPrimary,\n\t\tinversePrimary,\n\t\tokResultFactory,\n\t}: JunctionSimpleExecutionArgs): Promise<JunctionMutationResult> {\n\t\tconst qb = DeleteBuilder.create()\n\t\t\t.from(joiningTable.tableName)\n\t\t\t.where(cond => cond.compare(joiningTable.joiningColumn.columnName, Operator.eq, owningPrimary))\n\t\t\t.where(cond => cond.compare(joiningTable.inverseJoiningColumn.columnName, Operator.eq, inversePrimary))\n\n\t\tconst result = await qb.execute(db)\n\t\tif (result === 0) {\n\t\t\treturn new MutationNothingToDo([], NothingToDoReason.alreadyExists)\n\t\t}\n\t\treturn okResultFactory()\n\t}\n\n\tpublic async executeComplex({\n\t\tdb,\n\t\tjoiningTable,\n\t\tdataCallback,\n\t\tokResultFactory,\n\t}: JunctionComplexExecutionArgs): Promise<JunctionMutationResult> {\n\t\tconst deleteQb = DeleteBuilder.create()\n\t\t\t.from(joiningTable.tableName)\n\t\t\t.using('data')\n\t\t\t.where(cond => {\n\t\t\t\tcond = cond.compareColumns([joiningTable.tableName, joiningTable.joiningColumn.columnName], Operator.eq, [\n\t\t\t\t\t'data',\n\t\t\t\t\tjoiningTable.joiningColumn.columnName,\n\t\t\t\t])\n\t\t\t\tcond = cond.compareColumns(\n\t\t\t\t\t[joiningTable.tableName, joiningTable.inverseJoiningColumn.columnName],\n\t\t\t\t\tOperator.eq,\n\t\t\t\t\t['data', joiningTable.inverseJoiningColumn.columnName],\n\t\t\t\t)\n\t\t\t\treturn cond\n\t\t\t})\n\t\t\t.returning(new Literal('true as deleted'))\n\n\t\tconst qb = SelectBuilder.create()\n\t\t\t.with('data', dataCallback)\n\t\t\t.with('delete', deleteQb)\n\t\t\t.from(new Literal('(values (null))'), 't')\n\t\t\t.leftJoin('data', 'data', condition => condition.raw('true'))\n\t\t\t.leftJoin('delete', 'delete', condition => condition.raw('true'))\n\t\t\t.select(expr => expr.raw('coalesce(data.selected, false)'), 'selected')\n\t\t\t.select(expr => expr.raw('coalesce(delete.deleted, false)'), 'deleted')\n\n\t\tconst result = await qb.getResult(db)\n\t\tif (result[0]['selected'] === false) {\n\t\t\treturn new MutationNoResultError([])\n\t\t}\n\t\tif (result[0]['inserted'] === false) {\n\t\t\treturn new MutationNothingToDo([], NothingToDoReason.alreadyExists)\n\t\t}\n\t\treturn okResultFactory()\n\t}\n}\n"],"names":["InsertBuilder","qb"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"JunctionTableManager.js","sources":["../../../../../packages/engine-content-api/src/mapper/JunctionTableManager.ts"],"sourcesContent":["import { getEntity } from '@contember/schema-utils'\nimport { PathFactory, WhereBuilder } from './select'\nimport { PredicateFactory } from '../acl'\nimport { Client, ConflictActionType, DeleteBuilder, InsertBuilder, Literal, Operator, SelectBuilder } from '@contember/database'\nimport { Acl, Input, Model } from '@contember/schema'\nimport {\n\tMutationJunctionUpdateOk,\n\tMutationNoResultError,\n\tMutationNothingToDo,\n\tMutationResultList,\n\tMutationResultType,\n\tNothingToDoReason,\n} from './Result'\nimport { ImplementationException } from '../exception'\nimport { AfterJunctionUpdateEvent, BeforeJunctionUpdateEvent } from './EventManager'\nimport { Mapper } from './Mapper'\n\ntype OkResultFactory = () => MutationJunctionUpdateOk\n\ntype JunctionMutationResult =\n\t| MutationJunctionUpdateOk\n\t| MutationNothingToDo\n\t| MutationNoResultError\n\nexport class JunctionTableManager {\n\tconstructor(\n\t\tprivate readonly schema: Model.Schema,\n\t\tprivate readonly predicateFactory: PredicateFactory,\n\t\tprivate readonly whereBuilder: WhereBuilder,\n\t\tprivate readonly connectJunctionHandler: JunctionConnectHandler,\n\t\tprivate readonly disconnectJunctionHandler: JunctionDisconnectHandler,\n\t\tprivate readonly pathFactory: PathFactory,\n\t) {}\n\n\tpublic async connectJunction(\n\t\tmapper: Mapper,\n\t\towningEntity: Model.Entity,\n\t\trelation: Model.ManyHasManyOwningRelation,\n\t\towningUnique: Input.PrimaryValue,\n\t\tinverseUnique: Input.PrimaryValue,\n\t): Promise<MutationResultList> {\n\t\tconst beforeEvent = new BeforeJunctionUpdateEvent(owningEntity, relation, owningUnique, inverseUnique, 'connect')\n\t\tawait mapper.eventManager.fire(beforeEvent)\n\t\tconst result = await this.executeJunctionModification(\n\t\t\tmapper.db,\n\t\t\towningEntity,\n\t\t\trelation,\n\t\t\towningUnique,\n\t\t\tinverseUnique,\n\t\t\tthis.connectJunctionHandler,\n\t\t)\n\t\tif (result.result !== MutationResultType.noResultError) {\n\t\t\tconst afterEvent = new AfterJunctionUpdateEvent(\n\t\t\t\towningEntity,\n\t\t\t\trelation,\n\t\t\t\towningUnique,\n\t\t\t\tinverseUnique,\n\t\t\t\t'connect',\n\t\t\t\tresult.result === MutationResultType.ok,\n\t\t\t)\n\t\t\tawait mapper.eventManager.fire(afterEvent)\n\t\t}\n\t\treturn [result]\n\t}\n\n\tpublic async disconnectJunction(\n\t\tmapper: Mapper,\n\t\towningEntity: Model.Entity,\n\t\trelation: Model.ManyHasManyOwningRelation,\n\t\towningUnique: Input.PrimaryValue,\n\t\tinverseUnique: Input.PrimaryValue,\n\t): Promise<MutationResultList> {\n\t\tconst beforeEvent = new BeforeJunctionUpdateEvent(owningEntity, relation, owningUnique, inverseUnique, 'connect')\n\t\tawait mapper.eventManager.fire(beforeEvent)\n\t\tconst result = await this.executeJunctionModification(\n\t\t\tmapper.db,\n\t\t\towningEntity,\n\t\t\trelation,\n\t\t\towningUnique,\n\t\t\tinverseUnique,\n\t\t\tthis.disconnectJunctionHandler,\n\t\t)\n\t\tif (result.result !== MutationResultType.noResultError) {\n\t\t\tconst afterEvent = new AfterJunctionUpdateEvent(\n\t\t\t\towningEntity,\n\t\t\t\trelation,\n\t\t\t\towningUnique,\n\t\t\t\tinverseUnique,\n\t\t\t\t'disconnect',\n\t\t\t\tresult.result === MutationResultType.ok,\n\t\t\t)\n\t\t\tbeforeEvent.afterEvent = afterEvent\n\t\t\tawait mapper.eventManager.fire(afterEvent)\n\t\t}\n\t\treturn [result]\n\t}\n\n\tprivate async executeJunctionModification(\n\t\tdb: Client,\n\t\towningEntity: Model.Entity,\n\t\trelation: Model.ManyHasManyOwningRelation,\n\t\towningPrimary: Input.PrimaryValue,\n\t\tinversePrimary: Input.PrimaryValue,\n\t\thandler: JunctionHandler,\n\t): Promise<JunctionMutationResult> {\n\t\tconst joiningTable = relation.joiningTable\n\t\tconst inverseEntity = getEntity(this.schema, relation.target)\n\t\tif (inverseEntity.view || owningEntity.view) {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\n\t\tconst owningPredicate = this.predicateFactory.create(owningEntity, Acl.Operation.update, [relation.name])\n\t\tlet inversePredicate: Input.OptionalWhere = {}\n\t\tif (relation.inversedBy) {\n\t\t\tinversePredicate = this.predicateFactory.create(inverseEntity, Acl.Operation.update, [relation.inversedBy])\n\t\t}\n\n\t\tconst hasNoPredicates = Object.keys(owningPredicate).length === 0 && Object.keys(inversePredicate).length === 0\n\n\t\tconst okResultFactory = () => new MutationJunctionUpdateOk([], owningEntity, relation, owningPrimary, inversePrimary)\n\t\tif (hasNoPredicates) {\n\t\t\treturn await handler.executeSimple({ db, joiningTable, owningPrimary, inversePrimary, okResultFactory })\n\t\t} else {\n\t\t\tconst owningWhere: Input.OptionalWhere = {\n\t\t\t\tand: [owningPredicate, { [owningEntity.primary]: { eq: owningPrimary } }],\n\t\t\t}\n\n\t\t\tconst inverseWhere: Input.OptionalWhere = {\n\t\t\t\tand: [inversePredicate, { [inverseEntity.primary]: { eq: inversePrimary } }],\n\t\t\t}\n\n\t\t\tconst dataCallback: SelectBuilder.Callback = qb => {\n\t\t\t\tqb = qb\n\t\t\t\t\t.select(expr => expr.select(['owning', owningEntity.primaryColumn]), joiningTable.joiningColumn.columnName)\n\t\t\t\t\t.select(\n\t\t\t\t\t\texpr => expr.select(['inverse', inverseEntity.primaryColumn]),\n\t\t\t\t\t\tjoiningTable.inverseJoiningColumn.columnName,\n\t\t\t\t\t)\n\t\t\t\t\t.select(expr => expr.raw('true'), 'selected')\n\t\t\t\t\t.from(new Literal('(values (null))'), 't')\n\t\t\t\t\t.join(owningEntity.tableName, 'owning', condition => condition.raw('true'))\n\t\t\t\t\t.join(inverseEntity.tableName, 'inverse', condition => condition.raw('true'))\n\t\t\t\tqb = this.whereBuilder.build(qb, owningEntity, this.pathFactory.create([], 'owning'), owningWhere)\n\t\t\t\tqb = this.whereBuilder.build(qb, inverseEntity, this.pathFactory.create([], 'inverse'), inverseWhere)\n\t\t\t\treturn qb\n\t\t\t}\n\n\t\t\treturn await handler.executeComplex({ db, joiningTable, dataCallback, okResultFactory })\n\t\t}\n\t}\n}\n\ninterface JunctionSimpleExecutionArgs {\n\tdb: Client\n\tjoiningTable: Model.JoiningTable\n\towningPrimary: Input.PrimaryValue\n\tinversePrimary: Input.PrimaryValue\n\tokResultFactory: OkResultFactory\n}\n\ninterface JunctionComplexExecutionArgs {\n\tdb: Client\n\tjoiningTable: Model.JoiningTable\n\tdataCallback: SelectBuilder.Callback\n\tokResultFactory: OkResultFactory\n}\n\ninterface JunctionHandler {\n\texecuteSimple(args: JunctionSimpleExecutionArgs): Promise<JunctionMutationResult>\n\n\texecuteComplex(args: JunctionComplexExecutionArgs): Promise<JunctionMutationResult>\n}\n\nexport class JunctionConnectHandler implements JunctionHandler {\n\tasync executeSimple({\n\t\tdb,\n\t\tjoiningTable,\n\t\towningPrimary,\n\t\tinversePrimary,\n\t\tokResultFactory,\n\t}: JunctionSimpleExecutionArgs): Promise<JunctionMutationResult> {\n\t\tconst result = await InsertBuilder.create()\n\t\t\t.into(joiningTable.tableName)\n\t\t\t.values({\n\t\t\t\t[joiningTable.joiningColumn.columnName]: expr => expr.selectValue(owningPrimary),\n\t\t\t\t[joiningTable.inverseJoiningColumn.columnName]: expr => expr.selectValue(inversePrimary),\n\t\t\t})\n\t\t\t.onConflict(ConflictActionType.doNothing)\n\t\t\t.execute(db)\n\t\tif (result === 0) {\n\t\t\treturn new MutationNothingToDo([], NothingToDoReason.alreadyExists)\n\t\t}\n\t\treturn okResultFactory()\n\t}\n\n\tasync executeComplex({\n\t\tdb,\n\t\tjoiningTable,\n\t\tdataCallback,\n\t\tokResultFactory,\n\t}: JunctionComplexExecutionArgs): Promise<JunctionMutationResult> {\n\t\tconst insert = InsertBuilder.create()\n\t\t\t.into(joiningTable.tableName)\n\t\t\t.values({\n\t\t\t\t[joiningTable.joiningColumn.columnName]: expr => expr.select(['data', joiningTable.joiningColumn.columnName]),\n\t\t\t\t[joiningTable.inverseJoiningColumn.columnName]: expr => expr.select(['data', joiningTable.inverseJoiningColumn.columnName]),\n\t\t\t})\n\t\t\t.returning(new Literal('true as inserted'))\n\t\t\t.from(qb => qb.from('data'))\n\t\t\t.onConflict(ConflictActionType.doNothing)\n\n\t\tconst qb = SelectBuilder.create()\n\t\t\t.with('data', dataCallback)\n\t\t\t.with('insert', insert)\n\t\t\t.from(new Literal('(values (null))'), 't')\n\t\t\t.leftJoin('data', 'data', condition => condition.raw('true'))\n\t\t\t.leftJoin('insert', 'insert', condition => condition.raw('true'))\n\t\t\t.select(expr => expr.raw('coalesce(data.selected, false)'), 'selected')\n\t\t\t.select(expr => expr.raw('coalesce(insert.inserted, false)'), 'inserted')\n\n\t\tconst result = await qb.getResult(db)\n\t\tif (result[0]['selected'] === false) {\n\t\t\treturn new MutationNoResultError([])\n\t\t}\n\t\tif (result[0]['inserted'] === false) {\n\t\t\treturn new MutationNothingToDo([], NothingToDoReason.alreadyExists)\n\t\t}\n\t\treturn okResultFactory()\n\t}\n}\n\nexport class JunctionDisconnectHandler implements JunctionHandler {\n\tpublic async executeSimple({\n\t\tdb,\n\t\tjoiningTable,\n\t\towningPrimary,\n\t\tinversePrimary,\n\t\tokResultFactory,\n\t}: JunctionSimpleExecutionArgs): Promise<JunctionMutationResult> {\n\t\tconst qb = DeleteBuilder.create()\n\t\t\t.from(joiningTable.tableName)\n\t\t\t.where(cond => cond.compare(joiningTable.joiningColumn.columnName, Operator.eq, owningPrimary))\n\t\t\t.where(cond => cond.compare(joiningTable.inverseJoiningColumn.columnName, Operator.eq, inversePrimary))\n\n\t\tconst result = await qb.execute(db)\n\t\tif (result === 0) {\n\t\t\treturn new MutationNothingToDo([], NothingToDoReason.alreadyExists)\n\t\t}\n\t\treturn okResultFactory()\n\t}\n\n\tpublic async executeComplex({\n\t\tdb,\n\t\tjoiningTable,\n\t\tdataCallback,\n\t\tokResultFactory,\n\t}: JunctionComplexExecutionArgs): Promise<JunctionMutationResult> {\n\t\tconst deleteQb = DeleteBuilder.create()\n\t\t\t.from(joiningTable.tableName)\n\t\t\t.using('data')\n\t\t\t.where(cond => {\n\t\t\t\tcond = cond.compareColumns([joiningTable.tableName, joiningTable.joiningColumn.columnName], Operator.eq, [\n\t\t\t\t\t'data',\n\t\t\t\t\tjoiningTable.joiningColumn.columnName,\n\t\t\t\t])\n\t\t\t\tcond = cond.compareColumns(\n\t\t\t\t\t[joiningTable.tableName, joiningTable.inverseJoiningColumn.columnName],\n\t\t\t\t\tOperator.eq,\n\t\t\t\t\t['data', joiningTable.inverseJoiningColumn.columnName],\n\t\t\t\t)\n\t\t\t\treturn cond\n\t\t\t})\n\t\t\t.returning(new Literal('true as deleted'))\n\n\t\tconst qb = SelectBuilder.create()\n\t\t\t.with('data', dataCallback)\n\t\t\t.with('delete', deleteQb)\n\t\t\t.from(new Literal('(values (null))'), 't')\n\t\t\t.leftJoin('data', 'data', condition => condition.raw('true'))\n\t\t\t.leftJoin('delete', 'delete', condition => condition.raw('true'))\n\t\t\t.select(expr => expr.raw('coalesce(data.selected, false)'), 'selected')\n\t\t\t.select(expr => expr.raw('coalesce(delete.deleted, false)'), 'deleted')\n\n\t\tconst result = await qb.getResult(db)\n\t\tif (result[0]['selected'] === false) {\n\t\t\treturn new MutationNoResultError([])\n\t\t}\n\t\tif (result[0]['inserted'] === false) {\n\t\t\treturn new MutationNothingToDo([], NothingToDoReason.alreadyExists)\n\t\t}\n\t\treturn okResultFactory()\n\t}\n}\n"],"names":["InsertBuilder","qb"],"mappings":";;;;;;AAwBO,MAAM,qBAAqB;AAAA,EACjC,YACkB,QACA,kBACA,cACA,wBACA,2BACA,aAChB;AANgB,SAAA,SAAA;AACA,SAAA,mBAAA;AACA,SAAA,eAAA;AACA,SAAA,yBAAA;AACA,SAAA,4BAAA;AACA,SAAA,cAAA;AAAA,EACf;AAAA,EAEH,MAAa,gBACZ,QACA,cACA,UACA,cACA,eAC8B;AAC9B,UAAM,cAAc,IAAI,0BAA0B,cAAc,UAAU,cAAc,eAAe,SAAS;AAChH,UAAM,OAAO,aAAa,KAAK,WAAW;AAC1C,UAAM,SAAS,MAAM,KAAK;AAAA,MACzB,OAAO;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,KAAK;AAAA,IAAA;AAEN,QAAI,OAAO,WAAW,mBAAmB,eAAe;AACvD,YAAM,aAAa,IAAI;AAAA,QACtB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO,WAAW,mBAAmB;AAAA,MAAA;AAEtC,YAAM,OAAO,aAAa,KAAK,UAAU;AAAA,IAC1C;AACA,WAAO,CAAC,MAAM;AAAA,EACf;AAAA,EAEA,MAAa,mBACZ,QACA,cACA,UACA,cACA,eAC8B;AAC9B,UAAM,cAAc,IAAI,0BAA0B,cAAc,UAAU,cAAc,eAAe,SAAS;AAChH,UAAM,OAAO,aAAa,KAAK,WAAW;AAC1C,UAAM,SAAS,MAAM,KAAK;AAAA,MACzB,OAAO;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,KAAK;AAAA,IAAA;AAEN,QAAI,OAAO,WAAW,mBAAmB,eAAe;AACvD,YAAM,aAAa,IAAI;AAAA,QACtB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO,WAAW,mBAAmB;AAAA,MAAA;AAEtC,kBAAY,aAAa;AACzB,YAAM,OAAO,aAAa,KAAK,UAAU;AAAA,IAC1C;AACA,WAAO,CAAC,MAAM;AAAA,EACf;AAAA,EAEA,MAAc,4BACb,IACA,cACA,UACA,eACA,gBACA,SACkC;AAClC,UAAM,eAAe,SAAS;AAC9B,UAAM,gBAAgB,UAAU,KAAK,QAAQ,SAAS,MAAM;AAC5D,QAAI,cAAc,QAAQ,aAAa,MAAM;AAC5C,YAAM,IAAI,wBAAA;AAAA,IACX;AAEA,UAAM,kBAAkB,KAAK,iBAAiB,OAAO,cAAc,IAAI,UAAU,QAAQ,CAAC,SAAS,IAAI,CAAC;AACxG,QAAI,mBAAwC,CAAA;AAC5C,QAAI,SAAS,YAAY;AACxB,yBAAmB,KAAK,iBAAiB,OAAO,eAAe,IAAI,UAAU,QAAQ,CAAC,SAAS,UAAU,CAAC;AAAA,IAC3G;AAEA,UAAM,kBAAkB,OAAO,KAAK,eAAe,EAAE,WAAW,KAAK,OAAO,KAAK,gBAAgB,EAAE,WAAW;AAE9G,UAAM,kBAAkB,MAAM,IAAI,yBAAyB,CAAA,GAAI,cAAc,UAAU,eAAe,cAAc;AACpH,QAAI,iBAAiB;AACpB,aAAO,MAAM,QAAQ,cAAc,EAAE,IAAI,cAAc,eAAe,gBAAgB,iBAAiB;AAAA,IACxG,OAAO;AACN,YAAM,cAAmC;AAAA,QACxC,KAAK,CAAC,iBAAiB,EAAE,CAAC,aAAa,OAAO,GAAG,EAAE,IAAI,gBAAc,CAAG;AAAA,MAAA;AAGzE,YAAM,eAAoC;AAAA,QACzC,KAAK,CAAC,kBAAkB,EAAE,CAAC,cAAc,OAAO,GAAG,EAAE,IAAI,iBAAe,CAAG;AAAA,MAAA;AAG5E,YAAM,eAAuC,CAAA,OAAM;AAClD,aAAK,GACH,OAAO,CAAA,SAAQ,KAAK,OAAO,CAAC,UAAU,aAAa,aAAa,CAAC,GAAG,aAAa,cAAc,UAAU,EACzG;AAAA,UACA,UAAQ,KAAK,OAAO,CAAC,WAAW,cAAc,aAAa,CAAC;AAAA,UAC5D,aAAa,qBAAqB;AAAA,QAAA,EAElC,OAAO,CAAA,SAAQ,KAAK,IAAI,MAAM,GAAG,UAAU,EAC3C,KAAK,IAAI,QAAQ,iBAAiB,GAAG,GAAG,EACxC,KAAK,aAAa,WAAW,UAAU,CAAA,cAAa,UAAU,IAAI,MAAM,CAAC,EACzE,KAAK,cAAc,WAAW,WAAW,CAAA,cAAa,UAAU,IAAI,MAAM,CAAC;AAC7E,aAAK,KAAK,aAAa,MAAM,IAAI,cAAc,KAAK,YAAY,OAAO,CAAA,GAAI,QAAQ,GAAG,WAAW;AACjG,aAAK,KAAK,aAAa,MAAM,IAAI,eAAe,KAAK,YAAY,OAAO,CAAA,GAAI,SAAS,GAAG,YAAY;AACpG,eAAO;AAAA,MACR;AAEA,aAAO,MAAM,QAAQ,eAAe,EAAE,IAAI,cAAc,cAAc,iBAAiB;AAAA,IACxF;AAAA,EACD;AACD;AAuBO,MAAM,uBAAkD;AAAA,EAC9D,MAAM,cAAc;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,GACgE;AAChE,UAAM,SAAS,MAAMA,gBAAc,OAAA,EACjC,KAAK,aAAa,SAAS,EAC3B,OAAO;AAAA,MACP,CAAC,aAAa,cAAc,UAAU,GAAG,CAAA,SAAQ,KAAK,YAAY,aAAa;AAAA,MAC/E,CAAC,aAAa,qBAAqB,UAAU,GAAG,CAAA,SAAQ,KAAK,YAAY,cAAc;AAAA,IAAA,CACvF,EACA,WAAW,mBAAmB,SAAS,EACvC,QAAQ,EAAE;AACZ,QAAI,WAAW,GAAG;AACjB,aAAO,IAAI,oBAAoB,IAAI,kBAAkB,aAAa;AAAA,IACnE;AACA,WAAO,gBAAA;AAAA,EACR;AAAA,EAEA,MAAM,eAAe;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,GACiE;AACjE,UAAM,SAASA,gBAAc,OAAA,EAC3B,KAAK,aAAa,SAAS,EAC3B,OAAO;AAAA,MACP,CAAC,aAAa,cAAc,UAAU,GAAG,CAAA,SAAQ,KAAK,OAAO,CAAC,QAAQ,aAAa,cAAc,UAAU,CAAC;AAAA,MAC5G,CAAC,aAAa,qBAAqB,UAAU,GAAG,CAAA,SAAQ,KAAK,OAAO,CAAC,QAAQ,aAAa,qBAAqB,UAAU,CAAC;AAAA,IAAA,CAC1H,EACA,UAAU,IAAI,QAAQ,kBAAkB,CAAC,EACzC,KAAK,CAAAC,QAAMA,IAAG,KAAK,MAAM,CAAC,EAC1B,WAAW,mBAAmB,SAAS;AAEzC,UAAM,KAAK,cAAc,OAAA,EACvB,KAAK,QAAQ,YAAY,EACzB,KAAK,UAAU,MAAM,EACrB,KAAK,IAAI,QAAQ,iBAAiB,GAAG,GAAG,EACxC,SAAS,QAAQ,QAAQ,CAAA,cAAa,UAAU,IAAI,MAAM,CAAC,EAC3D,SAAS,UAAU,UAAU,CAAA,cAAa,UAAU,IAAI,MAAM,CAAC,EAC/D,OAAO,CAAA,SAAQ,KAAK,IAAI,gCAAgC,GAAG,UAAU,EACrE,OAAO,UAAQ,KAAK,IAAI,kCAAkC,GAAG,UAAU;AAEzE,UAAM,SAAS,MAAM,GAAG,UAAU,EAAE;AACpC,QAAI,OAAO,CAAC,EAAE,UAAU,MAAM,OAAO;AACpC,aAAO,IAAI,sBAAsB,EAAE;AAAA,IACpC;AACA,QAAI,OAAO,CAAC,EAAE,UAAU,MAAM,OAAO;AACpC,aAAO,IAAI,oBAAoB,IAAI,kBAAkB,aAAa;AAAA,IACnE;AACA,WAAO,gBAAA;AAAA,EACR;AACD;AAEO,MAAM,0BAAqD;AAAA,EACjE,MAAa,cAAc;AAAA,IAC1B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,GACgE;AAChE,UAAM,KAAK,cAAc,OAAA,EACvB,KAAK,aAAa,SAAS,EAC3B,MAAM,CAAA,SAAQ,KAAK,QAAQ,aAAa,cAAc,YAAY,SAAS,IAAI,aAAa,CAAC,EAC7F,MAAM,CAAA,SAAQ,KAAK,QAAQ,aAAa,qBAAqB,YAAY,SAAS,IAAI,cAAc,CAAC;AAEvG,UAAM,SAAS,MAAM,GAAG,QAAQ,EAAE;AAClC,QAAI,WAAW,GAAG;AACjB,aAAO,IAAI,oBAAoB,IAAI,kBAAkB,aAAa;AAAA,IACnE;AACA,WAAO,gBAAA;AAAA,EACR;AAAA,EAEA,MAAa,eAAe;AAAA,IAC3B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,GACiE;AACjE,UAAM,WAAW,cAAc,OAAA,EAC7B,KAAK,aAAa,SAAS,EAC3B,MAAM,MAAM,EACZ,MAAM,CAAA,SAAQ;AACd,aAAO,KAAK,eAAe,CAAC,aAAa,WAAW,aAAa,cAAc,UAAU,GAAG,SAAS,IAAI;AAAA,QACxG;AAAA,QACA,aAAa,cAAc;AAAA,MAAA,CAC3B;AACD,aAAO,KAAK;AAAA,QACX,CAAC,aAAa,WAAW,aAAa,qBAAqB,UAAU;AAAA,QACrE,SAAS;AAAA,QACT,CAAC,QAAQ,aAAa,qBAAqB,UAAU;AAAA,MAAA;AAEtD,aAAO;AAAA,IACR,CAAC,EACA,UAAU,IAAI,QAAQ,iBAAiB,CAAC;AAE1C,UAAM,KAAK,cAAc,OAAA,EACvB,KAAK,QAAQ,YAAY,EACzB,KAAK,UAAU,QAAQ,EACvB,KAAK,IAAI,QAAQ,iBAAiB,GAAG,GAAG,EACxC,SAAS,QAAQ,QAAQ,CAAA,cAAa,UAAU,IAAI,MAAM,CAAC,EAC3D,SAAS,UAAU,UAAU,CAAA,cAAa,UAAU,IAAI,MAAM,CAAC,EAC/D,OAAO,CAAA,SAAQ,KAAK,IAAI,gCAAgC,GAAG,UAAU,EACrE,OAAO,UAAQ,KAAK,IAAI,iCAAiC,GAAG,SAAS;AAEvE,UAAM,SAAS,MAAM,GAAG,UAAU,EAAE;AACpC,QAAI,OAAO,CAAC,EAAE,UAAU,MAAM,OAAO;AACpC,aAAO,IAAI,sBAAsB,EAAE;AAAA,IACpC;AACA,QAAI,OAAO,CAAC,EAAE,UAAU,MAAM,OAAO;AACpC,aAAO,IAAI,oBAAoB,IAAI,kBAAkB,aAAa;AAAA,IACnE;AACA,WAAO,gBAAA;AAAA,EACR;AACD;"}
|
|
@@ -83,7 +83,12 @@ class Mapper {
|
|
|
83
83
|
const path = this.pathFactory.create([]);
|
|
84
84
|
const augmentedBuilder = qb.from(entity.tableName, path.alias).meta("path", [...input.path, input.alias]);
|
|
85
85
|
const selector = this.selectBuilderFactory.create(augmentedBuilder, hydrator, relationPath);
|
|
86
|
-
const filterWithPredicates = this.predicatesInjector.inject(
|
|
86
|
+
const filterWithPredicates = this.predicatesInjector.inject(
|
|
87
|
+
entity,
|
|
88
|
+
inputWithOrder.args.filter || {},
|
|
89
|
+
relationPath[relationPath.length - 1],
|
|
90
|
+
relationPath
|
|
91
|
+
);
|
|
87
92
|
const inputWithPredicates = inputWithOrder.withArg("filter", filterWithPredicates);
|
|
88
93
|
selector.select(this, entity, inputWithPredicates, path, groupBy);
|
|
89
94
|
return await selector.execute(this.db);
|
|
@@ -99,7 +104,7 @@ class Mapper {
|
|
|
99
104
|
async countGrouped(entity, filter, relation, relationPath) {
|
|
100
105
|
const path = this.pathFactory.create([]);
|
|
101
106
|
const qb = Database.SelectBuilder.create().from(entity.tableName, path.alias).select((expr) => expr.raw("count(*)"), "row_count").select([path.alias, relation.joiningColumn.columnName]).groupBy([path.alias, relation.joiningColumn.columnName]);
|
|
102
|
-
const withPredicates = this.predicatesInjector.inject(entity, filter, relationPath[relationPath.length - 1]);
|
|
107
|
+
const withPredicates = this.predicatesInjector.inject(entity, filter, relationPath[relationPath.length - 1], relationPath);
|
|
103
108
|
const qbWithWhere = this.whereBuilder.build(qb, entity, path, withPredicates, { relationPath });
|
|
104
109
|
const rows = await qbWithWhere.getResult(this.db);
|
|
105
110
|
const result = /* @__PURE__ */ new Map();
|
|
@@ -114,11 +119,7 @@ class Mapper {
|
|
|
114
119
|
throw new exception.ImplementationException();
|
|
115
120
|
}
|
|
116
121
|
await this.setupSystemVariables();
|
|
117
|
-
return ErrorUtils.tryMutation(
|
|
118
|
-
this.schema,
|
|
119
|
-
this.schemaDatabaseMetadata,
|
|
120
|
-
() => this.insertInternal(entity, data, builderCb)
|
|
121
|
-
);
|
|
122
|
+
return ErrorUtils.tryMutation(this.schema, this.schemaDatabaseMetadata, () => this.insertInternal(entity, data, builderCb));
|
|
122
123
|
}
|
|
123
124
|
async update(entity, by, data, filter) {
|
|
124
125
|
if (entity.view) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Mapper.cjs","sources":["../../../../../packages/engine-content-api/src/mapper/Mapper.ts"],"sourcesContent":["import { Input, Model } from '@contember/schema'\nimport { acceptFieldVisitor, getColumnName } from '@contember/schema-utils'\nimport {\n\tOrderByHelper,\n\tPathFactory,\n\tSelectBuilderFactory,\n\tSelectGroupedObjects,\n\tSelectHydrator,\n\tSelectIndexedResultObjects,\n\tSelectResultObject,\n\tWhereBuilder,\n} from './select'\nimport { Client, Connection, ConstraintHelper, DatabaseMetadata, SelectBuilder } from '@contember/database'\nimport { PredicatesInjector } from '../acl'\nimport { JunctionTableManager } from './JunctionTableManager'\nimport { DeletedEntitiesStorage, DeleteExecutor } from './delete'\nimport { MutationEntryNotFoundError, MutationResultList } from './Result'\nimport { UpdateBuilder, Updater } from './update'\nimport { InsertBuilder, Inserter } from './insert'\nimport { tryMutation } from './ErrorUtils'\nimport { ObjectNode, UniqueWhereExpander } from '../inputProcessing'\nimport { Mutex } from '../utils'\nimport { CheckedPrimary } from './CheckedPrimary'\nimport { ImplementationException } from '../exception'\nimport { EventManager } from './EventManager'\nimport { MapperInput } from './types'\n\nexport class Mapper<ConnectionType extends Connection.ConnectionLike = Connection.ConnectionLike> {\n\tprivate systemVariablesSetupDone: Promise<void> | undefined\n\tpublic readonly deletedEntities = new DeletedEntitiesStorage()\n\tpublic readonly mutex = new Mutex()\n\tpublic readonly constraintHelper: ConstraintHelper\n\n\tpublic readonly eventManager: EventManager\n\n\tconstructor(\n\t\tpublic readonly db: Client<ConnectionType>,\n\t\tpublic readonly identityId: string,\n\t\tpublic readonly transactionId: string,\n\t\tprivate readonly schema: Model.Schema,\n\t\tprivate readonly schemaDatabaseMetadata: DatabaseMetadata,\n\t\tprivate readonly predicatesInjector: PredicatesInjector,\n\t\tprivate readonly selectBuilderFactory: SelectBuilderFactory,\n\t\tprivate readonly uniqueWhereExpander: UniqueWhereExpander,\n\t\tprivate readonly whereBuilder: WhereBuilder,\n\t\tprivate readonly junctionTableManager: JunctionTableManager,\n\t\tprivate readonly deleteExecutor: DeleteExecutor,\n\t\tprivate readonly updater: Updater,\n\t\tprivate readonly inserter: Inserter,\n\t\tprivate readonly pathFactory: PathFactory,\n\t) {\n\t\tthis.constraintHelper = new ConstraintHelper(db, this.schemaDatabaseMetadata)\n\t\tthis.eventManager = new EventManager(this)\n\t}\n\n\tpublic async selectField(entity: Model.Entity, where: Input.UniqueWhere | CheckedPrimary, fieldName: string) {\n\t\tconst columnName = getColumnName(this.schema, entity, fieldName)\n\n\t\tconst qb = SelectBuilder.create() //\n\t\t\t.from(entity.tableName, 'root_')\n\t\t\t.select(['root_', columnName])\n\t\tconst expandedWhere = this.uniqueWhereExpander.expand(entity, where)\n\t\tconst withPredicates = this.predicatesInjector.inject(entity, expandedWhere)\n\t\tconst builtQb = this.whereBuilder.build(qb, entity, this.pathFactory.create([]), withPredicates)\n\t\tconst result = await builtQb.getResult(this.db)\n\n\t\treturn result[0] !== undefined ? result[0][columnName] : undefined\n\t}\n\n\tpublic async selectAssoc(\n\t\tentity: Model.Entity,\n\t\tinput: ObjectNode<Input.ListQueryInput>,\n\t\trelationPath: Model.AnyRelationContext[],\n\t\tindexBy: string,\n\t): Promise<SelectIndexedResultObjects> {\n\t\tconst hydrator = new SelectHydrator()\n\t\tconst path = this.pathFactory.create([])\n\t\tconst indexByAlias: string = path.for(indexBy).alias\n\t\tconst qb: SelectBuilder = SelectBuilder.create()\n\t\t\t.select([path.alias, getColumnName(this.schema, entity, indexBy)], indexByAlias)\n\t\tconst rows = await this.selectRows(hydrator, qb, entity, input, relationPath)\n\t\treturn await hydrator.hydrateAll(rows, indexByAlias)\n\t}\n\n\tpublic async select(entity: Model.Entity, input: ObjectNode<Input.ListQueryInput>, relationPath: Model.AnyRelationContext[]): Promise<SelectResultObject[]> {\n\t\tconst hydrator = new SelectHydrator()\n\t\tconst qb: SelectBuilder<SelectBuilder.Result> = SelectBuilder.create()\n\n\t\tconst rows = await this.selectRows(hydrator, qb, entity, input, relationPath)\n\n\t\treturn await hydrator.hydrateAll(rows)\n\t}\n\n\tpublic async selectUnique(\n\t\tentity: Model.Entity,\n\t\tquery: ObjectNode<Input.UniqueQueryInput>,\n\t\trelationPath: Model.AnyRelationContext[],\n\t): Promise<SelectResultObject | null> {\n\t\tconst uniqueWhere = this.uniqueWhereExpander.expand(entity, query.args.by)\n\t\tconst where = query.args.filter ? { and: [uniqueWhere, query.args.filter] } : uniqueWhere\n\t\tconst queryExpanded = query.withArg<Input.ListQueryInput>('filter', where)\n\n\t\tconst rows = await this.select(entity, queryExpanded, relationPath)\n\n\t\treturn rows[0] ?? null\n\t}\n\n\tpublic async selectGrouped(\n\t\tentity: Model.Entity,\n\t\tinput: ObjectNode<Input.ListQueryInput>,\n\t\trelation: Model.JoiningColumnRelation & Model.AnyRelation,\n\t\trelationPath: Model.AnyRelationContext[],\n\t): Promise<SelectGroupedObjects> {\n\t\tconst hydrator = new SelectHydrator()\n\t\tconst path = this.pathFactory.create([])\n\t\tconst groupingKey = '__grouping_key'\n\t\tconst qb: SelectBuilder = SelectBuilder.create()\n\t\t\t.select([path.alias, relation.joiningColumn.columnName], groupingKey)\n\n\t\tconst rows = await this.selectRows(hydrator, qb, entity, input, relationPath, relation.name)\n\n\t\treturn await hydrator.hydrateGroups(rows, groupingKey)\n\t}\n\n\tprivate async selectRows(\n\t\thydrator: SelectHydrator,\n\t\tqb: SelectBuilder<SelectBuilder.Result>,\n\t\tentity: Model.Entity,\n\t\tinput: ObjectNode<Input.ListQueryInput>,\n\t\trelationPath: Model.AnyRelationContext[],\n\t\tgroupBy?: string,\n\t) {\n\t\tconst inputWithOrder = OrderByHelper.appendDefaultOrderBy(entity, input, undefined)\n\t\tconst path = this.pathFactory.create([])\n\t\tconst augmentedBuilder = qb.from(entity.tableName, path.alias).meta('path', [...input.path, input.alias])\n\n\t\tconst selector = this.selectBuilderFactory.create(augmentedBuilder, hydrator, relationPath)\n\t\tconst filterWithPredicates = this.predicatesInjector.inject(entity, inputWithOrder.args.filter || {}, relationPath[relationPath.length - 1])\n\t\tconst inputWithPredicates = inputWithOrder.withArg('filter', filterWithPredicates)\n\t\tselector.select(this, entity, inputWithPredicates, path, groupBy)\n\t\treturn await selector.execute(this.db)\n\t}\n\n\tpublic async count(entity: Model.Entity, filter: Input.OptionalWhere) {\n\t\tconst path = this.pathFactory.create([])\n\t\tconst qb = SelectBuilder.create()\n\t\t\t.from(entity.tableName, path.alias)\n\t\t\t.select(expr => expr.raw('count(*)'), 'row_count')\n\t\tconst withPredicates = this.predicatesInjector.inject(entity, filter)\n\t\tconst qbWithWhere = this.whereBuilder.build(qb, entity, path, withPredicates)\n\t\tconst result = await qbWithWhere.getResult(this.db)\n\t\treturn result[0].row_count\n\t}\n\n\tpublic async countGrouped(\n\t\tentity: Model.Entity,\n\t\tfilter: Input.OptionalWhere,\n\t\trelation: Model.JoiningColumnRelation & Model.Relation,\n\t\trelationPath: Model.AnyRelationContext[],\n\t): Promise<Record<string, number>> {\n\t\tconst path = this.pathFactory.create([])\n\t\tconst qb = SelectBuilder.create()\n\t\t\t.from(entity.tableName, path.alias)\n\t\t\t.select(expr => expr.raw('count(*)'), 'row_count')\n\t\t\t.select([path.alias, relation.joiningColumn.columnName])\n\t\t\t.groupBy([path.alias, relation.joiningColumn.columnName])\n\t\tconst withPredicates = this.predicatesInjector.inject(entity, filter, relationPath[relationPath.length - 1])\n\t\tconst qbWithWhere = this.whereBuilder.build(qb, entity, path, withPredicates, { relationPath })\n\t\tconst rows = await qbWithWhere.getResult(this.db)\n\t\tconst result = new Map<string, number>()\n\t\tfor (const row of rows) {\n\t\t\tresult.set(String(row[relation.joiningColumn.columnName]), Number(row.row_count))\n\t\t}\n\t\treturn Object.fromEntries(result)\n\t}\n\n\tpublic async insert(\n\t\tentity: Model.Entity,\n\t\tdata: MapperInput.CreateDataInput,\n\t\tbuilderCb: (builder: InsertBuilder) => void = () => {},\n\t): Promise<MutationResultList> {\n\t\tif (entity.view) {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\t\tawait this.setupSystemVariables()\n\t\treturn tryMutation(this.schema, this.schemaDatabaseMetadata, () =>\n\t\t\tthis.insertInternal(entity, data, builderCb),\n\t\t)\n\t}\n\n\tpublic async update(\n\t\tentity: Model.Entity,\n\t\tby: Input.UniqueWhere | CheckedPrimary,\n\t\tdata: MapperInput.UpdateDataInput,\n\t\tfilter?: Input.OptionalWhere,\n\t): Promise<MutationResultList> {\n\t\tif (entity.view) {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\t\tawait this.setupSystemVariables()\n\t\treturn tryMutation(this.schema, this.schemaDatabaseMetadata, async () => {\n\t\t\tconst [primaryValue, err] = await this.getPrimaryValue(entity, by)\n\t\t\tif (err) return [err]\n\n\t\t\treturn await this.updater.update(this, entity, primaryValue, data, filter)\n\t\t})\n\t}\n\n\tpublic async updateInternal(\n\t\tentity: Model.Entity,\n\t\tby: Input.UniqueWhere | CheckedPrimary,\n\t\tbuilderCb: (builder: UpdateBuilder) => void,\n\t): Promise<MutationResultList> {\n\t\tif (entity.view) {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\t\tawait this.setupSystemVariables()\n\t\treturn tryMutation(this.schema, this.schemaDatabaseMetadata, async () => {\n\t\t\tconst [primaryValue, err] = await this.getPrimaryValue(entity, by)\n\t\t\tif (err) return [err]\n\n\t\t\treturn await this.updater.updateCb(this, entity, primaryValue, builderCb)\n\t\t})\n\t}\n\tpublic async upsert(\n\t\tentity: Model.Entity,\n\t\tby: Input.UniqueWhere | CheckedPrimary,\n\t\tupdate: MapperInput.UpdateDataInput,\n\t\tcreate: MapperInput.CreateDataInput,\n\t\tfilter?: Input.OptionalWhere,\n\t): Promise<MutationResultList> {\n\t\tif (entity.view) {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\t\tawait this.setupSystemVariables()\n\t\treturn tryMutation(this.schema, this.schemaDatabaseMetadata, async () => {\n\t\t\tconst [primaryValue] = await this.getPrimaryValue(entity, by)\n\t\t\tif (primaryValue === undefined) {\n\t\t\t\treturn await this.insertInternal(entity, create)\n\t\t\t}\n\t\t\treturn await this.updater.update(this, entity, primaryValue, update, filter)\n\t\t})\n\t}\n\n\tprivate insertInternal(entity: Model.Entity, data: MapperInput.CreateDataInput, builderCb: (builder: InsertBuilder) => void = () => {}) {\n\t\treturn this.inserter.insert(this, entity, data, id => {\n\t\t}, builderCb)\n\t}\n\n\tpublic async delete(\n\t\tentity: Model.Entity,\n\t\tby: Input.UniqueWhere | CheckedPrimary,\n\t\tfilter?: Input.OptionalWhere,\n\t): Promise<MutationResultList> {\n\t\tif (entity.view) {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\t\tawait this.setupSystemVariables()\n\t\treturn tryMutation(this.schema, this.schemaDatabaseMetadata, () => {\n\t\t\treturn this.deleteExecutor.execute(this, entity, by, filter)\n\t\t})\n\t}\n\n\tpublic async connectJunction(\n\t\tentity: Model.Entity,\n\t\trelation: Model.ManyHasManyOwningRelation | Model.ManyHasManyInverseRelation,\n\t\tthisPrimary: Input.PrimaryValue,\n\t\totherPrimary: Input.PrimaryValue,\n\t): Promise<MutationResultList> {\n\t\tawait this.setupSystemVariables()\n\t\tconst err = () => {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\t\treturn await acceptFieldVisitor(this.schema, entity, relation, {\n\t\t\tvisitManyHasManyOwning: ({ entity, relation }) => {\n\t\t\t\treturn this.junctionTableManager.connectJunction(this, entity, relation, thisPrimary, otherPrimary)\n\t\t\t},\n\t\t\tvisitManyHasManyInverse: ({ targetEntity, targetRelation }) => {\n\t\t\t\treturn this.junctionTableManager.connectJunction(this, targetEntity, targetRelation, otherPrimary, thisPrimary)\n\t\t\t},\n\t\t\tvisitColumn: err,\n\t\t\tvisitOneHasMany: err,\n\t\t\tvisitOneHasOneInverse: err,\n\t\t\tvisitOneHasOneOwning: err,\n\t\t\tvisitManyHasOne: err,\n\t\t})\n\t}\n\n\tpublic async disconnectJunction(\n\t\tentity: Model.Entity,\n\t\trelation: Model.ManyHasManyOwningRelation | Model.ManyHasManyInverseRelation,\n\t\tthisPrimary: Input.PrimaryValue,\n\t\totherPrimary: Input.PrimaryValue,\n\t): Promise<MutationResultList> {\n\t\tawait this.setupSystemVariables()\n\t\tconst err = () => {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\t\treturn await acceptFieldVisitor(this.schema, entity, relation, {\n\t\t\tvisitManyHasManyOwning: ({ entity, relation }) => {\n\t\t\t\treturn this.junctionTableManager.disconnectJunction(this, entity, relation, thisPrimary, otherPrimary)\n\t\t\t},\n\t\t\tvisitManyHasManyInverse: ({ targetEntity, targetRelation }) => {\n\t\t\t\treturn this.junctionTableManager.disconnectJunction(this, targetEntity, targetRelation, otherPrimary, thisPrimary)\n\t\t\t},\n\t\t\tvisitColumn: err,\n\t\t\tvisitOneHasMany: err,\n\t\t\tvisitOneHasOneInverse: err,\n\t\t\tvisitOneHasOneOwning: err,\n\t\t\tvisitManyHasOne: err,\n\t\t})\n\t}\n\n\tpublic async getPrimaryValue(\n\t\tentity: Model.Entity,\n\t\twhere: Input.UniqueWhere | CheckedPrimary,\n\t): Promise<[Input.PrimaryValue, undefined] | [undefined, MutationEntryNotFoundError]> {\n\t\tif (where instanceof CheckedPrimary) {\n\t\t\treturn [where.primaryValue, undefined]\n\t\t}\n\t\tconst result = await this.selectField(entity, where, entity.primary)\n\t\treturn result ? [result, undefined] : [undefined, new MutationEntryNotFoundError([], where)]\n\t}\n\n\tprivate async setupSystemVariables() {\n\t\tthis.systemVariablesSetupDone ??= (async () => {\n\t\t\tawait this.db.query('SELECT set_config(?, ?, false)', ['tenant.identity_id', this.identityId]) // todo rename to system.identity_id\n\t\t\tawait this.db.query('SELECT set_config(?, ?, false)', ['system.transaction_id', this.transactionId])\n\t\t})()\n\t\tawait this.systemVariablesSetupDone\n\t}\n}\n"],"names":["DeletedEntitiesStorage","Mutex","ConstraintHelper","EventManager","getColumnName","SelectBuilder","SelectHydrator","OrderByHelper","ImplementationException","tryMutation","acceptFieldVisitor","entity","relation","CheckedPrimary","MutationEntryNotFoundError"],"mappings":";;;;;;;;;;;;;;;;;;AA2BO,MAAM,OAAqF;AAAA,EAQjG,YACiB,IACA,YACA,eACC,QACA,wBACA,oBACA,sBACA,qBACA,cACA,sBACA,gBACA,SACA,UACA,aAChB;AAde,SAAA,KAAA;AACA,SAAA,aAAA;AACA,SAAA,gBAAA;AACC,SAAA,SAAA;AACA,SAAA,yBAAA;AACA,SAAA,qBAAA;AACA,SAAA,uBAAA;AACA,SAAA,sBAAA;AACA,SAAA,eAAA;AACA,SAAA,uBAAA;AACA,SAAA,iBAAA;AACA,SAAA,UAAA;AACA,SAAA,WAAA;AACA,SAAA,cAAA;AArBV,kBAAA,MAAA,0BAAA;AACQ,kBAAA,MAAA,mBAAkB,IAAIA,uBAAuB,uBAAA,CAAA;AAC7C,kBAAA,MAAA,SAAQ,IAAIC,MAAM,MAAA,CAAA;AAClB,kBAAA,MAAA,kBAAA;AAEA,kBAAA,MAAA,cAAA;AAkBf,SAAK,mBAAmB,IAAIC,SAAAA,iBAAiB,IAAI,KAAK,sBAAsB;AACvE,SAAA,eAAe,IAAIC,aAAA,aAAa,IAAI;AAAA,EAAA;AAAA,EAG1C,MAAa,YAAY,QAAsB,OAA2C,WAAmB;AAC5G,UAAM,aAAaC,YAAAA,cAAc,KAAK,QAAQ,QAAQ,SAAS;AAE/D,UAAM,KAAKC,SAAA,cAAc,OAAO,EAC9B,KAAK,OAAO,WAAW,OAAO,EAC9B,OAAO,CAAC,SAAS,UAAU,CAAC;AAC9B,UAAM,gBAAgB,KAAK,oBAAoB,OAAO,QAAQ,KAAK;AACnE,UAAM,iBAAiB,KAAK,mBAAmB,OAAO,QAAQ,aAAa;AAC3E,UAAM,UAAU,KAAK,aAAa,MAAM,IAAI,QAAQ,KAAK,YAAY,OAAO,CAAE,CAAA,GAAG,cAAc;AAC/F,UAAM,SAAS,MAAM,QAAQ,UAAU,KAAK,EAAE;AAEvC,WAAA,OAAO,CAAC,MAAM,SAAY,OAAO,CAAC,EAAE,UAAU,IAAI;AAAA,EAAA;AAAA,EAG1D,MAAa,YACZ,QACA,OACA,cACA,SACsC;AAChC,UAAA,WAAW,IAAIC,8BAAe;AACpC,UAAM,OAAO,KAAK,YAAY,OAAO,CAAA,CAAE;AACvC,UAAM,eAAuB,KAAK,IAAI,OAAO,EAAE;AAC/C,UAAM,KAAoBD,SAAAA,cAAc,OAAO,EAC7C,OAAO,CAAC,KAAK,OAAOD,YAAAA,cAAc,KAAK,QAAQ,QAAQ,OAAO,CAAC,GAAG,YAAY;AAC1E,UAAA,OAAO,MAAM,KAAK,WAAW,UAAU,IAAI,QAAQ,OAAO,YAAY;AAC5E,WAAO,MAAM,SAAS,WAAW,MAAM,YAAY;AAAA,EAAA;AAAA,EAGpD,MAAa,OAAO,QAAsB,OAAyC,cAAyE;AACrJ,UAAA,WAAW,IAAIE,8BAAe;AAC9B,UAAA,KAA0CD,uBAAc,OAAO;AAE/D,UAAA,OAAO,MAAM,KAAK,WAAW,UAAU,IAAI,QAAQ,OAAO,YAAY;AAErE,WAAA,MAAM,SAAS,WAAW,IAAI;AAAA,EAAA;AAAA,EAGtC,MAAa,aACZ,QACA,OACA,cACqC;AACrC,UAAM,cAAc,KAAK,oBAAoB,OAAO,QAAQ,MAAM,KAAK,EAAE;AACzE,UAAM,QAAQ,MAAM,KAAK,SAAS,EAAE,KAAK,CAAC,aAAa,MAAM,KAAK,MAAM,EAAM,IAAA;AAC9E,UAAM,gBAAgB,MAAM,QAA8B,UAAU,KAAK;AAEzE,UAAM,OAAO,MAAM,KAAK,OAAO,QAAQ,eAAe,YAAY;AAE3D,WAAA,KAAK,CAAC,KAAK;AAAA,EAAA;AAAA,EAGnB,MAAa,cACZ,QACA,OACA,UACA,cACgC;AAC1B,UAAA,WAAW,IAAIC,8BAAe;AACpC,UAAM,OAAO,KAAK,YAAY,OAAO,CAAA,CAAE;AACvC,UAAM,cAAc;AACpB,UAAM,KAAoBD,SAAAA,cAAc,OAAO,EAC7C,OAAO,CAAC,KAAK,OAAO,SAAS,cAAc,UAAU,GAAG,WAAW;AAE/D,UAAA,OAAO,MAAM,KAAK,WAAW,UAAU,IAAI,QAAQ,OAAO,cAAc,SAAS,IAAI;AAE3F,WAAO,MAAM,SAAS,cAAc,MAAM,WAAW;AAAA,EAAA;AAAA,EAGtD,MAAc,WACb,UACA,IACA,QACA,OACA,cACA,SACC;AACD,UAAM,iBAAiBE,cAAAA,cAAc,qBAAqB,QAAQ,OAAO,MAAS;AAClF,UAAM,OAAO,KAAK,YAAY,OAAO,CAAA,CAAE;AACvC,UAAM,mBAAmB,GAAG,KAAK,OAAO,WAAW,KAAK,KAAK,EAAE,KAAK,QAAQ,CAAC,GAAG,MAAM,MAAM,MAAM,KAAK,CAAC;AAExG,UAAM,WAAW,KAAK,qBAAqB,OAAO,kBAAkB,UAAU,YAAY;AAC1F,UAAM,uBAAuB,KAAK,mBAAmB,OAAO,QAAQ,eAAe,KAAK,UAAU,CAAI,GAAA,aAAa,aAAa,SAAS,CAAC,CAAC;AAC3I,UAAM,sBAAsB,eAAe,QAAQ,UAAU,oBAAoB;AACjF,aAAS,OAAO,MAAM,QAAQ,qBAAqB,MAAM,OAAO;AAChE,WAAO,MAAM,SAAS,QAAQ,KAAK,EAAE;AAAA,EAAA;AAAA,EAGtC,MAAa,MAAM,QAAsB,QAA6B;AACrE,UAAM,OAAO,KAAK,YAAY,OAAO,CAAA,CAAE;AACvC,UAAM,KAAKF,SAAAA,cAAc,OAAA,EACvB,KAAK,OAAO,WAAW,KAAK,KAAK,EACjC,OAAO,CAAQ,SAAA,KAAK,IAAI,UAAU,GAAG,WAAW;AAClD,UAAM,iBAAiB,KAAK,mBAAmB,OAAO,QAAQ,MAAM;AACpE,UAAM,cAAc,KAAK,aAAa,MAAM,IAAI,QAAQ,MAAM,cAAc;AAC5E,UAAM,SAAS,MAAM,YAAY,UAAU,KAAK,EAAE;AAC3C,WAAA,OAAO,CAAC,EAAE;AAAA,EAAA;AAAA,EAGlB,MAAa,aACZ,QACA,QACA,UACA,cACkC;AAClC,UAAM,OAAO,KAAK,YAAY,OAAO,CAAA,CAAE;AACvC,UAAM,KAAKA,SAAAA,cAAc,OAAO,EAC9B,KAAK,OAAO,WAAW,KAAK,KAAK,EACjC,OAAO,CAAA,SAAQ,KAAK,IAAI,UAAU,GAAG,WAAW,EAChD,OAAO,CAAC,KAAK,OAAO,SAAS,cAAc,UAAU,CAAC,EACtD,QAAQ,CAAC,KAAK,OAAO,SAAS,cAAc,UAAU,CAAC;AACnD,UAAA,iBAAiB,KAAK,mBAAmB,OAAO,QAAQ,QAAQ,aAAa,aAAa,SAAS,CAAC,CAAC;AACrG,UAAA,cAAc,KAAK,aAAa,MAAM,IAAI,QAAQ,MAAM,gBAAgB,EAAE,cAAc;AAC9F,UAAM,OAAO,MAAM,YAAY,UAAU,KAAK,EAAE;AAC1C,UAAA,6BAAa,IAAoB;AACvC,eAAW,OAAO,MAAM;AAChB,aAAA,IAAI,OAAO,IAAI,SAAS,cAAc,UAAU,CAAC,GAAG,OAAO,IAAI,SAAS,CAAC;AAAA,IAAA;AAE1E,WAAA,OAAO,YAAY,MAAM;AAAA,EAAA;AAAA,EAGjC,MAAa,OACZ,QACA,MACA,YAA8C,MAAM;AAAA,EAAA,GACtB;AAC9B,QAAI,OAAO,MAAM;AAChB,YAAM,IAAIG,UAAAA,wBAAwB;AAAA,IAAA;AAEnC,UAAM,KAAK,qBAAqB;AACzB,WAAAC,WAAA;AAAA,MAAY,KAAK;AAAA,MAAQ,KAAK;AAAA,MAAwB,MAC5D,KAAK,eAAe,QAAQ,MAAM,SAAS;AAAA,IAC5C;AAAA,EAAA;AAAA,EAGD,MAAa,OACZ,QACA,IACA,MACA,QAC8B;AAC9B,QAAI,OAAO,MAAM;AAChB,YAAM,IAAID,UAAAA,wBAAwB;AAAA,IAAA;AAEnC,UAAM,KAAK,qBAAqB;AAChC,WAAOC,WAAY,YAAA,KAAK,QAAQ,KAAK,wBAAwB,YAAY;AAClE,YAAA,CAAC,cAAc,GAAG,IAAI,MAAM,KAAK,gBAAgB,QAAQ,EAAE;AAC7D,UAAA,IAAY,QAAA,CAAC,GAAG;AAEb,aAAA,MAAM,KAAK,QAAQ,OAAO,MAAM,QAAQ,cAAc,MAAM,MAAM;AAAA,IAAA,CACzE;AAAA,EAAA;AAAA,EAGF,MAAa,eACZ,QACA,IACA,WAC8B;AAC9B,QAAI,OAAO,MAAM;AAChB,YAAM,IAAID,UAAAA,wBAAwB;AAAA,IAAA;AAEnC,UAAM,KAAK,qBAAqB;AAChC,WAAOC,WAAY,YAAA,KAAK,QAAQ,KAAK,wBAAwB,YAAY;AAClE,YAAA,CAAC,cAAc,GAAG,IAAI,MAAM,KAAK,gBAAgB,QAAQ,EAAE;AAC7D,UAAA,IAAY,QAAA,CAAC,GAAG;AAEpB,aAAO,MAAM,KAAK,QAAQ,SAAS,MAAM,QAAQ,cAAc,SAAS;AAAA,IAAA,CACxE;AAAA,EAAA;AAAA,EAEF,MAAa,OACZ,QACA,IACA,QACA,QACA,QAC8B;AAC9B,QAAI,OAAO,MAAM;AAChB,YAAM,IAAID,UAAAA,wBAAwB;AAAA,IAAA;AAEnC,UAAM,KAAK,qBAAqB;AAChC,WAAOC,WAAY,YAAA,KAAK,QAAQ,KAAK,wBAAwB,YAAY;AACxE,YAAM,CAAC,YAAY,IAAI,MAAM,KAAK,gBAAgB,QAAQ,EAAE;AAC5D,UAAI,iBAAiB,QAAW;AAC/B,eAAO,MAAM,KAAK,eAAe,QAAQ,MAAM;AAAA,MAAA;AAEzC,aAAA,MAAM,KAAK,QAAQ,OAAO,MAAM,QAAQ,cAAc,QAAQ,MAAM;AAAA,IAAA,CAC3E;AAAA,EAAA;AAAA,EAGM,eAAe,QAAsB,MAAmC,YAA8C,MAAM;AAAA,EAAA,GAAI;AACvI,WAAO,KAAK,SAAS,OAAO,MAAM,QAAQ,MAAM,CAAM,OAAA;AAAA,OACnD,SAAS;AAAA,EAAA;AAAA,EAGb,MAAa,OACZ,QACA,IACA,QAC8B;AAC9B,QAAI,OAAO,MAAM;AAChB,YAAM,IAAID,UAAAA,wBAAwB;AAAA,IAAA;AAEnC,UAAM,KAAK,qBAAqB;AAChC,WAAOC,WAAY,YAAA,KAAK,QAAQ,KAAK,wBAAwB,MAAM;AAClE,aAAO,KAAK,eAAe,QAAQ,MAAM,QAAQ,IAAI,MAAM;AAAA,IAAA,CAC3D;AAAA,EAAA;AAAA,EAGF,MAAa,gBACZ,QACA,UACA,aACA,cAC8B;AAC9B,UAAM,KAAK,qBAAqB;AAChC,UAAM,MAAM,MAAM;AACjB,YAAM,IAAID,UAAAA,wBAAwB;AAAA,IACnC;AACA,WAAO,MAAME,YAAAA,mBAAmB,KAAK,QAAQ,QAAQ,UAAU;AAAA,MAC9D,wBAAwB,CAAC,EAAE,QAAAC,SAAQ,UAAAC,gBAAe;AACjD,eAAO,KAAK,qBAAqB,gBAAgB,MAAMD,SAAQC,WAAU,aAAa,YAAY;AAAA,MACnG;AAAA,MACA,yBAAyB,CAAC,EAAE,cAAc,qBAAqB;AAC9D,eAAO,KAAK,qBAAqB,gBAAgB,MAAM,cAAc,gBAAgB,cAAc,WAAW;AAAA,MAC/G;AAAA,MACA,aAAa;AAAA,MACb,iBAAiB;AAAA,MACjB,uBAAuB;AAAA,MACvB,sBAAsB;AAAA,MACtB,iBAAiB;AAAA,IAAA,CACjB;AAAA,EAAA;AAAA,EAGF,MAAa,mBACZ,QACA,UACA,aACA,cAC8B;AAC9B,UAAM,KAAK,qBAAqB;AAChC,UAAM,MAAM,MAAM;AACjB,YAAM,IAAIJ,UAAAA,wBAAwB;AAAA,IACnC;AACA,WAAO,MAAME,YAAAA,mBAAmB,KAAK,QAAQ,QAAQ,UAAU;AAAA,MAC9D,wBAAwB,CAAC,EAAE,QAAAC,SAAQ,UAAAC,gBAAe;AACjD,eAAO,KAAK,qBAAqB,mBAAmB,MAAMD,SAAQC,WAAU,aAAa,YAAY;AAAA,MACtG;AAAA,MACA,yBAAyB,CAAC,EAAE,cAAc,qBAAqB;AAC9D,eAAO,KAAK,qBAAqB,mBAAmB,MAAM,cAAc,gBAAgB,cAAc,WAAW;AAAA,MAClH;AAAA,MACA,aAAa;AAAA,MACb,iBAAiB;AAAA,MACjB,uBAAuB;AAAA,MACvB,sBAAsB;AAAA,MACtB,iBAAiB;AAAA,IAAA,CACjB;AAAA,EAAA;AAAA,EAGF,MAAa,gBACZ,QACA,OACqF;AACrF,QAAI,iBAAiBC,eAAAA,gBAAgB;AAC7B,aAAA,CAAC,MAAM,cAAc,MAAS;AAAA,IAAA;AAEtC,UAAM,SAAS,MAAM,KAAK,YAAY,QAAQ,OAAO,OAAO,OAAO;AACnE,WAAO,SAAS,CAAC,QAAQ,MAAS,IAAI,CAAC,QAAW,IAAIC,OAAAA,2BAA2B,CAAI,GAAA,KAAK,CAAC;AAAA,EAAA;AAAA,EAG5F,MAAc,uBAAuB;AAC/B,SAAA,6BAAL,KAAK,4BAA8B,YAAY;AACxC,YAAA,KAAK,GAAG,MAAM,kCAAkC,CAAC,sBAAsB,KAAK,UAAU,CAAC;AACvF,YAAA,KAAK,GAAG,MAAM,kCAAkC,CAAC,yBAAyB,KAAK,aAAa,CAAC;AAAA,IAAA;AAEpG,UAAM,KAAK;AAAA,EAAA;AAEb;;"}
|
|
1
|
+
{"version":3,"file":"Mapper.cjs","sources":["../../../../../packages/engine-content-api/src/mapper/Mapper.ts"],"sourcesContent":["import { Input, Model } from '@contember/schema'\nimport { acceptFieldVisitor, getColumnName } from '@contember/schema-utils'\nimport {\n\tOrderByHelper,\n\tPathFactory,\n\tSelectBuilderFactory,\n\tSelectGroupedObjects,\n\tSelectHydrator,\n\tSelectIndexedResultObjects,\n\tSelectResultObject,\n\tWhereBuilder,\n} from './select'\nimport { Client, Connection, ConstraintHelper, DatabaseMetadata, SelectBuilder } from '@contember/database'\nimport { PredicatesInjector } from '../acl'\nimport { JunctionTableManager } from './JunctionTableManager'\nimport { DeletedEntitiesStorage, DeleteExecutor } from './delete'\nimport { MutationEntryNotFoundError, MutationResultList } from './Result'\nimport { UpdateBuilder, Updater } from './update'\nimport { InsertBuilder, Inserter } from './insert'\nimport { tryMutation } from './ErrorUtils'\nimport { ObjectNode, UniqueWhereExpander } from '../inputProcessing'\nimport { Mutex } from '../utils'\nimport { CheckedPrimary } from './CheckedPrimary'\nimport { ImplementationException } from '../exception'\nimport { EventManager } from './EventManager'\nimport { MapperInput } from './types'\n\nexport class Mapper<ConnectionType extends Connection.ConnectionLike = Connection.ConnectionLike> {\n\tprivate systemVariablesSetupDone: Promise<void> | undefined\n\tpublic readonly deletedEntities = new DeletedEntitiesStorage()\n\tpublic readonly mutex = new Mutex()\n\tpublic readonly constraintHelper: ConstraintHelper\n\n\tpublic readonly eventManager: EventManager\n\n\tconstructor(\n\t\tpublic readonly db: Client<ConnectionType>,\n\t\tpublic readonly identityId: string,\n\t\tpublic readonly transactionId: string,\n\t\tprivate readonly schema: Model.Schema,\n\t\tprivate readonly schemaDatabaseMetadata: DatabaseMetadata,\n\t\tprivate readonly predicatesInjector: PredicatesInjector,\n\t\tprivate readonly selectBuilderFactory: SelectBuilderFactory,\n\t\tprivate readonly uniqueWhereExpander: UniqueWhereExpander,\n\t\tprivate readonly whereBuilder: WhereBuilder,\n\t\tprivate readonly junctionTableManager: JunctionTableManager,\n\t\tprivate readonly deleteExecutor: DeleteExecutor,\n\t\tprivate readonly updater: Updater,\n\t\tprivate readonly inserter: Inserter,\n\t\tprivate readonly pathFactory: PathFactory,\n\t) {\n\t\tthis.constraintHelper = new ConstraintHelper(db, this.schemaDatabaseMetadata)\n\t\tthis.eventManager = new EventManager(this)\n\t}\n\n\tpublic async selectField(entity: Model.Entity, where: Input.UniqueWhere | CheckedPrimary, fieldName: string) {\n\t\tconst columnName = getColumnName(this.schema, entity, fieldName)\n\n\t\tconst qb = SelectBuilder.create() //\n\t\t\t.from(entity.tableName, 'root_')\n\t\t\t.select(['root_', columnName])\n\t\tconst expandedWhere = this.uniqueWhereExpander.expand(entity, where)\n\t\tconst withPredicates = this.predicatesInjector.inject(entity, expandedWhere)\n\t\tconst builtQb = this.whereBuilder.build(qb, entity, this.pathFactory.create([]), withPredicates)\n\t\tconst result = await builtQb.getResult(this.db)\n\n\t\treturn result[0] !== undefined ? result[0][columnName] : undefined\n\t}\n\n\tpublic async selectAssoc(\n\t\tentity: Model.Entity,\n\t\tinput: ObjectNode<Input.ListQueryInput>,\n\t\trelationPath: Model.AnyRelationContext[],\n\t\tindexBy: string,\n\t): Promise<SelectIndexedResultObjects> {\n\t\tconst hydrator = new SelectHydrator()\n\t\tconst path = this.pathFactory.create([])\n\t\tconst indexByAlias: string = path.for(indexBy).alias\n\t\tconst qb: SelectBuilder = SelectBuilder.create()\n\t\t\t.select([path.alias, getColumnName(this.schema, entity, indexBy)], indexByAlias)\n\t\tconst rows = await this.selectRows(hydrator, qb, entity, input, relationPath)\n\t\treturn await hydrator.hydrateAll(rows, indexByAlias)\n\t}\n\n\tpublic async select(\n\t\tentity: Model.Entity,\n\t\tinput: ObjectNode<Input.ListQueryInput>,\n\t\trelationPath: Model.AnyRelationContext[],\n\t): Promise<SelectResultObject[]> {\n\t\tconst hydrator = new SelectHydrator()\n\t\tconst qb: SelectBuilder<SelectBuilder.Result> = SelectBuilder.create()\n\n\t\tconst rows = await this.selectRows(hydrator, qb, entity, input, relationPath)\n\n\t\treturn await hydrator.hydrateAll(rows)\n\t}\n\n\tpublic async selectUnique(\n\t\tentity: Model.Entity,\n\t\tquery: ObjectNode<Input.UniqueQueryInput>,\n\t\trelationPath: Model.AnyRelationContext[],\n\t): Promise<SelectResultObject | null> {\n\t\tconst uniqueWhere = this.uniqueWhereExpander.expand(entity, query.args.by)\n\t\tconst where = query.args.filter ? { and: [uniqueWhere, query.args.filter] } : uniqueWhere\n\t\tconst queryExpanded = query.withArg<Input.ListQueryInput>('filter', where)\n\n\t\tconst rows = await this.select(entity, queryExpanded, relationPath)\n\n\t\treturn rows[0] ?? null\n\t}\n\n\tpublic async selectGrouped(\n\t\tentity: Model.Entity,\n\t\tinput: ObjectNode<Input.ListQueryInput>,\n\t\trelation: Model.JoiningColumnRelation & Model.AnyRelation,\n\t\trelationPath: Model.AnyRelationContext[],\n\t): Promise<SelectGroupedObjects> {\n\t\tconst hydrator = new SelectHydrator()\n\t\tconst path = this.pathFactory.create([])\n\t\tconst groupingKey = '__grouping_key'\n\t\tconst qb: SelectBuilder = SelectBuilder.create()\n\t\t\t.select([path.alias, relation.joiningColumn.columnName], groupingKey)\n\n\t\tconst rows = await this.selectRows(hydrator, qb, entity, input, relationPath, relation.name)\n\n\t\treturn await hydrator.hydrateGroups(rows, groupingKey)\n\t}\n\n\tprivate async selectRows(\n\t\thydrator: SelectHydrator,\n\t\tqb: SelectBuilder<SelectBuilder.Result>,\n\t\tentity: Model.Entity,\n\t\tinput: ObjectNode<Input.ListQueryInput>,\n\t\trelationPath: Model.AnyRelationContext[],\n\t\tgroupBy?: string,\n\t) {\n\t\tconst inputWithOrder = OrderByHelper.appendDefaultOrderBy(entity, input, undefined)\n\t\tconst path = this.pathFactory.create([])\n\t\tconst augmentedBuilder = qb.from(entity.tableName, path.alias).meta('path', [...input.path, input.alias])\n\n\t\tconst selector = this.selectBuilderFactory.create(augmentedBuilder, hydrator, relationPath)\n\t\tconst filterWithPredicates = this.predicatesInjector.inject(\n\t\t\tentity,\n\t\t\tinputWithOrder.args.filter || {},\n\t\t\trelationPath[relationPath.length - 1],\n\t\t\trelationPath,\n\t\t)\n\t\tconst inputWithPredicates = inputWithOrder.withArg('filter', filterWithPredicates)\n\t\tselector.select(this, entity, inputWithPredicates, path, groupBy)\n\t\treturn await selector.execute(this.db)\n\t}\n\n\tpublic async count(entity: Model.Entity, filter: Input.OptionalWhere) {\n\t\tconst path = this.pathFactory.create([])\n\t\tconst qb = SelectBuilder.create()\n\t\t\t.from(entity.tableName, path.alias)\n\t\t\t.select(expr => expr.raw('count(*)'), 'row_count')\n\t\tconst withPredicates = this.predicatesInjector.inject(entity, filter)\n\t\tconst qbWithWhere = this.whereBuilder.build(qb, entity, path, withPredicates)\n\t\tconst result = await qbWithWhere.getResult(this.db)\n\t\treturn result[0].row_count\n\t}\n\n\tpublic async countGrouped(\n\t\tentity: Model.Entity,\n\t\tfilter: Input.OptionalWhere,\n\t\trelation: Model.JoiningColumnRelation & Model.Relation,\n\t\trelationPath: Model.AnyRelationContext[],\n\t): Promise<Record<string, number>> {\n\t\tconst path = this.pathFactory.create([])\n\t\tconst qb = SelectBuilder.create()\n\t\t\t.from(entity.tableName, path.alias)\n\t\t\t.select(expr => expr.raw('count(*)'), 'row_count')\n\t\t\t.select([path.alias, relation.joiningColumn.columnName])\n\t\t\t.groupBy([path.alias, relation.joiningColumn.columnName])\n\t\tconst withPredicates = this.predicatesInjector.inject(entity, filter, relationPath[relationPath.length - 1], relationPath)\n\t\tconst qbWithWhere = this.whereBuilder.build(qb, entity, path, withPredicates, { relationPath })\n\t\tconst rows = await qbWithWhere.getResult(this.db)\n\t\tconst result = new Map<string, number>()\n\t\tfor (const row of rows) {\n\t\t\tresult.set(String(row[relation.joiningColumn.columnName]), Number(row.row_count))\n\t\t}\n\t\treturn Object.fromEntries(result)\n\t}\n\n\tpublic async insert(\n\t\tentity: Model.Entity,\n\t\tdata: MapperInput.CreateDataInput,\n\t\tbuilderCb: (builder: InsertBuilder) => void = () => {},\n\t): Promise<MutationResultList> {\n\t\tif (entity.view) {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\t\tawait this.setupSystemVariables()\n\t\treturn tryMutation(this.schema, this.schemaDatabaseMetadata, () => this.insertInternal(entity, data, builderCb))\n\t}\n\n\tpublic async update(\n\t\tentity: Model.Entity,\n\t\tby: Input.UniqueWhere | CheckedPrimary,\n\t\tdata: MapperInput.UpdateDataInput,\n\t\tfilter?: Input.OptionalWhere,\n\t): Promise<MutationResultList> {\n\t\tif (entity.view) {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\t\tawait this.setupSystemVariables()\n\t\treturn tryMutation(this.schema, this.schemaDatabaseMetadata, async () => {\n\t\t\tconst [primaryValue, err] = await this.getPrimaryValue(entity, by)\n\t\t\tif (err) return [err]\n\n\t\t\treturn await this.updater.update(this, entity, primaryValue, data, filter)\n\t\t})\n\t}\n\n\tpublic async updateInternal(\n\t\tentity: Model.Entity,\n\t\tby: Input.UniqueWhere | CheckedPrimary,\n\t\tbuilderCb: (builder: UpdateBuilder) => void,\n\t): Promise<MutationResultList> {\n\t\tif (entity.view) {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\t\tawait this.setupSystemVariables()\n\t\treturn tryMutation(this.schema, this.schemaDatabaseMetadata, async () => {\n\t\t\tconst [primaryValue, err] = await this.getPrimaryValue(entity, by)\n\t\t\tif (err) return [err]\n\n\t\t\treturn await this.updater.updateCb(this, entity, primaryValue, builderCb)\n\t\t})\n\t}\n\tpublic async upsert(\n\t\tentity: Model.Entity,\n\t\tby: Input.UniqueWhere | CheckedPrimary,\n\t\tupdate: MapperInput.UpdateDataInput,\n\t\tcreate: MapperInput.CreateDataInput,\n\t\tfilter?: Input.OptionalWhere,\n\t): Promise<MutationResultList> {\n\t\tif (entity.view) {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\t\tawait this.setupSystemVariables()\n\t\treturn tryMutation(this.schema, this.schemaDatabaseMetadata, async () => {\n\t\t\tconst [primaryValue] = await this.getPrimaryValue(entity, by)\n\t\t\tif (primaryValue === undefined) {\n\t\t\t\treturn await this.insertInternal(entity, create)\n\t\t\t}\n\t\t\treturn await this.updater.update(this, entity, primaryValue, update, filter)\n\t\t})\n\t}\n\n\tprivate insertInternal(entity: Model.Entity, data: MapperInput.CreateDataInput, builderCb: (builder: InsertBuilder) => void = () => {}) {\n\t\treturn this.inserter.insert(this, entity, data, id => {\n\t\t}, builderCb)\n\t}\n\n\tpublic async delete(\n\t\tentity: Model.Entity,\n\t\tby: Input.UniqueWhere | CheckedPrimary,\n\t\tfilter?: Input.OptionalWhere,\n\t): Promise<MutationResultList> {\n\t\tif (entity.view) {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\t\tawait this.setupSystemVariables()\n\t\treturn tryMutation(this.schema, this.schemaDatabaseMetadata, () => {\n\t\t\treturn this.deleteExecutor.execute(this, entity, by, filter)\n\t\t})\n\t}\n\n\tpublic async connectJunction(\n\t\tentity: Model.Entity,\n\t\trelation: Model.ManyHasManyOwningRelation | Model.ManyHasManyInverseRelation,\n\t\tthisPrimary: Input.PrimaryValue,\n\t\totherPrimary: Input.PrimaryValue,\n\t): Promise<MutationResultList> {\n\t\tawait this.setupSystemVariables()\n\t\tconst err = () => {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\t\treturn await acceptFieldVisitor(this.schema, entity, relation, {\n\t\t\tvisitManyHasManyOwning: ({ entity, relation }) => {\n\t\t\t\treturn this.junctionTableManager.connectJunction(this, entity, relation, thisPrimary, otherPrimary)\n\t\t\t},\n\t\t\tvisitManyHasManyInverse: ({ targetEntity, targetRelation }) => {\n\t\t\t\treturn this.junctionTableManager.connectJunction(this, targetEntity, targetRelation, otherPrimary, thisPrimary)\n\t\t\t},\n\t\t\tvisitColumn: err,\n\t\t\tvisitOneHasMany: err,\n\t\t\tvisitOneHasOneInverse: err,\n\t\t\tvisitOneHasOneOwning: err,\n\t\t\tvisitManyHasOne: err,\n\t\t})\n\t}\n\n\tpublic async disconnectJunction(\n\t\tentity: Model.Entity,\n\t\trelation: Model.ManyHasManyOwningRelation | Model.ManyHasManyInverseRelation,\n\t\tthisPrimary: Input.PrimaryValue,\n\t\totherPrimary: Input.PrimaryValue,\n\t): Promise<MutationResultList> {\n\t\tawait this.setupSystemVariables()\n\t\tconst err = () => {\n\t\t\tthrow new ImplementationException()\n\t\t}\n\t\treturn await acceptFieldVisitor(this.schema, entity, relation, {\n\t\t\tvisitManyHasManyOwning: ({ entity, relation }) => {\n\t\t\t\treturn this.junctionTableManager.disconnectJunction(this, entity, relation, thisPrimary, otherPrimary)\n\t\t\t},\n\t\t\tvisitManyHasManyInverse: ({ targetEntity, targetRelation }) => {\n\t\t\t\treturn this.junctionTableManager.disconnectJunction(this, targetEntity, targetRelation, otherPrimary, thisPrimary)\n\t\t\t},\n\t\t\tvisitColumn: err,\n\t\t\tvisitOneHasMany: err,\n\t\t\tvisitOneHasOneInverse: err,\n\t\t\tvisitOneHasOneOwning: err,\n\t\t\tvisitManyHasOne: err,\n\t\t})\n\t}\n\n\tpublic async getPrimaryValue(\n\t\tentity: Model.Entity,\n\t\twhere: Input.UniqueWhere | CheckedPrimary,\n\t): Promise<[Input.PrimaryValue, undefined] | [undefined, MutationEntryNotFoundError]> {\n\t\tif (where instanceof CheckedPrimary) {\n\t\t\treturn [where.primaryValue, undefined]\n\t\t}\n\t\tconst result = await this.selectField(entity, where, entity.primary)\n\t\treturn result ? [result, undefined] : [undefined, new MutationEntryNotFoundError([], where)]\n\t}\n\n\tprivate async setupSystemVariables() {\n\t\tthis.systemVariablesSetupDone ??= (async () => {\n\t\t\tawait this.db.query('SELECT set_config(?, ?, false)', ['tenant.identity_id', this.identityId]) // todo rename to system.identity_id\n\t\t\tawait this.db.query('SELECT set_config(?, ?, false)', ['system.transaction_id', this.transactionId])\n\t\t})()\n\t\tawait this.systemVariablesSetupDone\n\t}\n}\n"],"names":["DeletedEntitiesStorage","Mutex","ConstraintHelper","EventManager","getColumnName","SelectBuilder","SelectHydrator","OrderByHelper","ImplementationException","tryMutation","acceptFieldVisitor","entity","relation","CheckedPrimary","MutationEntryNotFoundError"],"mappings":"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"}
|
|
@@ -81,7 +81,12 @@ class Mapper {
|
|
|
81
81
|
const path = this.pathFactory.create([]);
|
|
82
82
|
const augmentedBuilder = qb.from(entity.tableName, path.alias).meta("path", [...input.path, input.alias]);
|
|
83
83
|
const selector = this.selectBuilderFactory.create(augmentedBuilder, hydrator, relationPath);
|
|
84
|
-
const filterWithPredicates = this.predicatesInjector.inject(
|
|
84
|
+
const filterWithPredicates = this.predicatesInjector.inject(
|
|
85
|
+
entity,
|
|
86
|
+
inputWithOrder.args.filter || {},
|
|
87
|
+
relationPath[relationPath.length - 1],
|
|
88
|
+
relationPath
|
|
89
|
+
);
|
|
85
90
|
const inputWithPredicates = inputWithOrder.withArg("filter", filterWithPredicates);
|
|
86
91
|
selector.select(this, entity, inputWithPredicates, path, groupBy);
|
|
87
92
|
return await selector.execute(this.db);
|
|
@@ -97,7 +102,7 @@ class Mapper {
|
|
|
97
102
|
async countGrouped(entity, filter, relation, relationPath) {
|
|
98
103
|
const path = this.pathFactory.create([]);
|
|
99
104
|
const qb = SelectBuilder.create().from(entity.tableName, path.alias).select((expr) => expr.raw("count(*)"), "row_count").select([path.alias, relation.joiningColumn.columnName]).groupBy([path.alias, relation.joiningColumn.columnName]);
|
|
100
|
-
const withPredicates = this.predicatesInjector.inject(entity, filter, relationPath[relationPath.length - 1]);
|
|
105
|
+
const withPredicates = this.predicatesInjector.inject(entity, filter, relationPath[relationPath.length - 1], relationPath);
|
|
101
106
|
const qbWithWhere = this.whereBuilder.build(qb, entity, path, withPredicates, { relationPath });
|
|
102
107
|
const rows = await qbWithWhere.getResult(this.db);
|
|
103
108
|
const result = /* @__PURE__ */ new Map();
|
|
@@ -112,11 +117,7 @@ class Mapper {
|
|
|
112
117
|
throw new ImplementationException();
|
|
113
118
|
}
|
|
114
119
|
await this.setupSystemVariables();
|
|
115
|
-
return tryMutation(
|
|
116
|
-
this.schema,
|
|
117
|
-
this.schemaDatabaseMetadata,
|
|
118
|
-
() => this.insertInternal(entity, data, builderCb)
|
|
119
|
-
);
|
|
120
|
+
return tryMutation(this.schema, this.schemaDatabaseMetadata, () => this.insertInternal(entity, data, builderCb));
|
|
120
121
|
}
|
|
121
122
|
async update(entity, by, data, filter) {
|
|
122
123
|
if (entity.view) {
|