@contember/engine-content-api 2.0.0-alpha.32 → 2.0.0-alpha.35
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/dist/development/src/ExecutionContainer.cjs.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- 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/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.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.map +1 -1
- package/dist/development/src/mapper/JunctionTableManager.js.map +1 -1
- package/dist/development/src/mapper/Mapper.cjs.map +1 -1
- 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.map +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.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- package/dist/development/src/mapper/select/SelectBuilder.js.map +1 -1
- package/dist/development/src/mapper/select/SelectHydrator.cjs.map +1 -1
- package/dist/development/src/mapper/select/SelectHydrator.js.map +1 -1
- package/dist/development/src/mapper/select/WhereBuilder.cjs.map +1 -1
- package/dist/development/src/mapper/select/WhereBuilder.js.map +1 -1
- package/dist/development/src/mapper/select/handlers/FieldsVisitor.cjs.map +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.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- 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/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.map +1 -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.map +1 -1
- 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.map +1 -1
- package/dist/development/src/schema/GraphQlSchemaBuilder.js.map +1 -1
- package/dist/development/src/schema/GraphQlSchemaBuilderFactory.cjs.map +1 -1
- 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.map +1 -1
- package/dist/development/src/schema/OperationExtension.cjs.map +1 -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.map +1 -1
- package/dist/development/src/schema/PaginatedFieldConfigFactory.cjs.map +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.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.map +1 -1
- package/dist/development/src/schema/ValidationQueriesProvider.js.map +1 -1
- package/dist/development/src/schema/WhereTypeProvider.cjs.map +1 -1
- 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.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/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/singletonFactory.cjs.map +1 -1
- package/dist/development/src/utils/singletonFactory.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/production/src/ExecutionContainer.cjs.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- 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/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.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.map +1 -1
- package/dist/production/src/mapper/JunctionTableManager.js.map +1 -1
- package/dist/production/src/mapper/Mapper.cjs.map +1 -1
- 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.map +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.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- package/dist/production/src/mapper/select/SelectBuilder.js.map +1 -1
- package/dist/production/src/mapper/select/SelectHydrator.cjs.map +1 -1
- package/dist/production/src/mapper/select/SelectHydrator.js.map +1 -1
- package/dist/production/src/mapper/select/WhereBuilder.cjs.map +1 -1
- package/dist/production/src/mapper/select/WhereBuilder.js.map +1 -1
- package/dist/production/src/mapper/select/handlers/FieldsVisitor.cjs.map +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.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- 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/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.map +1 -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.map +1 -1
- 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.map +1 -1
- package/dist/production/src/schema/GraphQlSchemaBuilder.js.map +1 -1
- package/dist/production/src/schema/GraphQlSchemaBuilderFactory.cjs.map +1 -1
- 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.map +1 -1
- package/dist/production/src/schema/OperationExtension.cjs.map +1 -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.map +1 -1
- package/dist/production/src/schema/PaginatedFieldConfigFactory.cjs.map +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.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.map +1 -1
- package/dist/production/src/schema/ValidationQueriesProvider.js.map +1 -1
- package/dist/production/src/schema/WhereTypeProvider.cjs.map +1 -1
- 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.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/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/singletonFactory.cjs.map +1 -1
- package/dist/production/src/utils/singletonFactory.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/tests/src/assert.d.ts +5 -0
- package/dist/tests/src/assert.d.ts.map +1 -0
- package/dist/tests/tsconfig.tsbuildinfo +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/graphql.codegen.yml +1 -1
- package/package.json +11 -11
- package/tests/cases/bugs/bug-filter-or.test.ts +1 -1
- package/tests/cases/bugs/bug-update-by-nested-unique.test.ts +1 -1
- package/tests/cases/bugs/bug102.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/delete/aclDelete.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/delete/additionalDeleteFilter.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/delete/cascadeDelete.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/delete/deleteById.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/delete/orphanRemoval.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/delete/restrictOnDelete.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/delete/setNullOnDelete.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/insert/acl/setField.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/insert/aclInsert.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/insert/basicInsert.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/insert/insertCustomId.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/insert/manyHasManyInverse/create.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/insert/manyHasManyOwning/create.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/insert/manyHasOne/connectOrCreate.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/insert/manyHasOne/create.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/insert/oneHasMany/connect.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/insert/oneHasMany/create.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/insert/oneHasOneInverse/create.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/create.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/empty.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/insert/validation/toBeFixed.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/query/acl/differentRowAndFieldPredicate.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/query/acl/fieldRestrictedByLocale.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/query/acl/isNullAcl.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/query/acl/nestedPredicate.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/query/acl/orPredicate.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/query/acl/predicateElimination.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/query/acl/relationAcl.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/query/acl/rowPredicateSubset.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/query/acl/sameRowAndFieldPredicate.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/query/filter/backReferencedFilter.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/query/filter/complexCondition.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/query/filter/composedFilter.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/query/filter/containsQuery.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/query/filter/manyHasManyOwnerRelation.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/query/filter/manyHasOneRelation.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/query/filter/oneHasManyRelation.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/query/formatting/dateFormat.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/query/graphqlFeatures/alias.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/query/graphqlFeatures/fragments.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/query/misc/aliasedType.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/query/misc/longAliasHash.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/query/misc/reducedHasMany.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/query/misc/transaction.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/query/pagination/hasManyLimit.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/query/pagination/paginate.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/query/pagination/paginateAliased.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/query/pagination/simpleLimit.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/query/relations/advanced.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/query/relations/manyHasManyInverse.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/query/relations/manyHasManyOwning.test.ts +2 -2
- package/tests/cases/integration/graphQlRequests/query/relations/manyHasOne.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/query/relations/oneHasMany.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/query/relations/oneHasOneInverse.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/query/relations/oneHasOneOwner.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/query/sorting/byRelations.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/query/sorting/defaultOrdering.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/query/sorting/orderBy.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/query/sorting/randomSort.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/query/sorting/sortNulls.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/query/sorting/sortedHasMany.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/query/unique/basicQueryById.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/query/unique/composedUnique.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/query/unique/oneHasManyUnique.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/query/unique/uniqueWithFilter.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/query/view/view.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/update/acl/aclUpdate.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/update/additionalFilter.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/update/basic/columnUpdate.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/connect.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/create.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/delete.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/disconnect.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/update.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/upsert.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/connect.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/connectOrCreate.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/create.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/delete.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/disconnect.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/update.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/upsert.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/update/manyHasOne/connect.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/update/manyHasOne/create.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/update/manyHasOne/delete.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/update/manyHasOne/disconnect.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/update/manyHasOne/update.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/update/manyHasOne/upsert.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/update/oneHasMany/combination.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/update/oneHasMany/connect.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/update/oneHasMany/connectOrCreate.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/update/oneHasMany/create.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/update/oneHasMany/delete.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/update/oneHasMany/disconnect.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/update/oneHasMany/update.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/update/oneHasMany/upsert.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/connect.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/create.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/delete.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/disconnect.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/update.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/upsert.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/connect.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/connectOrCreate.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/create.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/delete.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/disconnect.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/update.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/upsert.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/update/queryPortal.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/update/transaction.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/update/validation/toBeFixed.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/upsert/basicUpsert.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/validation/conditions.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/validation/nestedValidation.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/validation/optionalAssert.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/validation/required.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/validation/requiredWhen.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/validation/rules/andRule.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/validation/rules/lengthRangeRule.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/validation/rules/maxLengthRule.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/validation/rules/minLength.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/validation/rules/notEmptyRule.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/validation/rules/notRule.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/validation/rules/orRule.test.ts +1 -1
- package/tests/cases/integration/graphQlRequests/validation/rules/patternRule.test.ts +1 -2
- package/tests/cases/integration/graphQlRequests/validation/rules/rangeRule.test.ts +1 -1
- package/tests/cases/integration/graphQlSchema/graphQlSchemaBuilder.test.ts +4 -4
- package/tests/cases/integration/graphQlSchema/schema-acl-create-only.gql +28 -28
- package/tests/cases/integration/graphQlSchema/schema-new-builder.gql +108 -108
- package/tests/cases/unit/aclVariablesFactory.test.ts +5 -5
- package/tests/cases/unit/conditionOptimizer.test.ts +7 -1
- package/tests/cases/unit/inputPreValidator.test.ts +2 -1
- package/tests/cases/unit/inputValidation.test.ts +7 -6
- package/tests/cases/unit/orderbyHelper.test.ts +3 -2
- package/tests/cases/unit/permissionMerger.test.ts +2 -1
- package/tests/cases/unit/predicatesFactory.test.ts +2 -1
- package/tests/cases/unit/predicatesInjector.test.ts +2 -1
- package/tests/cases/unit/uuidType.test.ts +5 -5
- package/tests/cases/unit/variableInjector.test.ts +2 -1
- package/tests/cases/unit/whereBuilder.test.ts +2 -1
- package/tests/cases/unit/whereOptimizer.test.ts +2 -1
- package/tests/src/assert.ts +10 -0
- package/tests/src/testGraphql.ts +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WhereBuilder.js","sources":["../../../../../../packages/engine-content-api/src/mapper/select/WhereBuilder.ts"],"sourcesContent":["import { isIt } from '../../utils'\nimport { acceptFieldVisitor, isColumn } from '@contember/schema-utils'\nimport { Input, Model } from '@contember/schema'\nimport { Path, PathFactory } from './Path'\nimport { JoinBuilder } from './JoinBuilder'\nimport { ConditionBuilder } from './ConditionBuilder'\nimport {\n\tConditionBuilder as SqlConditionBuilder,\n\tLiteral,\n\tOperator,\n\tQueryBuilder,\n\tSelectBuilder, wrapIdentifier,\n} from '@contember/database'\nimport { WhereOptimizationHints, WhereOptimizer } from './optimizer/WhereOptimizer'\n\nexport class WhereBuilder {\n\tconstructor(\n\t\tprivate readonly schema: Model.Schema,\n\t\tprivate readonly joinBuilder: JoinBuilder,\n\t\tprivate readonly conditionBuilder: ConditionBuilder,\n\t\tprivate readonly pathFactory: PathFactory,\n\t\tprivate readonly whereOptimizer: WhereOptimizer,\n\t\tprivate readonly useExistsInHasManyFilter: boolean,\n\t) {}\n\n\tpublic build<R extends SelectBuilder.Result>(\n\t\tqb: SelectBuilder<R>,\n\t\tentity: Model.Entity,\n\t\tpath: Path,\n\t\twhere: Input.OptionalWhere,\n\t\toptimizationHints: WhereOptimizationHints = {},\n\t): SelectBuilder<R> {\n\t\tconst optimizedWhere = this.whereOptimizer.optimize(where, entity, optimizationHints)\n\t\treturn this.buildInternal({\n\t\t\tentity,\n\t\t\tpath,\n\t\t\twhere: optimizedWhere,\n\t\t\tcallback: cb => qb.where(clause => cb(clause)),\n\t\t\tallowManyJoin: false,\n\t\t})\n\t}\n\n\n\tpublic buildAdvanced<R extends SelectBuilder.Result>(\n\t\tentity: Model.Entity,\n\t\tpath: Path,\n\t\twhere: Input.OptionalWhere,\n\t\tcallback: (clauseCb: (clause: SqlConditionBuilder) => SqlConditionBuilder) => SelectBuilder<R>,\n\t\toptimizationHints: WhereOptimizationHints = {},\n\t): SelectBuilder<R> {\n\t\tconst optimizedWhere = this.whereOptimizer.optimize(where, entity, optimizationHints)\n\t\treturn this.buildInternal({\n\t\t\tentity,\n\t\t\tpath,\n\t\t\twhere: optimizedWhere,\n\t\t\tcallback,\n\t\t\tallowManyJoin: false,\n\t\t})\n\t}\n\n\tprivate buildInternal<R extends SelectBuilder.Result>({\n\t\tcallback,\n\t\t...args\n\t}: { entity: Model.Entity; path: Path; where: Input.OptionalWhere; callback: (clauseCb: (clause: SqlConditionBuilder) => SqlConditionBuilder) => SelectBuilder<R>; allowManyJoin: boolean },\n\t): SelectBuilder<R> {\n\t\tconst joinList: WhereJoinDefinition[] = []\n\n\t\tconst qbWithWhere = callback(clause => this.buildRecursive({\n\t\t\tconditionBuilder: clause,\n\t\t\tjoinList: joinList,\n\t\t\t...args,\n\t\t}))\n\t\treturn joinList.reduce<SelectBuilder<R>>(\n\t\t\t(qb, { path, entity, relationName }) => this.joinBuilder.join<R>(qb, path, entity, relationName),\n\t\t\tqbWithWhere,\n\t\t)\n\t}\n\n\tprivate buildRecursive({\n\t\tconditionBuilder,\n\t\tentity,\n\t\tpath,\n\t\twhere,\n\t\tjoinList,\n\t\tallowManyJoin,\n\t}: { conditionBuilder: SqlConditionBuilder; entity: Model.Entity; path: Path; where: Input.OptionalWhere; joinList: WhereJoinDefinition[]; allowManyJoin: boolean },\n\t): SqlConditionBuilder {\n\t\tconst tableName = path.alias\n\n\t\tif (where.and !== undefined && where.and !== null && where.and.length > 0) {\n\t\t\tconst expr = where.and\n\t\t\tconditionBuilder = conditionBuilder.and(clause =>\n\t\t\t\texpr.reduce(\n\t\t\t\t\t(clause2, where) =>\n\t\t\t\t\t\t!where ? clause2 : this.buildRecursive({\n\t\t\t\t\t\t\tconditionBuilder: clause2,\n\t\t\t\t\t\t\tentity,\n\t\t\t\t\t\t\tpath,\n\t\t\t\t\t\t\twhere,\n\t\t\t\t\t\t\tjoinList,\n\t\t\t\t\t\t\tallowManyJoin,\n\t\t\t\t\t\t}),\n\t\t\t\t\tclause,\n\t\t\t\t),\n\t\t\t)\n\t\t}\n\t\tif (where.or !== undefined && where.or !== null && where.or.length > 0) {\n\t\t\tconst expr = where.or\n\t\t\tconditionBuilder = conditionBuilder.or(clause =>\n\t\t\t\texpr.reduce(\n\t\t\t\t\t(clause2, where) =>\n\t\t\t\t\t\t!where\n\t\t\t\t\t\t\t? clause2\n\t\t\t\t\t\t\t: clause2.and(clause3 => this.buildRecursive({\n\t\t\t\t\t\t\t\tconditionBuilder: clause3,\n\t\t\t\t\t\t\t\tentity,\n\t\t\t\t\t\t\t\tpath,\n\t\t\t\t\t\t\t\twhere,\n\t\t\t\t\t\t\t\tjoinList,\n\t\t\t\t\t\t\t\tallowManyJoin,\n\t\t\t\t\t\t\t})),\n\t\t\t\t\tclause,\n\t\t\t\t),\n\t\t\t)\n\t\t}\n\t\tif (where.not !== undefined && where.not !== null) {\n\t\t\tconst expr = where.not\n\t\t\tconditionBuilder = conditionBuilder.not(clause =>\n\t\t\t\tthis.buildRecursive({\n\t\t\t\t\tconditionBuilder: clause,\n\t\t\t\t\tentity,\n\t\t\t\t\tpath,\n\t\t\t\t\twhere: expr,\n\t\t\t\t\tjoinList,\n\t\t\t\t\tallowManyJoin,\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\n\t\tfor (const fieldName in where) {\n\t\t\tif (fieldName === 'and' || fieldName === 'or' || fieldName === 'not') {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst fieldWhere = where[fieldName]\n\t\t\tif (!fieldWhere) {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tconst targetPath = path.for(fieldName)\n\n\t\t\tconst joinedWhere = ({ targetEntity, relation, entity }: Model.AnyRelationContext): SqlConditionBuilder => {\n\t\t\t\tconst relationWhere = where[fieldName] as Input.OptionalWhere | null\n\t\t\t\tif (!relationWhere || Object.keys(relationWhere).length === 0) {\n\t\t\t\t\treturn conditionBuilder\n\t\t\t\t}\n\t\t\t\tif (isIt<Model.JoiningColumnRelation>(relation, 'joiningColumn')) {\n\t\t\t\t\tconst primaryCondition = this.transformWhereToPrimaryCondition(relationWhere, targetEntity.primary)\n\t\t\t\t\tif (primaryCondition !== null) {\n\t\t\t\t\t\treturn this.conditionBuilder.build(\n\t\t\t\t\t\t\tconditionBuilder,\n\t\t\t\t\t\t\ttableName,\n\t\t\t\t\t\t\trelation.joiningColumn.columnName,\n\t\t\t\t\t\t\t(targetEntity.fields[targetEntity.primary] as Model.AnyColumn).columnType,\n\t\t\t\t\t\t\tprimaryCondition,\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tjoinList.push({ path: targetPath, entity, relationName: relation.name })\n\n\t\t\t\treturn this.buildRecursive({\n\t\t\t\t\tconditionBuilder,\n\t\t\t\t\tentity: targetEntity,\n\t\t\t\t\tpath: targetPath,\n\t\t\t\t\twhere: relationWhere,\n\t\t\t\t\tjoinList,\n\t\t\t\t\tallowManyJoin,\n\t\t\t\t})\n\t\t\t}\n\n\n\n\t\t\tconditionBuilder = acceptFieldVisitor<SqlConditionBuilder>(this.schema, entity, fieldName, {\n\t\t\t\tvisitColumn: ({ entity, column }) => {\n\t\t\t\t\treturn this.conditionBuilder.build(conditionBuilder, tableName, column.columnName, column.columnType, fieldWhere as Input.Condition<Input.ColumnValue>)\n\t\t\t\t},\n\t\t\t\tvisitOneHasOneInverse: joinedWhere,\n\t\t\t\tvisitOneHasOneOwning: joinedWhere,\n\t\t\t\tvisitManyHasOne: joinedWhere,\n\t\t\t\tvisitManyHasManyInverse: context => {\n\t\t\t\t\tif (allowManyJoin && !this.useExistsInHasManyFilter) {\n\t\t\t\t\t\treturn joinedWhere(context)\n\t\t\t\t\t}\n\n\t\t\t\t\treturn conditionBuilder.exists(\n\t\t\t\t\t\tthis.createManyHasManySubquery(\n\t\t\t\t\t\t\t[tableName, entity.primaryColumn],\n\t\t\t\t\t\t\tfieldWhere as Input.OptionalWhere,\n\t\t\t\t\t\t\tcontext.targetEntity,\n\t\t\t\t\t\t\tcontext.targetRelation.joiningTable,\n\t\t\t\t\t\t\t'inverse',\n\t\t\t\t\t\t\ttargetPath,\n\t\t\t\t\t\t),\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t\tvisitManyHasManyOwning: context => {\n\t\t\t\t\tif (allowManyJoin && !this.useExistsInHasManyFilter) {\n\t\t\t\t\t\treturn joinedWhere(context)\n\t\t\t\t\t}\n\n\t\t\t\t\tconst relationWhere = where[fieldName] as Input.Where | null\n\n\t\t\t\t\treturn conditionBuilder.exists(\n\t\t\t\t\t\tthis.createManyHasManySubquery(\n\t\t\t\t\t\t\t[tableName, entity.primaryColumn],\n\t\t\t\t\t\t\tfieldWhere as Input.OptionalWhere,\n\t\t\t\t\t\t\tcontext.targetEntity,\n\t\t\t\t\t\t\tcontext.relation.joiningTable,\n\t\t\t\t\t\t\t'owning',\n\t\t\t\t\t\t\ttargetPath,\n\t\t\t\t\t\t),\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t\tvisitOneHasMany: context => {\n\t\t\t\t\tif (allowManyJoin && !this.useExistsInHasManyFilter) {\n\t\t\t\t\t\treturn joinedWhere(context)\n\t\t\t\t\t}\n\n\t\t\t\t\tconst relationWhere = fieldWhere as Input.OptionalWhere\n\n\t\t\t\t\tconst qb = this.hasRootIsNull(relationWhere, context.targetEntity)\n\t\t\t\t\t\t? SelectBuilder.create()\n\t\t\t\t\t\t\t.select(it => it.raw('1'))\n\t\t\t\t\t\t\t.from(new Literal(`(select ${wrapIdentifier(tableName)}.${wrapIdentifier(entity.primaryColumn)})`), targetPath.for('tmp_').alias)\n\t\t\t\t\t\t\t.leftJoin(context.targetEntity.tableName, targetPath.alias, it =>\n\t\t\t\t\t\t\t\tit.columnsEq([targetPath.for('tmp_').alias, entity.primaryColumn], [targetPath.alias, context.targetRelation.joiningColumn.columnName]),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t: SelectBuilder.create()\n\t\t\t\t\t\t\t.select(it => it.raw('1'))\n\t\t\t\t\t\t\t.from(context.targetEntity.tableName, targetPath.alias)\n\t\t\t\t\t\t\t.where(it => it.columnsEq([tableName, entity.primaryColumn], [targetPath.alias, context.targetRelation.joiningColumn.columnName]))\n\n\t\t\t\t\treturn conditionBuilder.exists(\n\t\t\t\t\t\tthis.buildInternal({\n\t\t\t\t\t\t\tentity: context.targetEntity,\n\t\t\t\t\t\t\tpath: targetPath,\n\t\t\t\t\t\t\twhere: relationWhere,\n\t\t\t\t\t\t\tcallback: cb => qb.where(clause => cb(clause)),\n\t\t\t\t\t\t\tallowManyJoin: true,\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\t\treturn conditionBuilder\n\t}\n\n\n\tprivate createManyHasManySubquery(\n\t\touterColumn: QueryBuilder.ColumnIdentifier,\n\t\trelationWhere: Input.OptionalWhere,\n\t\ttargetEntity: Model.Entity,\n\t\tjoiningTable: Model.JoiningTable,\n\t\tfromSide: 'owning' | 'inverse',\n\t\tpath: Path,\n\t) {\n\t\tconst fromColumn = fromSide === 'owning' ? joiningTable.joiningColumn.columnName : joiningTable.inverseJoiningColumn.columnName\n\t\tconst toColumn = fromSide === 'owning' ? joiningTable.inverseJoiningColumn.columnName : joiningTable.joiningColumn.columnName\n\t\tconst junctionPath = path.for('junction_')\n\t\tconst qb = SelectBuilder.create<SelectBuilder.Result>()\n\t\t\t.from(joiningTable.tableName, junctionPath.alias)\n\t\t\t.select(it => it.raw('1'))\n\t\t\t.where(it => it.columnsEq(outerColumn, [junctionPath.alias, fromColumn]))\n\n\t\tconst primaryCondition = this.transformWhereToPrimaryCondition(relationWhere, targetEntity.primary)\n\t\tif (primaryCondition !== null) {\n\n\t\t\tconst columnType = (targetEntity.fields[targetEntity.primary] as Model.AnyColumn).columnType\n\n\t\t\treturn qb.where(condition =>\n\t\t\t\tthis.conditionBuilder.build(condition, junctionPath.alias, toColumn, columnType, primaryCondition),\n\t\t\t)\n\t\t}\n\n\t\tconst qbJoined = qb.join(targetEntity.tableName, path.alias, clause =>\n\t\t\tclause.compareColumns([junctionPath.alias, toColumn], Operator.eq, [path.alias, targetEntity.primary]),\n\t\t)\n\t\treturn this.buildInternal({\n\t\t\tentity: targetEntity,\n\t\t\tpath: this.pathFactory.create([], path.fullAlias),\n\t\t\twhere: relationWhere,\n\t\t\tcallback: cb => qbJoined.where(clause => cb(clause)),\n\t\t\tallowManyJoin: true,\n\t\t})\n\t}\n\n\tprivate transformWhereToPrimaryCondition(where: Input.OptionalWhere, primaryField: string): Input.Condition<never> | null {\n\t\tconst keys = Object.keys(where)\n\t\tif (keys.filter(it => !['and', 'or', 'not', primaryField].includes(it)).length > 0) {\n\t\t\treturn null\n\t\t}\n\t\tlet condition: {\n\t\t\tand?: Array<Input.Condition<never>>\n\t\t\tor?: Array<Input.Condition<never>>\n\t\t\tnot?: Input.Condition<never>\n\t\t} = {}\n\t\tif (where.and) {\n\t\t\tconst conditions = where.and\n\t\t\t\t.filter((it): it is Input.Where => !!it)\n\t\t\t\t.map(it => this.transformWhereToPrimaryCondition(it, primaryField))\n\t\t\tif (conditions.includes(null)) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tcondition.and = conditions as Input.Condition<never>[]\n\t\t}\n\t\tif (where.or) {\n\t\t\tconst conditions = where.or\n\t\t\t\t.filter((it): it is Input.Where => !!it)\n\t\t\t\t.map(it => this.transformWhereToPrimaryCondition(it, primaryField))\n\t\t\tif (conditions.includes(null)) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tcondition.or = conditions as Input.Condition<never>[]\n\t\t}\n\t\tif (where.not) {\n\t\t\tconst conditions = this.transformWhereToPrimaryCondition(where.not, primaryField)\n\t\t\tif (conditions === null) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tcondition.not = conditions as Input.Condition<never>\n\t\t}\n\t\tif (where[primaryField]) {\n\t\t\tif (Object.keys(condition).length > 0) {\n\t\t\t\treturn { and: [condition, where[primaryField] as Input.Condition<never>] }\n\t\t\t}\n\t\t\treturn where[primaryField] as Input.Condition<never>\n\t\t}\n\t\treturn condition\n\t}\n\n\tprivate hasRootIsNull(where: Input.OptionalWhere, entity: Model.Entity): boolean {\n\t\tfor (const key in where) {\n\t\t\tif (key === 'and' || key === 'or') {\n\t\t\t\tif (where[key]?.some(it => it && this.hasRootIsNull(it, entity))) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t} else if (key === 'not') {\n\t\t\t\tif (where.not && this.hasRootIsNull(where.not, entity)) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t} else if (isColumn(entity.fields[key]) && this.conditionHasIsNull(where[key] as Input.Condition)) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t\treturn false\n\t}\n\n\tprivate conditionHasIsNull(cond: Input.Condition): boolean {\n\t\tif (cond.isNull !== undefined) {\n\t\t\treturn true\n\t\t}\n\t\tif (cond.and && cond.and.some(it => this.conditionHasIsNull(it))) {\n\t\t\treturn true\n\t\t}\n\t\tif (cond.or && cond.or.some(it => this.conditionHasIsNull(it))) {\n\t\t\treturn true\n\t\t}\n\t\tif (cond.not && this.conditionHasIsNull(cond.not)) {\n\t\t\treturn true\n\t\t}\n\t\treturn false\n\t}\n}\n\nexport type WhereJoinDefinition = { path: Path; entity: Model.Entity; relationName: string }\n"],"names":["where","entity"],"mappings":";;;AAeO,MAAM,aAAa;AAAA,EACzB,YACkB,QACA,aACA,kBACA,aACA,gBACA,0BAChB;AANgB,SAAA,SAAA;AACA,SAAA,cAAA;AACA,SAAA,mBAAA;AACA,SAAA,cAAA;AACA,SAAA,iBAAA;AACA,SAAA,2BAAA;AAAA,EACf;AAAA,EAEI,MACN,IACA,QACA,MACA,OACA,oBAA4C,IACzB;AACnB,UAAM,iBAAiB,KAAK,eAAe,SAAS,OAAO,QAAQ,iBAAiB;AACpF,WAAO,KAAK,cAAc;AAAA,MACzB;AAAA,MACA;AAAA,MACA,OAAO;AAAA,MACP,UAAU,CAAM,OAAA,GAAG,MAAM,CAAU,WAAA,GAAG,MAAM,CAAC;AAAA,MAC7C,eAAe;AAAA,IAAA,CACf;AAAA,EACF;AAAA,EAGO,cACN,QACA,MACA,OACA,UACA,oBAA4C,IACzB;AACnB,UAAM,iBAAiB,KAAK,eAAe,SAAS,OAAO,QAAQ,iBAAiB;AACpF,WAAO,KAAK,cAAc;AAAA,MACzB;AAAA,MACA;AAAA,MACA,OAAO;AAAA,MACP;AAAA,MACA,eAAe;AAAA,IAAA,CACf;AAAA,EACF;AAAA,EAEQ,cAA8C;AAAA,IACrD;AAAA,IACA,GAAG;AAAA,EAAA,GAEgB;AACnB,UAAM,WAAkC,CAAA;AAExC,UAAM,cAAc,SAAS,CAAU,WAAA,KAAK,eAAe;AAAA,MAC1D,kBAAkB;AAAA,MAClB;AAAA,MACA,GAAG;AAAA,IACH,CAAA,CAAC;AACF,WAAO,SAAS;AAAA,MACf,CAAC,IAAI,EAAE,MAAM,QAAQ,aAAA,MAAmB,KAAK,YAAY,KAAQ,IAAI,MAAM,QAAQ,YAAY;AAAA,MAC/F;AAAA,IAAA;AAAA,EAEF;AAAA,EAEQ,eAAe;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,GAEsB;AACtB,UAAM,YAAY,KAAK;AAEnB,QAAA,MAAM,QAAQ,UAAa,MAAM,QAAQ,QAAQ,MAAM,IAAI,SAAS,GAAG;AAC1E,YAAM,OAAO,MAAM;AACnB,yBAAmB,iBAAiB;AAAA,QAAI,YACvC,KAAK;AAAA,UACJ,CAAC,SAASA,WACT,CAACA,SAAQ,UAAU,KAAK,eAAe;AAAA,YACtC,kBAAkB;AAAA,YAClB;AAAA,YACA;AAAA,YACA,OAAAA;AAAAA,YACA;AAAA,YACA;AAAA,UAAA,CACA;AAAA,UACF;AAAA,QACD;AAAA,MAAA;AAAA,IAEF;AACI,QAAA,MAAM,OAAO,UAAa,MAAM,OAAO,QAAQ,MAAM,GAAG,SAAS,GAAG;AACvE,YAAM,OAAO,MAAM;AACnB,yBAAmB,iBAAiB;AAAA,QAAG,YACtC,KAAK;AAAA,UACJ,CAAC,SAASA,WACT,CAACA,SACE,UACA,QAAQ,IAAI,CAAW,YAAA,KAAK,eAAe;AAAA,YAC5C,kBAAkB;AAAA,YAClB;AAAA,YACA;AAAA,YACA,OAAAA;AAAAA,YACA;AAAA,YACA;AAAA,UAAA,CACA,CAAC;AAAA,UACJ;AAAA,QACD;AAAA,MAAA;AAAA,IAEF;AACA,QAAI,MAAM,QAAQ,UAAa,MAAM,QAAQ,MAAM;AAClD,YAAM,OAAO,MAAM;AACnB,yBAAmB,iBAAiB;AAAA,QAAI,CAAA,WACvC,KAAK,eAAe;AAAA,UACnB,kBAAkB;AAAA,UAClB;AAAA,UACA;AAAA,UACA,OAAO;AAAA,UACP;AAAA,UACA;AAAA,QAAA,CACA;AAAA,MAAA;AAAA,IAEH;AAEA,eAAW,aAAa,OAAO;AAC9B,UAAI,cAAc,SAAS,cAAc,QAAQ,cAAc,OAAO;AACrE;AAAA,MACD;AACM,YAAA,aAAa,MAAM,SAAS;AAClC,UAAI,CAAC,YAAY;AAChB;AAAA,MACD;AAEM,YAAA,aAAa,KAAK,IAAI,SAAS;AAErC,YAAM,cAAc,CAAC,EAAE,cAAc,UAAU,QAAAC,cAA4D;AACpG,cAAA,gBAAgB,MAAM,SAAS;AACrC,YAAI,CAAC,iBAAiB,OAAO,KAAK,aAAa,EAAE,WAAW,GAAG;AACvD,iBAAA;AAAA,QACR;AACI,YAAA,KAAkC,UAAU,eAAe,GAAG;AACjE,gBAAM,mBAAmB,KAAK,iCAAiC,eAAe,aAAa,OAAO;AAClG,cAAI,qBAAqB,MAAM;AAC9B,mBAAO,KAAK,iBAAiB;AAAA,cAC5B;AAAA,cACA;AAAA,cACA,SAAS,cAAc;AAAA,cACtB,aAAa,OAAO,aAAa,OAAO,EAAsB;AAAA,cAC/D;AAAA,YAAA;AAAA,UAEF;AAAA,QACD;AAES,iBAAA,KAAK,EAAE,MAAM,YAAY,QAAAA,SAAQ,cAAc,SAAS,KAAA,CAAM;AAEvE,eAAO,KAAK,eAAe;AAAA,UAC1B;AAAA,UACA,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,OAAO;AAAA,UACP;AAAA,UACA;AAAA,QAAA,CACA;AAAA,MAAA;AAKF,yBAAmB,mBAAwC,KAAK,QAAQ,QAAQ,WAAW;AAAA,QAC1F,aAAa,CAAC,EAAE,QAAAA,SAAQ,aAAa;AAC7B,iBAAA,KAAK,iBAAiB,MAAM,kBAAkB,WAAW,OAAO,YAAY,OAAO,YAAY,UAAgD;AAAA,QACvJ;AAAA,QACA,uBAAuB;AAAA,QACvB,sBAAsB;AAAA,QACtB,iBAAiB;AAAA,QACjB,yBAAyB,CAAW,YAAA;AAC/B,cAAA,iBAAiB,CAAC,KAAK,0BAA0B;AACpD,mBAAO,YAAY,OAAO;AAAA,UAC3B;AAEA,iBAAO,iBAAiB;AAAA,YACvB,KAAK;AAAA,cACJ,CAAC,WAAW,OAAO,aAAa;AAAA,cAChC;AAAA,cACA,QAAQ;AAAA,cACR,QAAQ,eAAe;AAAA,cACvB;AAAA,cACA;AAAA,YACD;AAAA,UAAA;AAAA,QAEF;AAAA,QACA,wBAAwB,CAAW,YAAA;AAC9B,cAAA,iBAAiB,CAAC,KAAK,0BAA0B;AACpD,mBAAO,YAAY,OAAO;AAAA,UAC3B;AAEsB,gBAAM,SAAS;AAErC,iBAAO,iBAAiB;AAAA,YACvB,KAAK;AAAA,cACJ,CAAC,WAAW,OAAO,aAAa;AAAA,cAChC;AAAA,cACA,QAAQ;AAAA,cACR,QAAQ,SAAS;AAAA,cACjB;AAAA,cACA;AAAA,YACD;AAAA,UAAA;AAAA,QAEF;AAAA,QACA,iBAAiB,CAAW,YAAA;AACvB,cAAA,iBAAiB,CAAC,KAAK,0BAA0B;AACpD,mBAAO,YAAY,OAAO;AAAA,UAC3B;AAEA,gBAAM,gBAAgB;AAEtB,gBAAM,KAAK,KAAK,cAAc,eAAe,QAAQ,YAAY,IAC9D,cAAc,OAAO,EACrB,OAAO,CAAM,OAAA,GAAG,IAAI,GAAG,CAAC,EACxB,KAAK,IAAI,QAAQ,WAAW,eAAe,SAAS,CAAC,IAAI,eAAe,OAAO,aAAa,CAAC,GAAG,GAAG,WAAW,IAAI,MAAM,EAAE,KAAK,EAC/H;AAAA,YAAS,QAAQ,aAAa;AAAA,YAAW,WAAW;AAAA,YAAO,QAC3D,GAAG,UAAU,CAAC,WAAW,IAAI,MAAM,EAAE,OAAO,OAAO,aAAa,GAAG,CAAC,WAAW,OAAO,QAAQ,eAAe,cAAc,UAAU,CAAC;AAAA,UAAA,IAEtI,cAAc,OAAO,EACrB,OAAO,CAAM,OAAA,GAAG,IAAI,GAAG,CAAC,EACxB,KAAK,QAAQ,aAAa,WAAW,WAAW,KAAK,EACrD,MAAM,QAAM,GAAG,UAAU,CAAC,WAAW,OAAO,aAAa,GAAG,CAAC,WAAW,OAAO,QAAQ,eAAe,cAAc,UAAU,CAAC,CAAC;AAEnI,iBAAO,iBAAiB;AAAA,YACvB,KAAK,cAAc;AAAA,cAClB,QAAQ,QAAQ;AAAA,cAChB,MAAM;AAAA,cACN,OAAO;AAAA,cACP,UAAU,CAAM,OAAA,GAAG,MAAM,CAAU,WAAA,GAAG,MAAM,CAAC;AAAA,cAC7C,eAAe;AAAA,YAAA,CACf;AAAA,UAAA;AAAA,QAEH;AAAA,MAAA,CACA;AAAA,IACF;AACO,WAAA;AAAA,EACR;AAAA,EAGQ,0BACP,aACA,eACA,cACA,cACA,UACA,MACC;AACD,UAAM,aAAa,aAAa,WAAW,aAAa,cAAc,aAAa,aAAa,qBAAqB;AACrH,UAAM,WAAW,aAAa,WAAW,aAAa,qBAAqB,aAAa,aAAa,cAAc;AAC7G,UAAA,eAAe,KAAK,IAAI,WAAW;AACnC,UAAA,KAAK,cAAc,OACvB,EAAA,KAAK,aAAa,WAAW,aAAa,KAAK,EAC/C,OAAO,CAAM,OAAA,GAAG,IAAI,GAAG,CAAC,EACxB,MAAM,CAAA,OAAM,GAAG,UAAU,aAAa,CAAC,aAAa,OAAO,UAAU,CAAC,CAAC;AAEzE,UAAM,mBAAmB,KAAK,iCAAiC,eAAe,aAAa,OAAO;AAClG,QAAI,qBAAqB,MAAM;AAE9B,YAAM,aAAc,aAAa,OAAO,aAAa,OAAO,EAAsB;AAElF,aAAO,GAAG;AAAA,QAAM,CAAA,cACf,KAAK,iBAAiB,MAAM,WAAW,aAAa,OAAO,UAAU,YAAY,gBAAgB;AAAA,MAAA;AAAA,IAEnG;AAEA,UAAM,WAAW,GAAG;AAAA,MAAK,aAAa;AAAA,MAAW,KAAK;AAAA,MAAO,CAC5D,WAAA,OAAO,eAAe,CAAC,aAAa,OAAO,QAAQ,GAAG,SAAS,IAAI,CAAC,KAAK,OAAO,aAAa,OAAO,CAAC;AAAA,IAAA;AAEtG,WAAO,KAAK,cAAc;AAAA,MACzB,QAAQ;AAAA,MACR,MAAM,KAAK,YAAY,OAAO,CAAC,GAAG,KAAK,SAAS;AAAA,MAChD,OAAO;AAAA,MACP,UAAU,CAAM,OAAA,SAAS,MAAM,CAAU,WAAA,GAAG,MAAM,CAAC;AAAA,MACnD,eAAe;AAAA,IAAA,CACf;AAAA,EACF;AAAA,EAEQ,iCAAiC,OAA4B,cAAqD;AACnH,UAAA,OAAO,OAAO,KAAK,KAAK;AAC9B,QAAI,KAAK,OAAO,CAAM,OAAA,CAAC,CAAC,OAAO,MAAM,OAAO,YAAY,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,GAAG;AAC5E,aAAA;AAAA,IACR;AACA,QAAI,YAIA,CAAA;AACJ,QAAI,MAAM,KAAK;AACd,YAAM,aAAa,MAAM,IACvB,OAAO,CAAC,OAA0B,CAAC,CAAC,EAAE,EACtC,IAAI,CAAM,OAAA,KAAK,iCAAiC,IAAI,YAAY,CAAC;AAC/D,UAAA,WAAW,SAAS,IAAI,GAAG;AACvB,eAAA;AAAA,MACR;AACA,gBAAU,MAAM;AAAA,IACjB;AACA,QAAI,MAAM,IAAI;AACb,YAAM,aAAa,MAAM,GACvB,OAAO,CAAC,OAA0B,CAAC,CAAC,EAAE,EACtC,IAAI,CAAM,OAAA,KAAK,iCAAiC,IAAI,YAAY,CAAC;AAC/D,UAAA,WAAW,SAAS,IAAI,GAAG;AACvB,eAAA;AAAA,MACR;AACA,gBAAU,KAAK;AAAA,IAChB;AACA,QAAI,MAAM,KAAK;AACd,YAAM,aAAa,KAAK,iCAAiC,MAAM,KAAK,YAAY;AAChF,UAAI,eAAe,MAAM;AACjB,eAAA;AAAA,MACR;AACA,gBAAU,MAAM;AAAA,IACjB;AACI,QAAA,MAAM,YAAY,GAAG;AACxB,UAAI,OAAO,KAAK,SAAS,EAAE,SAAS,GAAG;AACtC,eAAO,EAAE,KAAK,CAAC,WAAW,MAAM,YAAY,CAA2B;MACxE;AACA,aAAO,MAAM,YAAY;AAAA,IAC1B;AACO,WAAA;AAAA,EACR;AAAA,EAEQ,cAAc,OAA4B,QAA+B;AAChF,eAAW,OAAO,OAAO;AACpB,UAAA,QAAQ,SAAS,QAAQ,MAAM;AAC9B,YAAA,MAAM,GAAG,GAAG,KAAK,CAAA,OAAM,MAAM,KAAK,cAAc,IAAI,MAAM,CAAC,GAAG;AAC1D,iBAAA;AAAA,QACR;AAAA,MAAA,WACU,QAAQ,OAAO;AACzB,YAAI,MAAM,OAAO,KAAK,cAAc,MAAM,KAAK,MAAM,GAAG;AAChD,iBAAA;AAAA,QACR;AAAA,MACU,WAAA,SAAS,OAAO,OAAO,GAAG,CAAC,KAAK,KAAK,mBAAmB,MAAM,GAAG,CAAoB,GAAG;AAC3F,eAAA;AAAA,MACR;AAAA,IACD;AACO,WAAA;AAAA,EACR;AAAA,EAEQ,mBAAmB,MAAgC;AACtD,QAAA,KAAK,WAAW,QAAW;AACvB,aAAA;AAAA,IACR;AACI,QAAA,KAAK,OAAO,KAAK,IAAI,KAAK,QAAM,KAAK,mBAAmB,EAAE,CAAC,GAAG;AAC1D,aAAA;AAAA,IACR;AACI,QAAA,KAAK,MAAM,KAAK,GAAG,KAAK,QAAM,KAAK,mBAAmB,EAAE,CAAC,GAAG;AACxD,aAAA;AAAA,IACR;AACA,QAAI,KAAK,OAAO,KAAK,mBAAmB,KAAK,GAAG,GAAG;AAC3C,aAAA;AAAA,IACR;AACO,WAAA;AAAA,EACR;AACD;"}
|
|
1
|
+
{"version":3,"file":"WhereBuilder.js","sources":["../../../../../../packages/engine-content-api/src/mapper/select/WhereBuilder.ts"],"sourcesContent":["import { isIt } from '../../utils'\nimport { acceptFieldVisitor, isColumn } from '@contember/schema-utils'\nimport { Input, Model } from '@contember/schema'\nimport { Path, PathFactory } from './Path'\nimport { JoinBuilder } from './JoinBuilder'\nimport { ConditionBuilder } from './ConditionBuilder'\nimport {\n\tConditionBuilder as SqlConditionBuilder,\n\tLiteral,\n\tOperator,\n\tQueryBuilder,\n\tSelectBuilder, wrapIdentifier,\n} from '@contember/database'\nimport { WhereOptimizationHints, WhereOptimizer } from './optimizer/WhereOptimizer'\n\nexport class WhereBuilder {\n\tconstructor(\n\t\tprivate readonly schema: Model.Schema,\n\t\tprivate readonly joinBuilder: JoinBuilder,\n\t\tprivate readonly conditionBuilder: ConditionBuilder,\n\t\tprivate readonly pathFactory: PathFactory,\n\t\tprivate readonly whereOptimizer: WhereOptimizer,\n\t\tprivate readonly useExistsInHasManyFilter: boolean,\n\t) {}\n\n\tpublic build<R extends SelectBuilder.Result>(\n\t\tqb: SelectBuilder<R>,\n\t\tentity: Model.Entity,\n\t\tpath: Path,\n\t\twhere: Input.OptionalWhere,\n\t\toptimizationHints: WhereOptimizationHints = {},\n\t): SelectBuilder<R> {\n\t\tconst optimizedWhere = this.whereOptimizer.optimize(where, entity, optimizationHints)\n\t\treturn this.buildInternal({\n\t\t\tentity,\n\t\t\tpath,\n\t\t\twhere: optimizedWhere,\n\t\t\tcallback: cb => qb.where(clause => cb(clause)),\n\t\t\tallowManyJoin: false,\n\t\t})\n\t}\n\n\n\tpublic buildAdvanced<R extends SelectBuilder.Result>(\n\t\tentity: Model.Entity,\n\t\tpath: Path,\n\t\twhere: Input.OptionalWhere,\n\t\tcallback: (clauseCb: (clause: SqlConditionBuilder) => SqlConditionBuilder) => SelectBuilder<R>,\n\t\toptimizationHints: WhereOptimizationHints = {},\n\t): SelectBuilder<R> {\n\t\tconst optimizedWhere = this.whereOptimizer.optimize(where, entity, optimizationHints)\n\t\treturn this.buildInternal({\n\t\t\tentity,\n\t\t\tpath,\n\t\t\twhere: optimizedWhere,\n\t\t\tcallback,\n\t\t\tallowManyJoin: false,\n\t\t})\n\t}\n\n\tprivate buildInternal<R extends SelectBuilder.Result>({\n\t\tcallback,\n\t\t...args\n\t}: { entity: Model.Entity; path: Path; where: Input.OptionalWhere; callback: (clauseCb: (clause: SqlConditionBuilder) => SqlConditionBuilder) => SelectBuilder<R>; allowManyJoin: boolean },\n\t): SelectBuilder<R> {\n\t\tconst joinList: WhereJoinDefinition[] = []\n\n\t\tconst qbWithWhere = callback(clause => this.buildRecursive({\n\t\t\tconditionBuilder: clause,\n\t\t\tjoinList: joinList,\n\t\t\t...args,\n\t\t}))\n\t\treturn joinList.reduce<SelectBuilder<R>>(\n\t\t\t(qb, { path, entity, relationName }) => this.joinBuilder.join<R>(qb, path, entity, relationName),\n\t\t\tqbWithWhere,\n\t\t)\n\t}\n\n\tprivate buildRecursive({\n\t\tconditionBuilder,\n\t\tentity,\n\t\tpath,\n\t\twhere,\n\t\tjoinList,\n\t\tallowManyJoin,\n\t}: { conditionBuilder: SqlConditionBuilder; entity: Model.Entity; path: Path; where: Input.OptionalWhere; joinList: WhereJoinDefinition[]; allowManyJoin: boolean },\n\t): SqlConditionBuilder {\n\t\tconst tableName = path.alias\n\n\t\tif (where.and !== undefined && where.and !== null && where.and.length > 0) {\n\t\t\tconst expr = where.and\n\t\t\tconditionBuilder = conditionBuilder.and(clause =>\n\t\t\t\texpr.reduce(\n\t\t\t\t\t(clause2, where) =>\n\t\t\t\t\t\t!where ? clause2 : this.buildRecursive({\n\t\t\t\t\t\t\tconditionBuilder: clause2,\n\t\t\t\t\t\t\tentity,\n\t\t\t\t\t\t\tpath,\n\t\t\t\t\t\t\twhere,\n\t\t\t\t\t\t\tjoinList,\n\t\t\t\t\t\t\tallowManyJoin,\n\t\t\t\t\t\t}),\n\t\t\t\t\tclause,\n\t\t\t\t),\n\t\t\t)\n\t\t}\n\t\tif (where.or !== undefined && where.or !== null && where.or.length > 0) {\n\t\t\tconst expr = where.or\n\t\t\tconditionBuilder = conditionBuilder.or(clause =>\n\t\t\t\texpr.reduce(\n\t\t\t\t\t(clause2, where) =>\n\t\t\t\t\t\t!where\n\t\t\t\t\t\t\t? clause2\n\t\t\t\t\t\t\t: clause2.and(clause3 => this.buildRecursive({\n\t\t\t\t\t\t\t\tconditionBuilder: clause3,\n\t\t\t\t\t\t\t\tentity,\n\t\t\t\t\t\t\t\tpath,\n\t\t\t\t\t\t\t\twhere,\n\t\t\t\t\t\t\t\tjoinList,\n\t\t\t\t\t\t\t\tallowManyJoin,\n\t\t\t\t\t\t\t})),\n\t\t\t\t\tclause,\n\t\t\t\t),\n\t\t\t)\n\t\t}\n\t\tif (where.not !== undefined && where.not !== null) {\n\t\t\tconst expr = where.not\n\t\t\tconditionBuilder = conditionBuilder.not(clause =>\n\t\t\t\tthis.buildRecursive({\n\t\t\t\t\tconditionBuilder: clause,\n\t\t\t\t\tentity,\n\t\t\t\t\tpath,\n\t\t\t\t\twhere: expr,\n\t\t\t\t\tjoinList,\n\t\t\t\t\tallowManyJoin,\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\n\t\tfor (const fieldName in where) {\n\t\t\tif (fieldName === 'and' || fieldName === 'or' || fieldName === 'not') {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst fieldWhere = where[fieldName]\n\t\t\tif (!fieldWhere) {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tconst targetPath = path.for(fieldName)\n\n\t\t\tconst joinedWhere = ({ targetEntity, relation, entity }: Model.AnyRelationContext): SqlConditionBuilder => {\n\t\t\t\tconst relationWhere = where[fieldName] as Input.OptionalWhere | null\n\t\t\t\tif (!relationWhere || Object.keys(relationWhere).length === 0) {\n\t\t\t\t\treturn conditionBuilder\n\t\t\t\t}\n\t\t\t\tif (isIt<Model.JoiningColumnRelation>(relation, 'joiningColumn')) {\n\t\t\t\t\tconst primaryCondition = this.transformWhereToPrimaryCondition(relationWhere, targetEntity.primary)\n\t\t\t\t\tif (primaryCondition !== null) {\n\t\t\t\t\t\treturn this.conditionBuilder.build(\n\t\t\t\t\t\t\tconditionBuilder,\n\t\t\t\t\t\t\ttableName,\n\t\t\t\t\t\t\trelation.joiningColumn.columnName,\n\t\t\t\t\t\t\t(targetEntity.fields[targetEntity.primary] as Model.AnyColumn).columnType,\n\t\t\t\t\t\t\tprimaryCondition,\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tjoinList.push({ path: targetPath, entity, relationName: relation.name })\n\n\t\t\t\treturn this.buildRecursive({\n\t\t\t\t\tconditionBuilder,\n\t\t\t\t\tentity: targetEntity,\n\t\t\t\t\tpath: targetPath,\n\t\t\t\t\twhere: relationWhere,\n\t\t\t\t\tjoinList,\n\t\t\t\t\tallowManyJoin,\n\t\t\t\t})\n\t\t\t}\n\n\n\n\t\t\tconditionBuilder = acceptFieldVisitor<SqlConditionBuilder>(this.schema, entity, fieldName, {\n\t\t\t\tvisitColumn: ({ entity, column }) => {\n\t\t\t\t\treturn this.conditionBuilder.build(conditionBuilder, tableName, column.columnName, column.columnType, fieldWhere as Input.Condition<Input.ColumnValue>)\n\t\t\t\t},\n\t\t\t\tvisitOneHasOneInverse: joinedWhere,\n\t\t\t\tvisitOneHasOneOwning: joinedWhere,\n\t\t\t\tvisitManyHasOne: joinedWhere,\n\t\t\t\tvisitManyHasManyInverse: context => {\n\t\t\t\t\tif (allowManyJoin && !this.useExistsInHasManyFilter) {\n\t\t\t\t\t\treturn joinedWhere(context)\n\t\t\t\t\t}\n\n\t\t\t\t\treturn conditionBuilder.exists(\n\t\t\t\t\t\tthis.createManyHasManySubquery(\n\t\t\t\t\t\t\t[tableName, entity.primaryColumn],\n\t\t\t\t\t\t\tfieldWhere as Input.OptionalWhere,\n\t\t\t\t\t\t\tcontext.targetEntity,\n\t\t\t\t\t\t\tcontext.targetRelation.joiningTable,\n\t\t\t\t\t\t\t'inverse',\n\t\t\t\t\t\t\ttargetPath,\n\t\t\t\t\t\t),\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t\tvisitManyHasManyOwning: context => {\n\t\t\t\t\tif (allowManyJoin && !this.useExistsInHasManyFilter) {\n\t\t\t\t\t\treturn joinedWhere(context)\n\t\t\t\t\t}\n\n\t\t\t\t\tconst relationWhere = where[fieldName] as Input.Where | null\n\n\t\t\t\t\treturn conditionBuilder.exists(\n\t\t\t\t\t\tthis.createManyHasManySubquery(\n\t\t\t\t\t\t\t[tableName, entity.primaryColumn],\n\t\t\t\t\t\t\tfieldWhere as Input.OptionalWhere,\n\t\t\t\t\t\t\tcontext.targetEntity,\n\t\t\t\t\t\t\tcontext.relation.joiningTable,\n\t\t\t\t\t\t\t'owning',\n\t\t\t\t\t\t\ttargetPath,\n\t\t\t\t\t\t),\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t\tvisitOneHasMany: context => {\n\t\t\t\t\tif (allowManyJoin && !this.useExistsInHasManyFilter) {\n\t\t\t\t\t\treturn joinedWhere(context)\n\t\t\t\t\t}\n\n\t\t\t\t\tconst relationWhere = fieldWhere as Input.OptionalWhere\n\n\t\t\t\t\tconst qb = this.hasRootIsNull(relationWhere, context.targetEntity)\n\t\t\t\t\t\t? SelectBuilder.create()\n\t\t\t\t\t\t\t.select(it => it.raw('1'))\n\t\t\t\t\t\t\t.from(new Literal(`(select ${wrapIdentifier(tableName)}.${wrapIdentifier(entity.primaryColumn)})`), targetPath.for('tmp_').alias)\n\t\t\t\t\t\t\t.leftJoin(context.targetEntity.tableName, targetPath.alias, it =>\n\t\t\t\t\t\t\t\tit.columnsEq([targetPath.for('tmp_').alias, entity.primaryColumn], [targetPath.alias, context.targetRelation.joiningColumn.columnName]),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t: SelectBuilder.create()\n\t\t\t\t\t\t\t.select(it => it.raw('1'))\n\t\t\t\t\t\t\t.from(context.targetEntity.tableName, targetPath.alias)\n\t\t\t\t\t\t\t.where(it => it.columnsEq([tableName, entity.primaryColumn], [targetPath.alias, context.targetRelation.joiningColumn.columnName]))\n\n\t\t\t\t\treturn conditionBuilder.exists(\n\t\t\t\t\t\tthis.buildInternal({\n\t\t\t\t\t\t\tentity: context.targetEntity,\n\t\t\t\t\t\t\tpath: targetPath,\n\t\t\t\t\t\t\twhere: relationWhere,\n\t\t\t\t\t\t\tcallback: cb => qb.where(clause => cb(clause)),\n\t\t\t\t\t\t\tallowManyJoin: true,\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\t\treturn conditionBuilder\n\t}\n\n\n\tprivate createManyHasManySubquery(\n\t\touterColumn: QueryBuilder.ColumnIdentifier,\n\t\trelationWhere: Input.OptionalWhere,\n\t\ttargetEntity: Model.Entity,\n\t\tjoiningTable: Model.JoiningTable,\n\t\tfromSide: 'owning' | 'inverse',\n\t\tpath: Path,\n\t) {\n\t\tconst fromColumn = fromSide === 'owning' ? joiningTable.joiningColumn.columnName : joiningTable.inverseJoiningColumn.columnName\n\t\tconst toColumn = fromSide === 'owning' ? joiningTable.inverseJoiningColumn.columnName : joiningTable.joiningColumn.columnName\n\t\tconst junctionPath = path.for('junction_')\n\t\tconst qb = SelectBuilder.create<SelectBuilder.Result>()\n\t\t\t.from(joiningTable.tableName, junctionPath.alias)\n\t\t\t.select(it => it.raw('1'))\n\t\t\t.where(it => it.columnsEq(outerColumn, [junctionPath.alias, fromColumn]))\n\n\t\tconst primaryCondition = this.transformWhereToPrimaryCondition(relationWhere, targetEntity.primary)\n\t\tif (primaryCondition !== null) {\n\n\t\t\tconst columnType = (targetEntity.fields[targetEntity.primary] as Model.AnyColumn).columnType\n\n\t\t\treturn qb.where(condition =>\n\t\t\t\tthis.conditionBuilder.build(condition, junctionPath.alias, toColumn, columnType, primaryCondition),\n\t\t\t)\n\t\t}\n\n\t\tconst qbJoined = qb.join(targetEntity.tableName, path.alias, clause =>\n\t\t\tclause.compareColumns([junctionPath.alias, toColumn], Operator.eq, [path.alias, targetEntity.primary]),\n\t\t)\n\t\treturn this.buildInternal({\n\t\t\tentity: targetEntity,\n\t\t\tpath: this.pathFactory.create([], path.fullAlias),\n\t\t\twhere: relationWhere,\n\t\t\tcallback: cb => qbJoined.where(clause => cb(clause)),\n\t\t\tallowManyJoin: true,\n\t\t})\n\t}\n\n\tprivate transformWhereToPrimaryCondition(where: Input.OptionalWhere, primaryField: string): Input.Condition<never> | null {\n\t\tconst keys = Object.keys(where)\n\t\tif (keys.filter(it => !['and', 'or', 'not', primaryField].includes(it)).length > 0) {\n\t\t\treturn null\n\t\t}\n\t\tlet condition: {\n\t\t\tand?: Array<Input.Condition<never>>\n\t\t\tor?: Array<Input.Condition<never>>\n\t\t\tnot?: Input.Condition<never>\n\t\t} = {}\n\t\tif (where.and) {\n\t\t\tconst conditions = where.and\n\t\t\t\t.filter((it): it is Input.Where => !!it)\n\t\t\t\t.map(it => this.transformWhereToPrimaryCondition(it, primaryField))\n\t\t\tif (conditions.includes(null)) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tcondition.and = conditions as Input.Condition<never>[]\n\t\t}\n\t\tif (where.or) {\n\t\t\tconst conditions = where.or\n\t\t\t\t.filter((it): it is Input.Where => !!it)\n\t\t\t\t.map(it => this.transformWhereToPrimaryCondition(it, primaryField))\n\t\t\tif (conditions.includes(null)) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tcondition.or = conditions as Input.Condition<never>[]\n\t\t}\n\t\tif (where.not) {\n\t\t\tconst conditions = this.transformWhereToPrimaryCondition(where.not, primaryField)\n\t\t\tif (conditions === null) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tcondition.not = conditions as Input.Condition<never>\n\t\t}\n\t\tif (where[primaryField]) {\n\t\t\tif (Object.keys(condition).length > 0) {\n\t\t\t\treturn { and: [condition, where[primaryField] as Input.Condition<never>] }\n\t\t\t}\n\t\t\treturn where[primaryField] as Input.Condition<never>\n\t\t}\n\t\treturn condition\n\t}\n\n\tprivate hasRootIsNull(where: Input.OptionalWhere, entity: Model.Entity): boolean {\n\t\tfor (const key in where) {\n\t\t\tif (key === 'and' || key === 'or') {\n\t\t\t\tif (where[key]?.some(it => it && this.hasRootIsNull(it, entity))) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t} else if (key === 'not') {\n\t\t\t\tif (where.not && this.hasRootIsNull(where.not, entity)) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t} else if (isColumn(entity.fields[key]) && this.conditionHasIsNull(where[key] as Input.Condition)) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t\treturn false\n\t}\n\n\tprivate conditionHasIsNull(cond: Input.Condition): boolean {\n\t\tif (cond.isNull !== undefined) {\n\t\t\treturn true\n\t\t}\n\t\tif (cond.and && cond.and.some(it => this.conditionHasIsNull(it))) {\n\t\t\treturn true\n\t\t}\n\t\tif (cond.or && cond.or.some(it => this.conditionHasIsNull(it))) {\n\t\t\treturn true\n\t\t}\n\t\tif (cond.not && this.conditionHasIsNull(cond.not)) {\n\t\t\treturn true\n\t\t}\n\t\treturn false\n\t}\n}\n\nexport type WhereJoinDefinition = { path: Path; entity: Model.Entity; relationName: string }\n"],"names":["where","entity"],"mappings":";;;AAeO,MAAM,aAAa;AAAA,EACzB,YACkB,QACA,aACA,kBACA,aACA,gBACA,0BAChB;AANgB,SAAA,SAAA;AACA,SAAA,cAAA;AACA,SAAA,mBAAA;AACA,SAAA,cAAA;AACA,SAAA,iBAAA;AACA,SAAA,2BAAA;AAAA,EAAA;AAAA,EAGX,MACN,IACA,QACA,MACA,OACA,oBAA4C,IACzB;AACnB,UAAM,iBAAiB,KAAK,eAAe,SAAS,OAAO,QAAQ,iBAAiB;AACpF,WAAO,KAAK,cAAc;AAAA,MACzB;AAAA,MACA;AAAA,MACA,OAAO;AAAA,MACP,UAAU,CAAM,OAAA,GAAG,MAAM,CAAU,WAAA,GAAG,MAAM,CAAC;AAAA,MAC7C,eAAe;AAAA,IAAA,CACf;AAAA,EAAA;AAAA,EAIK,cACN,QACA,MACA,OACA,UACA,oBAA4C,IACzB;AACnB,UAAM,iBAAiB,KAAK,eAAe,SAAS,OAAO,QAAQ,iBAAiB;AACpF,WAAO,KAAK,cAAc;AAAA,MACzB;AAAA,MACA;AAAA,MACA,OAAO;AAAA,MACP;AAAA,MACA,eAAe;AAAA,IAAA,CACf;AAAA,EAAA;AAAA,EAGM,cAA8C;AAAA,IACrD;AAAA,IACA,GAAG;AAAA,EAAA,GAEgB;AACnB,UAAM,WAAkC,CAAC;AAEzC,UAAM,cAAc,SAAS,CAAU,WAAA,KAAK,eAAe;AAAA,MAC1D,kBAAkB;AAAA,MAClB;AAAA,MACA,GAAG;AAAA,IAAA,CACH,CAAC;AACF,WAAO,SAAS;AAAA,MACf,CAAC,IAAI,EAAE,MAAM,QAAQ,aAAA,MAAmB,KAAK,YAAY,KAAQ,IAAI,MAAM,QAAQ,YAAY;AAAA,MAC/F;AAAA,IACD;AAAA,EAAA;AAAA,EAGO,eAAe;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,GAEsB;AACtB,UAAM,YAAY,KAAK;AAEnB,QAAA,MAAM,QAAQ,UAAa,MAAM,QAAQ,QAAQ,MAAM,IAAI,SAAS,GAAG;AAC1E,YAAM,OAAO,MAAM;AACnB,yBAAmB,iBAAiB;AAAA,QAAI,YACvC,KAAK;AAAA,UACJ,CAAC,SAASA,WACT,CAACA,SAAQ,UAAU,KAAK,eAAe;AAAA,YACtC,kBAAkB;AAAA,YAClB;AAAA,YACA;AAAA,YACA,OAAAA;AAAAA,YACA;AAAA,YACA;AAAA,UAAA,CACA;AAAA,UACF;AAAA,QAAA;AAAA,MAEF;AAAA,IAAA;AAEG,QAAA,MAAM,OAAO,UAAa,MAAM,OAAO,QAAQ,MAAM,GAAG,SAAS,GAAG;AACvE,YAAM,OAAO,MAAM;AACnB,yBAAmB,iBAAiB;AAAA,QAAG,YACtC,KAAK;AAAA,UACJ,CAAC,SAASA,WACT,CAACA,SACE,UACA,QAAQ,IAAI,CAAW,YAAA,KAAK,eAAe;AAAA,YAC5C,kBAAkB;AAAA,YAClB;AAAA,YACA;AAAA,YACA,OAAAA;AAAAA,YACA;AAAA,YACA;AAAA,UAAA,CACA,CAAC;AAAA,UACJ;AAAA,QAAA;AAAA,MAEF;AAAA,IAAA;AAED,QAAI,MAAM,QAAQ,UAAa,MAAM,QAAQ,MAAM;AAClD,YAAM,OAAO,MAAM;AACnB,yBAAmB,iBAAiB;AAAA,QAAI,CAAA,WACvC,KAAK,eAAe;AAAA,UACnB,kBAAkB;AAAA,UAClB;AAAA,UACA;AAAA,UACA,OAAO;AAAA,UACP;AAAA,UACA;AAAA,QACA,CAAA;AAAA,MACF;AAAA,IAAA;AAGD,eAAW,aAAa,OAAO;AAC9B,UAAI,cAAc,SAAS,cAAc,QAAQ,cAAc,OAAO;AACrE;AAAA,MAAA;AAEK,YAAA,aAAa,MAAM,SAAS;AAClC,UAAI,CAAC,YAAY;AAChB;AAAA,MAAA;AAGK,YAAA,aAAa,KAAK,IAAI,SAAS;AAErC,YAAM,cAAc,CAAC,EAAE,cAAc,UAAU,QAAAC,cAA4D;AACpG,cAAA,gBAAgB,MAAM,SAAS;AACrC,YAAI,CAAC,iBAAiB,OAAO,KAAK,aAAa,EAAE,WAAW,GAAG;AACvD,iBAAA;AAAA,QAAA;AAEJ,YAAA,KAAkC,UAAU,eAAe,GAAG;AACjE,gBAAM,mBAAmB,KAAK,iCAAiC,eAAe,aAAa,OAAO;AAClG,cAAI,qBAAqB,MAAM;AAC9B,mBAAO,KAAK,iBAAiB;AAAA,cAC5B;AAAA,cACA;AAAA,cACA,SAAS,cAAc;AAAA,cACtB,aAAa,OAAO,aAAa,OAAO,EAAsB;AAAA,cAC/D;AAAA,YACD;AAAA,UAAA;AAAA,QACD;AAGQ,iBAAA,KAAK,EAAE,MAAM,YAAY,QAAAA,SAAQ,cAAc,SAAS,MAAM;AAEvE,eAAO,KAAK,eAAe;AAAA,UAC1B;AAAA,UACA,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,OAAO;AAAA,UACP;AAAA,UACA;AAAA,QAAA,CACA;AAAA,MACF;AAIA,yBAAmB,mBAAwC,KAAK,QAAQ,QAAQ,WAAW;AAAA,QAC1F,aAAa,CAAC,EAAE,QAAAA,SAAQ,aAAa;AAC7B,iBAAA,KAAK,iBAAiB,MAAM,kBAAkB,WAAW,OAAO,YAAY,OAAO,YAAY,UAAgD;AAAA,QACvJ;AAAA,QACA,uBAAuB;AAAA,QACvB,sBAAsB;AAAA,QACtB,iBAAiB;AAAA,QACjB,yBAAyB,CAAW,YAAA;AAC/B,cAAA,iBAAiB,CAAC,KAAK,0BAA0B;AACpD,mBAAO,YAAY,OAAO;AAAA,UAAA;AAG3B,iBAAO,iBAAiB;AAAA,YACvB,KAAK;AAAA,cACJ,CAAC,WAAW,OAAO,aAAa;AAAA,cAChC;AAAA,cACA,QAAQ;AAAA,cACR,QAAQ,eAAe;AAAA,cACvB;AAAA,cACA;AAAA,YAAA;AAAA,UAEF;AAAA,QACD;AAAA,QACA,wBAAwB,CAAW,YAAA;AAC9B,cAAA,iBAAiB,CAAC,KAAK,0BAA0B;AACpD,mBAAO,YAAY,OAAO;AAAA,UAAA;AAGL,gBAAM,SAAS;AAErC,iBAAO,iBAAiB;AAAA,YACvB,KAAK;AAAA,cACJ,CAAC,WAAW,OAAO,aAAa;AAAA,cAChC;AAAA,cACA,QAAQ;AAAA,cACR,QAAQ,SAAS;AAAA,cACjB;AAAA,cACA;AAAA,YAAA;AAAA,UAEF;AAAA,QACD;AAAA,QACA,iBAAiB,CAAW,YAAA;AACvB,cAAA,iBAAiB,CAAC,KAAK,0BAA0B;AACpD,mBAAO,YAAY,OAAO;AAAA,UAAA;AAG3B,gBAAM,gBAAgB;AAEtB,gBAAM,KAAK,KAAK,cAAc,eAAe,QAAQ,YAAY,IAC9D,cAAc,OAAO,EACrB,OAAO,CAAM,OAAA,GAAG,IAAI,GAAG,CAAC,EACxB,KAAK,IAAI,QAAQ,WAAW,eAAe,SAAS,CAAC,IAAI,eAAe,OAAO,aAAa,CAAC,GAAG,GAAG,WAAW,IAAI,MAAM,EAAE,KAAK,EAC/H;AAAA,YAAS,QAAQ,aAAa;AAAA,YAAW,WAAW;AAAA,YAAO,QAC3D,GAAG,UAAU,CAAC,WAAW,IAAI,MAAM,EAAE,OAAO,OAAO,aAAa,GAAG,CAAC,WAAW,OAAO,QAAQ,eAAe,cAAc,UAAU,CAAC;AAAA,UAAA,IAEtI,cAAc,OAAO,EACrB,OAAO,CAAM,OAAA,GAAG,IAAI,GAAG,CAAC,EACxB,KAAK,QAAQ,aAAa,WAAW,WAAW,KAAK,EACrD,MAAM,QAAM,GAAG,UAAU,CAAC,WAAW,OAAO,aAAa,GAAG,CAAC,WAAW,OAAO,QAAQ,eAAe,cAAc,UAAU,CAAC,CAAC;AAEnI,iBAAO,iBAAiB;AAAA,YACvB,KAAK,cAAc;AAAA,cAClB,QAAQ,QAAQ;AAAA,cAChB,MAAM;AAAA,cACN,OAAO;AAAA,cACP,UAAU,CAAM,OAAA,GAAG,MAAM,CAAU,WAAA,GAAG,MAAM,CAAC;AAAA,cAC7C,eAAe;AAAA,YACf,CAAA;AAAA,UACF;AAAA,QAAA;AAAA,MACD,CACA;AAAA,IAAA;AAEK,WAAA;AAAA,EAAA;AAAA,EAIA,0BACP,aACA,eACA,cACA,cACA,UACA,MACC;AACD,UAAM,aAAa,aAAa,WAAW,aAAa,cAAc,aAAa,aAAa,qBAAqB;AACrH,UAAM,WAAW,aAAa,WAAW,aAAa,qBAAqB,aAAa,aAAa,cAAc;AAC7G,UAAA,eAAe,KAAK,IAAI,WAAW;AACnC,UAAA,KAAK,cAAc,OAAA,EACvB,KAAK,aAAa,WAAW,aAAa,KAAK,EAC/C,OAAO,CAAM,OAAA,GAAG,IAAI,GAAG,CAAC,EACxB,MAAM,CAAA,OAAM,GAAG,UAAU,aAAa,CAAC,aAAa,OAAO,UAAU,CAAC,CAAC;AAEzE,UAAM,mBAAmB,KAAK,iCAAiC,eAAe,aAAa,OAAO;AAClG,QAAI,qBAAqB,MAAM;AAE9B,YAAM,aAAc,aAAa,OAAO,aAAa,OAAO,EAAsB;AAElF,aAAO,GAAG;AAAA,QAAM,CAAA,cACf,KAAK,iBAAiB,MAAM,WAAW,aAAa,OAAO,UAAU,YAAY,gBAAgB;AAAA,MAClG;AAAA,IAAA;AAGD,UAAM,WAAW,GAAG;AAAA,MAAK,aAAa;AAAA,MAAW,KAAK;AAAA,MAAO,CAC5D,WAAA,OAAO,eAAe,CAAC,aAAa,OAAO,QAAQ,GAAG,SAAS,IAAI,CAAC,KAAK,OAAO,aAAa,OAAO,CAAC;AAAA,IACtG;AACA,WAAO,KAAK,cAAc;AAAA,MACzB,QAAQ;AAAA,MACR,MAAM,KAAK,YAAY,OAAO,CAAC,GAAG,KAAK,SAAS;AAAA,MAChD,OAAO;AAAA,MACP,UAAU,CAAM,OAAA,SAAS,MAAM,CAAU,WAAA,GAAG,MAAM,CAAC;AAAA,MACnD,eAAe;AAAA,IAAA,CACf;AAAA,EAAA;AAAA,EAGM,iCAAiC,OAA4B,cAAqD;AACnH,UAAA,OAAO,OAAO,KAAK,KAAK;AAC9B,QAAI,KAAK,OAAO,CAAM,OAAA,CAAC,CAAC,OAAO,MAAM,OAAO,YAAY,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,GAAG;AAC5E,aAAA;AAAA,IAAA;AAER,QAAI,YAIA,CAAC;AACL,QAAI,MAAM,KAAK;AACd,YAAM,aAAa,MAAM,IACvB,OAAO,CAAC,OAA0B,CAAC,CAAC,EAAE,EACtC,IAAI,CAAM,OAAA,KAAK,iCAAiC,IAAI,YAAY,CAAC;AAC/D,UAAA,WAAW,SAAS,IAAI,GAAG;AACvB,eAAA;AAAA,MAAA;AAER,gBAAU,MAAM;AAAA,IAAA;AAEjB,QAAI,MAAM,IAAI;AACb,YAAM,aAAa,MAAM,GACvB,OAAO,CAAC,OAA0B,CAAC,CAAC,EAAE,EACtC,IAAI,CAAM,OAAA,KAAK,iCAAiC,IAAI,YAAY,CAAC;AAC/D,UAAA,WAAW,SAAS,IAAI,GAAG;AACvB,eAAA;AAAA,MAAA;AAER,gBAAU,KAAK;AAAA,IAAA;AAEhB,QAAI,MAAM,KAAK;AACd,YAAM,aAAa,KAAK,iCAAiC,MAAM,KAAK,YAAY;AAChF,UAAI,eAAe,MAAM;AACjB,eAAA;AAAA,MAAA;AAER,gBAAU,MAAM;AAAA,IAAA;AAEb,QAAA,MAAM,YAAY,GAAG;AACxB,UAAI,OAAO,KAAK,SAAS,EAAE,SAAS,GAAG;AACtC,eAAO,EAAE,KAAK,CAAC,WAAW,MAAM,YAAY,CAA2B,EAAE;AAAA,MAAA;AAE1E,aAAO,MAAM,YAAY;AAAA,IAAA;AAEnB,WAAA;AAAA,EAAA;AAAA,EAGA,cAAc,OAA4B,QAA+B;AAChF,eAAW,OAAO,OAAO;AACpB,UAAA,QAAQ,SAAS,QAAQ,MAAM;AAC9B,YAAA,MAAM,GAAG,GAAG,KAAK,CAAA,OAAM,MAAM,KAAK,cAAc,IAAI,MAAM,CAAC,GAAG;AAC1D,iBAAA;AAAA,QAAA;AAAA,MACR,WACU,QAAQ,OAAO;AACzB,YAAI,MAAM,OAAO,KAAK,cAAc,MAAM,KAAK,MAAM,GAAG;AAChD,iBAAA;AAAA,QAAA;AAAA,MAEE,WAAA,SAAS,OAAO,OAAO,GAAG,CAAC,KAAK,KAAK,mBAAmB,MAAM,GAAG,CAAoB,GAAG;AAC3F,eAAA;AAAA,MAAA;AAAA,IACR;AAEM,WAAA;AAAA,EAAA;AAAA,EAGA,mBAAmB,MAAgC;AACtD,QAAA,KAAK,WAAW,QAAW;AACvB,aAAA;AAAA,IAAA;AAEJ,QAAA,KAAK,OAAO,KAAK,IAAI,KAAK,QAAM,KAAK,mBAAmB,EAAE,CAAC,GAAG;AAC1D,aAAA;AAAA,IAAA;AAEJ,QAAA,KAAK,MAAM,KAAK,GAAG,KAAK,QAAM,KAAK,mBAAmB,EAAE,CAAC,GAAG;AACxD,aAAA;AAAA,IAAA;AAER,QAAI,KAAK,OAAO,KAAK,mBAAmB,KAAK,GAAG,GAAG;AAC3C,aAAA;AAAA,IAAA;AAED,WAAA;AAAA,EAAA;AAET;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FieldsVisitor.cjs","sources":["../../../../../../../packages/engine-content-api/src/mapper/select/handlers/FieldsVisitor.ts"],"sourcesContent":["import { Acl, Input, Model, Settings } from '@contember/schema'\nimport { Mapper } from '../../Mapper'\nimport { RelationFetcher } from '../RelationFetcher'\nimport { SelectExecutionHandlerContext } from '../SelectExecutionHandler'\nimport { PredicateFactory } from '../../../acl'\nimport { Literal, wrapIdentifier } from '@contember/database'\n\nexport class FieldsVisitor implements Model.RelationByTypeVisitor<void>, Model.ColumnVisitor<void> {\n\tconstructor(\n\t\tprivate readonly relationFetcher: RelationFetcher,\n\t\tprivate readonly predicateFactory: PredicateFactory,\n\t\tprivate readonly mapper: Mapper,\n\t\tprivate readonly executionContext: SelectExecutionHandlerContext,\n\t\tprivate readonly relationPath: Model.AnyRelationContext[],\n\t\tprivate readonly settings: Settings.ContentSettings,\n\t) {}\n\n\tvisitColumn({ entity, column }: Model.ColumnContext): void {\n\t\tconst columnPath = this.executionContext.path\n\t\tconst tableAlias = columnPath.back().alias\n\t\tconst columnAlias = columnPath.alias\n\n\t\tlet selectFrom = wrapIdentifier(tableAlias) + '.' + wrapIdentifier(column.columnName)\n\t\tif (column.type === Model.ColumnType.Date && this.settings.shortDateResponse) {\n\t\t\tselectFrom += '::text'\n\t\t}\n\t\tif (column.type === Model.ColumnType.DateTime && this.settings.fullDateTimeResponse) {\n\t\t\tselectFrom += '::text'\n\t\t}\n\n\t\tthis.executionContext.addColumn({\n\t\t\tquery: qb => qb.select(new Literal(selectFrom), columnAlias),\n\t\t\tpredicate: this.getRequiredPredicate(entity, column),\n\t\t})\n\t}\n\n\tpublic visitManyHasManyInverse(relationContext: Model.ManyHasManyInverseContext): void {\n\t\tconst field = this.executionContext.objectNode\n\t\tif (!field) {\n\t\t\tthrow new Error()\n\t\t}\n\t\tthis.executionContext.addData({\n\t\t\tfield: relationContext.entity.primary,\n\t\t\tdataProvider: async ids =>\n\t\t\t\tthis.relationFetcher.fetchManyHasManyGroups({\n\t\t\t\t\tmapper: this.mapper,\n\t\t\t\t\tfield: field,\n\t\t\t\t\trelationContext,\n\t\t\t\t\trelationPath: this.relationPath,\n\t\t\t\t\tids: ids,\n\t\t\t\t}),\n\t\t\tdefaultValue: [],\n\t\t\tpredicate: this.getRequiredPredicate(relationContext.entity, relationContext.relation),\n\t\t})\n\t}\n\n\tpublic visitManyHasManyOwning(relationContext: Model.ManyHasManyOwningContext): void {\n\t\tconst field = this.executionContext.objectNode\n\t\tif (!field) {\n\t\t\tthrow new Error()\n\t\t}\n\n\t\tthis.executionContext.addData({\n\t\t\tfield: relationContext.entity.primary,\n\t\t\tdataProvider: async ids =>\n\t\t\t\tthis.relationFetcher.fetchManyHasManyGroups({\n\t\t\t\t\tmapper: this.mapper,\n\t\t\t\t\tfield: field,\n\t\t\t\t\trelationContext,\n\t\t\t\t\trelationPath: this.relationPath,\n\t\t\t\t\tids: ids,\n\t\t\t\t}),\n\t\t\tdefaultValue: [],\n\t\t\tpredicate: this.getRequiredPredicate(relationContext.entity, relationContext.relation),\n\t\t})\n\t}\n\n\tpublic visitOneHasMany(relationContext: Model.OneHasManyContext): void {\n\t\tconst field = this.executionContext.objectNode\n\t\tif (!field) {\n\t\t\tthrow new Error()\n\t\t}\n\n\t\tthis.executionContext.addData({\n\t\t\tfield: relationContext.entity.primary,\n\t\t\tdataProvider: async ids =>\n\t\t\t\tthis.relationFetcher.fetchOneHasManyGroups({\n\t\t\t\t\tmapper: this.mapper,\n\t\t\t\t\tobjectNode: field,\n\t\t\t\t\trelationContext,\n\t\t\t\t\trelationPath: this.relationPath,\n\t\t\t\t\tids: ids,\n\t\t\t\t}),\n\t\t\tdefaultValue: [],\n\t\t\tpredicate: this.getRequiredPredicate(relationContext.entity, relationContext.relation),\n\t\t})\n\t}\n\n\tpublic visitOneHasOneInverse(relationContext: Model.OneHasOneInverseContext): void {\n\t\tconst { entity, targetRelation, targetEntity } = relationContext\n\t\tthis.executionContext.addData({\n\t\t\tfield: entity.primary,\n\t\t\tdataProvider: async ids => {\n\t\t\t\tconst idsWhere: Input.Where = {\n\t\t\t\t\t[targetRelation.name]: {\n\t\t\t\t\t\t[entity.primary]: {\n\t\t\t\t\t\t\tin: ids,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tconst field = this.executionContext.objectNode\n\t\t\t\tif (!field) {\n\t\t\t\t\tthrow new Error()\n\t\t\t\t}\n\t\t\t\tconst where: Input.Where = {\n\t\t\t\t\tand: [idsWhere, field.args.filter].filter((it): it is Input.Where => it !== undefined),\n\t\t\t\t}\n\t\t\t\tconst objectWithWhere = field.withArg('filter', where)\n\n\t\t\t\treturn this.mapper.selectAssoc(targetEntity, objectWithWhere, [\n\t\t\t\t\t...this.relationPath,\n\t\t\t\t\trelationContext,\n\t\t\t\t], targetRelation.name)\n\t\t\t},\n\t\t\tdefaultValue: null,\n\t\t\tpredicate: this.getRequiredPredicate(relationContext.entity, relationContext.relation),\n\t\t})\n\t}\n\n\tpublic visitOneHasOneOwning(relationContext: Model.OneHasOneOwningContext): void {\n\t\tconst { relation, targetEntity } = relationContext\n\t\tthis.executionContext.addData({\n\t\t\tfield: relation.name,\n\t\t\tdataProvider: async ids => {\n\t\t\t\tconst idsWhere: Input.Where = {\n\t\t\t\t\t[targetEntity.primary]: {\n\t\t\t\t\t\tin: ids,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tconst objectNode = this.executionContext.objectNode\n\t\t\t\tif (!objectNode) {\n\t\t\t\t\tthrow new Error()\n\t\t\t\t}\n\t\t\t\tconst where: Input.Where = {\n\t\t\t\t\tand: [idsWhere, objectNode.args.filter].filter((it): it is Input.Where => it !== undefined),\n\t\t\t\t}\n\t\t\t\tconst objectWithWhere = objectNode.withArg('filter', where)\n\n\t\t\t\treturn this.mapper.selectAssoc(targetEntity, objectWithWhere, [\n\t\t\t\t\t...this.relationPath,\n\t\t\t\t\trelationContext,\n\t\t\t\t], targetEntity.primary)\n\t\t\t},\n\t\t\tdefaultValue: null,\n\t\t\tpredicate: this.getRequiredPredicate(relationContext.entity, relationContext.relation),\n\t\t})\n\t}\n\n\tpublic visitManyHasOne(relationContext: Model.ManyHasOneContext): void {\n\t\tconst { relation, targetEntity } = relationContext\n\t\tthis.executionContext.addData({\n\t\t\tfield: relation.name,\n\t\t\tdataProvider: async ids => {\n\t\t\t\tconst idsWhere: Input.Where = {\n\t\t\t\t\t[targetEntity.primary]: {\n\t\t\t\t\t\tin: ids,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tconst objectNode = this.executionContext.objectNode\n\t\t\t\tif (!objectNode) {\n\t\t\t\t\tthrow new Error()\n\t\t\t\t}\n\t\t\t\tconst where: Input.Where = {\n\t\t\t\t\tand: [idsWhere, objectNode.args.filter].filter((it): it is Input.Where => it !== undefined),\n\t\t\t\t}\n\t\t\t\tconst objectWithWhere = objectNode.withArg('filter', where)\n\n\t\t\t\treturn this.mapper.selectAssoc(targetEntity, objectWithWhere, [\n\t\t\t\t\t...this.relationPath,\n\t\t\t\t\trelationContext,\n\t\t\t\t], targetEntity.primary)\n\t\t\t},\n\t\t\tdefaultValue: null,\n\t\t\tpredicate: this.getRequiredPredicate(relationContext.entity, relationContext.relation),\n\t\t})\n\t}\n\n\tprivate getRequiredPredicate(entity: Model.Entity, field: Model.AnyField): Acl.Predicate | undefined {\n\t\tconst fieldPredicate = this.predicateFactory.getFieldPredicate(entity, Acl.Operation.read, field.name)\n\t\treturn fieldPredicate.isSameAsPrimary ? undefined : fieldPredicate.predicate\n\t}\n}\n"],"names":["wrapIdentifier","Model","Literal","Acl"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FieldsVisitor.cjs","sources":["../../../../../../../packages/engine-content-api/src/mapper/select/handlers/FieldsVisitor.ts"],"sourcesContent":["import { Acl, Input, Model, Settings } from '@contember/schema'\nimport { Mapper } from '../../Mapper'\nimport { RelationFetcher } from '../RelationFetcher'\nimport { SelectExecutionHandlerContext } from '../SelectExecutionHandler'\nimport { PredicateFactory } from '../../../acl'\nimport { Literal, wrapIdentifier } from '@contember/database'\n\nexport class FieldsVisitor implements Model.RelationByTypeVisitor<void>, Model.ColumnVisitor<void> {\n\tconstructor(\n\t\tprivate readonly relationFetcher: RelationFetcher,\n\t\tprivate readonly predicateFactory: PredicateFactory,\n\t\tprivate readonly mapper: Mapper,\n\t\tprivate readonly executionContext: SelectExecutionHandlerContext,\n\t\tprivate readonly relationPath: Model.AnyRelationContext[],\n\t\tprivate readonly settings: Settings.ContentSettings,\n\t) {}\n\n\tvisitColumn({ entity, column }: Model.ColumnContext): void {\n\t\tconst columnPath = this.executionContext.path\n\t\tconst tableAlias = columnPath.back().alias\n\t\tconst columnAlias = columnPath.alias\n\n\t\tlet selectFrom = wrapIdentifier(tableAlias) + '.' + wrapIdentifier(column.columnName)\n\t\tif (column.type === Model.ColumnType.Date && this.settings.shortDateResponse) {\n\t\t\tselectFrom += '::text'\n\t\t}\n\t\tif (column.type === Model.ColumnType.DateTime && this.settings.fullDateTimeResponse) {\n\t\t\tselectFrom += '::text'\n\t\t}\n\n\t\tthis.executionContext.addColumn({\n\t\t\tquery: qb => qb.select(new Literal(selectFrom), columnAlias),\n\t\t\tpredicate: this.getRequiredPredicate(entity, column),\n\t\t})\n\t}\n\n\tpublic visitManyHasManyInverse(relationContext: Model.ManyHasManyInverseContext): void {\n\t\tconst field = this.executionContext.objectNode\n\t\tif (!field) {\n\t\t\tthrow new Error()\n\t\t}\n\t\tthis.executionContext.addData({\n\t\t\tfield: relationContext.entity.primary,\n\t\t\tdataProvider: async ids =>\n\t\t\t\tthis.relationFetcher.fetchManyHasManyGroups({\n\t\t\t\t\tmapper: this.mapper,\n\t\t\t\t\tfield: field,\n\t\t\t\t\trelationContext,\n\t\t\t\t\trelationPath: this.relationPath,\n\t\t\t\t\tids: ids,\n\t\t\t\t}),\n\t\t\tdefaultValue: [],\n\t\t\tpredicate: this.getRequiredPredicate(relationContext.entity, relationContext.relation),\n\t\t})\n\t}\n\n\tpublic visitManyHasManyOwning(relationContext: Model.ManyHasManyOwningContext): void {\n\t\tconst field = this.executionContext.objectNode\n\t\tif (!field) {\n\t\t\tthrow new Error()\n\t\t}\n\n\t\tthis.executionContext.addData({\n\t\t\tfield: relationContext.entity.primary,\n\t\t\tdataProvider: async ids =>\n\t\t\t\tthis.relationFetcher.fetchManyHasManyGroups({\n\t\t\t\t\tmapper: this.mapper,\n\t\t\t\t\tfield: field,\n\t\t\t\t\trelationContext,\n\t\t\t\t\trelationPath: this.relationPath,\n\t\t\t\t\tids: ids,\n\t\t\t\t}),\n\t\t\tdefaultValue: [],\n\t\t\tpredicate: this.getRequiredPredicate(relationContext.entity, relationContext.relation),\n\t\t})\n\t}\n\n\tpublic visitOneHasMany(relationContext: Model.OneHasManyContext): void {\n\t\tconst field = this.executionContext.objectNode\n\t\tif (!field) {\n\t\t\tthrow new Error()\n\t\t}\n\n\t\tthis.executionContext.addData({\n\t\t\tfield: relationContext.entity.primary,\n\t\t\tdataProvider: async ids =>\n\t\t\t\tthis.relationFetcher.fetchOneHasManyGroups({\n\t\t\t\t\tmapper: this.mapper,\n\t\t\t\t\tobjectNode: field,\n\t\t\t\t\trelationContext,\n\t\t\t\t\trelationPath: this.relationPath,\n\t\t\t\t\tids: ids,\n\t\t\t\t}),\n\t\t\tdefaultValue: [],\n\t\t\tpredicate: this.getRequiredPredicate(relationContext.entity, relationContext.relation),\n\t\t})\n\t}\n\n\tpublic visitOneHasOneInverse(relationContext: Model.OneHasOneInverseContext): void {\n\t\tconst { entity, targetRelation, targetEntity } = relationContext\n\t\tthis.executionContext.addData({\n\t\t\tfield: entity.primary,\n\t\t\tdataProvider: async ids => {\n\t\t\t\tconst idsWhere: Input.Where = {\n\t\t\t\t\t[targetRelation.name]: {\n\t\t\t\t\t\t[entity.primary]: {\n\t\t\t\t\t\t\tin: ids,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tconst field = this.executionContext.objectNode\n\t\t\t\tif (!field) {\n\t\t\t\t\tthrow new Error()\n\t\t\t\t}\n\t\t\t\tconst where: Input.Where = {\n\t\t\t\t\tand: [idsWhere, field.args.filter].filter((it): it is Input.Where => it !== undefined),\n\t\t\t\t}\n\t\t\t\tconst objectWithWhere = field.withArg('filter', where)\n\n\t\t\t\treturn this.mapper.selectAssoc(targetEntity, objectWithWhere, [\n\t\t\t\t\t...this.relationPath,\n\t\t\t\t\trelationContext,\n\t\t\t\t], targetRelation.name)\n\t\t\t},\n\t\t\tdefaultValue: null,\n\t\t\tpredicate: this.getRequiredPredicate(relationContext.entity, relationContext.relation),\n\t\t})\n\t}\n\n\tpublic visitOneHasOneOwning(relationContext: Model.OneHasOneOwningContext): void {\n\t\tconst { relation, targetEntity } = relationContext\n\t\tthis.executionContext.addData({\n\t\t\tfield: relation.name,\n\t\t\tdataProvider: async ids => {\n\t\t\t\tconst idsWhere: Input.Where = {\n\t\t\t\t\t[targetEntity.primary]: {\n\t\t\t\t\t\tin: ids,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tconst objectNode = this.executionContext.objectNode\n\t\t\t\tif (!objectNode) {\n\t\t\t\t\tthrow new Error()\n\t\t\t\t}\n\t\t\t\tconst where: Input.Where = {\n\t\t\t\t\tand: [idsWhere, objectNode.args.filter].filter((it): it is Input.Where => it !== undefined),\n\t\t\t\t}\n\t\t\t\tconst objectWithWhere = objectNode.withArg('filter', where)\n\n\t\t\t\treturn this.mapper.selectAssoc(targetEntity, objectWithWhere, [\n\t\t\t\t\t...this.relationPath,\n\t\t\t\t\trelationContext,\n\t\t\t\t], targetEntity.primary)\n\t\t\t},\n\t\t\tdefaultValue: null,\n\t\t\tpredicate: this.getRequiredPredicate(relationContext.entity, relationContext.relation),\n\t\t})\n\t}\n\n\tpublic visitManyHasOne(relationContext: Model.ManyHasOneContext): void {\n\t\tconst { relation, targetEntity } = relationContext\n\t\tthis.executionContext.addData({\n\t\t\tfield: relation.name,\n\t\t\tdataProvider: async ids => {\n\t\t\t\tconst idsWhere: Input.Where = {\n\t\t\t\t\t[targetEntity.primary]: {\n\t\t\t\t\t\tin: ids,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tconst objectNode = this.executionContext.objectNode\n\t\t\t\tif (!objectNode) {\n\t\t\t\t\tthrow new Error()\n\t\t\t\t}\n\t\t\t\tconst where: Input.Where = {\n\t\t\t\t\tand: [idsWhere, objectNode.args.filter].filter((it): it is Input.Where => it !== undefined),\n\t\t\t\t}\n\t\t\t\tconst objectWithWhere = objectNode.withArg('filter', where)\n\n\t\t\t\treturn this.mapper.selectAssoc(targetEntity, objectWithWhere, [\n\t\t\t\t\t...this.relationPath,\n\t\t\t\t\trelationContext,\n\t\t\t\t], targetEntity.primary)\n\t\t\t},\n\t\t\tdefaultValue: null,\n\t\t\tpredicate: this.getRequiredPredicate(relationContext.entity, relationContext.relation),\n\t\t})\n\t}\n\n\tprivate getRequiredPredicate(entity: Model.Entity, field: Model.AnyField): Acl.Predicate | undefined {\n\t\tconst fieldPredicate = this.predicateFactory.getFieldPredicate(entity, Acl.Operation.read, field.name)\n\t\treturn fieldPredicate.isSameAsPrimary ? undefined : fieldPredicate.predicate\n\t}\n}\n"],"names":["wrapIdentifier","Model","Literal","Acl"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FieldsVisitor.js","sources":["../../../../../../../packages/engine-content-api/src/mapper/select/handlers/FieldsVisitor.ts"],"sourcesContent":["import { Acl, Input, Model, Settings } from '@contember/schema'\nimport { Mapper } from '../../Mapper'\nimport { RelationFetcher } from '../RelationFetcher'\nimport { SelectExecutionHandlerContext } from '../SelectExecutionHandler'\nimport { PredicateFactory } from '../../../acl'\nimport { Literal, wrapIdentifier } from '@contember/database'\n\nexport class FieldsVisitor implements Model.RelationByTypeVisitor<void>, Model.ColumnVisitor<void> {\n\tconstructor(\n\t\tprivate readonly relationFetcher: RelationFetcher,\n\t\tprivate readonly predicateFactory: PredicateFactory,\n\t\tprivate readonly mapper: Mapper,\n\t\tprivate readonly executionContext: SelectExecutionHandlerContext,\n\t\tprivate readonly relationPath: Model.AnyRelationContext[],\n\t\tprivate readonly settings: Settings.ContentSettings,\n\t) {}\n\n\tvisitColumn({ entity, column }: Model.ColumnContext): void {\n\t\tconst columnPath = this.executionContext.path\n\t\tconst tableAlias = columnPath.back().alias\n\t\tconst columnAlias = columnPath.alias\n\n\t\tlet selectFrom = wrapIdentifier(tableAlias) + '.' + wrapIdentifier(column.columnName)\n\t\tif (column.type === Model.ColumnType.Date && this.settings.shortDateResponse) {\n\t\t\tselectFrom += '::text'\n\t\t}\n\t\tif (column.type === Model.ColumnType.DateTime && this.settings.fullDateTimeResponse) {\n\t\t\tselectFrom += '::text'\n\t\t}\n\n\t\tthis.executionContext.addColumn({\n\t\t\tquery: qb => qb.select(new Literal(selectFrom), columnAlias),\n\t\t\tpredicate: this.getRequiredPredicate(entity, column),\n\t\t})\n\t}\n\n\tpublic visitManyHasManyInverse(relationContext: Model.ManyHasManyInverseContext): void {\n\t\tconst field = this.executionContext.objectNode\n\t\tif (!field) {\n\t\t\tthrow new Error()\n\t\t}\n\t\tthis.executionContext.addData({\n\t\t\tfield: relationContext.entity.primary,\n\t\t\tdataProvider: async ids =>\n\t\t\t\tthis.relationFetcher.fetchManyHasManyGroups({\n\t\t\t\t\tmapper: this.mapper,\n\t\t\t\t\tfield: field,\n\t\t\t\t\trelationContext,\n\t\t\t\t\trelationPath: this.relationPath,\n\t\t\t\t\tids: ids,\n\t\t\t\t}),\n\t\t\tdefaultValue: [],\n\t\t\tpredicate: this.getRequiredPredicate(relationContext.entity, relationContext.relation),\n\t\t})\n\t}\n\n\tpublic visitManyHasManyOwning(relationContext: Model.ManyHasManyOwningContext): void {\n\t\tconst field = this.executionContext.objectNode\n\t\tif (!field) {\n\t\t\tthrow new Error()\n\t\t}\n\n\t\tthis.executionContext.addData({\n\t\t\tfield: relationContext.entity.primary,\n\t\t\tdataProvider: async ids =>\n\t\t\t\tthis.relationFetcher.fetchManyHasManyGroups({\n\t\t\t\t\tmapper: this.mapper,\n\t\t\t\t\tfield: field,\n\t\t\t\t\trelationContext,\n\t\t\t\t\trelationPath: this.relationPath,\n\t\t\t\t\tids: ids,\n\t\t\t\t}),\n\t\t\tdefaultValue: [],\n\t\t\tpredicate: this.getRequiredPredicate(relationContext.entity, relationContext.relation),\n\t\t})\n\t}\n\n\tpublic visitOneHasMany(relationContext: Model.OneHasManyContext): void {\n\t\tconst field = this.executionContext.objectNode\n\t\tif (!field) {\n\t\t\tthrow new Error()\n\t\t}\n\n\t\tthis.executionContext.addData({\n\t\t\tfield: relationContext.entity.primary,\n\t\t\tdataProvider: async ids =>\n\t\t\t\tthis.relationFetcher.fetchOneHasManyGroups({\n\t\t\t\t\tmapper: this.mapper,\n\t\t\t\t\tobjectNode: field,\n\t\t\t\t\trelationContext,\n\t\t\t\t\trelationPath: this.relationPath,\n\t\t\t\t\tids: ids,\n\t\t\t\t}),\n\t\t\tdefaultValue: [],\n\t\t\tpredicate: this.getRequiredPredicate(relationContext.entity, relationContext.relation),\n\t\t})\n\t}\n\n\tpublic visitOneHasOneInverse(relationContext: Model.OneHasOneInverseContext): void {\n\t\tconst { entity, targetRelation, targetEntity } = relationContext\n\t\tthis.executionContext.addData({\n\t\t\tfield: entity.primary,\n\t\t\tdataProvider: async ids => {\n\t\t\t\tconst idsWhere: Input.Where = {\n\t\t\t\t\t[targetRelation.name]: {\n\t\t\t\t\t\t[entity.primary]: {\n\t\t\t\t\t\t\tin: ids,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tconst field = this.executionContext.objectNode\n\t\t\t\tif (!field) {\n\t\t\t\t\tthrow new Error()\n\t\t\t\t}\n\t\t\t\tconst where: Input.Where = {\n\t\t\t\t\tand: [idsWhere, field.args.filter].filter((it): it is Input.Where => it !== undefined),\n\t\t\t\t}\n\t\t\t\tconst objectWithWhere = field.withArg('filter', where)\n\n\t\t\t\treturn this.mapper.selectAssoc(targetEntity, objectWithWhere, [\n\t\t\t\t\t...this.relationPath,\n\t\t\t\t\trelationContext,\n\t\t\t\t], targetRelation.name)\n\t\t\t},\n\t\t\tdefaultValue: null,\n\t\t\tpredicate: this.getRequiredPredicate(relationContext.entity, relationContext.relation),\n\t\t})\n\t}\n\n\tpublic visitOneHasOneOwning(relationContext: Model.OneHasOneOwningContext): void {\n\t\tconst { relation, targetEntity } = relationContext\n\t\tthis.executionContext.addData({\n\t\t\tfield: relation.name,\n\t\t\tdataProvider: async ids => {\n\t\t\t\tconst idsWhere: Input.Where = {\n\t\t\t\t\t[targetEntity.primary]: {\n\t\t\t\t\t\tin: ids,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tconst objectNode = this.executionContext.objectNode\n\t\t\t\tif (!objectNode) {\n\t\t\t\t\tthrow new Error()\n\t\t\t\t}\n\t\t\t\tconst where: Input.Where = {\n\t\t\t\t\tand: [idsWhere, objectNode.args.filter].filter((it): it is Input.Where => it !== undefined),\n\t\t\t\t}\n\t\t\t\tconst objectWithWhere = objectNode.withArg('filter', where)\n\n\t\t\t\treturn this.mapper.selectAssoc(targetEntity, objectWithWhere, [\n\t\t\t\t\t...this.relationPath,\n\t\t\t\t\trelationContext,\n\t\t\t\t], targetEntity.primary)\n\t\t\t},\n\t\t\tdefaultValue: null,\n\t\t\tpredicate: this.getRequiredPredicate(relationContext.entity, relationContext.relation),\n\t\t})\n\t}\n\n\tpublic visitManyHasOne(relationContext: Model.ManyHasOneContext): void {\n\t\tconst { relation, targetEntity } = relationContext\n\t\tthis.executionContext.addData({\n\t\t\tfield: relation.name,\n\t\t\tdataProvider: async ids => {\n\t\t\t\tconst idsWhere: Input.Where = {\n\t\t\t\t\t[targetEntity.primary]: {\n\t\t\t\t\t\tin: ids,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tconst objectNode = this.executionContext.objectNode\n\t\t\t\tif (!objectNode) {\n\t\t\t\t\tthrow new Error()\n\t\t\t\t}\n\t\t\t\tconst where: Input.Where = {\n\t\t\t\t\tand: [idsWhere, objectNode.args.filter].filter((it): it is Input.Where => it !== undefined),\n\t\t\t\t}\n\t\t\t\tconst objectWithWhere = objectNode.withArg('filter', where)\n\n\t\t\t\treturn this.mapper.selectAssoc(targetEntity, objectWithWhere, [\n\t\t\t\t\t...this.relationPath,\n\t\t\t\t\trelationContext,\n\t\t\t\t], targetEntity.primary)\n\t\t\t},\n\t\t\tdefaultValue: null,\n\t\t\tpredicate: this.getRequiredPredicate(relationContext.entity, relationContext.relation),\n\t\t})\n\t}\n\n\tprivate getRequiredPredicate(entity: Model.Entity, field: Model.AnyField): Acl.Predicate | undefined {\n\t\tconst fieldPredicate = this.predicateFactory.getFieldPredicate(entity, Acl.Operation.read, field.name)\n\t\treturn fieldPredicate.isSameAsPrimary ? undefined : fieldPredicate.predicate\n\t}\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FieldsVisitor.js","sources":["../../../../../../../packages/engine-content-api/src/mapper/select/handlers/FieldsVisitor.ts"],"sourcesContent":["import { Acl, Input, Model, Settings } from '@contember/schema'\nimport { Mapper } from '../../Mapper'\nimport { RelationFetcher } from '../RelationFetcher'\nimport { SelectExecutionHandlerContext } from '../SelectExecutionHandler'\nimport { PredicateFactory } from '../../../acl'\nimport { Literal, wrapIdentifier } from '@contember/database'\n\nexport class FieldsVisitor implements Model.RelationByTypeVisitor<void>, Model.ColumnVisitor<void> {\n\tconstructor(\n\t\tprivate readonly relationFetcher: RelationFetcher,\n\t\tprivate readonly predicateFactory: PredicateFactory,\n\t\tprivate readonly mapper: Mapper,\n\t\tprivate readonly executionContext: SelectExecutionHandlerContext,\n\t\tprivate readonly relationPath: Model.AnyRelationContext[],\n\t\tprivate readonly settings: Settings.ContentSettings,\n\t) {}\n\n\tvisitColumn({ entity, column }: Model.ColumnContext): void {\n\t\tconst columnPath = this.executionContext.path\n\t\tconst tableAlias = columnPath.back().alias\n\t\tconst columnAlias = columnPath.alias\n\n\t\tlet selectFrom = wrapIdentifier(tableAlias) + '.' + wrapIdentifier(column.columnName)\n\t\tif (column.type === Model.ColumnType.Date && this.settings.shortDateResponse) {\n\t\t\tselectFrom += '::text'\n\t\t}\n\t\tif (column.type === Model.ColumnType.DateTime && this.settings.fullDateTimeResponse) {\n\t\t\tselectFrom += '::text'\n\t\t}\n\n\t\tthis.executionContext.addColumn({\n\t\t\tquery: qb => qb.select(new Literal(selectFrom), columnAlias),\n\t\t\tpredicate: this.getRequiredPredicate(entity, column),\n\t\t})\n\t}\n\n\tpublic visitManyHasManyInverse(relationContext: Model.ManyHasManyInverseContext): void {\n\t\tconst field = this.executionContext.objectNode\n\t\tif (!field) {\n\t\t\tthrow new Error()\n\t\t}\n\t\tthis.executionContext.addData({\n\t\t\tfield: relationContext.entity.primary,\n\t\t\tdataProvider: async ids =>\n\t\t\t\tthis.relationFetcher.fetchManyHasManyGroups({\n\t\t\t\t\tmapper: this.mapper,\n\t\t\t\t\tfield: field,\n\t\t\t\t\trelationContext,\n\t\t\t\t\trelationPath: this.relationPath,\n\t\t\t\t\tids: ids,\n\t\t\t\t}),\n\t\t\tdefaultValue: [],\n\t\t\tpredicate: this.getRequiredPredicate(relationContext.entity, relationContext.relation),\n\t\t})\n\t}\n\n\tpublic visitManyHasManyOwning(relationContext: Model.ManyHasManyOwningContext): void {\n\t\tconst field = this.executionContext.objectNode\n\t\tif (!field) {\n\t\t\tthrow new Error()\n\t\t}\n\n\t\tthis.executionContext.addData({\n\t\t\tfield: relationContext.entity.primary,\n\t\t\tdataProvider: async ids =>\n\t\t\t\tthis.relationFetcher.fetchManyHasManyGroups({\n\t\t\t\t\tmapper: this.mapper,\n\t\t\t\t\tfield: field,\n\t\t\t\t\trelationContext,\n\t\t\t\t\trelationPath: this.relationPath,\n\t\t\t\t\tids: ids,\n\t\t\t\t}),\n\t\t\tdefaultValue: [],\n\t\t\tpredicate: this.getRequiredPredicate(relationContext.entity, relationContext.relation),\n\t\t})\n\t}\n\n\tpublic visitOneHasMany(relationContext: Model.OneHasManyContext): void {\n\t\tconst field = this.executionContext.objectNode\n\t\tif (!field) {\n\t\t\tthrow new Error()\n\t\t}\n\n\t\tthis.executionContext.addData({\n\t\t\tfield: relationContext.entity.primary,\n\t\t\tdataProvider: async ids =>\n\t\t\t\tthis.relationFetcher.fetchOneHasManyGroups({\n\t\t\t\t\tmapper: this.mapper,\n\t\t\t\t\tobjectNode: field,\n\t\t\t\t\trelationContext,\n\t\t\t\t\trelationPath: this.relationPath,\n\t\t\t\t\tids: ids,\n\t\t\t\t}),\n\t\t\tdefaultValue: [],\n\t\t\tpredicate: this.getRequiredPredicate(relationContext.entity, relationContext.relation),\n\t\t})\n\t}\n\n\tpublic visitOneHasOneInverse(relationContext: Model.OneHasOneInverseContext): void {\n\t\tconst { entity, targetRelation, targetEntity } = relationContext\n\t\tthis.executionContext.addData({\n\t\t\tfield: entity.primary,\n\t\t\tdataProvider: async ids => {\n\t\t\t\tconst idsWhere: Input.Where = {\n\t\t\t\t\t[targetRelation.name]: {\n\t\t\t\t\t\t[entity.primary]: {\n\t\t\t\t\t\t\tin: ids,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tconst field = this.executionContext.objectNode\n\t\t\t\tif (!field) {\n\t\t\t\t\tthrow new Error()\n\t\t\t\t}\n\t\t\t\tconst where: Input.Where = {\n\t\t\t\t\tand: [idsWhere, field.args.filter].filter((it): it is Input.Where => it !== undefined),\n\t\t\t\t}\n\t\t\t\tconst objectWithWhere = field.withArg('filter', where)\n\n\t\t\t\treturn this.mapper.selectAssoc(targetEntity, objectWithWhere, [\n\t\t\t\t\t...this.relationPath,\n\t\t\t\t\trelationContext,\n\t\t\t\t], targetRelation.name)\n\t\t\t},\n\t\t\tdefaultValue: null,\n\t\t\tpredicate: this.getRequiredPredicate(relationContext.entity, relationContext.relation),\n\t\t})\n\t}\n\n\tpublic visitOneHasOneOwning(relationContext: Model.OneHasOneOwningContext): void {\n\t\tconst { relation, targetEntity } = relationContext\n\t\tthis.executionContext.addData({\n\t\t\tfield: relation.name,\n\t\t\tdataProvider: async ids => {\n\t\t\t\tconst idsWhere: Input.Where = {\n\t\t\t\t\t[targetEntity.primary]: {\n\t\t\t\t\t\tin: ids,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tconst objectNode = this.executionContext.objectNode\n\t\t\t\tif (!objectNode) {\n\t\t\t\t\tthrow new Error()\n\t\t\t\t}\n\t\t\t\tconst where: Input.Where = {\n\t\t\t\t\tand: [idsWhere, objectNode.args.filter].filter((it): it is Input.Where => it !== undefined),\n\t\t\t\t}\n\t\t\t\tconst objectWithWhere = objectNode.withArg('filter', where)\n\n\t\t\t\treturn this.mapper.selectAssoc(targetEntity, objectWithWhere, [\n\t\t\t\t\t...this.relationPath,\n\t\t\t\t\trelationContext,\n\t\t\t\t], targetEntity.primary)\n\t\t\t},\n\t\t\tdefaultValue: null,\n\t\t\tpredicate: this.getRequiredPredicate(relationContext.entity, relationContext.relation),\n\t\t})\n\t}\n\n\tpublic visitManyHasOne(relationContext: Model.ManyHasOneContext): void {\n\t\tconst { relation, targetEntity } = relationContext\n\t\tthis.executionContext.addData({\n\t\t\tfield: relation.name,\n\t\t\tdataProvider: async ids => {\n\t\t\t\tconst idsWhere: Input.Where = {\n\t\t\t\t\t[targetEntity.primary]: {\n\t\t\t\t\t\tin: ids,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tconst objectNode = this.executionContext.objectNode\n\t\t\t\tif (!objectNode) {\n\t\t\t\t\tthrow new Error()\n\t\t\t\t}\n\t\t\t\tconst where: Input.Where = {\n\t\t\t\t\tand: [idsWhere, objectNode.args.filter].filter((it): it is Input.Where => it !== undefined),\n\t\t\t\t}\n\t\t\t\tconst objectWithWhere = objectNode.withArg('filter', where)\n\n\t\t\t\treturn this.mapper.selectAssoc(targetEntity, objectWithWhere, [\n\t\t\t\t\t...this.relationPath,\n\t\t\t\t\trelationContext,\n\t\t\t\t], targetEntity.primary)\n\t\t\t},\n\t\t\tdefaultValue: null,\n\t\t\tpredicate: this.getRequiredPredicate(relationContext.entity, relationContext.relation),\n\t\t})\n\t}\n\n\tprivate getRequiredPredicate(entity: Model.Entity, field: Model.AnyField): Acl.Predicate | undefined {\n\t\tconst fieldPredicate = this.predicateFactory.getFieldPredicate(entity, Acl.Operation.read, field.name)\n\t\treturn fieldPredicate.isSameAsPrimary ? undefined : fieldPredicate.predicate\n\t}\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FieldsVisitorFactory.cjs","sources":["../../../../../../../packages/engine-content-api/src/mapper/select/handlers/FieldsVisitorFactory.ts"],"sourcesContent":["import { FieldsVisitor } from './FieldsVisitor'\nimport { RelationFetcher } from '../RelationFetcher'\nimport { Mapper } from '../../Mapper'\nimport { SelectExecutionHandlerContext } from '../SelectExecutionHandler'\nimport { PredicateFactory } from '../../../acl'\nimport { Settings } from '@contember/schema'\n\nexport class FieldsVisitorFactory {\n\tconstructor(\n\t\tprivate readonly relationFetcher: RelationFetcher,\n\t\tprivate readonly predicateFactory: PredicateFactory,\n\t\tprivate readonly settings: Settings.ContentSettings,\n\t) {}\n\n\tcreate(mapper: Mapper, context: SelectExecutionHandlerContext): FieldsVisitor {\n\t\treturn new FieldsVisitor(\n\t\t\tthis.relationFetcher,\n\t\t\tthis.predicateFactory,\n\t\t\tmapper,\n\t\t\tcontext,\n\t\t\tcontext.relationPath,\n\t\t\tthis.settings,\n\t\t)\n\t}\n}\n"],"names":["FieldsVisitor"],"mappings":";;;AAOO,MAAM,qBAAqB;AAAA,EACjC,YACkB,iBACA,kBACA,UAChB;AAHgB,SAAA,kBAAA;AACA,SAAA,mBAAA;AACA,SAAA,WAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"FieldsVisitorFactory.cjs","sources":["../../../../../../../packages/engine-content-api/src/mapper/select/handlers/FieldsVisitorFactory.ts"],"sourcesContent":["import { FieldsVisitor } from './FieldsVisitor'\nimport { RelationFetcher } from '../RelationFetcher'\nimport { Mapper } from '../../Mapper'\nimport { SelectExecutionHandlerContext } from '../SelectExecutionHandler'\nimport { PredicateFactory } from '../../../acl'\nimport { Settings } from '@contember/schema'\n\nexport class FieldsVisitorFactory {\n\tconstructor(\n\t\tprivate readonly relationFetcher: RelationFetcher,\n\t\tprivate readonly predicateFactory: PredicateFactory,\n\t\tprivate readonly settings: Settings.ContentSettings,\n\t) {}\n\n\tcreate(mapper: Mapper, context: SelectExecutionHandlerContext): FieldsVisitor {\n\t\treturn new FieldsVisitor(\n\t\t\tthis.relationFetcher,\n\t\t\tthis.predicateFactory,\n\t\t\tmapper,\n\t\t\tcontext,\n\t\t\tcontext.relationPath,\n\t\t\tthis.settings,\n\t\t)\n\t}\n}\n"],"names":["FieldsVisitor"],"mappings":";;;AAOO,MAAM,qBAAqB;AAAA,EACjC,YACkB,iBACA,kBACA,UAChB;AAHgB,SAAA,kBAAA;AACA,SAAA,mBAAA;AACA,SAAA,WAAA;AAAA,EAAA;AAAA,EAGlB,OAAO,QAAgB,SAAuD;AAC7E,WAAO,IAAIA,cAAA;AAAA,MACV,KAAK;AAAA,MACL,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,MACR,KAAK;AAAA,IACN;AAAA,EAAA;AAEF;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FieldsVisitorFactory.js","sources":["../../../../../../../packages/engine-content-api/src/mapper/select/handlers/FieldsVisitorFactory.ts"],"sourcesContent":["import { FieldsVisitor } from './FieldsVisitor'\nimport { RelationFetcher } from '../RelationFetcher'\nimport { Mapper } from '../../Mapper'\nimport { SelectExecutionHandlerContext } from '../SelectExecutionHandler'\nimport { PredicateFactory } from '../../../acl'\nimport { Settings } from '@contember/schema'\n\nexport class FieldsVisitorFactory {\n\tconstructor(\n\t\tprivate readonly relationFetcher: RelationFetcher,\n\t\tprivate readonly predicateFactory: PredicateFactory,\n\t\tprivate readonly settings: Settings.ContentSettings,\n\t) {}\n\n\tcreate(mapper: Mapper, context: SelectExecutionHandlerContext): FieldsVisitor {\n\t\treturn new FieldsVisitor(\n\t\t\tthis.relationFetcher,\n\t\t\tthis.predicateFactory,\n\t\t\tmapper,\n\t\t\tcontext,\n\t\t\tcontext.relationPath,\n\t\t\tthis.settings,\n\t\t)\n\t}\n}\n"],"names":[],"mappings":";AAOO,MAAM,qBAAqB;AAAA,EACjC,YACkB,iBACA,kBACA,UAChB;AAHgB,SAAA,kBAAA;AACA,SAAA,mBAAA;AACA,SAAA,WAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"FieldsVisitorFactory.js","sources":["../../../../../../../packages/engine-content-api/src/mapper/select/handlers/FieldsVisitorFactory.ts"],"sourcesContent":["import { FieldsVisitor } from './FieldsVisitor'\nimport { RelationFetcher } from '../RelationFetcher'\nimport { Mapper } from '../../Mapper'\nimport { SelectExecutionHandlerContext } from '../SelectExecutionHandler'\nimport { PredicateFactory } from '../../../acl'\nimport { Settings } from '@contember/schema'\n\nexport class FieldsVisitorFactory {\n\tconstructor(\n\t\tprivate readonly relationFetcher: RelationFetcher,\n\t\tprivate readonly predicateFactory: PredicateFactory,\n\t\tprivate readonly settings: Settings.ContentSettings,\n\t) {}\n\n\tcreate(mapper: Mapper, context: SelectExecutionHandlerContext): FieldsVisitor {\n\t\treturn new FieldsVisitor(\n\t\t\tthis.relationFetcher,\n\t\t\tthis.predicateFactory,\n\t\t\tmapper,\n\t\t\tcontext,\n\t\t\tcontext.relationPath,\n\t\t\tthis.settings,\n\t\t)\n\t}\n}\n"],"names":[],"mappings":";AAOO,MAAM,qBAAqB;AAAA,EACjC,YACkB,iBACA,kBACA,UAChB;AAHgB,SAAA,kBAAA;AACA,SAAA,mBAAA;AACA,SAAA,WAAA;AAAA,EAAA;AAAA,EAGlB,OAAO,QAAgB,SAAuD;AAC7E,WAAO,IAAI;AAAA,MACV,KAAK;AAAA,MACL,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,MACR,KAAK;AAAA,IACN;AAAA,EAAA;AAEF;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MetaHandler.cjs","sources":["../../../../../../../packages/engine-content-api/src/mapper/select/handlers/MetaHandler.ts"],"sourcesContent":["import { SelectExecutionHandler, SelectExecutionHandlerContext } from '../SelectExecutionHandler'\nimport { Path } from '../Path'\nimport { Acl, Input } from '@contember/schema'\nimport { PredicateFactory } from '../../../acl'\nimport { WhereBuilder } from '../WhereBuilder'\nimport { ObjectNode } from '../../../inputProcessing'\n\nexport class MetaHandler implements SelectExecutionHandler<{}> {\n\tconstructor(private readonly whereBuilder: WhereBuilder, private readonly predicateFactory: PredicateFactory) {}\n\n\tprocess(context: SelectExecutionHandlerContext): void {\n\t\tconst { objectNode, path } = context\n\t\tif (!objectNode) {\n\t\t\tthrow new Error()\n\t\t}\n\t\tfor (let metaField of objectNode.fields) {\n\t\t\tconst columnPath = path.for(metaField.alias)\n\t\t\tfor (let metaInfo of (metaField as ObjectNode).fields) {\n\t\t\t\tif (metaInfo.name === Input.FieldMeta.updatable) {\n\t\t\t\t\tthis.addMetaFlag(context, metaField.name, columnPath.for(metaInfo.alias), Acl.Operation.update)\n\t\t\t\t}\n\t\t\t\tif (metaInfo.name === Input.FieldMeta.readable) {\n\t\t\t\t\tthis.addMetaFlag(context, metaField.name, columnPath.for(metaInfo.alias), Acl.Operation.read)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate addMetaFlag(\n\t\tcontext: SelectExecutionHandlerContext,\n\t\tfieldName: string,\n\t\tmetaPath: Path,\n\t\toperation: Acl.Operation.read | Acl.Operation.update,\n\t): void {\n\t\tconst { entity } = context\n\t\tif (entity.primary === fieldName) {\n\t\t\treturn\n\t\t}\n\t\tconst fieldPredicate = this.predicateFactory.getFieldPredicate(entity, operation, fieldName)\n\t\tcontext.addColumn({\n\t\t\tpath: metaPath,\n\t\t\tvalueGetter: context.addPredicate(fieldPredicate.predicate),\n\t\t})\n\t}\n}\n"],"names":["Input","Acl"],"mappings":";;;AAOO,MAAM,YAAkD;AAAA,EAC9D,YAA6B,cAA6C,kBAAoC;AAAjF,SAAA,eAAA;AAA6C,SAAA,mBAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"MetaHandler.cjs","sources":["../../../../../../../packages/engine-content-api/src/mapper/select/handlers/MetaHandler.ts"],"sourcesContent":["import { SelectExecutionHandler, SelectExecutionHandlerContext } from '../SelectExecutionHandler'\nimport { Path } from '../Path'\nimport { Acl, Input } from '@contember/schema'\nimport { PredicateFactory } from '../../../acl'\nimport { WhereBuilder } from '../WhereBuilder'\nimport { ObjectNode } from '../../../inputProcessing'\n\nexport class MetaHandler implements SelectExecutionHandler<{}> {\n\tconstructor(private readonly whereBuilder: WhereBuilder, private readonly predicateFactory: PredicateFactory) {}\n\n\tprocess(context: SelectExecutionHandlerContext): void {\n\t\tconst { objectNode, path } = context\n\t\tif (!objectNode) {\n\t\t\tthrow new Error()\n\t\t}\n\t\tfor (let metaField of objectNode.fields) {\n\t\t\tconst columnPath = path.for(metaField.alias)\n\t\t\tfor (let metaInfo of (metaField as ObjectNode).fields) {\n\t\t\t\tif (metaInfo.name === Input.FieldMeta.updatable) {\n\t\t\t\t\tthis.addMetaFlag(context, metaField.name, columnPath.for(metaInfo.alias), Acl.Operation.update)\n\t\t\t\t}\n\t\t\t\tif (metaInfo.name === Input.FieldMeta.readable) {\n\t\t\t\t\tthis.addMetaFlag(context, metaField.name, columnPath.for(metaInfo.alias), Acl.Operation.read)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate addMetaFlag(\n\t\tcontext: SelectExecutionHandlerContext,\n\t\tfieldName: string,\n\t\tmetaPath: Path,\n\t\toperation: Acl.Operation.read | Acl.Operation.update,\n\t): void {\n\t\tconst { entity } = context\n\t\tif (entity.primary === fieldName) {\n\t\t\treturn\n\t\t}\n\t\tconst fieldPredicate = this.predicateFactory.getFieldPredicate(entity, operation, fieldName)\n\t\tcontext.addColumn({\n\t\t\tpath: metaPath,\n\t\t\tvalueGetter: context.addPredicate(fieldPredicate.predicate),\n\t\t})\n\t}\n}\n"],"names":["Input","Acl"],"mappings":";;;AAOO,MAAM,YAAkD;AAAA,EAC9D,YAA6B,cAA6C,kBAAoC;AAAjF,SAAA,eAAA;AAA6C,SAAA,mBAAA;AAAA,EAAA;AAAA,EAE1E,QAAQ,SAA8C;AAC/C,UAAA,EAAE,YAAY,KAAA,IAAS;AAC7B,QAAI,CAAC,YAAY;AAChB,YAAM,IAAI,MAAM;AAAA,IAAA;AAER,aAAA,aAAa,WAAW,QAAQ;AACxC,YAAM,aAAa,KAAK,IAAI,UAAU,KAAK;AAClC,eAAA,YAAa,UAAyB,QAAQ;AACtD,YAAI,SAAS,SAASA,aAAM,UAAU,WAAW;AAC3C,eAAA,YAAY,SAAS,UAAU,MAAM,WAAW,IAAI,SAAS,KAAK,GAAGC,WAAI,UAAU,MAAM;AAAA,QAAA;AAE/F,YAAI,SAAS,SAASD,aAAM,UAAU,UAAU;AAC1C,eAAA,YAAY,SAAS,UAAU,MAAM,WAAW,IAAI,SAAS,KAAK,GAAGC,WAAI,UAAU,IAAI;AAAA,QAAA;AAAA,MAC7F;AAAA,IACD;AAAA,EACD;AAAA,EAGO,YACP,SACA,WACA,UACA,WACO;AACD,UAAA,EAAE,WAAW;AACf,QAAA,OAAO,YAAY,WAAW;AACjC;AAAA,IAAA;AAED,UAAM,iBAAiB,KAAK,iBAAiB,kBAAkB,QAAQ,WAAW,SAAS;AAC3F,YAAQ,UAAU;AAAA,MACjB,MAAM;AAAA,MACN,aAAa,QAAQ,aAAa,eAAe,SAAS;AAAA,IAAA,CAC1D;AAAA,EAAA;AAEH;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MetaHandler.js","sources":["../../../../../../../packages/engine-content-api/src/mapper/select/handlers/MetaHandler.ts"],"sourcesContent":["import { SelectExecutionHandler, SelectExecutionHandlerContext } from '../SelectExecutionHandler'\nimport { Path } from '../Path'\nimport { Acl, Input } from '@contember/schema'\nimport { PredicateFactory } from '../../../acl'\nimport { WhereBuilder } from '../WhereBuilder'\nimport { ObjectNode } from '../../../inputProcessing'\n\nexport class MetaHandler implements SelectExecutionHandler<{}> {\n\tconstructor(private readonly whereBuilder: WhereBuilder, private readonly predicateFactory: PredicateFactory) {}\n\n\tprocess(context: SelectExecutionHandlerContext): void {\n\t\tconst { objectNode, path } = context\n\t\tif (!objectNode) {\n\t\t\tthrow new Error()\n\t\t}\n\t\tfor (let metaField of objectNode.fields) {\n\t\t\tconst columnPath = path.for(metaField.alias)\n\t\t\tfor (let metaInfo of (metaField as ObjectNode).fields) {\n\t\t\t\tif (metaInfo.name === Input.FieldMeta.updatable) {\n\t\t\t\t\tthis.addMetaFlag(context, metaField.name, columnPath.for(metaInfo.alias), Acl.Operation.update)\n\t\t\t\t}\n\t\t\t\tif (metaInfo.name === Input.FieldMeta.readable) {\n\t\t\t\t\tthis.addMetaFlag(context, metaField.name, columnPath.for(metaInfo.alias), Acl.Operation.read)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate addMetaFlag(\n\t\tcontext: SelectExecutionHandlerContext,\n\t\tfieldName: string,\n\t\tmetaPath: Path,\n\t\toperation: Acl.Operation.read | Acl.Operation.update,\n\t): void {\n\t\tconst { entity } = context\n\t\tif (entity.primary === fieldName) {\n\t\t\treturn\n\t\t}\n\t\tconst fieldPredicate = this.predicateFactory.getFieldPredicate(entity, operation, fieldName)\n\t\tcontext.addColumn({\n\t\t\tpath: metaPath,\n\t\t\tvalueGetter: context.addPredicate(fieldPredicate.predicate),\n\t\t})\n\t}\n}\n"],"names":[],"mappings":";AAOO,MAAM,YAAkD;AAAA,EAC9D,YAA6B,cAA6C,kBAAoC;AAAjF,SAAA,eAAA;AAA6C,SAAA,mBAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"MetaHandler.js","sources":["../../../../../../../packages/engine-content-api/src/mapper/select/handlers/MetaHandler.ts"],"sourcesContent":["import { SelectExecutionHandler, SelectExecutionHandlerContext } from '../SelectExecutionHandler'\nimport { Path } from '../Path'\nimport { Acl, Input } from '@contember/schema'\nimport { PredicateFactory } from '../../../acl'\nimport { WhereBuilder } from '../WhereBuilder'\nimport { ObjectNode } from '../../../inputProcessing'\n\nexport class MetaHandler implements SelectExecutionHandler<{}> {\n\tconstructor(private readonly whereBuilder: WhereBuilder, private readonly predicateFactory: PredicateFactory) {}\n\n\tprocess(context: SelectExecutionHandlerContext): void {\n\t\tconst { objectNode, path } = context\n\t\tif (!objectNode) {\n\t\t\tthrow new Error()\n\t\t}\n\t\tfor (let metaField of objectNode.fields) {\n\t\t\tconst columnPath = path.for(metaField.alias)\n\t\t\tfor (let metaInfo of (metaField as ObjectNode).fields) {\n\t\t\t\tif (metaInfo.name === Input.FieldMeta.updatable) {\n\t\t\t\t\tthis.addMetaFlag(context, metaField.name, columnPath.for(metaInfo.alias), Acl.Operation.update)\n\t\t\t\t}\n\t\t\t\tif (metaInfo.name === Input.FieldMeta.readable) {\n\t\t\t\t\tthis.addMetaFlag(context, metaField.name, columnPath.for(metaInfo.alias), Acl.Operation.read)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate addMetaFlag(\n\t\tcontext: SelectExecutionHandlerContext,\n\t\tfieldName: string,\n\t\tmetaPath: Path,\n\t\toperation: Acl.Operation.read | Acl.Operation.update,\n\t): void {\n\t\tconst { entity } = context\n\t\tif (entity.primary === fieldName) {\n\t\t\treturn\n\t\t}\n\t\tconst fieldPredicate = this.predicateFactory.getFieldPredicate(entity, operation, fieldName)\n\t\tcontext.addColumn({\n\t\t\tpath: metaPath,\n\t\t\tvalueGetter: context.addPredicate(fieldPredicate.predicate),\n\t\t})\n\t}\n}\n"],"names":[],"mappings":";AAOO,MAAM,YAAkD;AAAA,EAC9D,YAA6B,cAA6C,kBAAoC;AAAjF,SAAA,eAAA;AAA6C,SAAA,mBAAA;AAAA,EAAA;AAAA,EAE1E,QAAQ,SAA8C;AAC/C,UAAA,EAAE,YAAY,KAAA,IAAS;AAC7B,QAAI,CAAC,YAAY;AAChB,YAAM,IAAI,MAAM;AAAA,IAAA;AAER,aAAA,aAAa,WAAW,QAAQ;AACxC,YAAM,aAAa,KAAK,IAAI,UAAU,KAAK;AAClC,eAAA,YAAa,UAAyB,QAAQ;AACtD,YAAI,SAAS,SAAS,MAAM,UAAU,WAAW;AAC3C,eAAA,YAAY,SAAS,UAAU,MAAM,WAAW,IAAI,SAAS,KAAK,GAAG,IAAI,UAAU,MAAM;AAAA,QAAA;AAE/F,YAAI,SAAS,SAAS,MAAM,UAAU,UAAU;AAC1C,eAAA,YAAY,SAAS,UAAU,MAAM,WAAW,IAAI,SAAS,KAAK,GAAG,IAAI,UAAU,IAAI;AAAA,QAAA;AAAA,MAC7F;AAAA,IACD;AAAA,EACD;AAAA,EAGO,YACP,SACA,WACA,UACA,WACO;AACD,UAAA,EAAE,WAAW;AACf,QAAA,OAAO,YAAY,WAAW;AACjC;AAAA,IAAA;AAED,UAAM,iBAAiB,KAAK,iBAAiB,kBAAkB,QAAQ,WAAW,SAAS;AAC3F,YAAQ,UAAU;AAAA,MACjB,MAAM;AAAA,MACN,aAAa,QAAQ,aAAa,eAAe,SAAS;AAAA,IAAA,CAC1D;AAAA,EAAA;AAEH;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConditionOptimizer.cjs","sources":["../../../../../../../packages/engine-content-api/src/mapper/select/optimizer/ConditionOptimizer.ts"],"sourcesContent":["import { Input } from '@contember/schema'\nimport { optimizeAnd, optimizeNot, optimizeOr } from './helpers'\n\ntype ObjectEntry<T> = { [K in keyof Required<T>]: [K, T[K]] }[keyof T]\n\nexport class ConditionOptimizer {\n\tpublic optimize(condition: Input.Condition): Omit<Input.Condition, 'always' | 'never'> | boolean {\n\t\tif (condition.never) {\n\t\t\treturn false\n\t\t}\n\n\t\treturn optimizeAnd(\n\t\t\t(Object.entries(condition) as ObjectEntry<typeof condition>[]).map(([key, value]) => {\n\t\t\t\tif (value === undefined || value === null) {\n\t\t\t\t\treturn undefined\n\n\t\t\t\t} else if (key === 'always') {\n\t\t\t\t\treturn true\n\n\t\t\t\t} else if (key === 'and') {\n\t\t\t\t\treturn optimizeAnd(value.map(it => this.optimize(it)))\n\n\t\t\t\t} else if (key === 'or') {\n\t\t\t\t\treturn optimizeOr(value.map(it => this.optimize(it)))\n\n\t\t\t\t} else if (key === 'in' && value.length === 0) {\n\t\t\t\t\treturn false\n\n\t\t\t\t} else if (key === 'notIn' && value.length === 0) {\n\t\t\t\t\treturn true\n\n\t\t\t\t} else if (key === 'not') {\n\t\t\t\t\treturn optimizeNot(this.optimize(value))\n\n\t\t\t\t} else {\n\t\t\t\t\treturn { [key]: value }\n\t\t\t\t}\n\t\t\t}),\n\t\t)\n\t}\n}\n"],"names":["optimizeAnd","optimizeOr","optimizeNot"],"mappings":";;;AAKO,MAAM,mBAAmB;AAAA,EACxB,SAAS,WAAiF;AAChG,QAAI,UAAU,OAAO;AACb,aAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"ConditionOptimizer.cjs","sources":["../../../../../../../packages/engine-content-api/src/mapper/select/optimizer/ConditionOptimizer.ts"],"sourcesContent":["import { Input } from '@contember/schema'\nimport { optimizeAnd, optimizeNot, optimizeOr } from './helpers'\n\ntype ObjectEntry<T> = { [K in keyof Required<T>]: [K, T[K]] }[keyof T]\n\nexport class ConditionOptimizer {\n\tpublic optimize(condition: Input.Condition): Omit<Input.Condition, 'always' | 'never'> | boolean {\n\t\tif (condition.never) {\n\t\t\treturn false\n\t\t}\n\n\t\treturn optimizeAnd(\n\t\t\t(Object.entries(condition) as ObjectEntry<typeof condition>[]).map(([key, value]) => {\n\t\t\t\tif (value === undefined || value === null) {\n\t\t\t\t\treturn undefined\n\n\t\t\t\t} else if (key === 'always') {\n\t\t\t\t\treturn true\n\n\t\t\t\t} else if (key === 'and') {\n\t\t\t\t\treturn optimizeAnd(value.map(it => this.optimize(it)))\n\n\t\t\t\t} else if (key === 'or') {\n\t\t\t\t\treturn optimizeOr(value.map(it => this.optimize(it)))\n\n\t\t\t\t} else if (key === 'in' && value.length === 0) {\n\t\t\t\t\treturn false\n\n\t\t\t\t} else if (key === 'notIn' && value.length === 0) {\n\t\t\t\t\treturn true\n\n\t\t\t\t} else if (key === 'not') {\n\t\t\t\t\treturn optimizeNot(this.optimize(value))\n\n\t\t\t\t} else {\n\t\t\t\t\treturn { [key]: value }\n\t\t\t\t}\n\t\t\t}),\n\t\t)\n\t}\n}\n"],"names":["optimizeAnd","optimizeOr","optimizeNot"],"mappings":";;;AAKO,MAAM,mBAAmB;AAAA,EACxB,SAAS,WAAiF;AAChG,QAAI,UAAU,OAAO;AACb,aAAA;AAAA,IAAA;AAGD,WAAAA,QAAA;AAAA,MACL,OAAO,QAAQ,SAAS,EAAsC,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM;AAChF,YAAA,UAAU,UAAa,UAAU,MAAM;AACnC,iBAAA;AAAA,QAAA,WAEG,QAAQ,UAAU;AACrB,iBAAA;AAAA,QAAA,WAEG,QAAQ,OAAO;AAClB,iBAAAA,QAAA,YAAY,MAAM,IAAI,CAAA,OAAM,KAAK,SAAS,EAAE,CAAC,CAAC;AAAA,QAAA,WAE3C,QAAQ,MAAM;AACjB,iBAAAC,QAAA,WAAW,MAAM,IAAI,CAAA,OAAM,KAAK,SAAS,EAAE,CAAC,CAAC;AAAA,QAE1C,WAAA,QAAQ,QAAQ,MAAM,WAAW,GAAG;AACvC,iBAAA;AAAA,QAEG,WAAA,QAAQ,WAAW,MAAM,WAAW,GAAG;AAC1C,iBAAA;AAAA,QAAA,WAEG,QAAQ,OAAO;AACzB,iBAAOC,oBAAY,KAAK,SAAS,KAAK,CAAC;AAAA,QAAA,OAEjC;AACN,iBAAO,EAAE,CAAC,GAAG,GAAG,MAAM;AAAA,QAAA;AAAA,MAEvB,CAAA;AAAA,IACF;AAAA,EAAA;AAEF;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConditionOptimizer.js","sources":["../../../../../../../packages/engine-content-api/src/mapper/select/optimizer/ConditionOptimizer.ts"],"sourcesContent":["import { Input } from '@contember/schema'\nimport { optimizeAnd, optimizeNot, optimizeOr } from './helpers'\n\ntype ObjectEntry<T> = { [K in keyof Required<T>]: [K, T[K]] }[keyof T]\n\nexport class ConditionOptimizer {\n\tpublic optimize(condition: Input.Condition): Omit<Input.Condition, 'always' | 'never'> | boolean {\n\t\tif (condition.never) {\n\t\t\treturn false\n\t\t}\n\n\t\treturn optimizeAnd(\n\t\t\t(Object.entries(condition) as ObjectEntry<typeof condition>[]).map(([key, value]) => {\n\t\t\t\tif (value === undefined || value === null) {\n\t\t\t\t\treturn undefined\n\n\t\t\t\t} else if (key === 'always') {\n\t\t\t\t\treturn true\n\n\t\t\t\t} else if (key === 'and') {\n\t\t\t\t\treturn optimizeAnd(value.map(it => this.optimize(it)))\n\n\t\t\t\t} else if (key === 'or') {\n\t\t\t\t\treturn optimizeOr(value.map(it => this.optimize(it)))\n\n\t\t\t\t} else if (key === 'in' && value.length === 0) {\n\t\t\t\t\treturn false\n\n\t\t\t\t} else if (key === 'notIn' && value.length === 0) {\n\t\t\t\t\treturn true\n\n\t\t\t\t} else if (key === 'not') {\n\t\t\t\t\treturn optimizeNot(this.optimize(value))\n\n\t\t\t\t} else {\n\t\t\t\t\treturn { [key]: value }\n\t\t\t\t}\n\t\t\t}),\n\t\t)\n\t}\n}\n"],"names":[],"mappings":";AAKO,MAAM,mBAAmB;AAAA,EACxB,SAAS,WAAiF;AAChG,QAAI,UAAU,OAAO;AACb,aAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"ConditionOptimizer.js","sources":["../../../../../../../packages/engine-content-api/src/mapper/select/optimizer/ConditionOptimizer.ts"],"sourcesContent":["import { Input } from '@contember/schema'\nimport { optimizeAnd, optimizeNot, optimizeOr } from './helpers'\n\ntype ObjectEntry<T> = { [K in keyof Required<T>]: [K, T[K]] }[keyof T]\n\nexport class ConditionOptimizer {\n\tpublic optimize(condition: Input.Condition): Omit<Input.Condition, 'always' | 'never'> | boolean {\n\t\tif (condition.never) {\n\t\t\treturn false\n\t\t}\n\n\t\treturn optimizeAnd(\n\t\t\t(Object.entries(condition) as ObjectEntry<typeof condition>[]).map(([key, value]) => {\n\t\t\t\tif (value === undefined || value === null) {\n\t\t\t\t\treturn undefined\n\n\t\t\t\t} else if (key === 'always') {\n\t\t\t\t\treturn true\n\n\t\t\t\t} else if (key === 'and') {\n\t\t\t\t\treturn optimizeAnd(value.map(it => this.optimize(it)))\n\n\t\t\t\t} else if (key === 'or') {\n\t\t\t\t\treturn optimizeOr(value.map(it => this.optimize(it)))\n\n\t\t\t\t} else if (key === 'in' && value.length === 0) {\n\t\t\t\t\treturn false\n\n\t\t\t\t} else if (key === 'notIn' && value.length === 0) {\n\t\t\t\t\treturn true\n\n\t\t\t\t} else if (key === 'not') {\n\t\t\t\t\treturn optimizeNot(this.optimize(value))\n\n\t\t\t\t} else {\n\t\t\t\t\treturn { [key]: value }\n\t\t\t\t}\n\t\t\t}),\n\t\t)\n\t}\n}\n"],"names":[],"mappings":";AAKO,MAAM,mBAAmB;AAAA,EACxB,SAAS,WAAiF;AAChG,QAAI,UAAU,OAAO;AACb,aAAA;AAAA,IAAA;AAGD,WAAA;AAAA,MACL,OAAO,QAAQ,SAAS,EAAsC,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM;AAChF,YAAA,UAAU,UAAa,UAAU,MAAM;AACnC,iBAAA;AAAA,QAAA,WAEG,QAAQ,UAAU;AACrB,iBAAA;AAAA,QAAA,WAEG,QAAQ,OAAO;AAClB,iBAAA,YAAY,MAAM,IAAI,CAAA,OAAM,KAAK,SAAS,EAAE,CAAC,CAAC;AAAA,QAAA,WAE3C,QAAQ,MAAM;AACjB,iBAAA,WAAW,MAAM,IAAI,CAAA,OAAM,KAAK,SAAS,EAAE,CAAC,CAAC;AAAA,QAE1C,WAAA,QAAQ,QAAQ,MAAM,WAAW,GAAG;AACvC,iBAAA;AAAA,QAEG,WAAA,QAAQ,WAAW,MAAM,WAAW,GAAG;AAC1C,iBAAA;AAAA,QAAA,WAEG,QAAQ,OAAO;AACzB,iBAAO,YAAY,KAAK,SAAS,KAAK,CAAC;AAAA,QAAA,OAEjC;AACN,iBAAO,EAAE,CAAC,GAAG,GAAG,MAAM;AAAA,QAAA;AAAA,MAEvB,CAAA;AAAA,IACF;AAAA,EAAA;AAEF;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WhereOptimizer.cjs","sources":["../../../../../../../packages/engine-content-api/src/mapper/select/optimizer/WhereOptimizer.ts"],"sourcesContent":["import { Input, Model } from '@contember/schema'\nimport { ConditionOptimizer } from './ConditionOptimizer'\nimport { acceptFieldVisitor } from '@contember/schema-utils'\nimport { optimizeAnd, optimizeNot, optimizeOr } from './helpers'\nimport { replaceWhere } from './WhereReplacer'\n\ntype ExtendedRelationContext =\n\t& {\n\t\tcontext: Model.AnyRelationContext\n\t\tcanEliminate: boolean\n\t\tisLast: boolean\n\t}\n\nexport interface WhereOptimizationHints {\n\trelationPath?: Model.AnyRelationContext[]\n\tevaluatedPredicates?: Input.OptionalWhere[]\n}\n\ntype OptimizedOperand = Input.OptionalWhere | undefined | boolean\n\nexport class WhereOptimizer {\n\tprivate static eliminableRelations = new Set<Model.AnyRelationContext['type']>(['oneHasMany', 'oneHasOneInverse', 'oneHasOneOwning'])\n\n\tconstructor(\n\t\tprivate readonly model: Model.Schema,\n\t\tprivate readonly conditionOptimizer: ConditionOptimizer,\n\t) {\n\t}\n\n\tpublic optimize(where: Input.OptionalWhere, entity: Model.Entity, { relationPath = [], evaluatedPredicates = [] }: WhereOptimizationHints = {}): Input.OptionalWhere {\n\t\tlet processedRelationPath: ExtendedRelationContext[] = []\n\t\tfor (const i in relationPath) {\n\t\t\tconst el = relationPath[i]\n\t\t\tif (!WhereOptimizer.eliminableRelations.has(el.type)) {\n\t\t\t\tprocessedRelationPath = []\n\t\t\t} else {\n\t\t\t\tprocessedRelationPath.push({ context: el, canEliminate: true, isLast: Number(i) === relationPath.length })\n\t\t\t}\n\t\t}\n\t\tlet result = this.optimizeWhere(where, entity, processedRelationPath)\n\n\t\tif (typeof result === 'boolean') {\n\t\t\treturn { [entity.primary]: { [result ? 'always' : 'never']: true } }\n\t\t}\n\t\tlet changed = false\n\t\tfor (const evaluated of evaluatedPredicates) {\n\t\t\tconst evaluatedPredicate = this.optimize(evaluated, entity)\n\t\t\tconst newResult = replaceWhere(result, evaluatedPredicate, { [entity.primary]: { always: true } })\n\t\t\tif (newResult !== result) {\n\t\t\t\tresult = newResult\n\t\t\t\tchanged = true\n\t\t\t}\n\t\t}\n\t\tif (changed) {\n\t\t\treturn this.optimize(result, entity)\n\t\t}\n\n\t\treturn result\n\t}\n\n\tprivate optimizeWhere(where: Input.OptionalWhere, entity: Model.Entity, relationPath: ExtendedRelationContext[]): Input.OptionalWhere | boolean {\n\t\tconst operands: OptimizedOperand[] = []\n\n\t\tfor (const key in where) {\n\t\t\tconst value = where[key]\n\t\t\tlet operand: OptimizedOperand = undefined\n\t\t\tif (value === undefined || value === null) {\n\t\t\t\tcontinue\n\t\t\t} else if (key === 'and') {\n\t\t\t\tconst innerOperands: (Input.OptionalWhere | boolean)[] = []\n\t\t\t\tfor (const innerValue of value as readonly Input.OptionalWhere[]) {\n\t\t\t\t\tconst innerOperand = this.optimizeWhere(innerValue, entity, relationPath)\n\t\t\t\t\tif (innerOperand === false) {\n\t\t\t\t\t\treturn false\n\t\t\t\t\t}\n\t\t\t\t\tinnerOperands.push(innerOperand)\n\t\t\t\t}\n\t\t\t\toperand = this.optimizeAnd(innerOperands, entity, relationPath)\n\t\t\t} else if (key === 'or') {\n\t\t\t\tconst innerOperands: (Input.OptionalWhere | boolean)[] = []\n\t\t\t\tfor (const innerValue of value as readonly Input.OptionalWhere[]) {\n\t\t\t\t\tconst innerOperand = this.optimizeWhere(innerValue, entity, relationPath)\n\t\t\t\t\tif (innerOperand === true) {\n\t\t\t\t\t\toperand = true\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tinnerOperands.push(innerOperand)\n\t\t\t\t}\n\t\t\t\tif (operand !== true) {\n\t\t\t\t\toperand = this.optimizeOr(innerOperands, entity, relationPath)\n\t\t\t\t}\n\n\t\t\t} else if (key === 'not') {\n\t\t\t\toperand = optimizeNot(this.optimizeWhere(value as Input.OptionalWhere, entity, relationPath))\n\n\t\t\t} else {\n\t\t\t\toperand = this.resolveFieldValue(entity, key, value, relationPath)\n\t\t\t}\n\n\t\t\tif (operand === false) {\n\t\t\t\treturn false\n\n\t\t\t} else if (operand !== undefined) {\n\t\t\t\toperands.push(operand)\n\t\t\t}\n\t\t}\n\t\treturn this.optimizeAnd(operands, entity, relationPath)\n\t}\n\n\tprivate optimizeOr(operands: readonly OptimizedOperand[], entity: Model.Entity, relationPath: ExtendedRelationContext[]): Input.OptionalWhere | boolean {\n\t\tconst optimized = optimizeOr(operands)\n\t\tif (typeof optimized === 'boolean' || !Array.isArray(optimized.or)) {\n\t\t\treturn optimized\n\t\t}\n\t\tconst result = this.crossOptimize(optimized.or, entity, { never: true }, relationPath)\n\t\tif (result === optimized.or) {\n\t\t\treturn optimized\n\t\t}\n\t\treturn optimizeOr(result)\n\t}\n\n\tprivate optimizeAnd(operands: readonly OptimizedOperand[], entity: Model.Entity, relationPath: ExtendedRelationContext[]): Input.OptionalWhere | boolean {\n\t\tconst optimized = optimizeAnd(operands)\n\t\tif (typeof optimized === 'boolean' || !Array.isArray(optimized.and)) {\n\t\t\treturn optimized\n\t\t}\n\t\tconst result = this.crossOptimize(optimized.and, entity, { always: true }, relationPath)\n\t\tif (result === optimized.and) {\n\t\t\treturn optimized\n\t\t}\n\t\treturn optimizeAnd(result)\n\t}\n\n\tprivate crossOptimize(operands: Input.OptionalWhere[], entity: Model.Entity, replacement: Input.Condition, relationPath: ExtendedRelationContext[]): (Input.OptionalWhere | boolean)[] {\n\t\tlet result: (Input.OptionalWhere | boolean)[] = operands\n\t\tlet copied = false\n\t\tconst count = result.length\n\t\tfor (let i = 0; i < count; i++) {\n\t\t\tfor (let j = 0; j < count; j++) {\n\t\t\t\tconst a = result[j]\n\t\t\t\tconst b = result[i]\n\t\t\t\tif (i !== j && typeof a !== 'boolean' && typeof b !== 'boolean') {\n\t\t\t\t\tconst elResult = replaceWhere(a, b, { [entity.primary]: replacement }, {\n\t\t\t\t\t\treplaceSubOperands: true,\n\t\t\t\t\t})\n\t\t\t\t\tif (elResult !== a) {\n\t\t\t\t\t\tif (!copied) {\n\t\t\t\t\t\t\tresult = [...result]\n\t\t\t\t\t\t\tcopied = true\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresult[j] = this.optimizeWhere(elResult, entity, relationPath)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result\n\t}\n\n\tprivate resolveFieldValue(entity: Model.Entity, key: string, value: Input.OptionalWhere[string], relationPath: ExtendedRelationContext[]) {\n\t\treturn acceptFieldVisitor<Input.OptionalWhere | boolean>(this.model, entity, key, {\n\t\t\tvisitColumn: () => {\n\t\t\t\tconst optimizedCondition = this.conditionOptimizer.optimize(value as Input.Condition)\n\n\t\t\t\tif (typeof optimizedCondition === 'boolean') {\n\t\t\t\t\treturn optimizedCondition\n\t\t\t\t}\n\n\t\t\t\treturn { [key]: optimizedCondition }\n\t\t\t},\n\t\t\tvisitRelation: context => {\n\t\t\t\tlet where = value as Input.OptionalWhere\n\t\t\t\tconst newRelationPath: ExtendedRelationContext[] = [...relationPath]\n\t\t\t\tconst length = relationPath.length\n\t\t\t\tif (length > 0 && relationPath[length - 1].context.targetRelation?.name === context.relation.name) {\n\t\t\t\t\tconst item = newRelationPath.pop()\n\t\t\t\t\tconst type = item!.context.type\n\t\t\t\t\tif (item?.canEliminate && (type === 'oneHasMany' || type === 'oneHasOneOwning' || type === 'oneHasOneInverse')) {\n\t\t\t\t\t\twhere = replaceWhere(where, { [context.targetEntity.primary]: { isNull: true } }, { [context.targetEntity.primary]: { never: true } })\n\t\t\t\t\t\twhere = replaceWhere(where, { [context.targetEntity.primary]: { isNull: false } }, { [context.targetEntity.primary]: { always: true } })\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// first level relation - we are sure root exists\n\t\t\t\t\tconst canEliminate = length === 0 || relationPath[length - 1].isLast\n\t\t\t\t\tnewRelationPath.push({ context, isLast: false, canEliminate })\n\t\t\t\t}\n\t\t\t\tconst optimizedWhere = this.optimizeWhere(where, context.targetEntity, newRelationPath)\n\n\t\t\t\tif (typeof optimizedWhere === 'boolean') {\n\t\t\t\t\treturn optimizedWhere\n\t\t\t\t}\n\n\t\t\t\treturn { [key]: optimizedWhere }\n\t\t\t},\n\t\t})\n\t}\n}\n"],"names":["_WhereOptimizer","replaceWhere","optimizeNot","optimizeOr","optimizeAnd","acceptFieldVisitor"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"WhereOptimizer.cjs","sources":["../../../../../../../packages/engine-content-api/src/mapper/select/optimizer/WhereOptimizer.ts"],"sourcesContent":["import { Input, Model } from '@contember/schema'\nimport { ConditionOptimizer } from './ConditionOptimizer'\nimport { acceptFieldVisitor } from '@contember/schema-utils'\nimport { optimizeAnd, optimizeNot, optimizeOr } from './helpers'\nimport { replaceWhere } from './WhereReplacer'\n\ntype ExtendedRelationContext =\n\t& {\n\t\tcontext: Model.AnyRelationContext\n\t\tcanEliminate: boolean\n\t\tisLast: boolean\n\t}\n\nexport interface WhereOptimizationHints {\n\trelationPath?: Model.AnyRelationContext[]\n\tevaluatedPredicates?: Input.OptionalWhere[]\n}\n\ntype OptimizedOperand = Input.OptionalWhere | undefined | boolean\n\nexport class WhereOptimizer {\n\tprivate static eliminableRelations = new Set<Model.AnyRelationContext['type']>(['oneHasMany', 'oneHasOneInverse', 'oneHasOneOwning'])\n\n\tconstructor(\n\t\tprivate readonly model: Model.Schema,\n\t\tprivate readonly conditionOptimizer: ConditionOptimizer,\n\t) {\n\t}\n\n\tpublic optimize(where: Input.OptionalWhere, entity: Model.Entity, { relationPath = [], evaluatedPredicates = [] }: WhereOptimizationHints = {}): Input.OptionalWhere {\n\t\tlet processedRelationPath: ExtendedRelationContext[] = []\n\t\tfor (const i in relationPath) {\n\t\t\tconst el = relationPath[i]\n\t\t\tif (!WhereOptimizer.eliminableRelations.has(el.type)) {\n\t\t\t\tprocessedRelationPath = []\n\t\t\t} else {\n\t\t\t\tprocessedRelationPath.push({ context: el, canEliminate: true, isLast: Number(i) === relationPath.length })\n\t\t\t}\n\t\t}\n\t\tlet result = this.optimizeWhere(where, entity, processedRelationPath)\n\n\t\tif (typeof result === 'boolean') {\n\t\t\treturn { [entity.primary]: { [result ? 'always' : 'never']: true } }\n\t\t}\n\t\tlet changed = false\n\t\tfor (const evaluated of evaluatedPredicates) {\n\t\t\tconst evaluatedPredicate = this.optimize(evaluated, entity)\n\t\t\tconst newResult = replaceWhere(result, evaluatedPredicate, { [entity.primary]: { always: true } })\n\t\t\tif (newResult !== result) {\n\t\t\t\tresult = newResult\n\t\t\t\tchanged = true\n\t\t\t}\n\t\t}\n\t\tif (changed) {\n\t\t\treturn this.optimize(result, entity)\n\t\t}\n\n\t\treturn result\n\t}\n\n\tprivate optimizeWhere(where: Input.OptionalWhere, entity: Model.Entity, relationPath: ExtendedRelationContext[]): Input.OptionalWhere | boolean {\n\t\tconst operands: OptimizedOperand[] = []\n\n\t\tfor (const key in where) {\n\t\t\tconst value = where[key]\n\t\t\tlet operand: OptimizedOperand = undefined\n\t\t\tif (value === undefined || value === null) {\n\t\t\t\tcontinue\n\t\t\t} else if (key === 'and') {\n\t\t\t\tconst innerOperands: (Input.OptionalWhere | boolean)[] = []\n\t\t\t\tfor (const innerValue of value as readonly Input.OptionalWhere[]) {\n\t\t\t\t\tconst innerOperand = this.optimizeWhere(innerValue, entity, relationPath)\n\t\t\t\t\tif (innerOperand === false) {\n\t\t\t\t\t\treturn false\n\t\t\t\t\t}\n\t\t\t\t\tinnerOperands.push(innerOperand)\n\t\t\t\t}\n\t\t\t\toperand = this.optimizeAnd(innerOperands, entity, relationPath)\n\t\t\t} else if (key === 'or') {\n\t\t\t\tconst innerOperands: (Input.OptionalWhere | boolean)[] = []\n\t\t\t\tfor (const innerValue of value as readonly Input.OptionalWhere[]) {\n\t\t\t\t\tconst innerOperand = this.optimizeWhere(innerValue, entity, relationPath)\n\t\t\t\t\tif (innerOperand === true) {\n\t\t\t\t\t\toperand = true\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tinnerOperands.push(innerOperand)\n\t\t\t\t}\n\t\t\t\tif (operand !== true) {\n\t\t\t\t\toperand = this.optimizeOr(innerOperands, entity, relationPath)\n\t\t\t\t}\n\n\t\t\t} else if (key === 'not') {\n\t\t\t\toperand = optimizeNot(this.optimizeWhere(value as Input.OptionalWhere, entity, relationPath))\n\n\t\t\t} else {\n\t\t\t\toperand = this.resolveFieldValue(entity, key, value, relationPath)\n\t\t\t}\n\n\t\t\tif (operand === false) {\n\t\t\t\treturn false\n\n\t\t\t} else if (operand !== undefined) {\n\t\t\t\toperands.push(operand)\n\t\t\t}\n\t\t}\n\t\treturn this.optimizeAnd(operands, entity, relationPath)\n\t}\n\n\tprivate optimizeOr(operands: readonly OptimizedOperand[], entity: Model.Entity, relationPath: ExtendedRelationContext[]): Input.OptionalWhere | boolean {\n\t\tconst optimized = optimizeOr(operands)\n\t\tif (typeof optimized === 'boolean' || !Array.isArray(optimized.or)) {\n\t\t\treturn optimized\n\t\t}\n\t\tconst result = this.crossOptimize(optimized.or, entity, { never: true }, relationPath)\n\t\tif (result === optimized.or) {\n\t\t\treturn optimized\n\t\t}\n\t\treturn optimizeOr(result)\n\t}\n\n\tprivate optimizeAnd(operands: readonly OptimizedOperand[], entity: Model.Entity, relationPath: ExtendedRelationContext[]): Input.OptionalWhere | boolean {\n\t\tconst optimized = optimizeAnd(operands)\n\t\tif (typeof optimized === 'boolean' || !Array.isArray(optimized.and)) {\n\t\t\treturn optimized\n\t\t}\n\t\tconst result = this.crossOptimize(optimized.and, entity, { always: true }, relationPath)\n\t\tif (result === optimized.and) {\n\t\t\treturn optimized\n\t\t}\n\t\treturn optimizeAnd(result)\n\t}\n\n\tprivate crossOptimize(operands: Input.OptionalWhere[], entity: Model.Entity, replacement: Input.Condition, relationPath: ExtendedRelationContext[]): (Input.OptionalWhere | boolean)[] {\n\t\tlet result: (Input.OptionalWhere | boolean)[] = operands\n\t\tlet copied = false\n\t\tconst count = result.length\n\t\tfor (let i = 0; i < count; i++) {\n\t\t\tfor (let j = 0; j < count; j++) {\n\t\t\t\tconst a = result[j]\n\t\t\t\tconst b = result[i]\n\t\t\t\tif (i !== j && typeof a !== 'boolean' && typeof b !== 'boolean') {\n\t\t\t\t\tconst elResult = replaceWhere(a, b, { [entity.primary]: replacement }, {\n\t\t\t\t\t\treplaceSubOperands: true,\n\t\t\t\t\t})\n\t\t\t\t\tif (elResult !== a) {\n\t\t\t\t\t\tif (!copied) {\n\t\t\t\t\t\t\tresult = [...result]\n\t\t\t\t\t\t\tcopied = true\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresult[j] = this.optimizeWhere(elResult, entity, relationPath)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result\n\t}\n\n\tprivate resolveFieldValue(entity: Model.Entity, key: string, value: Input.OptionalWhere[string], relationPath: ExtendedRelationContext[]) {\n\t\treturn acceptFieldVisitor<Input.OptionalWhere | boolean>(this.model, entity, key, {\n\t\t\tvisitColumn: () => {\n\t\t\t\tconst optimizedCondition = this.conditionOptimizer.optimize(value as Input.Condition)\n\n\t\t\t\tif (typeof optimizedCondition === 'boolean') {\n\t\t\t\t\treturn optimizedCondition\n\t\t\t\t}\n\n\t\t\t\treturn { [key]: optimizedCondition }\n\t\t\t},\n\t\t\tvisitRelation: context => {\n\t\t\t\tlet where = value as Input.OptionalWhere\n\t\t\t\tconst newRelationPath: ExtendedRelationContext[] = [...relationPath]\n\t\t\t\tconst length = relationPath.length\n\t\t\t\tif (length > 0 && relationPath[length - 1].context.targetRelation?.name === context.relation.name) {\n\t\t\t\t\tconst item = newRelationPath.pop()\n\t\t\t\t\tconst type = item!.context.type\n\t\t\t\t\tif (item?.canEliminate && (type === 'oneHasMany' || type === 'oneHasOneOwning' || type === 'oneHasOneInverse')) {\n\t\t\t\t\t\twhere = replaceWhere(where, { [context.targetEntity.primary]: { isNull: true } }, { [context.targetEntity.primary]: { never: true } })\n\t\t\t\t\t\twhere = replaceWhere(where, { [context.targetEntity.primary]: { isNull: false } }, { [context.targetEntity.primary]: { always: true } })\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// first level relation - we are sure root exists\n\t\t\t\t\tconst canEliminate = length === 0 || relationPath[length - 1].isLast\n\t\t\t\t\tnewRelationPath.push({ context, isLast: false, canEliminate })\n\t\t\t\t}\n\t\t\t\tconst optimizedWhere = this.optimizeWhere(where, context.targetEntity, newRelationPath)\n\n\t\t\t\tif (typeof optimizedWhere === 'boolean') {\n\t\t\t\t\treturn optimizedWhere\n\t\t\t\t}\n\n\t\t\t\treturn { [key]: optimizedWhere }\n\t\t\t},\n\t\t})\n\t}\n}\n"],"names":["_WhereOptimizer","replaceWhere","optimizeNot","optimizeOr","optimizeAnd","acceptFieldVisitor"],"mappings":";;;;;;;;AAoBO,MAAM,kBAAN,MAAMA,iBAAe;AAAA,EAG3B,YACkB,OACA,oBAChB;AAFgB,SAAA,QAAA;AACA,SAAA,qBAAA;AAAA,EAAA;AAAA,EAIX,SAAS,OAA4B,QAAsB,EAAE,eAAe,CAAA,GAAI,sBAAsB,GAA+B,IAAA,IAAyB;AACpK,QAAI,wBAAmD,CAAC;AACxD,eAAW,KAAK,cAAc;AACvB,YAAA,KAAK,aAAa,CAAC;AACzB,UAAI,CAACA,iBAAe,oBAAoB,IAAI,GAAG,IAAI,GAAG;AACrD,gCAAwB,CAAC;AAAA,MAAA,OACnB;AACN,8BAAsB,KAAK,EAAE,SAAS,IAAI,cAAc,MAAM,QAAQ,OAAO,CAAC,MAAM,aAAa,OAAA,CAAQ;AAAA,MAAA;AAAA,IAC1G;AAED,QAAI,SAAS,KAAK,cAAc,OAAO,QAAQ,qBAAqB;AAEhE,QAAA,OAAO,WAAW,WAAW;AAChC,aAAO,EAAE,CAAC,OAAO,OAAO,GAAG,EAAE,CAAC,SAAS,WAAW,OAAO,GAAG,OAAO;AAAA,IAAA;AAEpE,QAAI,UAAU;AACd,eAAW,aAAa,qBAAqB;AAC5C,YAAM,qBAAqB,KAAK,SAAS,WAAW,MAAM;AAC1D,YAAM,YAAYC,cAAAA,aAAa,QAAQ,oBAAoB,EAAE,CAAC,OAAO,OAAO,GAAG,EAAE,QAAQ,QAAQ;AACjG,UAAI,cAAc,QAAQ;AAChB,iBAAA;AACC,kBAAA;AAAA,MAAA;AAAA,IACX;AAED,QAAI,SAAS;AACL,aAAA,KAAK,SAAS,QAAQ,MAAM;AAAA,IAAA;AAG7B,WAAA;AAAA,EAAA;AAAA,EAGA,cAAc,OAA4B,QAAsB,cAAwE;AAC/I,UAAM,WAA+B,CAAC;AAEtC,eAAW,OAAO,OAAO;AAClB,YAAA,QAAQ,MAAM,GAAG;AACvB,UAAI,UAA4B;AAC5B,UAAA,UAAU,UAAa,UAAU,MAAM;AAC1C;AAAA,MAAA,WACU,QAAQ,OAAO;AACzB,cAAM,gBAAmD,CAAC;AAC1D,mBAAW,cAAc,OAAyC;AACjE,gBAAM,eAAe,KAAK,cAAc,YAAY,QAAQ,YAAY;AACxE,cAAI,iBAAiB,OAAO;AACpB,mBAAA;AAAA,UAAA;AAER,wBAAc,KAAK,YAAY;AAAA,QAAA;AAEhC,kBAAU,KAAK,YAAY,eAAe,QAAQ,YAAY;AAAA,MAAA,WACpD,QAAQ,MAAM;AACxB,cAAM,gBAAmD,CAAC;AAC1D,mBAAW,cAAc,OAAyC;AACjE,gBAAM,eAAe,KAAK,cAAc,YAAY,QAAQ,YAAY;AACxE,cAAI,iBAAiB,MAAM;AAChB,sBAAA;AACV;AAAA,UAAA;AAED,wBAAc,KAAK,YAAY;AAAA,QAAA;AAEhC,YAAI,YAAY,MAAM;AACrB,oBAAU,KAAK,WAAW,eAAe,QAAQ,YAAY;AAAA,QAAA;AAAA,MAC9D,WAEU,QAAQ,OAAO;AACzB,kBAAUC,oBAAY,KAAK,cAAc,OAA8B,QAAQ,YAAY,CAAC;AAAA,MAAA,OAEtF;AACN,kBAAU,KAAK,kBAAkB,QAAQ,KAAK,OAAO,YAAY;AAAA,MAAA;AAGlE,UAAI,YAAY,OAAO;AACf,eAAA;AAAA,MAAA,WAEG,YAAY,QAAW;AACjC,iBAAS,KAAK,OAAO;AAAA,MAAA;AAAA,IACtB;AAED,WAAO,KAAK,YAAY,UAAU,QAAQ,YAAY;AAAA,EAAA;AAAA,EAG/C,WAAW,UAAuC,QAAsB,cAAwE;AACjJ,UAAA,YAAYC,mBAAW,QAAQ;AACjC,QAAA,OAAO,cAAc,aAAa,CAAC,MAAM,QAAQ,UAAU,EAAE,GAAG;AAC5D,aAAA;AAAA,IAAA;AAEF,UAAA,SAAS,KAAK,cAAc,UAAU,IAAI,QAAQ,EAAE,OAAO,KAAK,GAAG,YAAY;AACjF,QAAA,WAAW,UAAU,IAAI;AACrB,aAAA;AAAA,IAAA;AAER,WAAOA,QAAAA,WAAW,MAAM;AAAA,EAAA;AAAA,EAGjB,YAAY,UAAuC,QAAsB,cAAwE;AAClJ,UAAA,YAAYC,oBAAY,QAAQ;AAClC,QAAA,OAAO,cAAc,aAAa,CAAC,MAAM,QAAQ,UAAU,GAAG,GAAG;AAC7D,aAAA;AAAA,IAAA;AAEF,UAAA,SAAS,KAAK,cAAc,UAAU,KAAK,QAAQ,EAAE,QAAQ,KAAK,GAAG,YAAY;AACnF,QAAA,WAAW,UAAU,KAAK;AACtB,aAAA;AAAA,IAAA;AAER,WAAOA,QAAAA,YAAY,MAAM;AAAA,EAAA;AAAA,EAGlB,cAAc,UAAiC,QAAsB,aAA8B,cAA4E;AACtL,QAAI,SAA4C;AAChD,QAAI,SAAS;AACb,UAAM,QAAQ,OAAO;AACrB,aAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC/B,eAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AACzB,cAAA,IAAI,OAAO,CAAC;AACZ,cAAA,IAAI,OAAO,CAAC;AAClB,YAAI,MAAM,KAAK,OAAO,MAAM,aAAa,OAAO,MAAM,WAAW;AAC1D,gBAAA,WAAWH,cAAa,aAAA,GAAG,GAAG,EAAE,CAAC,OAAO,OAAO,GAAG,eAAe;AAAA,YACtE,oBAAoB;AAAA,UAAA,CACpB;AACD,cAAI,aAAa,GAAG;AACnB,gBAAI,CAAC,QAAQ;AACH,uBAAA,CAAC,GAAG,MAAM;AACV,uBAAA;AAAA,YAAA;AAEV,mBAAO,CAAC,IAAI,KAAK,cAAc,UAAU,QAAQ,YAAY;AAAA,UAAA;AAAA,QAC9D;AAAA,MACD;AAAA,IACD;AAEM,WAAA;AAAA,EAAA;AAAA,EAGA,kBAAkB,QAAsB,KAAa,OAAoC,cAAyC;AACzI,WAAOI,YAAkD,mBAAA,KAAK,OAAO,QAAQ,KAAK;AAAA,MACjF,aAAa,MAAM;AAClB,cAAM,qBAAqB,KAAK,mBAAmB,SAAS,KAAwB;AAEhF,YAAA,OAAO,uBAAuB,WAAW;AACrC,iBAAA;AAAA,QAAA;AAGR,eAAO,EAAE,CAAC,GAAG,GAAG,mBAAmB;AAAA,MACpC;AAAA,MACA,eAAe,CAAW,YAAA;AACzB,YAAI,QAAQ;AACN,cAAA,kBAA6C,CAAC,GAAG,YAAY;AACnE,cAAM,SAAS,aAAa;AACxB,YAAA,SAAS,KAAK,aAAa,SAAS,CAAC,EAAE,QAAQ,gBAAgB,SAAS,QAAQ,SAAS,MAAM;AAC5F,gBAAA,OAAO,gBAAgB,IAAI;AAC3B,gBAAA,OAAO,KAAM,QAAQ;AAC3B,cAAI,MAAM,iBAAiB,SAAS,gBAAgB,SAAS,qBAAqB,SAAS,qBAAqB;AACvG,oBAAAJ,cAAA,aAAa,OAAO,EAAE,CAAC,QAAQ,aAAa,OAAO,GAAG,EAAE,QAAQ,KAAA,KAAU,EAAE,CAAC,QAAQ,aAAa,OAAO,GAAG,EAAE,OAAO,KAAK,GAAG;AAC7H,oBAAAA,cAAA,aAAa,OAAO,EAAE,CAAC,QAAQ,aAAa,OAAO,GAAG,EAAE,QAAQ,MAAA,KAAW,EAAE,CAAC,QAAQ,aAAa,OAAO,GAAG,EAAE,QAAQ,KAAK,GAAG;AAAA,UAAA;AAAA,QACxI,OACM;AAEN,gBAAM,eAAe,WAAW,KAAK,aAAa,SAAS,CAAC,EAAE;AAC9D,0BAAgB,KAAK,EAAE,SAAS,QAAQ,OAAO,cAAc;AAAA,QAAA;AAE9D,cAAM,iBAAiB,KAAK,cAAc,OAAO,QAAQ,cAAc,eAAe;AAElF,YAAA,OAAO,mBAAmB,WAAW;AACjC,iBAAA;AAAA,QAAA;AAGR,eAAO,EAAE,CAAC,GAAG,GAAG,eAAe;AAAA,MAAA;AAAA,IAChC,CACA;AAAA,EAAA;AAEH;AA9KC,cADY,iBACG,uBAA0B,oBAAA,IAAsC,CAAC,cAAc,oBAAoB,iBAAiB,CAAC,CAAA;AAD9H,IAAM,iBAAN;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WhereOptimizer.js","sources":["../../../../../../../packages/engine-content-api/src/mapper/select/optimizer/WhereOptimizer.ts"],"sourcesContent":["import { Input, Model } from '@contember/schema'\nimport { ConditionOptimizer } from './ConditionOptimizer'\nimport { acceptFieldVisitor } from '@contember/schema-utils'\nimport { optimizeAnd, optimizeNot, optimizeOr } from './helpers'\nimport { replaceWhere } from './WhereReplacer'\n\ntype ExtendedRelationContext =\n\t& {\n\t\tcontext: Model.AnyRelationContext\n\t\tcanEliminate: boolean\n\t\tisLast: boolean\n\t}\n\nexport interface WhereOptimizationHints {\n\trelationPath?: Model.AnyRelationContext[]\n\tevaluatedPredicates?: Input.OptionalWhere[]\n}\n\ntype OptimizedOperand = Input.OptionalWhere | undefined | boolean\n\nexport class WhereOptimizer {\n\tprivate static eliminableRelations = new Set<Model.AnyRelationContext['type']>(['oneHasMany', 'oneHasOneInverse', 'oneHasOneOwning'])\n\n\tconstructor(\n\t\tprivate readonly model: Model.Schema,\n\t\tprivate readonly conditionOptimizer: ConditionOptimizer,\n\t) {\n\t}\n\n\tpublic optimize(where: Input.OptionalWhere, entity: Model.Entity, { relationPath = [], evaluatedPredicates = [] }: WhereOptimizationHints = {}): Input.OptionalWhere {\n\t\tlet processedRelationPath: ExtendedRelationContext[] = []\n\t\tfor (const i in relationPath) {\n\t\t\tconst el = relationPath[i]\n\t\t\tif (!WhereOptimizer.eliminableRelations.has(el.type)) {\n\t\t\t\tprocessedRelationPath = []\n\t\t\t} else {\n\t\t\t\tprocessedRelationPath.push({ context: el, canEliminate: true, isLast: Number(i) === relationPath.length })\n\t\t\t}\n\t\t}\n\t\tlet result = this.optimizeWhere(where, entity, processedRelationPath)\n\n\t\tif (typeof result === 'boolean') {\n\t\t\treturn { [entity.primary]: { [result ? 'always' : 'never']: true } }\n\t\t}\n\t\tlet changed = false\n\t\tfor (const evaluated of evaluatedPredicates) {\n\t\t\tconst evaluatedPredicate = this.optimize(evaluated, entity)\n\t\t\tconst newResult = replaceWhere(result, evaluatedPredicate, { [entity.primary]: { always: true } })\n\t\t\tif (newResult !== result) {\n\t\t\t\tresult = newResult\n\t\t\t\tchanged = true\n\t\t\t}\n\t\t}\n\t\tif (changed) {\n\t\t\treturn this.optimize(result, entity)\n\t\t}\n\n\t\treturn result\n\t}\n\n\tprivate optimizeWhere(where: Input.OptionalWhere, entity: Model.Entity, relationPath: ExtendedRelationContext[]): Input.OptionalWhere | boolean {\n\t\tconst operands: OptimizedOperand[] = []\n\n\t\tfor (const key in where) {\n\t\t\tconst value = where[key]\n\t\t\tlet operand: OptimizedOperand = undefined\n\t\t\tif (value === undefined || value === null) {\n\t\t\t\tcontinue\n\t\t\t} else if (key === 'and') {\n\t\t\t\tconst innerOperands: (Input.OptionalWhere | boolean)[] = []\n\t\t\t\tfor (const innerValue of value as readonly Input.OptionalWhere[]) {\n\t\t\t\t\tconst innerOperand = this.optimizeWhere(innerValue, entity, relationPath)\n\t\t\t\t\tif (innerOperand === false) {\n\t\t\t\t\t\treturn false\n\t\t\t\t\t}\n\t\t\t\t\tinnerOperands.push(innerOperand)\n\t\t\t\t}\n\t\t\t\toperand = this.optimizeAnd(innerOperands, entity, relationPath)\n\t\t\t} else if (key === 'or') {\n\t\t\t\tconst innerOperands: (Input.OptionalWhere | boolean)[] = []\n\t\t\t\tfor (const innerValue of value as readonly Input.OptionalWhere[]) {\n\t\t\t\t\tconst innerOperand = this.optimizeWhere(innerValue, entity, relationPath)\n\t\t\t\t\tif (innerOperand === true) {\n\t\t\t\t\t\toperand = true\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tinnerOperands.push(innerOperand)\n\t\t\t\t}\n\t\t\t\tif (operand !== true) {\n\t\t\t\t\toperand = this.optimizeOr(innerOperands, entity, relationPath)\n\t\t\t\t}\n\n\t\t\t} else if (key === 'not') {\n\t\t\t\toperand = optimizeNot(this.optimizeWhere(value as Input.OptionalWhere, entity, relationPath))\n\n\t\t\t} else {\n\t\t\t\toperand = this.resolveFieldValue(entity, key, value, relationPath)\n\t\t\t}\n\n\t\t\tif (operand === false) {\n\t\t\t\treturn false\n\n\t\t\t} else if (operand !== undefined) {\n\t\t\t\toperands.push(operand)\n\t\t\t}\n\t\t}\n\t\treturn this.optimizeAnd(operands, entity, relationPath)\n\t}\n\n\tprivate optimizeOr(operands: readonly OptimizedOperand[], entity: Model.Entity, relationPath: ExtendedRelationContext[]): Input.OptionalWhere | boolean {\n\t\tconst optimized = optimizeOr(operands)\n\t\tif (typeof optimized === 'boolean' || !Array.isArray(optimized.or)) {\n\t\t\treturn optimized\n\t\t}\n\t\tconst result = this.crossOptimize(optimized.or, entity, { never: true }, relationPath)\n\t\tif (result === optimized.or) {\n\t\t\treturn optimized\n\t\t}\n\t\treturn optimizeOr(result)\n\t}\n\n\tprivate optimizeAnd(operands: readonly OptimizedOperand[], entity: Model.Entity, relationPath: ExtendedRelationContext[]): Input.OptionalWhere | boolean {\n\t\tconst optimized = optimizeAnd(operands)\n\t\tif (typeof optimized === 'boolean' || !Array.isArray(optimized.and)) {\n\t\t\treturn optimized\n\t\t}\n\t\tconst result = this.crossOptimize(optimized.and, entity, { always: true }, relationPath)\n\t\tif (result === optimized.and) {\n\t\t\treturn optimized\n\t\t}\n\t\treturn optimizeAnd(result)\n\t}\n\n\tprivate crossOptimize(operands: Input.OptionalWhere[], entity: Model.Entity, replacement: Input.Condition, relationPath: ExtendedRelationContext[]): (Input.OptionalWhere | boolean)[] {\n\t\tlet result: (Input.OptionalWhere | boolean)[] = operands\n\t\tlet copied = false\n\t\tconst count = result.length\n\t\tfor (let i = 0; i < count; i++) {\n\t\t\tfor (let j = 0; j < count; j++) {\n\t\t\t\tconst a = result[j]\n\t\t\t\tconst b = result[i]\n\t\t\t\tif (i !== j && typeof a !== 'boolean' && typeof b !== 'boolean') {\n\t\t\t\t\tconst elResult = replaceWhere(a, b, { [entity.primary]: replacement }, {\n\t\t\t\t\t\treplaceSubOperands: true,\n\t\t\t\t\t})\n\t\t\t\t\tif (elResult !== a) {\n\t\t\t\t\t\tif (!copied) {\n\t\t\t\t\t\t\tresult = [...result]\n\t\t\t\t\t\t\tcopied = true\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresult[j] = this.optimizeWhere(elResult, entity, relationPath)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result\n\t}\n\n\tprivate resolveFieldValue(entity: Model.Entity, key: string, value: Input.OptionalWhere[string], relationPath: ExtendedRelationContext[]) {\n\t\treturn acceptFieldVisitor<Input.OptionalWhere | boolean>(this.model, entity, key, {\n\t\t\tvisitColumn: () => {\n\t\t\t\tconst optimizedCondition = this.conditionOptimizer.optimize(value as Input.Condition)\n\n\t\t\t\tif (typeof optimizedCondition === 'boolean') {\n\t\t\t\t\treturn optimizedCondition\n\t\t\t\t}\n\n\t\t\t\treturn { [key]: optimizedCondition }\n\t\t\t},\n\t\t\tvisitRelation: context => {\n\t\t\t\tlet where = value as Input.OptionalWhere\n\t\t\t\tconst newRelationPath: ExtendedRelationContext[] = [...relationPath]\n\t\t\t\tconst length = relationPath.length\n\t\t\t\tif (length > 0 && relationPath[length - 1].context.targetRelation?.name === context.relation.name) {\n\t\t\t\t\tconst item = newRelationPath.pop()\n\t\t\t\t\tconst type = item!.context.type\n\t\t\t\t\tif (item?.canEliminate && (type === 'oneHasMany' || type === 'oneHasOneOwning' || type === 'oneHasOneInverse')) {\n\t\t\t\t\t\twhere = replaceWhere(where, { [context.targetEntity.primary]: { isNull: true } }, { [context.targetEntity.primary]: { never: true } })\n\t\t\t\t\t\twhere = replaceWhere(where, { [context.targetEntity.primary]: { isNull: false } }, { [context.targetEntity.primary]: { always: true } })\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// first level relation - we are sure root exists\n\t\t\t\t\tconst canEliminate = length === 0 || relationPath[length - 1].isLast\n\t\t\t\t\tnewRelationPath.push({ context, isLast: false, canEliminate })\n\t\t\t\t}\n\t\t\t\tconst optimizedWhere = this.optimizeWhere(where, context.targetEntity, newRelationPath)\n\n\t\t\t\tif (typeof optimizedWhere === 'boolean') {\n\t\t\t\t\treturn optimizedWhere\n\t\t\t\t}\n\n\t\t\t\treturn { [key]: optimizedWhere }\n\t\t\t},\n\t\t})\n\t}\n}\n"],"names":["_WhereOptimizer"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"WhereOptimizer.js","sources":["../../../../../../../packages/engine-content-api/src/mapper/select/optimizer/WhereOptimizer.ts"],"sourcesContent":["import { Input, Model } from '@contember/schema'\nimport { ConditionOptimizer } from './ConditionOptimizer'\nimport { acceptFieldVisitor } from '@contember/schema-utils'\nimport { optimizeAnd, optimizeNot, optimizeOr } from './helpers'\nimport { replaceWhere } from './WhereReplacer'\n\ntype ExtendedRelationContext =\n\t& {\n\t\tcontext: Model.AnyRelationContext\n\t\tcanEliminate: boolean\n\t\tisLast: boolean\n\t}\n\nexport interface WhereOptimizationHints {\n\trelationPath?: Model.AnyRelationContext[]\n\tevaluatedPredicates?: Input.OptionalWhere[]\n}\n\ntype OptimizedOperand = Input.OptionalWhere | undefined | boolean\n\nexport class WhereOptimizer {\n\tprivate static eliminableRelations = new Set<Model.AnyRelationContext['type']>(['oneHasMany', 'oneHasOneInverse', 'oneHasOneOwning'])\n\n\tconstructor(\n\t\tprivate readonly model: Model.Schema,\n\t\tprivate readonly conditionOptimizer: ConditionOptimizer,\n\t) {\n\t}\n\n\tpublic optimize(where: Input.OptionalWhere, entity: Model.Entity, { relationPath = [], evaluatedPredicates = [] }: WhereOptimizationHints = {}): Input.OptionalWhere {\n\t\tlet processedRelationPath: ExtendedRelationContext[] = []\n\t\tfor (const i in relationPath) {\n\t\t\tconst el = relationPath[i]\n\t\t\tif (!WhereOptimizer.eliminableRelations.has(el.type)) {\n\t\t\t\tprocessedRelationPath = []\n\t\t\t} else {\n\t\t\t\tprocessedRelationPath.push({ context: el, canEliminate: true, isLast: Number(i) === relationPath.length })\n\t\t\t}\n\t\t}\n\t\tlet result = this.optimizeWhere(where, entity, processedRelationPath)\n\n\t\tif (typeof result === 'boolean') {\n\t\t\treturn { [entity.primary]: { [result ? 'always' : 'never']: true } }\n\t\t}\n\t\tlet changed = false\n\t\tfor (const evaluated of evaluatedPredicates) {\n\t\t\tconst evaluatedPredicate = this.optimize(evaluated, entity)\n\t\t\tconst newResult = replaceWhere(result, evaluatedPredicate, { [entity.primary]: { always: true } })\n\t\t\tif (newResult !== result) {\n\t\t\t\tresult = newResult\n\t\t\t\tchanged = true\n\t\t\t}\n\t\t}\n\t\tif (changed) {\n\t\t\treturn this.optimize(result, entity)\n\t\t}\n\n\t\treturn result\n\t}\n\n\tprivate optimizeWhere(where: Input.OptionalWhere, entity: Model.Entity, relationPath: ExtendedRelationContext[]): Input.OptionalWhere | boolean {\n\t\tconst operands: OptimizedOperand[] = []\n\n\t\tfor (const key in where) {\n\t\t\tconst value = where[key]\n\t\t\tlet operand: OptimizedOperand = undefined\n\t\t\tif (value === undefined || value === null) {\n\t\t\t\tcontinue\n\t\t\t} else if (key === 'and') {\n\t\t\t\tconst innerOperands: (Input.OptionalWhere | boolean)[] = []\n\t\t\t\tfor (const innerValue of value as readonly Input.OptionalWhere[]) {\n\t\t\t\t\tconst innerOperand = this.optimizeWhere(innerValue, entity, relationPath)\n\t\t\t\t\tif (innerOperand === false) {\n\t\t\t\t\t\treturn false\n\t\t\t\t\t}\n\t\t\t\t\tinnerOperands.push(innerOperand)\n\t\t\t\t}\n\t\t\t\toperand = this.optimizeAnd(innerOperands, entity, relationPath)\n\t\t\t} else if (key === 'or') {\n\t\t\t\tconst innerOperands: (Input.OptionalWhere | boolean)[] = []\n\t\t\t\tfor (const innerValue of value as readonly Input.OptionalWhere[]) {\n\t\t\t\t\tconst innerOperand = this.optimizeWhere(innerValue, entity, relationPath)\n\t\t\t\t\tif (innerOperand === true) {\n\t\t\t\t\t\toperand = true\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tinnerOperands.push(innerOperand)\n\t\t\t\t}\n\t\t\t\tif (operand !== true) {\n\t\t\t\t\toperand = this.optimizeOr(innerOperands, entity, relationPath)\n\t\t\t\t}\n\n\t\t\t} else if (key === 'not') {\n\t\t\t\toperand = optimizeNot(this.optimizeWhere(value as Input.OptionalWhere, entity, relationPath))\n\n\t\t\t} else {\n\t\t\t\toperand = this.resolveFieldValue(entity, key, value, relationPath)\n\t\t\t}\n\n\t\t\tif (operand === false) {\n\t\t\t\treturn false\n\n\t\t\t} else if (operand !== undefined) {\n\t\t\t\toperands.push(operand)\n\t\t\t}\n\t\t}\n\t\treturn this.optimizeAnd(operands, entity, relationPath)\n\t}\n\n\tprivate optimizeOr(operands: readonly OptimizedOperand[], entity: Model.Entity, relationPath: ExtendedRelationContext[]): Input.OptionalWhere | boolean {\n\t\tconst optimized = optimizeOr(operands)\n\t\tif (typeof optimized === 'boolean' || !Array.isArray(optimized.or)) {\n\t\t\treturn optimized\n\t\t}\n\t\tconst result = this.crossOptimize(optimized.or, entity, { never: true }, relationPath)\n\t\tif (result === optimized.or) {\n\t\t\treturn optimized\n\t\t}\n\t\treturn optimizeOr(result)\n\t}\n\n\tprivate optimizeAnd(operands: readonly OptimizedOperand[], entity: Model.Entity, relationPath: ExtendedRelationContext[]): Input.OptionalWhere | boolean {\n\t\tconst optimized = optimizeAnd(operands)\n\t\tif (typeof optimized === 'boolean' || !Array.isArray(optimized.and)) {\n\t\t\treturn optimized\n\t\t}\n\t\tconst result = this.crossOptimize(optimized.and, entity, { always: true }, relationPath)\n\t\tif (result === optimized.and) {\n\t\t\treturn optimized\n\t\t}\n\t\treturn optimizeAnd(result)\n\t}\n\n\tprivate crossOptimize(operands: Input.OptionalWhere[], entity: Model.Entity, replacement: Input.Condition, relationPath: ExtendedRelationContext[]): (Input.OptionalWhere | boolean)[] {\n\t\tlet result: (Input.OptionalWhere | boolean)[] = operands\n\t\tlet copied = false\n\t\tconst count = result.length\n\t\tfor (let i = 0; i < count; i++) {\n\t\t\tfor (let j = 0; j < count; j++) {\n\t\t\t\tconst a = result[j]\n\t\t\t\tconst b = result[i]\n\t\t\t\tif (i !== j && typeof a !== 'boolean' && typeof b !== 'boolean') {\n\t\t\t\t\tconst elResult = replaceWhere(a, b, { [entity.primary]: replacement }, {\n\t\t\t\t\t\treplaceSubOperands: true,\n\t\t\t\t\t})\n\t\t\t\t\tif (elResult !== a) {\n\t\t\t\t\t\tif (!copied) {\n\t\t\t\t\t\t\tresult = [...result]\n\t\t\t\t\t\t\tcopied = true\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresult[j] = this.optimizeWhere(elResult, entity, relationPath)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result\n\t}\n\n\tprivate resolveFieldValue(entity: Model.Entity, key: string, value: Input.OptionalWhere[string], relationPath: ExtendedRelationContext[]) {\n\t\treturn acceptFieldVisitor<Input.OptionalWhere | boolean>(this.model, entity, key, {\n\t\t\tvisitColumn: () => {\n\t\t\t\tconst optimizedCondition = this.conditionOptimizer.optimize(value as Input.Condition)\n\n\t\t\t\tif (typeof optimizedCondition === 'boolean') {\n\t\t\t\t\treturn optimizedCondition\n\t\t\t\t}\n\n\t\t\t\treturn { [key]: optimizedCondition }\n\t\t\t},\n\t\t\tvisitRelation: context => {\n\t\t\t\tlet where = value as Input.OptionalWhere\n\t\t\t\tconst newRelationPath: ExtendedRelationContext[] = [...relationPath]\n\t\t\t\tconst length = relationPath.length\n\t\t\t\tif (length > 0 && relationPath[length - 1].context.targetRelation?.name === context.relation.name) {\n\t\t\t\t\tconst item = newRelationPath.pop()\n\t\t\t\t\tconst type = item!.context.type\n\t\t\t\t\tif (item?.canEliminate && (type === 'oneHasMany' || type === 'oneHasOneOwning' || type === 'oneHasOneInverse')) {\n\t\t\t\t\t\twhere = replaceWhere(where, { [context.targetEntity.primary]: { isNull: true } }, { [context.targetEntity.primary]: { never: true } })\n\t\t\t\t\t\twhere = replaceWhere(where, { [context.targetEntity.primary]: { isNull: false } }, { [context.targetEntity.primary]: { always: true } })\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// first level relation - we are sure root exists\n\t\t\t\t\tconst canEliminate = length === 0 || relationPath[length - 1].isLast\n\t\t\t\t\tnewRelationPath.push({ context, isLast: false, canEliminate })\n\t\t\t\t}\n\t\t\t\tconst optimizedWhere = this.optimizeWhere(where, context.targetEntity, newRelationPath)\n\n\t\t\t\tif (typeof optimizedWhere === 'boolean') {\n\t\t\t\t\treturn optimizedWhere\n\t\t\t\t}\n\n\t\t\t\treturn { [key]: optimizedWhere }\n\t\t\t},\n\t\t})\n\t}\n}\n"],"names":["_WhereOptimizer"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WhereReplacer.cjs","sources":["../../../../../../../packages/engine-content-api/src/mapper/select/optimizer/WhereReplacer.ts"],"sourcesContent":["import { Input, Writable } from '@contember/schema'\nimport deepEqual from 'fast-deep-equal'\n\nexport const replaceWhere = (subject: Input.OptionalWhere, find: Input.OptionalWhere, replace: Input.OptionalWhere, opts: { replaceSubOperands?: boolean } = {}): Input.OptionalWhere => {\n\tif (deepEqual(subject, find)) {\n\t\treturn replace\n\t}\n\tlet result: Writable<Input.OptionalWhere> = subject\n\tlet copied = false\n\t// copy on write to preserve referential integrity, when nothing has changed\n\tconst write = <T extends string>(key: T, value: Input.OptionalWhere[T]) => {\n\t\tif (!copied) {\n\t\t\tresult = { ...result }\n\t\t\tcopied = true\n\t\t}\n\t\tresult[key] = value\n\t}\n\n\tfor (const key in subject) {\n\t\tconst value = subject[key]\n\t\tif (key === 'not') {\n\t\t\tconst newNot = replaceWhere(value as Input.OptionalWhere, find, replace, opts)\n\t\t\tif (newNot !== value) {\n\t\t\t\twrite('not', newNot)\n\t\t\t}\n\t\t} else if (key === 'and' || key === 'or') {\n\t\t\tconst operands = value as Input.OptionalWhere[]\n\t\t\tconst subOperandsToFind = opts.replaceSubOperands && Object.keys(find).length === 1 && find[key] ? (find[key] as Input.OptionalWhere[]) : null\n\t\t\tif (subOperandsToFind !== null && containsAllOperands(operands, subOperandsToFind)) {\n\t\t\t\twrite(key, [replace])\n\t\t\t} else {\n\t\t\t\tconst items: Input.OptionalWhere[] = []\n\t\t\t\tlet itemChanged = false\n\t\t\t\tfor (const el of operands) {\n\t\t\t\t\tconst newEl = replaceWhere(el, find, replace, opts)\n\t\t\t\t\tif (newEl !== el) {\n\t\t\t\t\t\titemChanged = true\n\t\t\t\t\t}\n\t\t\t\t\titems.push(newEl)\n\t\t\t\t}\n\t\t\t\tif (itemChanged) {\n\t\t\t\t\twrite(key, items)\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t}\n\treturn result\n}\n\n\nconst containsAllOperands = (subjectOperands: Input.OptionalWhere[], findOperands: Input.OptionalWhere[]): boolean => {\n\tfor (const op1 of findOperands) {\n\t\tlet found = false\n\t\tfor (const op2 of subjectOperands) {\n\t\t\tif (deepEqual(op1, op2)) {\n\t\t\t\tfound = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif (!found) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n"],"names":[],"mappings":";;;AAGO,MAAM,eAAe,CAAC,SAA8B,MAA2B,SAA8B,OAAyC,CAAA,MAA4B;AACpL,MAAA,UAAU,SAAS,IAAI,GAAG;AACtB,WAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"WhereReplacer.cjs","sources":["../../../../../../../packages/engine-content-api/src/mapper/select/optimizer/WhereReplacer.ts"],"sourcesContent":["import { Input, Writable } from '@contember/schema'\nimport deepEqual from 'fast-deep-equal'\n\nexport const replaceWhere = (subject: Input.OptionalWhere, find: Input.OptionalWhere, replace: Input.OptionalWhere, opts: { replaceSubOperands?: boolean } = {}): Input.OptionalWhere => {\n\tif (deepEqual(subject, find)) {\n\t\treturn replace\n\t}\n\tlet result: Writable<Input.OptionalWhere> = subject\n\tlet copied = false\n\t// copy on write to preserve referential integrity, when nothing has changed\n\tconst write = <T extends string>(key: T, value: Input.OptionalWhere[T]) => {\n\t\tif (!copied) {\n\t\t\tresult = { ...result }\n\t\t\tcopied = true\n\t\t}\n\t\tresult[key] = value\n\t}\n\n\tfor (const key in subject) {\n\t\tconst value = subject[key]\n\t\tif (key === 'not') {\n\t\t\tconst newNot = replaceWhere(value as Input.OptionalWhere, find, replace, opts)\n\t\t\tif (newNot !== value) {\n\t\t\t\twrite('not', newNot)\n\t\t\t}\n\t\t} else if (key === 'and' || key === 'or') {\n\t\t\tconst operands = value as Input.OptionalWhere[]\n\t\t\tconst subOperandsToFind = opts.replaceSubOperands && Object.keys(find).length === 1 && find[key] ? (find[key] as Input.OptionalWhere[]) : null\n\t\t\tif (subOperandsToFind !== null && containsAllOperands(operands, subOperandsToFind)) {\n\t\t\t\twrite(key, [replace])\n\t\t\t} else {\n\t\t\t\tconst items: Input.OptionalWhere[] = []\n\t\t\t\tlet itemChanged = false\n\t\t\t\tfor (const el of operands) {\n\t\t\t\t\tconst newEl = replaceWhere(el, find, replace, opts)\n\t\t\t\t\tif (newEl !== el) {\n\t\t\t\t\t\titemChanged = true\n\t\t\t\t\t}\n\t\t\t\t\titems.push(newEl)\n\t\t\t\t}\n\t\t\t\tif (itemChanged) {\n\t\t\t\t\twrite(key, items)\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t}\n\treturn result\n}\n\n\nconst containsAllOperands = (subjectOperands: Input.OptionalWhere[], findOperands: Input.OptionalWhere[]): boolean => {\n\tfor (const op1 of findOperands) {\n\t\tlet found = false\n\t\tfor (const op2 of subjectOperands) {\n\t\t\tif (deepEqual(op1, op2)) {\n\t\t\t\tfound = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif (!found) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n"],"names":[],"mappings":";;;AAGO,MAAM,eAAe,CAAC,SAA8B,MAA2B,SAA8B,OAAyC,CAAA,MAA4B;AACpL,MAAA,UAAU,SAAS,IAAI,GAAG;AACtB,WAAA;AAAA,EAAA;AAER,MAAI,SAAwC;AAC5C,MAAI,SAAS;AAEP,QAAA,QAAQ,CAAmB,KAAQ,UAAkC;AAC1E,QAAI,CAAC,QAAQ;AACH,eAAA,EAAE,GAAG,OAAO;AACZ,eAAA;AAAA,IAAA;AAEV,WAAO,GAAG,IAAI;AAAA,EACf;AAEA,aAAW,OAAO,SAAS;AACpB,UAAA,QAAQ,QAAQ,GAAG;AACzB,QAAI,QAAQ,OAAO;AAClB,YAAM,SAAS,aAAa,OAA8B,MAAM,SAAS,IAAI;AAC7E,UAAI,WAAW,OAAO;AACrB,cAAM,OAAO,MAAM;AAAA,MAAA;AAAA,IAEV,WAAA,QAAQ,SAAS,QAAQ,MAAM;AACzC,YAAM,WAAW;AACjB,YAAM,oBAAoB,KAAK,sBAAsB,OAAO,KAAK,IAAI,EAAE,WAAW,KAAK,KAAK,GAAG,IAAK,KAAK,GAAG,IAA8B;AAC1I,UAAI,sBAAsB,QAAQ,oBAAoB,UAAU,iBAAiB,GAAG;AAC7E,cAAA,KAAK,CAAC,OAAO,CAAC;AAAA,MAAA,OACd;AACN,cAAM,QAA+B,CAAC;AACtC,YAAI,cAAc;AAClB,mBAAW,MAAM,UAAU;AAC1B,gBAAM,QAAQ,aAAa,IAAI,MAAM,SAAS,IAAI;AAClD,cAAI,UAAU,IAAI;AACH,0BAAA;AAAA,UAAA;AAEf,gBAAM,KAAK,KAAK;AAAA,QAAA;AAEjB,YAAI,aAAa;AAChB,gBAAM,KAAK,KAAK;AAAA,QAAA;AAAA,MACjB;AAAA,IACD;AAAA,EAED;AAEM,SAAA;AACR;AAGA,MAAM,sBAAsB,CAAC,iBAAwC,iBAAiD;AACrH,aAAW,OAAO,cAAc;AAC/B,QAAI,QAAQ;AACZ,eAAW,OAAO,iBAAiB;AAC9B,UAAA,UAAU,KAAK,GAAG,GAAG;AAChB,gBAAA;AACR;AAAA,MAAA;AAAA,IACD;AAED,QAAI,CAAC,OAAO;AACJ,aAAA;AAAA,IAAA;AAAA,EACR;AAEM,SAAA;AACR;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WhereReplacer.js","sources":["../../../../../../../packages/engine-content-api/src/mapper/select/optimizer/WhereReplacer.ts"],"sourcesContent":["import { Input, Writable } from '@contember/schema'\nimport deepEqual from 'fast-deep-equal'\n\nexport const replaceWhere = (subject: Input.OptionalWhere, find: Input.OptionalWhere, replace: Input.OptionalWhere, opts: { replaceSubOperands?: boolean } = {}): Input.OptionalWhere => {\n\tif (deepEqual(subject, find)) {\n\t\treturn replace\n\t}\n\tlet result: Writable<Input.OptionalWhere> = subject\n\tlet copied = false\n\t// copy on write to preserve referential integrity, when nothing has changed\n\tconst write = <T extends string>(key: T, value: Input.OptionalWhere[T]) => {\n\t\tif (!copied) {\n\t\t\tresult = { ...result }\n\t\t\tcopied = true\n\t\t}\n\t\tresult[key] = value\n\t}\n\n\tfor (const key in subject) {\n\t\tconst value = subject[key]\n\t\tif (key === 'not') {\n\t\t\tconst newNot = replaceWhere(value as Input.OptionalWhere, find, replace, opts)\n\t\t\tif (newNot !== value) {\n\t\t\t\twrite('not', newNot)\n\t\t\t}\n\t\t} else if (key === 'and' || key === 'or') {\n\t\t\tconst operands = value as Input.OptionalWhere[]\n\t\t\tconst subOperandsToFind = opts.replaceSubOperands && Object.keys(find).length === 1 && find[key] ? (find[key] as Input.OptionalWhere[]) : null\n\t\t\tif (subOperandsToFind !== null && containsAllOperands(operands, subOperandsToFind)) {\n\t\t\t\twrite(key, [replace])\n\t\t\t} else {\n\t\t\t\tconst items: Input.OptionalWhere[] = []\n\t\t\t\tlet itemChanged = false\n\t\t\t\tfor (const el of operands) {\n\t\t\t\t\tconst newEl = replaceWhere(el, find, replace, opts)\n\t\t\t\t\tif (newEl !== el) {\n\t\t\t\t\t\titemChanged = true\n\t\t\t\t\t}\n\t\t\t\t\titems.push(newEl)\n\t\t\t\t}\n\t\t\t\tif (itemChanged) {\n\t\t\t\t\twrite(key, items)\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t}\n\treturn result\n}\n\n\nconst containsAllOperands = (subjectOperands: Input.OptionalWhere[], findOperands: Input.OptionalWhere[]): boolean => {\n\tfor (const op1 of findOperands) {\n\t\tlet found = false\n\t\tfor (const op2 of subjectOperands) {\n\t\t\tif (deepEqual(op1, op2)) {\n\t\t\t\tfound = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif (!found) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n"],"names":[],"mappings":";AAGO,MAAM,eAAe,CAAC,SAA8B,MAA2B,SAA8B,OAAyC,CAAA,MAA4B;AACpL,MAAA,UAAU,SAAS,IAAI,GAAG;AACtB,WAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"WhereReplacer.js","sources":["../../../../../../../packages/engine-content-api/src/mapper/select/optimizer/WhereReplacer.ts"],"sourcesContent":["import { Input, Writable } from '@contember/schema'\nimport deepEqual from 'fast-deep-equal'\n\nexport const replaceWhere = (subject: Input.OptionalWhere, find: Input.OptionalWhere, replace: Input.OptionalWhere, opts: { replaceSubOperands?: boolean } = {}): Input.OptionalWhere => {\n\tif (deepEqual(subject, find)) {\n\t\treturn replace\n\t}\n\tlet result: Writable<Input.OptionalWhere> = subject\n\tlet copied = false\n\t// copy on write to preserve referential integrity, when nothing has changed\n\tconst write = <T extends string>(key: T, value: Input.OptionalWhere[T]) => {\n\t\tif (!copied) {\n\t\t\tresult = { ...result }\n\t\t\tcopied = true\n\t\t}\n\t\tresult[key] = value\n\t}\n\n\tfor (const key in subject) {\n\t\tconst value = subject[key]\n\t\tif (key === 'not') {\n\t\t\tconst newNot = replaceWhere(value as Input.OptionalWhere, find, replace, opts)\n\t\t\tif (newNot !== value) {\n\t\t\t\twrite('not', newNot)\n\t\t\t}\n\t\t} else if (key === 'and' || key === 'or') {\n\t\t\tconst operands = value as Input.OptionalWhere[]\n\t\t\tconst subOperandsToFind = opts.replaceSubOperands && Object.keys(find).length === 1 && find[key] ? (find[key] as Input.OptionalWhere[]) : null\n\t\t\tif (subOperandsToFind !== null && containsAllOperands(operands, subOperandsToFind)) {\n\t\t\t\twrite(key, [replace])\n\t\t\t} else {\n\t\t\t\tconst items: Input.OptionalWhere[] = []\n\t\t\t\tlet itemChanged = false\n\t\t\t\tfor (const el of operands) {\n\t\t\t\t\tconst newEl = replaceWhere(el, find, replace, opts)\n\t\t\t\t\tif (newEl !== el) {\n\t\t\t\t\t\titemChanged = true\n\t\t\t\t\t}\n\t\t\t\t\titems.push(newEl)\n\t\t\t\t}\n\t\t\t\tif (itemChanged) {\n\t\t\t\t\twrite(key, items)\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t}\n\treturn result\n}\n\n\nconst containsAllOperands = (subjectOperands: Input.OptionalWhere[], findOperands: Input.OptionalWhere[]): boolean => {\n\tfor (const op1 of findOperands) {\n\t\tlet found = false\n\t\tfor (const op2 of subjectOperands) {\n\t\t\tif (deepEqual(op1, op2)) {\n\t\t\t\tfound = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif (!found) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n"],"names":[],"mappings":";AAGO,MAAM,eAAe,CAAC,SAA8B,MAA2B,SAA8B,OAAyC,CAAA,MAA4B;AACpL,MAAA,UAAU,SAAS,IAAI,GAAG;AACtB,WAAA;AAAA,EAAA;AAER,MAAI,SAAwC;AAC5C,MAAI,SAAS;AAEP,QAAA,QAAQ,CAAmB,KAAQ,UAAkC;AAC1E,QAAI,CAAC,QAAQ;AACH,eAAA,EAAE,GAAG,OAAO;AACZ,eAAA;AAAA,IAAA;AAEV,WAAO,GAAG,IAAI;AAAA,EACf;AAEA,aAAW,OAAO,SAAS;AACpB,UAAA,QAAQ,QAAQ,GAAG;AACzB,QAAI,QAAQ,OAAO;AAClB,YAAM,SAAS,aAAa,OAA8B,MAAM,SAAS,IAAI;AAC7E,UAAI,WAAW,OAAO;AACrB,cAAM,OAAO,MAAM;AAAA,MAAA;AAAA,IAEV,WAAA,QAAQ,SAAS,QAAQ,MAAM;AACzC,YAAM,WAAW;AACjB,YAAM,oBAAoB,KAAK,sBAAsB,OAAO,KAAK,IAAI,EAAE,WAAW,KAAK,KAAK,GAAG,IAAK,KAAK,GAAG,IAA8B;AAC1I,UAAI,sBAAsB,QAAQ,oBAAoB,UAAU,iBAAiB,GAAG;AAC7E,cAAA,KAAK,CAAC,OAAO,CAAC;AAAA,MAAA,OACd;AACN,cAAM,QAA+B,CAAC;AACtC,YAAI,cAAc;AAClB,mBAAW,MAAM,UAAU;AAC1B,gBAAM,QAAQ,aAAa,IAAI,MAAM,SAAS,IAAI;AAClD,cAAI,UAAU,IAAI;AACH,0BAAA;AAAA,UAAA;AAEf,gBAAM,KAAK,KAAK;AAAA,QAAA;AAEjB,YAAI,aAAa;AAChB,gBAAM,KAAK,KAAK;AAAA,QAAA;AAAA,MACjB;AAAA,IACD;AAAA,EAED;AAEM,SAAA;AACR;AAGA,MAAM,sBAAsB,CAAC,iBAAwC,iBAAiD;AACrH,aAAW,OAAO,cAAc;AAC/B,QAAI,QAAQ;AACZ,eAAW,OAAO,iBAAiB;AAC9B,UAAA,UAAU,KAAK,GAAG,GAAG;AAChB,gBAAA;AACR;AAAA,MAAA;AAAA,IACD;AAED,QAAI,CAAC,OAAO;AACJ,aAAA;AAAA,IAAA;AAAA,EACR;AAEM,SAAA;AACR;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.cjs","sources":["../../../../../../../packages/engine-content-api/src/mapper/select/optimizer/helpers.ts"],"sourcesContent":["export const optimizeOr = <P extends Record<string, unknown>>(operands: readonly (P | boolean | undefined)[]): P | { or?: P[] } | boolean => {\n\tconst normalized: P[] = []\n\tlet hasNever = false\n\tfor (const operand of operands) {\n\t\tif (operand === true) {\n\t\t\treturn true\n\t\t} else if (operand === false) {\n\t\t\thasNever = true\n\t\t} else if (operand !== undefined) {\n\t\t\tnormalized.push(...Array.isArray(operand.or) ? operand.or : [operand])\n\t\t}\n\t}\n\n\tif (normalized.length > 1) {\n\t\treturn { or: normalized }\n\t} else if (normalized.length === 1) {\n\t\treturn normalized[0]\n\t} else if (hasNever) {\n\t\treturn false\n\t} else {\n\t\treturn {}\n\t}\n}\n\nexport const optimizeAnd = <P extends Record<string, unknown>>(operands: readonly (P | boolean | undefined)[]): P | { and?: P[] } | boolean => {\n\tconst normalized: P[] = []\n\tlet hasAlways = false\n\n\tfor (const operand of operands) {\n\t\tif (operand === true) {\n\t\t\thasAlways = true\n\t\t} else if (operand === false) {\n\t\t\treturn false\n\t\t} else if (operand !== undefined) {\n\t\t\tnormalized.push(...Array.isArray(operand.and) ? operand.and : [operand])\n\t\t}\n\t}\n\n\tif (normalized.length > 1) {\n\t\treturn { and: normalized }\n\t} else if (normalized.length === 1) {\n\t\treturn normalized[0]\n\t} else if (hasAlways) {\n\t\treturn true\n\t} else {\n\t\treturn {}\n\t}\n}\n\nexport const optimizeNot = <P extends Record<string, unknown>>(operand: P | boolean): Exclude<P['not'] | { not: P } | boolean, null | undefined> => {\n\tif (typeof operand === 'boolean') {\n\t\treturn !operand\n\t} else if (operand.not) {\n\t\treturn operand.not as Exclude<P['not'], null | undefined>\n\t} else {\n\t\treturn { not: operand }\n\t}\n}\n"],"names":[],"mappings":";;AAAa,MAAA,aAAa,CAAoC,aAA+E;AAC5I,QAAM,aAAkB,
|
|
1
|
+
{"version":3,"file":"helpers.cjs","sources":["../../../../../../../packages/engine-content-api/src/mapper/select/optimizer/helpers.ts"],"sourcesContent":["export const optimizeOr = <P extends Record<string, unknown>>(operands: readonly (P | boolean | undefined)[]): P | { or?: P[] } | boolean => {\n\tconst normalized: P[] = []\n\tlet hasNever = false\n\tfor (const operand of operands) {\n\t\tif (operand === true) {\n\t\t\treturn true\n\t\t} else if (operand === false) {\n\t\t\thasNever = true\n\t\t} else if (operand !== undefined) {\n\t\t\tnormalized.push(...Array.isArray(operand.or) ? operand.or : [operand])\n\t\t}\n\t}\n\n\tif (normalized.length > 1) {\n\t\treturn { or: normalized }\n\t} else if (normalized.length === 1) {\n\t\treturn normalized[0]\n\t} else if (hasNever) {\n\t\treturn false\n\t} else {\n\t\treturn {}\n\t}\n}\n\nexport const optimizeAnd = <P extends Record<string, unknown>>(operands: readonly (P | boolean | undefined)[]): P | { and?: P[] } | boolean => {\n\tconst normalized: P[] = []\n\tlet hasAlways = false\n\n\tfor (const operand of operands) {\n\t\tif (operand === true) {\n\t\t\thasAlways = true\n\t\t} else if (operand === false) {\n\t\t\treturn false\n\t\t} else if (operand !== undefined) {\n\t\t\tnormalized.push(...Array.isArray(operand.and) ? operand.and : [operand])\n\t\t}\n\t}\n\n\tif (normalized.length > 1) {\n\t\treturn { and: normalized }\n\t} else if (normalized.length === 1) {\n\t\treturn normalized[0]\n\t} else if (hasAlways) {\n\t\treturn true\n\t} else {\n\t\treturn {}\n\t}\n}\n\nexport const optimizeNot = <P extends Record<string, unknown>>(operand: P | boolean): Exclude<P['not'] | { not: P } | boolean, null | undefined> => {\n\tif (typeof operand === 'boolean') {\n\t\treturn !operand\n\t} else if (operand.not) {\n\t\treturn operand.not as Exclude<P['not'], null | undefined>\n\t} else {\n\t\treturn { not: operand }\n\t}\n}\n"],"names":[],"mappings":";;AAAa,MAAA,aAAa,CAAoC,aAA+E;AAC5I,QAAM,aAAkB,CAAC;AACzB,MAAI,WAAW;AACf,aAAW,WAAW,UAAU;AAC/B,QAAI,YAAY,MAAM;AACd,aAAA;AAAA,IAAA,WACG,YAAY,OAAO;AAClB,iBAAA;AAAA,IAAA,WACD,YAAY,QAAY;AACvB,iBAAA,KAAK,GAAG,MAAM,QAAQ,QAAQ,EAAE,IAAI,QAAQ,KAAK,CAAC,OAAO,CAAC;AAAA,IAAA;AAAA,EACtE;AAGG,MAAA,WAAW,SAAS,GAAG;AACnB,WAAA,EAAE,IAAI,WAAW;AAAA,EAAA,WACd,WAAW,WAAW,GAAG;AACnC,WAAO,WAAW,CAAC;AAAA,aACT,UAAU;AACb,WAAA;AAAA,EAAA,OACD;AACN,WAAO,CAAC;AAAA,EAAA;AAEV;AAEa,MAAA,cAAc,CAAoC,aAAgF;AAC9I,QAAM,aAAkB,CAAC;AACzB,MAAI,YAAY;AAEhB,aAAW,WAAW,UAAU;AAC/B,QAAI,YAAY,MAAM;AACT,kBAAA;AAAA,IAAA,WACF,YAAY,OAAO;AACtB,aAAA;AAAA,IAAA,WACG,YAAY,QAAW;AACtB,iBAAA,KAAK,GAAG,MAAM,QAAQ,QAAQ,GAAG,IAAI,QAAQ,MAAM,CAAC,OAAO,CAAC;AAAA,IAAA;AAAA,EACxE;AAGG,MAAA,WAAW,SAAS,GAAG;AACnB,WAAA,EAAE,KAAK,WAAW;AAAA,EAAA,WACf,WAAW,WAAW,GAAG;AACnC,WAAO,WAAW,CAAC;AAAA,aACT,WAAW;AACd,WAAA;AAAA,EAAA,OACD;AACN,WAAO,CAAC;AAAA,EAAA;AAEV;AAEa,MAAA,cAAc,CAAoC,YAAqF;AAC/I,MAAA,OAAO,YAAY,WAAW;AACjC,WAAO,CAAC;AAAA,EAAA,WACE,QAAQ,KAAK;AACvB,WAAO,QAAQ;AAAA,EAAA,OACT;AACC,WAAA,EAAE,KAAK,QAAQ;AAAA,EAAA;AAExB;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sources":["../../../../../../../packages/engine-content-api/src/mapper/select/optimizer/helpers.ts"],"sourcesContent":["export const optimizeOr = <P extends Record<string, unknown>>(operands: readonly (P | boolean | undefined)[]): P | { or?: P[] } | boolean => {\n\tconst normalized: P[] = []\n\tlet hasNever = false\n\tfor (const operand of operands) {\n\t\tif (operand === true) {\n\t\t\treturn true\n\t\t} else if (operand === false) {\n\t\t\thasNever = true\n\t\t} else if (operand !== undefined) {\n\t\t\tnormalized.push(...Array.isArray(operand.or) ? operand.or : [operand])\n\t\t}\n\t}\n\n\tif (normalized.length > 1) {\n\t\treturn { or: normalized }\n\t} else if (normalized.length === 1) {\n\t\treturn normalized[0]\n\t} else if (hasNever) {\n\t\treturn false\n\t} else {\n\t\treturn {}\n\t}\n}\n\nexport const optimizeAnd = <P extends Record<string, unknown>>(operands: readonly (P | boolean | undefined)[]): P | { and?: P[] } | boolean => {\n\tconst normalized: P[] = []\n\tlet hasAlways = false\n\n\tfor (const operand of operands) {\n\t\tif (operand === true) {\n\t\t\thasAlways = true\n\t\t} else if (operand === false) {\n\t\t\treturn false\n\t\t} else if (operand !== undefined) {\n\t\t\tnormalized.push(...Array.isArray(operand.and) ? operand.and : [operand])\n\t\t}\n\t}\n\n\tif (normalized.length > 1) {\n\t\treturn { and: normalized }\n\t} else if (normalized.length === 1) {\n\t\treturn normalized[0]\n\t} else if (hasAlways) {\n\t\treturn true\n\t} else {\n\t\treturn {}\n\t}\n}\n\nexport const optimizeNot = <P extends Record<string, unknown>>(operand: P | boolean): Exclude<P['not'] | { not: P } | boolean, null | undefined> => {\n\tif (typeof operand === 'boolean') {\n\t\treturn !operand\n\t} else if (operand.not) {\n\t\treturn operand.not as Exclude<P['not'], null | undefined>\n\t} else {\n\t\treturn { not: operand }\n\t}\n}\n"],"names":[],"mappings":"AAAa,MAAA,aAAa,CAAoC,aAA+E;AAC5I,QAAM,aAAkB,
|
|
1
|
+
{"version":3,"file":"helpers.js","sources":["../../../../../../../packages/engine-content-api/src/mapper/select/optimizer/helpers.ts"],"sourcesContent":["export const optimizeOr = <P extends Record<string, unknown>>(operands: readonly (P | boolean | undefined)[]): P | { or?: P[] } | boolean => {\n\tconst normalized: P[] = []\n\tlet hasNever = false\n\tfor (const operand of operands) {\n\t\tif (operand === true) {\n\t\t\treturn true\n\t\t} else if (operand === false) {\n\t\t\thasNever = true\n\t\t} else if (operand !== undefined) {\n\t\t\tnormalized.push(...Array.isArray(operand.or) ? operand.or : [operand])\n\t\t}\n\t}\n\n\tif (normalized.length > 1) {\n\t\treturn { or: normalized }\n\t} else if (normalized.length === 1) {\n\t\treturn normalized[0]\n\t} else if (hasNever) {\n\t\treturn false\n\t} else {\n\t\treturn {}\n\t}\n}\n\nexport const optimizeAnd = <P extends Record<string, unknown>>(operands: readonly (P | boolean | undefined)[]): P | { and?: P[] } | boolean => {\n\tconst normalized: P[] = []\n\tlet hasAlways = false\n\n\tfor (const operand of operands) {\n\t\tif (operand === true) {\n\t\t\thasAlways = true\n\t\t} else if (operand === false) {\n\t\t\treturn false\n\t\t} else if (operand !== undefined) {\n\t\t\tnormalized.push(...Array.isArray(operand.and) ? operand.and : [operand])\n\t\t}\n\t}\n\n\tif (normalized.length > 1) {\n\t\treturn { and: normalized }\n\t} else if (normalized.length === 1) {\n\t\treturn normalized[0]\n\t} else if (hasAlways) {\n\t\treturn true\n\t} else {\n\t\treturn {}\n\t}\n}\n\nexport const optimizeNot = <P extends Record<string, unknown>>(operand: P | boolean): Exclude<P['not'] | { not: P } | boolean, null | undefined> => {\n\tif (typeof operand === 'boolean') {\n\t\treturn !operand\n\t} else if (operand.not) {\n\t\treturn operand.not as Exclude<P['not'], null | undefined>\n\t} else {\n\t\treturn { not: operand }\n\t}\n}\n"],"names":[],"mappings":"AAAa,MAAA,aAAa,CAAoC,aAA+E;AAC5I,QAAM,aAAkB,CAAC;AACzB,MAAI,WAAW;AACf,aAAW,WAAW,UAAU;AAC/B,QAAI,YAAY,MAAM;AACd,aAAA;AAAA,IAAA,WACG,YAAY,OAAO;AAClB,iBAAA;AAAA,IAAA,WACD,YAAY,QAAY;AACvB,iBAAA,KAAK,GAAG,MAAM,QAAQ,QAAQ,EAAE,IAAI,QAAQ,KAAK,CAAC,OAAO,CAAC;AAAA,IAAA;AAAA,EACtE;AAGG,MAAA,WAAW,SAAS,GAAG;AACnB,WAAA,EAAE,IAAI,WAAW;AAAA,EAAA,WACd,WAAW,WAAW,GAAG;AACnC,WAAO,WAAW,CAAC;AAAA,aACT,UAAU;AACb,WAAA;AAAA,EAAA,OACD;AACN,WAAO,CAAC;AAAA,EAAA;AAEV;AAEa,MAAA,cAAc,CAAoC,aAAgF;AAC9I,QAAM,aAAkB,CAAC;AACzB,MAAI,YAAY;AAEhB,aAAW,WAAW,UAAU;AAC/B,QAAI,YAAY,MAAM;AACT,kBAAA;AAAA,IAAA,WACF,YAAY,OAAO;AACtB,aAAA;AAAA,IAAA,WACG,YAAY,QAAW;AACtB,iBAAA,KAAK,GAAG,MAAM,QAAQ,QAAQ,GAAG,IAAI,QAAQ,MAAM,CAAC,OAAO,CAAC;AAAA,IAAA;AAAA,EACxE;AAGG,MAAA,WAAW,SAAS,GAAG;AACnB,WAAA,EAAE,KAAK,WAAW;AAAA,EAAA,WACf,WAAW,WAAW,GAAG;AACnC,WAAO,WAAW,CAAC;AAAA,aACT,WAAW;AACd,WAAA;AAAA,EAAA,OACD;AACN,WAAO,CAAC;AAAA,EAAA;AAEV;AAEa,MAAA,cAAc,CAAoC,YAAqF;AAC/I,MAAA,OAAO,YAAY,WAAW;AACjC,WAAO,CAAC;AAAA,EAAA,WACE,QAAQ,KAAK;AACvB,WAAO,QAAQ;AAAA,EAAA,OACT;AACC,WAAA,EAAE,KAAK,QAAQ;AAAA,EAAA;AAExB;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SqlUpdateInputProcessor.cjs","sources":["../../../../../../packages/engine-content-api/src/mapper/update/SqlUpdateInputProcessor.ts"],"sourcesContent":["import { Input, Model, Value } from '@contember/schema'\nimport { Mapper } from '../Mapper'\nimport { UpdateBuilder } from './UpdateBuilder'\nimport { hasManyProcessor, hasOneProcessor } from '../MutationProcessorHelper'\nimport { OneHasOneInverseUpdateInputProcessor } from './relations/OneHasOneInverseUpdateInputProcessor'\nimport { OneHasOneOwningUpdateInputProcessor } from './relations/OneHasOneOwningUpdateInputProcessor'\nimport { OneHasManyUpdateInputProcessor } from './relations/OneHasManyUpdateInputProcessor'\nimport { ManyHasManyUpdateInputProcessor } from './relations/ManyHasManyUpdateInputProcessor'\nimport { UpdateInputProcessor } from '../../inputProcessing'\nimport { MutationResultList } from '../Result'\nimport { ManyHasOneUpdateInputProcessor } from './relations/ManyHasOneUpdateInputProcessor'\n\nexport type SqlUpdateInputProcessorResult = MutationResultList | ((ctx: { primary: Input.PrimaryValue}) => Promise<MutationResultList>)\n\nexport class SqlUpdateInputProcessor implements UpdateInputProcessor<SqlUpdateInputProcessorResult> {\n\tprivate oneHasOneInverseUpdateInputProcessor: OneHasOneInverseUpdateInputProcessor\n\tprivate oneHasOneOwningUpdateInputProcessor: OneHasOneOwningUpdateInputProcessor\n\tprivate oneHasManyUpdateInputProcessor: OneHasManyUpdateInputProcessor\n\tprivate manyHasOneUpdateInputProcessor: ManyHasOneUpdateInputProcessor\n\tprivate manyHasManyUpdateInputProcessor: ManyHasManyUpdateInputProcessor\n\n\tconstructor(\n\t\tprivate readonly primaryValue: Input.PrimaryValue,\n\t\tprivate readonly data: Input.UpdateDataInput,\n\t\tprivate readonly updateBuilder: UpdateBuilder,\n\t\tprivate readonly mapper: Mapper,\n\t) {\n\t\tthis.oneHasOneInverseUpdateInputProcessor = new OneHasOneInverseUpdateInputProcessor(this.primaryValue, this.mapper)\n\t\tthis.oneHasOneOwningUpdateInputProcessor = new OneHasOneOwningUpdateInputProcessor(this.primaryValue, this.mapper, this.updateBuilder)\n\t\tthis.oneHasManyUpdateInputProcessor = new OneHasManyUpdateInputProcessor(this.mapper)\n\t\tthis.manyHasOneUpdateInputProcessor = new ManyHasOneUpdateInputProcessor(this.mapper, this.updateBuilder, this.primaryValue)\n\t\tthis.manyHasManyUpdateInputProcessor = new ManyHasManyUpdateInputProcessor(this.mapper)\n\t}\n\n\tpublic column({ entity, column }: Model.ColumnContext) {\n\t\tif (this.data[column.name] !== undefined) {\n\t\t\tthis.updateBuilder.addFieldValue(column.name, this.data[column.name] as Value.AtomicValue)\n\t\t}\n\t\treturn Promise.resolve([])\n\t}\n\n\tmanyHasManyInverse: UpdateInputProcessor<SqlUpdateInputProcessorResult>['manyHasManyInverse'] = {\n\t\tconnect: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.connect(ctx)),\n\t\tcreate: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.create(ctx)),\n\t\tconnectOrCreate: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.connectOrCreate(ctx)),\n\t\tupdate: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.update(ctx)),\n\t\tupsert: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.upsert(ctx)),\n\t\tdelete: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.delete(ctx)),\n\t\tdisconnect: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.disconnect(ctx)),\n\t}\n\n\tmanyHasManyOwning: UpdateInputProcessor<SqlUpdateInputProcessorResult>['manyHasManyOwning'] = {\n\t\tconnect: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.connect(ctx)),\n\t\tcreate: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.create(ctx)),\n\t\tconnectOrCreate: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.connectOrCreate(ctx)),\n\t\tupdate: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.update(ctx)),\n\t\tupsert: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.upsert(ctx)),\n\t\tdelete: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.delete(ctx)),\n\t\tdisconnect: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.disconnect(ctx)),\n\t}\n\n\tmanyHasOne: UpdateInputProcessor<SqlUpdateInputProcessorResult>['manyHasOne'] = {\n\t\tconnect: hasOneProcessor(ctx => this.manyHasOneUpdateInputProcessor.connect(ctx)),\n\t\tcreate: hasOneProcessor(ctx => this.manyHasOneUpdateInputProcessor.create(ctx)),\n\t\tconnectOrCreate: hasOneProcessor(ctx => this.manyHasOneUpdateInputProcessor.connectOrCreate(ctx)),\n\t\tupdate: hasOneProcessor(ctx => this.manyHasOneUpdateInputProcessor.update(ctx)),\n\t\tupsert: hasOneProcessor(ctx => this.manyHasOneUpdateInputProcessor.upsert(ctx)),\n\t\tdelete: hasOneProcessor(ctx => this.manyHasOneUpdateInputProcessor.delete(ctx)),\n\t\tdisconnect: hasOneProcessor(ctx => this.manyHasOneUpdateInputProcessor.disconnect(ctx)),\n\t}\n\n\toneHasMany: UpdateInputProcessor<SqlUpdateInputProcessorResult>['oneHasMany'] = {\n\t\tconnect: hasManyProcessor(ctx => this.oneHasManyUpdateInputProcessor.connect(ctx)),\n\t\tcreate: hasManyProcessor(ctx => this.oneHasManyUpdateInputProcessor.create(ctx)),\n\t\tconnectOrCreate: hasManyProcessor(ctx => this.oneHasManyUpdateInputProcessor.connectOrCreate(ctx)),\n\t\tupdate: hasManyProcessor(ctx => this.oneHasManyUpdateInputProcessor.update(ctx)),\n\t\tupsert: hasManyProcessor(ctx => this.oneHasManyUpdateInputProcessor.upsert(ctx)),\n\t\tdelete: hasManyProcessor(ctx => this.oneHasManyUpdateInputProcessor.delete(ctx)),\n\t\tdisconnect: hasManyProcessor(ctx => this.oneHasManyUpdateInputProcessor.disconnect(ctx)),\n\t}\n\n\toneHasOneInverse: UpdateInputProcessor<SqlUpdateInputProcessorResult>['oneHasOneInverse'] = {\n\t\tconnect: hasOneProcessor(ctx => this.oneHasOneInverseUpdateInputProcessor.connect(ctx)),\n\t\tcreate: hasOneProcessor(ctx => this.oneHasOneInverseUpdateInputProcessor.create(ctx)),\n\t\tconnectOrCreate: hasOneProcessor(ctx => this.oneHasOneInverseUpdateInputProcessor.connectOrCreate(ctx)),\n\t\tupdate: hasOneProcessor(ctx => this.oneHasOneInverseUpdateInputProcessor.update(ctx)),\n\t\tupsert: hasOneProcessor(ctx => this.oneHasOneInverseUpdateInputProcessor.upsert(ctx)),\n\t\tdelete: hasOneProcessor(ctx => this.oneHasOneInverseUpdateInputProcessor.delete(ctx)),\n\t\tdisconnect: hasOneProcessor(ctx => this.oneHasOneInverseUpdateInputProcessor.disconnect(ctx)),\n\t}\n\n\toneHasOneOwning: UpdateInputProcessor<SqlUpdateInputProcessorResult>['oneHasOneOwning'] = {\n\t\tconnect: hasOneProcessor(ctx => this.oneHasOneOwningUpdateInputProcessor.connect(ctx)),\n\t\tcreate: hasOneProcessor(ctx => this.oneHasOneOwningUpdateInputProcessor.create(ctx)),\n\t\tconnectOrCreate: hasOneProcessor(ctx => this.oneHasOneOwningUpdateInputProcessor.connectOrCreate(ctx)),\n\t\tupdate: hasOneProcessor(ctx => this.oneHasOneOwningUpdateInputProcessor.update(ctx)),\n\t\tupsert: hasOneProcessor(ctx => this.oneHasOneOwningUpdateInputProcessor.upsert(ctx)),\n\t\tdelete: hasOneProcessor(ctx => this.oneHasOneOwningUpdateInputProcessor.delete(ctx)),\n\t\tdisconnect: hasOneProcessor(ctx => this.oneHasOneOwningUpdateInputProcessor.disconnect(ctx)),\n\t}\n}\n"],"names":["hasManyProcessor","hasOneProcessor","OneHasOneInverseUpdateInputProcessor","OneHasOneOwningUpdateInputProcessor","OneHasManyUpdateInputProcessor","ManyHasOneUpdateInputProcessor","ManyHasManyUpdateInputProcessor"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SqlUpdateInputProcessor.cjs","sources":["../../../../../../packages/engine-content-api/src/mapper/update/SqlUpdateInputProcessor.ts"],"sourcesContent":["import { Input, Model, Value } from '@contember/schema'\nimport { Mapper } from '../Mapper'\nimport { UpdateBuilder } from './UpdateBuilder'\nimport { hasManyProcessor, hasOneProcessor } from '../MutationProcessorHelper'\nimport { OneHasOneInverseUpdateInputProcessor } from './relations/OneHasOneInverseUpdateInputProcessor'\nimport { OneHasOneOwningUpdateInputProcessor } from './relations/OneHasOneOwningUpdateInputProcessor'\nimport { OneHasManyUpdateInputProcessor } from './relations/OneHasManyUpdateInputProcessor'\nimport { ManyHasManyUpdateInputProcessor } from './relations/ManyHasManyUpdateInputProcessor'\nimport { UpdateInputProcessor } from '../../inputProcessing'\nimport { MutationResultList } from '../Result'\nimport { ManyHasOneUpdateInputProcessor } from './relations/ManyHasOneUpdateInputProcessor'\n\nexport type SqlUpdateInputProcessorResult = MutationResultList | ((ctx: { primary: Input.PrimaryValue}) => Promise<MutationResultList>)\n\nexport class SqlUpdateInputProcessor implements UpdateInputProcessor<SqlUpdateInputProcessorResult> {\n\tprivate oneHasOneInverseUpdateInputProcessor: OneHasOneInverseUpdateInputProcessor\n\tprivate oneHasOneOwningUpdateInputProcessor: OneHasOneOwningUpdateInputProcessor\n\tprivate oneHasManyUpdateInputProcessor: OneHasManyUpdateInputProcessor\n\tprivate manyHasOneUpdateInputProcessor: ManyHasOneUpdateInputProcessor\n\tprivate manyHasManyUpdateInputProcessor: ManyHasManyUpdateInputProcessor\n\n\tconstructor(\n\t\tprivate readonly primaryValue: Input.PrimaryValue,\n\t\tprivate readonly data: Input.UpdateDataInput,\n\t\tprivate readonly updateBuilder: UpdateBuilder,\n\t\tprivate readonly mapper: Mapper,\n\t) {\n\t\tthis.oneHasOneInverseUpdateInputProcessor = new OneHasOneInverseUpdateInputProcessor(this.primaryValue, this.mapper)\n\t\tthis.oneHasOneOwningUpdateInputProcessor = new OneHasOneOwningUpdateInputProcessor(this.primaryValue, this.mapper, this.updateBuilder)\n\t\tthis.oneHasManyUpdateInputProcessor = new OneHasManyUpdateInputProcessor(this.mapper)\n\t\tthis.manyHasOneUpdateInputProcessor = new ManyHasOneUpdateInputProcessor(this.mapper, this.updateBuilder, this.primaryValue)\n\t\tthis.manyHasManyUpdateInputProcessor = new ManyHasManyUpdateInputProcessor(this.mapper)\n\t}\n\n\tpublic column({ entity, column }: Model.ColumnContext) {\n\t\tif (this.data[column.name] !== undefined) {\n\t\t\tthis.updateBuilder.addFieldValue(column.name, this.data[column.name] as Value.AtomicValue)\n\t\t}\n\t\treturn Promise.resolve([])\n\t}\n\n\tmanyHasManyInverse: UpdateInputProcessor<SqlUpdateInputProcessorResult>['manyHasManyInverse'] = {\n\t\tconnect: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.connect(ctx)),\n\t\tcreate: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.create(ctx)),\n\t\tconnectOrCreate: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.connectOrCreate(ctx)),\n\t\tupdate: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.update(ctx)),\n\t\tupsert: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.upsert(ctx)),\n\t\tdelete: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.delete(ctx)),\n\t\tdisconnect: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.disconnect(ctx)),\n\t}\n\n\tmanyHasManyOwning: UpdateInputProcessor<SqlUpdateInputProcessorResult>['manyHasManyOwning'] = {\n\t\tconnect: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.connect(ctx)),\n\t\tcreate: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.create(ctx)),\n\t\tconnectOrCreate: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.connectOrCreate(ctx)),\n\t\tupdate: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.update(ctx)),\n\t\tupsert: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.upsert(ctx)),\n\t\tdelete: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.delete(ctx)),\n\t\tdisconnect: hasManyProcessor(ctx => this.manyHasManyUpdateInputProcessor.disconnect(ctx)),\n\t}\n\n\tmanyHasOne: UpdateInputProcessor<SqlUpdateInputProcessorResult>['manyHasOne'] = {\n\t\tconnect: hasOneProcessor(ctx => this.manyHasOneUpdateInputProcessor.connect(ctx)),\n\t\tcreate: hasOneProcessor(ctx => this.manyHasOneUpdateInputProcessor.create(ctx)),\n\t\tconnectOrCreate: hasOneProcessor(ctx => this.manyHasOneUpdateInputProcessor.connectOrCreate(ctx)),\n\t\tupdate: hasOneProcessor(ctx => this.manyHasOneUpdateInputProcessor.update(ctx)),\n\t\tupsert: hasOneProcessor(ctx => this.manyHasOneUpdateInputProcessor.upsert(ctx)),\n\t\tdelete: hasOneProcessor(ctx => this.manyHasOneUpdateInputProcessor.delete(ctx)),\n\t\tdisconnect: hasOneProcessor(ctx => this.manyHasOneUpdateInputProcessor.disconnect(ctx)),\n\t}\n\n\toneHasMany: UpdateInputProcessor<SqlUpdateInputProcessorResult>['oneHasMany'] = {\n\t\tconnect: hasManyProcessor(ctx => this.oneHasManyUpdateInputProcessor.connect(ctx)),\n\t\tcreate: hasManyProcessor(ctx => this.oneHasManyUpdateInputProcessor.create(ctx)),\n\t\tconnectOrCreate: hasManyProcessor(ctx => this.oneHasManyUpdateInputProcessor.connectOrCreate(ctx)),\n\t\tupdate: hasManyProcessor(ctx => this.oneHasManyUpdateInputProcessor.update(ctx)),\n\t\tupsert: hasManyProcessor(ctx => this.oneHasManyUpdateInputProcessor.upsert(ctx)),\n\t\tdelete: hasManyProcessor(ctx => this.oneHasManyUpdateInputProcessor.delete(ctx)),\n\t\tdisconnect: hasManyProcessor(ctx => this.oneHasManyUpdateInputProcessor.disconnect(ctx)),\n\t}\n\n\toneHasOneInverse: UpdateInputProcessor<SqlUpdateInputProcessorResult>['oneHasOneInverse'] = {\n\t\tconnect: hasOneProcessor(ctx => this.oneHasOneInverseUpdateInputProcessor.connect(ctx)),\n\t\tcreate: hasOneProcessor(ctx => this.oneHasOneInverseUpdateInputProcessor.create(ctx)),\n\t\tconnectOrCreate: hasOneProcessor(ctx => this.oneHasOneInverseUpdateInputProcessor.connectOrCreate(ctx)),\n\t\tupdate: hasOneProcessor(ctx => this.oneHasOneInverseUpdateInputProcessor.update(ctx)),\n\t\tupsert: hasOneProcessor(ctx => this.oneHasOneInverseUpdateInputProcessor.upsert(ctx)),\n\t\tdelete: hasOneProcessor(ctx => this.oneHasOneInverseUpdateInputProcessor.delete(ctx)),\n\t\tdisconnect: hasOneProcessor(ctx => this.oneHasOneInverseUpdateInputProcessor.disconnect(ctx)),\n\t}\n\n\toneHasOneOwning: UpdateInputProcessor<SqlUpdateInputProcessorResult>['oneHasOneOwning'] = {\n\t\tconnect: hasOneProcessor(ctx => this.oneHasOneOwningUpdateInputProcessor.connect(ctx)),\n\t\tcreate: hasOneProcessor(ctx => this.oneHasOneOwningUpdateInputProcessor.create(ctx)),\n\t\tconnectOrCreate: hasOneProcessor(ctx => this.oneHasOneOwningUpdateInputProcessor.connectOrCreate(ctx)),\n\t\tupdate: hasOneProcessor(ctx => this.oneHasOneOwningUpdateInputProcessor.update(ctx)),\n\t\tupsert: hasOneProcessor(ctx => this.oneHasOneOwningUpdateInputProcessor.upsert(ctx)),\n\t\tdelete: hasOneProcessor(ctx => this.oneHasOneOwningUpdateInputProcessor.delete(ctx)),\n\t\tdisconnect: hasOneProcessor(ctx => this.oneHasOneOwningUpdateInputProcessor.disconnect(ctx)),\n\t}\n}\n"],"names":["hasManyProcessor","hasOneProcessor","OneHasOneInverseUpdateInputProcessor","OneHasOneOwningUpdateInputProcessor","OneHasManyUpdateInputProcessor","ManyHasOneUpdateInputProcessor","ManyHasManyUpdateInputProcessor"],"mappings":"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"}
|