diff --git a/.gigaide/gigaide.properties b/.gigaide/gigaide.properties new file mode 100644 index 00000000..61a15220 --- /dev/null +++ b/.gigaide/gigaide.properties @@ -0,0 +1,1246 @@ +## changed at Mon Dec 09 20:10:43 SAMT 2024 +#Mon Dec 09 20:10:43 SAMT 2024 +com.gigaide.elements.ext.marker.solution.BeanMarkedPsi.shouldMark=true +com.gigaide.elements.ext.marker.solution.ConfigMarkedPsi.shouldMark=true +com.gigaide.elements.ext.marker.solution.DataMarkedPsi.shouldMark=true +com.gigaide.elements.ext.marker.solution.EndpointMarkedPsi.shouldMark=true +com.gigaide.elements.ext.marker.solution.EntryMarkedPsi.shouldMark=true +com.gigaide.elements.ext.marker.solution.FactoryMarkedPsi.shouldMark=true +com.gigaide.elements.ext.marker.solution.MessageMarkedPsi.shouldMark=true +com.gigaide.elements.ext.marker.solution.TaskMarkedPsi.shouldMark=true +com.gigaide.elements.ext.marker.solution.TransactionMarkedPsi.shouldMark=true +com.gigaide.elements.ext.marker.type.AnnotationTypePsi.shouldMark=true +com.gigaide.elements.ext.marker.type.CallTypePsi.shouldMark=true +com.gigaide.elements.ext.marker.type.ImplTypePsi.shouldMark=true +com.gigaide.elements.ext.menu.ToFrameworkMarkerAction.shouldAct=true +com.gigaide.elements.ext.menu.ToSolutionMarkerAction.shouldAct=true +com.gigaide.elements.ext.stack.allure.AddAttachmentCall.checkElement=true +com.gigaide.elements.ext.stack.allure.AllureIdMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.allure.AttachmentCall.checkElement=true +com.gigaide.elements.ext.stack.allure.AttachmentMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.allure.DescriptionCall.checkElement=true +com.gigaide.elements.ext.stack.allure.DescriptionMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.allure.EpicCall.checkElement=true +com.gigaide.elements.ext.stack.allure.EpicMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.allure.FeatureCall.checkElement=true +com.gigaide.elements.ext.stack.allure.FeatureMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.allure.IssueCall.checkElement=true +com.gigaide.elements.ext.stack.allure.IssueMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.allure.IssuesMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.allure.LabelAnnotationAnnotation.checkElement=true +com.gigaide.elements.ext.stack.allure.LabelCall.checkElement=true +com.gigaide.elements.ext.stack.allure.LinkCall.checkElement=true +com.gigaide.elements.ext.stack.allure.OwnerMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.allure.ParameterCall.checkElement=true +com.gigaide.elements.ext.stack.allure.SeverityLevelMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.allure.SeverityMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.allure.StepCall.checkElement=true +com.gigaide.elements.ext.stack.allure.StepMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.allure.StoryCall.checkElement=true +com.gigaide.elements.ext.stack.allure.StoryMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.allure.SuiteCall.checkElement=true +com.gigaide.elements.ext.stack.allure.TMSCall.checkElement=true +com.gigaide.elements.ext.stack.allure.TmsLinkMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.allure.TmsLinksMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.aopalliance.MethodInterceptorImplementation.checkElement=true +com.gigaide.elements.ext.stack.aspectj.AfterMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.aspectj.AfterReturningMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.aspectj.AfterThrowingMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.aspectj.AroundMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.aspectj.AspectClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.aspectj.BeforeMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.aspectj.DeclareParentsFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.aspectj.PointcutMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.bean.BladeBeanAnnotation.checkElement=true +com.gigaide.elements.ext.stack.bean.EJBEJBAnnotation.checkElement=true +com.gigaide.elements.ext.stack.bean.EJBLocalBeanAnnotation.checkElement=true +com.gigaide.elements.ext.stack.bean.EJBMessageDrivenAnnotation.checkElement=true +com.gigaide.elements.ext.stack.bean.EJBSingletonAnnotation.checkElement=true +com.gigaide.elements.ext.stack.bean.EJBStatelessAnnotation.checkElement=true +com.gigaide.elements.ext.stack.bean.SpringComponentAnnotation.checkElement=true +com.gigaide.elements.ext.stack.bean.SpringControllerAnnotation.checkElement=true +com.gigaide.elements.ext.stack.bean.SpringCrudRepositoryImplementation.checkElement=true +com.gigaide.elements.ext.stack.bean.SpringListCrudRepositoryImplementation.checkElement=true +com.gigaide.elements.ext.stack.bean.SpringListPagingAndSortingRepositoryImplementation.checkElement=true +com.gigaide.elements.ext.stack.bean.SpringPagingAndSortingRepositoryImplementation.checkElement=true +com.gigaide.elements.ext.stack.bean.SpringRepositoryAnnotation.checkElement=true +com.gigaide.elements.ext.stack.bean.SpringRepositoryImplementation.checkElement=true +com.gigaide.elements.ext.stack.bean.SpringRestControllerAnnotation.checkElement=true +com.gigaide.elements.ext.stack.bean.SpringServiceAnnotation.checkElement=true +com.gigaide.elements.ext.stack.blade.AttributeCall.checkElement=true +com.gigaide.elements.ext.stack.blade.BeanClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.blade.BladeLoaderImplementation.checkElement=true +com.gigaide.elements.ext.stack.blade.BodyToStringCall.checkElement=true +com.gigaide.elements.ext.stack.blade.DeleteRouteMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.blade.EnvCall.checkElement=true +com.gigaide.elements.ext.stack.blade.GetRouteMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.blade.OrderClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.blade.PathClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.blade.PostRouteMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.blade.PutRouteMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.blade.RequestCall.checkElement=true +com.gigaide.elements.ext.stack.blade.RouteMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.blade.ScheduleMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.blade.TemplateEngineCall.checkElement=true +com.gigaide.elements.ext.stack.blade.WebHookImplementation.checkElement=true +com.gigaide.elements.ext.stack.config.AllureParameterCall.checkElement=true +com.gigaide.elements.ext.stack.config.BladeEnvCall.checkElement=true +com.gigaide.elements.ext.stack.config.DropwizardConfigurationImpl.checkElement=true +com.gigaide.elements.ext.stack.config.DropwizardConfiguredCommandImpl.checkElement=true +com.gigaide.elements.ext.stack.config.DropwizardEnvironmentCommandImpl.checkElement=true +com.gigaide.elements.ext.stack.data.HibernateEntityAnnotation.checkElement=true +com.gigaide.elements.ext.stack.data.JPAEntityAnnotation.checkElement=true +com.gigaide.elements.ext.stack.data.JakartaPAEntityAnnotation.checkElement=true +com.gigaide.elements.ext.stack.data.SpringTableAnnotation.checkElement=true +com.gigaide.elements.ext.stack.dropwizard.ApplicationImplementation.checkElement=true +com.gigaide.elements.ext.stack.dropwizard.AuthorizerImplementation.checkElement=true +com.gigaide.elements.ext.stack.dropwizard.BuildCall.checkElement=true +com.gigaide.elements.ext.stack.dropwizard.CacheControlMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.dropwizard.CommandImplementation.checkElement=true +com.gigaide.elements.ext.stack.dropwizard.ConfigurationImplementation.checkElement=true +com.gigaide.elements.ext.stack.dropwizard.ConfiguredCommandImplementation.checkElement=true +com.gigaide.elements.ext.stack.dropwizard.EnvironmentCommandImplementation.checkElement=true +com.gigaide.elements.ext.stack.dropwizard.FilterFactoryImplementation.checkElement=true +com.gigaide.elements.ext.stack.dropwizard.JsonSnakeCaseClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.dropwizard.ManagedImplementation.checkElement=true +com.gigaide.elements.ext.stack.dropwizard.PATCHMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.dropwizard.PostBodyTaskImplementation.checkElement=true +com.gigaide.elements.ext.stack.dropwizard.TaskImplementation.checkElement=true +com.gigaide.elements.ext.stack.dropwizard.UnitOfWorkMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.dropwizard.ValidatedMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.ejb.AsynchronousClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.ejb.AsynchronousMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.ejb.DeclareRolesClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.ejb.DependsOnClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.ejb.EJBClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.ejb.EJBFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.ejb.EJBMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.ejb.LocalBeanClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.ejb.LocalClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.ejb.LockClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.ejb.LockMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.ejb.MessageDrivenBeanImplementation.checkElement=true +com.gigaide.elements.ext.stack.ejb.MessageDrivenClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.ejb.PostActivateClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.ejb.PostConstructMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.ejb.RemoteClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.ejb.RolesAllowedClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.ejb.RolesAllowedMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.ejb.RunAsClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.ejb.ScheduleMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.ejb.SchedulesMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.ejb.SingletonClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.ejb.StartupClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.ejb.StatelessClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.ejb.TransactionAttributeClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.ejb.TransactionAttributeMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.ejb.TransactionManagementClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.ejb.UserTransactionImplementation.checkElement=true +com.gigaide.elements.ext.stack.endpoint.BladePathAnnotation.checkElement=true +com.gigaide.elements.ext.stack.endpoint.JavaxWebServletAnnotation.checkElement=true +com.gigaide.elements.ext.stack.endpoint.JaxRsPathAnnotation.checkElement=true +com.gigaide.elements.ext.stack.endpoint.JaxWsWebServiceAnnotation.checkElement=true +com.gigaide.elements.ext.stack.endpoint.SpringMessageEndpointAnnotation.checkElement=true +com.gigaide.elements.ext.stack.endpoint.SpringRestControllerAnnotation.checkElement=true +com.gigaide.elements.ext.stack.entry.DropwizardApplicationImpl.checkElement=true +com.gigaide.elements.ext.stack.entry.EJBStartupAnnotation.checkElement=true +com.gigaide.elements.ext.stack.entry.GwtEntryPointImpl.checkElement=true +com.gigaide.elements.ext.stack.entry.PlayApplicationLoaderImpl.checkElement=true +com.gigaide.elements.ext.stack.entry.SpringRunCall.checkElement=true +com.gigaide.elements.ext.stack.entry.SpringSpringBootApplicationAnnotation.checkElement=true +com.gigaide.elements.ext.stack.factory.DropwizardBuildCall.checkElement=true +com.gigaide.elements.ext.stack.factory.EJBEJBAnnotation.checkElement=true +com.gigaide.elements.ext.stack.factory.SpringBeanAnnotation.checkElement=true +com.gigaide.elements.ext.stack.gwt.EntryPointImplementation.checkElement=true +com.gigaide.elements.ext.stack.gwt.JavaScriptObjectImplementation.checkElement=true +com.gigaide.elements.ext.stack.gwt.JsFunctionClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.gwt.JsOverlayFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.gwt.JsOverlayMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.gwt.JsTypeClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.gwt.RemoteServiceImplementation.checkElement=true +com.gigaide.elements.ext.stack.gwt.RemoteServiceRelativePathClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.gwt.RemoteServiceServletImplementation.checkElement=true +com.gigaide.elements.ext.stack.gwt.XsrfProtectedServiceImplementation.checkElement=true +com.gigaide.elements.ext.stack.gwt.XsrfProtectedServiceServletImplementation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.AnyFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.AnyMetaDefClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.AnyMetaDefFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.AnyMetaDefMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.AnyMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.ColumnTransformerFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.ColumnTransformerMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.ColumnsFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.ColumnsMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.CreationTimestampFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.CreationTimestampMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.DiscriminatorFormulaClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.EntityClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.FormulaFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.FormulaMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.GeneratedFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.GeneratedMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.GeneratorTypeFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.GeneratorTypeMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.GenericGeneratorClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.GenericGeneratorFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.GenericGeneratorMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.ImmutableClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.ImmutableFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.ImmutableMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.JoinColumnOrFormulaFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.JoinColumnOrFormulaMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.JoinFormulaFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.JoinFormulaMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.LazyToOneFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.LazyToOneMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.ManyToAnyFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.ManyToAnyMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.MapKeyTypeFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.MapKeyTypeMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.NationalizedFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.NationalizedMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.NaturalIdCacheClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.NaturalIdFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.NaturalIdMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.NotFoundFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.NotFoundMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.OrderByFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.OrderByMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.ParentFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.ParentMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.PersisterClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.PersisterFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.PersisterMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.PolymorphismClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.ProxyClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.RowIdClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.SortComparatorFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.SortComparatorMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.SortNaturalFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.SortNaturalMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.SubselectClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.SynchronizeClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.TableClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.TargetFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.TargetMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.TuplizerClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.TuplizerFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.TuplizerMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.TypeDefClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.TypeFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.TypeMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.UpdateTimestampFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.hibernate.UpdateTimestampMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.inject.AfterBeanDiscoveryImplementation.checkElement=true +com.gigaide.elements.ext.stack.inject.AfterDeploymentValidationImplementation.checkElement=true +com.gigaide.elements.ext.stack.inject.AfterTypeDiscoveryImplementation.checkElement=true +com.gigaide.elements.ext.stack.inject.AlternativeClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.inject.AlternativeFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.inject.AlternativeMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.inject.AnnotatedCallableImplementation.checkElement=true +com.gigaide.elements.ext.stack.inject.AnnotatedConstructorConfiguratorImplementation.checkElement=true +com.gigaide.elements.ext.stack.inject.AnnotatedConstructorImplementation.checkElement=true +com.gigaide.elements.ext.stack.inject.AnnotatedFieldConfiguratorImplementation.checkElement=true +com.gigaide.elements.ext.stack.inject.AnnotatedFieldImplementation.checkElement=true +com.gigaide.elements.ext.stack.inject.AnnotatedImplementation.checkElement=true +com.gigaide.elements.ext.stack.inject.AnnotatedMemberImplementation.checkElement=true +com.gigaide.elements.ext.stack.inject.AnnotatedMethodConfiguratorImplementation.checkElement=true +com.gigaide.elements.ext.stack.inject.AnnotatedMethodImplementation.checkElement=true +com.gigaide.elements.ext.stack.inject.AnnotatedParameterConfiguratorImplementation.checkElement=true +com.gigaide.elements.ext.stack.inject.AnnotatedParameterImplementation.checkElement=true +com.gigaide.elements.ext.stack.inject.AnnotatedTypeConfiguratorImplementation.checkElement=true +com.gigaide.elements.ext.stack.inject.AnnotatedTypeImplementation.checkElement=true +com.gigaide.elements.ext.stack.inject.AnyClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.inject.ApplicationScopedClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.inject.ApplicationScopedFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.inject.ApplicationScopedMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.inject.AroundInvokeMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.inject.BeanAttributesImplementation.checkElement=true +com.gigaide.elements.ext.stack.inject.BeanImplementation.checkElement=true +com.gigaide.elements.ext.stack.inject.BeforeBeanDiscoveryImplementation.checkElement=true +com.gigaide.elements.ext.stack.inject.BeforeShutdownImplementation.checkElement=true +com.gigaide.elements.ext.stack.inject.ConversationScopedClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.inject.ConversationScopedFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.inject.ConversationScopedMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.inject.DecoratorClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.inject.DecoratorImplementation.checkElement=true +com.gigaide.elements.ext.stack.inject.DefaultClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.inject.DefaultMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.inject.DelegateFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.inject.DependentClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.inject.DependentFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.inject.DependentMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.inject.InjectFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.inject.InjectMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.inject.InjectionTargetImplementation.checkElement=true +com.gigaide.elements.ext.stack.inject.InterceptionFactoryImplementation.checkElement=true +com.gigaide.elements.ext.stack.inject.InterceptorClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.inject.InterceptorImplementation.checkElement=true +com.gigaide.elements.ext.stack.inject.ModelClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.inject.ModelFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.inject.ModelMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.inject.NewClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.inject.NewFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.inject.NewMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.inject.ObserverMethodImplementation.checkElement=true +com.gigaide.elements.ext.stack.inject.PrioritizedImplementation.checkElement=true +com.gigaide.elements.ext.stack.inject.ProcessBeanAttributesImplementation.checkElement=true +com.gigaide.elements.ext.stack.inject.ProcessBeanImplementation.checkElement=true +com.gigaide.elements.ext.stack.inject.ProcessInjectionPointImplementation.checkElement=true +com.gigaide.elements.ext.stack.inject.ProcessInjectionTargetImplementation.checkElement=true +com.gigaide.elements.ext.stack.inject.ProcessObserverMethodImplementation.checkElement=true +com.gigaide.elements.ext.stack.inject.ProcessProducerImplementation.checkElement=true +com.gigaide.elements.ext.stack.inject.ProcessSyntheticObserverMethodImplementation.checkElement=true +com.gigaide.elements.ext.stack.inject.ProducerImplementation.checkElement=true +com.gigaide.elements.ext.stack.inject.ProducesFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.inject.RequestScopedClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.inject.RequestScopedFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.inject.RequestScopedMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.inject.SeContainerImplementation.checkElement=true +com.gigaide.elements.ext.stack.inject.SessionScopedClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.inject.SessionScopedFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.inject.SessionScopedMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.inject.SpecializesClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.inject.SpecializesMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.inject.StatefulClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.inject.TypedClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.inject.TypedFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.inject.TypedMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.AssociationOverrideClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.AttributeOverrideClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.CacheableClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.ColumnFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.ColumnMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.ConverterClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.DiscriminatorColumnClassAnnotationTable.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.DiscriminatorValueClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.EmbeddableClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.EntityClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.EntityListenersClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.GeneratedValueFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.GeneratedValueMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.IdClassClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.IdFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.IdMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.InheritanceClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.JoinColumnFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.JoinColumnMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.JoinTableFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.JoinTableMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.ManyToManyFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.ManyToManyMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.MappedSuperclassClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.NamedEntityGraphClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.NamedNativeQueryClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.NamedQueriesClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.NamedQueryClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.NamedStoredProcedureQueryClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.OneToManyFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.OneToManyMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.PersistenceContextClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.PersistenceContextFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.PersistenceContextMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.PersistenceUnitClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.PersistenceUnitFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.PersistenceUnitMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.PrimaryKeyJoinColumnClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.SecondaryTableClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.SequenceGeneratorClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.SqlResultMappingClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.SqlResultSetMappingClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.StaticMetamodelClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.TableClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.TableGeneratorClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.TemporalFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.TemporalMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.TransientFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.TransientMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.VersionFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jakartapa.VersionMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxrs.ConsumesClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxrs.ConsumesMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxrs.ContextFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxrs.ContextMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxrs.CookieParamFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxrs.CookieParamMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxrs.DELETEMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxrs.DefaultValueFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxrs.DefaultValueMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxrs.EncodedClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxrs.EncodedFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxrs.EncodedMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxrs.FormParamFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxrs.FormParamMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxrs.GETMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxrs.HEADMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxrs.HeaderParamFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxrs.HeaderParamMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxrs.MatrixParamFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxrs.MatrixParamMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxrs.OPTIONSMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxrs.PATCHMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxrs.POSTMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxrs.PUTMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxrs.PathClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxrs.PathMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxrs.PathParamFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxrs.PathParamMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxrs.PreMatchingClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxrs.ProducesClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxrs.ProducesMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxrs.ProviderClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxrs.QueryParamFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxrs.QueryParamMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxws.ActionMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxws.AddressingClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxws.AddressingFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxws.AddressingMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxws.BindingTypeClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxws.FaultActionMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxws.HandlerChainClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxws.MTOMClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxws.MTOMFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxws.MTOMMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxws.OneWayMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxws.RequestWrapperMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxws.ResourceClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxws.ResourceFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxws.ResourceMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxws.RespectBindingClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxws.RespectBindingFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxws.RespectBindingMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxws.ResponseWrapperMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxws.SOAPBindingClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxws.SOAPBindingMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxws.ServiceModeClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxws.WebEndpointMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxws.WebFaultClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxws.WebMethodMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxws.WebResultMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxws.WebServiceClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxws.WebServiceClientClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxws.WebServiceProviderClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxws.WebServiceRefClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxws.WebServiceRefFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxws.WebServiceRefMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxws.WebServiceRefsClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxws.XmlAccessorTypeClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxws.XmlElementFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxws.XmlElementMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxws.XmlRootElementClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jaxws.XmlTypeClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jdbc.CommitStatement.checkElement=true +com.gigaide.elements.ext.stack.jdbc.CreateStatement.checkElement=true +com.gigaide.elements.ext.stack.jdbc.DataSourceImplementation.checkElement=true +com.gigaide.elements.ext.stack.jdbc.ExecuteBatchStatement.checkElement=true +com.gigaide.elements.ext.stack.jdbc.ExecuteQueryStatement.checkElement=true +com.gigaide.elements.ext.stack.jdbc.ExecuteUpdateStatement.checkElement=true +com.gigaide.elements.ext.stack.jdbc.PrepareStatement.checkElement=true +com.gigaide.elements.ext.stack.jdbc.RollbackStatement.checkElement=true +com.gigaide.elements.ext.stack.jdbc.SetAutoCommitStatement.checkElement=true +com.gigaide.elements.ext.stack.jpa.AssociationOverrideClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jpa.AttributeOverrideClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jpa.CacheableClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jpa.ColumnFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jpa.ColumnMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jpa.ConverterClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jpa.DiscriminatorColumnClassAnnotationTable.checkElement=true +com.gigaide.elements.ext.stack.jpa.DiscriminatorValueClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jpa.EmbeddableClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jpa.EntityClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jpa.EntityListenersClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jpa.GeneratedValueFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jpa.GeneratedValueMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jpa.IdClassClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jpa.IdFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jpa.IdMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jpa.InheritanceClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jpa.JoinColumnFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jpa.JoinColumnMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jpa.JoinTableFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jpa.JoinTableMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jpa.ManyToManyFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jpa.ManyToManyMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jpa.MappedSuperclassClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jpa.NamedEntityGraphClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jpa.NamedNativeQueryClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jpa.NamedQueriesClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jpa.NamedQueryClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jpa.NamedStoredProcedureQueryClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jpa.OneToManyFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jpa.OneToManyMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jpa.PersistenceContextClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jpa.PersistenceContextFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jpa.PersistenceContextMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jpa.PersistenceUnitClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jpa.PersistenceUnitFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jpa.PersistenceUnitMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jpa.PrimaryKeyJoinColumnClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jpa.SecondaryTableClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jpa.SequenceGeneratorClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jpa.SqlResultMappingClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jpa.SqlResultSetMappingClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jpa.StaticMetamodelClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jpa.TableClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jpa.TableGeneratorClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jpa.TemporalFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jpa.TemporalMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jpa.TransientFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jpa.TransientMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jpa.VersionFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.jpa.VersionMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.junit5.AfterAllMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.junit5.AfterEachMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.junit5.BeforeAllMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.junit5.BeforeEachMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.junit5.DisplayNameClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.junit5.DisplayNameMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.junit5.ExtendWithClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.junit5.ExtendWithMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.junit5.NestedClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.junit5.RepeatedTestMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.junit5.TestInstanceClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.junit5.TestMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.lombok.AllArgsConstructorClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.lombok.BuilderClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.lombok.BuilderMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.lombok.DataClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.lombok.EqualsAndHashCodeClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.lombok.GetterClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.lombok.GetterFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.lombok.LogClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.lombok.NoArgsConstructorClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.lombok.NonNullFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.lombok.NonNullMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.lombok.RequiredArgsConstructorClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.lombok.SetterClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.lombok.SetterFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.lombok.SingularFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.lombok.Slf4JClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.lombok.SneakyThrowsMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.lombok.SynchronizedMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.lombok.ToStringClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.lombok.ValueClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.lombok.WithClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.lombok.WithFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.lombok.WitherClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.lombok.WitherFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.message.EJBMessageDrivenAnnotation.checkElement=true +com.gigaide.elements.ext.stack.message.EJBMessageDrivenBeanImpl.checkElement=true +com.gigaide.elements.ext.stack.message.SpringMessageEndpointAnnotation.checkElement=true +com.gigaide.elements.ext.stack.mybatis.AliasClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.mybatis.ArgMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.mybatis.CacheNamespaceClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.mybatis.CacheNamespaceRefClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.mybatis.CommitCall.checkElement=true +com.gigaide.elements.ext.stack.mybatis.ConstructorArgsMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.mybatis.DeleteCall.checkElement=true +com.gigaide.elements.ext.stack.mybatis.DeleteMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.mybatis.DeleteProviderMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.mybatis.FlushMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.mybatis.InsertCall.checkElement=true +com.gigaide.elements.ext.stack.mybatis.InsertMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.mybatis.InsertProviderMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.mybatis.InterceptsClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.mybatis.LangMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.mybatis.MapKeyMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.mybatis.MappedJdbcTypesClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.mybatis.OptionsMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.mybatis.ResultMapMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.mybatis.ResultMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.mybatis.ResultTypeMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.mybatis.ResultsMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.mybatis.SelectKeyMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.mybatis.SelectMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.mybatis.SelectProviderMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.mybatis.TypeDiscriminatorMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.mybatis.UpdateCall.checkElement=true +com.gigaide.elements.ext.stack.mybatis.UpdateMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.mybatis.UpdateProviderMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.opensymphony.AbstractInterceptorImplementation.checkElement=true +com.gigaide.elements.ext.stack.opensymphony.ActionImplementation.checkElement=true +com.gigaide.elements.ext.stack.opensymphony.ActionSupportImplementation.checkElement=true +com.gigaide.elements.ext.stack.opensymphony.LoggerFactoryImplementation.checkElement=true +com.gigaide.elements.ext.stack.opensymphony.LoggerImplementation.checkElement=true +com.gigaide.elements.ext.stack.opensymphony.ModelDrivenImplementation.checkElement=true +com.gigaide.elements.ext.stack.opensymphony.ObjectFactoryImplementation.checkElement=true +com.gigaide.elements.ext.stack.opensymphony.ParamNameAwareResultImplementation.checkElement=true +com.gigaide.elements.ext.stack.opensymphony.RequiredStringValidatorMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.play.ActionCreatorImplementation.checkElement=true +com.gigaide.elements.ext.stack.play.AkkaGuiceSupportImplementation.checkElement=true +com.gigaide.elements.ext.stack.play.ApplicationLoaderImplementation.checkElement=true +com.gigaide.elements.ext.stack.play.AssetsComponentsImplementation.checkElement=true +com.gigaide.elements.ext.stack.play.BodyParserImplementation.checkElement=true +com.gigaide.elements.ext.stack.play.CachedClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.play.CachedMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.play.CaffeineCacheComponentsImplementation.checkElement=true +com.gigaide.elements.ext.stack.play.DBComponentsImplementation.checkElement=true +com.gigaide.elements.ext.stack.play.FormFactoryComponentsImplementation.checkElement=true +com.gigaide.elements.ext.stack.play.HikariCPComponentsImplementation.checkElement=true +com.gigaide.elements.ext.stack.play.HttpErrorHandlerImplementation.checkElement=true +com.gigaide.elements.ext.stack.play.HttpRequestHandlerImplementation.checkElement=true +com.gigaide.elements.ext.stack.play.WSBodyReadablesImplementation.checkElement=true +com.gigaide.elements.ext.stack.play.WSBodyWritablesImplementation.checkElement=true +com.gigaide.elements.ext.stack.play.WithMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.primefaces.AjaxCall.checkElement=true +com.gigaide.elements.ext.stack.primefaces.ExecuteScriptCall.checkElement=true +com.gigaide.elements.ext.stack.primefaces.FocusCall.checkElement=true +com.gigaide.elements.ext.stack.primefaces.IsAjaxRequestCall.checkElement=true +com.gigaide.elements.ext.stack.primefaces.MultiViewStateCall.checkElement=true +com.gigaide.elements.ext.stack.primefaces.ResetInputsCall.checkElement=true +com.gigaide.elements.ext.stack.primefaces.ScrollToCall.checkElement=true +com.gigaide.elements.ext.stack.servlet.AddListenerCall.checkElement=true +com.gigaide.elements.ext.stack.servlet.CreateListenerCall.checkElement=true +com.gigaide.elements.ext.stack.servlet.DispatchCall.checkElement=true +com.gigaide.elements.ext.stack.servlet.GetAsyncContextCall.checkElement=true +com.gigaide.elements.ext.stack.servlet.GetRequestCall.checkElement=true +com.gigaide.elements.ext.stack.servlet.GetResponseCall.checkElement=true +com.gigaide.elements.ext.stack.servlet.GetTimeoutCall.checkElement=true +com.gigaide.elements.ext.stack.servlet.HttpServletInherit.checkElement=true +com.gigaide.elements.ext.stack.servlet.IsAsyncSupportedCall.checkElement=true +com.gigaide.elements.ext.stack.servlet.SetTimeoutCall.checkElement=true +com.gigaide.elements.ext.stack.servlet.StartAsyncCall.checkElement=true +com.gigaide.elements.ext.stack.servlet.TagSupportInherit.checkElement=true +com.gigaide.elements.ext.stack.servlet.WebServletClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.slf4j.AddArgumentCall.checkElement=true +com.gigaide.elements.ext.stack.slf4j.AddKeyValueCall.checkElement=true +com.gigaide.elements.ext.stack.slf4j.AddMarkerCall.checkElement=true +com.gigaide.elements.ext.stack.slf4j.AtDebugCall.checkElement=true +com.gigaide.elements.ext.stack.slf4j.AtErrorCall.checkElement=true +com.gigaide.elements.ext.stack.slf4j.AtInfoCall.checkElement=true +com.gigaide.elements.ext.stack.slf4j.AtTraceCall.checkElement=true +com.gigaide.elements.ext.stack.slf4j.AtWarnCall.checkElement=true +com.gigaide.elements.ext.stack.slf4j.DebugCall.checkElement=true +com.gigaide.elements.ext.stack.slf4j.ErrorCall.checkElement=true +com.gigaide.elements.ext.stack.slf4j.GetLoggerCall.checkElement=true +com.gigaide.elements.ext.stack.slf4j.GetNameCall.checkElement=true +com.gigaide.elements.ext.stack.slf4j.InfoCall.checkElement=true +com.gigaide.elements.ext.stack.slf4j.IsDebugEnabledCall.checkElement=true +com.gigaide.elements.ext.stack.slf4j.IsErrorEnabledCall.checkElement=true +com.gigaide.elements.ext.stack.slf4j.IsInfoEnabledCall.checkElement=true +com.gigaide.elements.ext.stack.slf4j.IsTraceEnabledCall.checkElement=true +com.gigaide.elements.ext.stack.slf4j.IsWarnEnabledCall.checkElement=true +com.gigaide.elements.ext.stack.slf4j.LogCall.checkElement=true +com.gigaide.elements.ext.stack.slf4j.TraceCall.checkElement=true +com.gigaide.elements.ext.stack.slf4j.WarnCall.checkElement=true +com.gigaide.elements.ext.stack.spark.AfterAfterCall.checkElement=true +com.gigaide.elements.ext.stack.spark.AfterCall.checkElement=true +com.gigaide.elements.ext.stack.spark.AwaitInitializationCall.checkElement=true +com.gigaide.elements.ext.stack.spark.BeforeCall.checkElement=true +com.gigaide.elements.ext.stack.spark.ExceptionCall.checkElement=true +com.gigaide.elements.ext.stack.spark.GetCall.checkElement=true +com.gigaide.elements.ext.stack.spark.HaltCall.checkElement=true +com.gigaide.elements.ext.stack.spark.InitCall.checkElement=true +com.gigaide.elements.ext.stack.spark.InternalServerErrorCall.checkElement=true +com.gigaide.elements.ext.stack.spark.NotFoundCall.checkElement=true +com.gigaide.elements.ext.stack.spark.OptionsCall.checkElement=true +com.gigaide.elements.ext.stack.spark.PathCall.checkElement=true +com.gigaide.elements.ext.stack.spark.PortCall.checkElement=true +com.gigaide.elements.ext.stack.spark.PostCall.checkElement=true +com.gigaide.elements.ext.stack.spark.PutCall.checkElement=true +com.gigaide.elements.ext.stack.spark.ResponseTransformerImplementation.checkElement=true +com.gigaide.elements.ext.stack.spark.SecureCall.checkElement=true +com.gigaide.elements.ext.stack.spark.StopCall.checkElement=true +com.gigaide.elements.ext.stack.spark.ThreadPoolCall.checkElement=true +com.gigaide.elements.ext.stack.spark.WebSocketCall.checkElement=true +com.gigaide.elements.ext.stack.spring.aop.AfterReturningAdviceImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.aop.EnableAspectJAutoProxyClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.aop.EnableSpringConfiguredClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.aop.MethodBeforeAdviceImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.aop.ThrowsAdviceImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.AutoConfigureMockMvcClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.AutoConfigureMockMvcMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.AutoConfigureRestDocsClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.AutoConfigureTestDatabaseClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.AutoConfigureTestDatabaseMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.CommandLineRunnerImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.ConditionalOnClassClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.ConditionalOnClassMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.ConditionalOnMissingBeanClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.ConditionalOnMissingBeanMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.ConfigurationPropertiesClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.ConfigurationPropertiesMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.ConfigurationPropertiesScanClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.ConstructorBindingClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.DataJdbcTestClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.DataJpaTestClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.DataLdapTestClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.DataMongoTestClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.DataNeo4JTestClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.DataRedisTestClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.DataSizeUnitFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.DeleteOperationMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.DependencyManagementBomClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.DependencyManagementBomFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.DependencyManagementBomMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.DeprecatedConfigurationPropertyMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.DurationUnitFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.EnableAutoConfigurationClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.EnableConfigurationPropertiesClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.ErrorViewResolverImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.ExitCall.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.HealthIndicatorImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.HttpClientConfigBuilderCustomizerImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.ImportAutoConfigurationClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.InfoContributorImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.JdbcTestClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.JooqTestClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.JsonComponentClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.JsonTestClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.MockBeanClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.MockBeanFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.ReactiveHealthIndicatorImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.ReadOperationMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.RepackageCall.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.RestClientTestClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.RestTemplateCustomizerImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.RunCall.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.SetBackupSourceCall.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.SpringBootApplicationClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.SpringBootTestClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.TestConfigurationClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.WebFluxTestClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.WebMvcTestClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.WebServerFactoryCustomizerImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.boot.WriteOperationMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.data.AccessTypeClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.data.AccessTypeFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.data.AccessTypeMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.data.AfterDomainEventPublicationMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.data.AuditorAwareImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.data.ColumnFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.data.ColumnMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.data.CreatedByFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.data.CreatedByMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.data.CreatedDateFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.data.CreatedDateMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.data.CrudRepositoryImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.data.DocumentClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.data.DomainEventsMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.data.EnableJpaRepositoriesClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.data.EnableMongoRepositoriesClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.data.EnableSpringDataWebSupportClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.data.IdFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.data.IdMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.data.JsonPathMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.data.ListCrudRepositoryImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.data.ListPagingAndSortingRepositoryImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.data.MappedCollectionFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.data.MappedCollectionMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.data.NoRepositoryBeanClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.data.NullableFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.data.NullableMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.data.ObjectInstantiatorImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.data.PagingAndSortingRepositoryImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.data.PersistentPropertyAccessorImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.data.ProjectedPayloadClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.data.QueryByExampleExecutorImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.data.QueryJdbcMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.data.QueryJpaMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.data.QuerydslPredicateExecutorImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.data.StreamableImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.data.TableClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.AbstractAnnotationConfigDispatcherServletInitializerImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.ActiveProfilesClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.AfterTransactionMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.AnnotationFormatterFactoryImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.ApplicationContextAwareImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.ApplicationEventPublisherAwareImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.ApplicationListenerImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.ApplicationScopeClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.ApplicationScopeMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.AsyncClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.AsyncMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.AsyncUncaughtExceptionHandlerImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.AutowiredFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.AutowiredMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.BeanMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.BeanPostProcessorImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.BeforeTransactionMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.CacheConfigClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.CacheEvictClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.CacheEvictMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.CachePutClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.CachePutMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.CacheableClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.CacheableMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.CachingClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.CachingMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.CommitClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.CommitMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.ComponentClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.ComponentScanClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.ConditionalConverterImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.ConfigurationClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.ConnectMappingMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.ContextConfigurationClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.ContextHierarchyClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.ControllerAdviceClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.ControllerClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.ConversionServiceImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.ConverterFactoryImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.ConverterImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.CrossOriginClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.CrossOriginMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.DateTimeFormatFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.DateTimeFormatMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.DeleteMappingMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.DescriptionClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.DirtiesContextClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.DirtiesContextMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.DisabledIfClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.DisabledIfMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.DisposableBeanImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.EnableAsyncClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.EnableCachingClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.EnableJmsClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.EnableLoadTimeWeavingClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.EnableMBeanExportClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.EnableSchedulingClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.EnableWebFluxClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.EnableWebMvcClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.EnableWebSocketClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.EnableWebSocketMessageBrokerClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.EnabledIfClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.EnabledIfMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.EventListenerMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.ExceptionHandlerMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.FormatterImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.FormatterRegistrarImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.FormatterRegistryImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.GenericConverterImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.GetMappingMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.IfProfileValueClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.IfProfileValueMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.ImportClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.ImportResourceClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.InitBinderMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.InitializingBeanImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.JmsListenerMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.LifecycleImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.LifecycleProcessorImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.LookupMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.ManagedResourceClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.MessageExceptionHandlerMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.MessageMappingClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.MessageMappingMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.ModelAttributeMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.NotificationPublisherAwareImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.NumberFormatFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.NumberFormatMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.OrderFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.OrderMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.ParserImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.PatchMappingMathodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.PayloadMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.PhasedImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.PostMappingMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.PrimaryClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.PrimaryMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.PrinterImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.ProfileClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.ProfileMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.ProfileValueSourceConfigurationClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.PropertyEditorRegistrarImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.PropertySourceClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.PutMappingMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.QualifierClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.QualifierFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.QualifierMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.RepeatMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.RepositoryClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.RepositoryImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.RequestMappingClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.RequestMappingMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.RequestScopeClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.RequestScopeMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.ResolvableTypeProviderImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.ResourceImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.ResourceLoaderImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.ResponseBodyClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.ResponseBodyMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.ResponseStatusClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.ResponseStatusMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.RestControllerClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.RollbackClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.RollbackMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.RowMapperImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.ScheduledMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.ScopeClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.ScopeMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.SendToClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.SendToMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.SendToUserClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.SendToUserMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.ServiceClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.SessionAttributesClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.SessionScopeClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.SessionScopeMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.SpringJUnitConfigClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.SpringJUnitWebConfigClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.SqlClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.SqlGroupClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.SqlGroupMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.SqlMergeModeClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.SqlMergeModeMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.SqlMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.TestConstructorClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.TestExecutionListenersClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.TestPropertySourceClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.TimedMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.TransactionalClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.TransactionalEventListenerMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.TransactionalMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.ValidatorImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.ValueFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.ValueMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.WebAppConfigurationClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.WebApplicationInitializerImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.framework.WebSocketHandlerImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.AddRecipientCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.AggregatorMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.BridgeFromClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.BridgeToMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.CorrelationStrategyMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.EnableIntegrationClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.EnableIntegrationMBeanExportClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.EnableIntegrationManagementClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.EnablePublisherClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.FilterMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.FromMessageCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.GatewayMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.IdempotentReceiverMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.InboundChannelAdapterMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.IntegrationComponentScanClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.IntegrationConverterClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.IntegrationConverterMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.MessageEndpointClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.MessageGroupProcessorImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.MessageGroupStoreImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.MessageSelectorImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.MessagingGatewayClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.PayloadsMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.PollCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.PublisherClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.PublisherMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.ReleaseStrategyImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.ReleaseStrategyMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.RoleMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.RouterMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SecuredChannelMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SendAndReceiveCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SendCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.ServiceActivatorMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetAccessDecisionManagerCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetAdviceChainCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetAllowUnknownKeysCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetApplySequenceCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetAsyncCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetAuthenticationManagerCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetAutoCreateLocalDirectoryCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetAutoReceiptCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetBaseDirectoryCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetChannelMappingCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetCollectionNameExpressionStringCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetCompletionTimeoutCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetConnectionFactoryCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetConnectionOptionsCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetConverterCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetDefaultDelayCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetDefaultReplyToCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetDefaultTopicCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetDelayExpressionStringCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetDeleteRemoteFilesCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetDirectoryCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetDiscardChannelCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetEntityClassCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetEventTypesCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetExpectReplyCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetExpectSingleResultCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetExpectedResponseTypeCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetFileExistsModeCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetFileNameGeneratorCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetFilterCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetGatewayTypeCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetHostCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetHttpMethodCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetIgnoreSendFailuresCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetJpaQueryCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetLocalDirectoryCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetLocalFilterCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetMapInboundDeliveryModeCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetMapInboundExpirationCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetMaxFetchSizeCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetMaxMessagesPerPollCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetOutputChannelCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetOutputChannelNameCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetPasswordCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetPortCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetPreparedStatementSetterCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetProtocolCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetPubSubCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetQosCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetQueryExpressionStringCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetQueueNameCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetReceiveTimeoutCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetRegistryHostCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetRegistryPortCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetRemoteDirectoryCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetRemoteDirectoryExpressionStringCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetReplyChannelCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetReplyChannelNameCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetRequestChannelCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetRequestChannelNameCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetRequestMappingCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetRequestPayloadTypeCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetRoutingKeyCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetSendTimeoutCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetSingleUseCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetTestSessionCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetTriggerCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetUserCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SetUsernameCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SplitterMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.SpringIntegrationTestClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.TransformerMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.WithPayloadCall.checkElement=true +com.gigaide.elements.ext.stack.spring.integration.XmlPayloadConverterImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.security.AnyMessageCall.checkElement=true +com.gigaide.elements.ext.stack.spring.security.AuthorizeExchangeCall.checkElement=true +com.gigaide.elements.ext.stack.spring.security.CreateUserCall.checkElement=true +com.gigaide.elements.ext.stack.spring.security.CsrfCall.checkElement=true +com.gigaide.elements.ext.stack.spring.security.EnableGlobalMethodSecurityClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.security.EnableRSocketSecurityClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.security.EnableReactiveMethodSecurityClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.security.EnableWebFluxSecurityClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.security.EnableWebSecurityClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.security.EncodeCall.checkElement=true +com.gigaide.elements.ext.stack.spring.security.FilterInvocationSecurityMetadataSourceImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.security.GetPasswordCall.checkElement=true +com.gigaide.elements.ext.stack.spring.security.GroupSearchBaseCall.checkElement=true +com.gigaide.elements.ext.stack.spring.security.LdapAuthenticationCall.checkElement=true +com.gigaide.elements.ext.stack.spring.security.LdapAuthoritiesPopulatorImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.security.LoadUserCall.checkElement=true +com.gigaide.elements.ext.stack.spring.security.NullDestMatcherCall.checkElement=true +com.gigaide.elements.ext.stack.spring.security.OAuth2AuthorizationRequestResolverImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.security.OAuth2TokenValidatorImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.security.OAuth2UserImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.security.Oauth2LoginCall.checkElement=true +com.gigaide.elements.ext.stack.spring.security.OpaqueTokenIntrospectorImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.security.PasswordCall.checkElement=true +com.gigaide.elements.ext.stack.spring.security.PostFilterClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.security.PostFilterMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.security.PreAuthorizeClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.security.PreAuthorizeMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.security.ResolveCall.checkElement=true +com.gigaide.elements.ext.stack.spring.security.RolesCall.checkElement=true +com.gigaide.elements.ext.stack.spring.security.SecuredClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.security.SecuredMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.security.SetClaimSetConverterCall.checkElement=true +com.gigaide.elements.ext.stack.spring.security.SimpDestMatchersCall.checkElement=true +com.gigaide.elements.ext.stack.spring.security.SimpSubscribeDestMatchersCall.checkElement=true +com.gigaide.elements.ext.stack.spring.security.SimpTypeMatchersCall.checkElement=true +com.gigaide.elements.ext.stack.spring.security.UserDnPatternsCall.checkElement=true +com.gigaide.elements.ext.stack.spring.security.UsernameCall.checkElement=true +com.gigaide.elements.ext.stack.spring.security.WithAnonymousUserClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.security.WithAnonymousUserMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.security.WithMockUserClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.security.WithMockUserMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.security.WithSecurityContextFactoryImplementation.checkElement=true +com.gigaide.elements.ext.stack.spring.security.WithUserDetailsClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.security.WithUserDetailsMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.session.EnableHazelcastHttpSessionClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.session.EnableJdbcHttpSessionClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.session.EnableRedisHttpSessionClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.session.EnableRedisWebSessionClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.session.EnableSpringHttpSessionClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.session.EnableSpringWebSessionClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.spring.session.SetCookieNameCall.checkElement=true +com.gigaide.elements.ext.stack.spring.session.SetCookiePathCall.checkElement=true +com.gigaide.elements.ext.stack.spring.session.SetDomainNamePatternCall.checkElement=true +com.gigaide.elements.ext.stack.struts2.ActionFormInherit.checkElement=true +com.gigaide.elements.ext.stack.struts2.ActionInherit.checkElement=true +com.gigaide.elements.ext.stack.struts2.ActionMapperImplementation.checkElement=true +com.gigaide.elements.ext.stack.struts2.DispatchActionSubclassDeclaration.checkElement=true +com.gigaide.elements.ext.stack.struts2.ForwardActionSubclassDeclaration.checkElement=true +com.gigaide.elements.ext.stack.struts2.IncludeActionSubclassDeclaration.checkElement=true +com.gigaide.elements.ext.stack.struts2.ReloadActionSubclassDeclaration.checkElement=true +com.gigaide.elements.ext.stack.struts2.SetLocationCall.checkElement=true +com.gigaide.elements.ext.stack.struts2.StrutsTypeConverterImplementation.checkElement=true +com.gigaide.elements.ext.stack.tapestry.AddCall.checkElement=true +com.gigaide.elements.ext.stack.tapestry.AddLoggingAdviceCall.checkElement=true +com.gigaide.elements.ext.stack.tapestry.AddRenderCall.checkElement=true +com.gigaide.elements.ext.stack.tapestry.AdviseMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.tapestry.AfterRenderMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.tapestry.ApplicationDefaultsFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.tapestry.ApplicationDefaultsMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.tapestry.AutobuildCall.checkElement=true +com.gigaide.elements.ext.stack.tapestry.BeginRenderMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.tapestry.BindCall.checkElement=true +com.gigaide.elements.ext.stack.tapestry.BindParameterFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.tapestry.ComponentFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.tapestry.ContributeMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.tapestry.CoreFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.tapestry.CoreMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.tapestry.DecorateMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.tapestry.EnvironmentalFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.tapestry.GetBodyCall.checkElement=true +com.gigaide.elements.ext.stack.tapestry.ImportMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.tapestry.InjectComponentFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.tapestry.InjectFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.tapestry.InjectPageFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.tapestry.InjectServiceFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.tapestry.JavaScriptStackImplementation.checkElement=true +com.gigaide.elements.ext.stack.tapestry.LocalFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.tapestry.LocalMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.tapestry.MarkerClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.tapestry.MarkerMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.tapestry.MatchMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.tapestry.MixinClassesFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.tapestry.MixinFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.tapestry.MixinsFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.tapestry.OnEventMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.tapestry.OrderMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.tapestry.ParameterFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.tapestry.PathFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.tapestry.PerformRegistryStartupCall.checkElement=true +com.gigaide.elements.ext.stack.tapestry.PersistFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.tapestry.PostInjectionMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.tapestry.PrimaryFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.tapestry.PropertyFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.tapestry.PublishEventMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.tapestry.SecureClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.tapestry.ServiceIdClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.tapestry.ServiceIdMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.tapestry.SessionAttributeFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.tapestry.SessionStateFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.tapestry.SetupRenderMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.tapestry.StartupMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.tapestry.SubModuleClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.tapestry.SymbolFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.task.BladeScheduleAnnotation.checkElement=true +com.gigaide.elements.ext.stack.task.DropwizardUnitOfWorkAnnotation.checkElement=true +com.gigaide.elements.ext.stack.threads.AcquireCall.checkElement=true +com.gigaide.elements.ext.stack.threads.CallableImplementation.checkElement=true +com.gigaide.elements.ext.stack.threads.ExecuteCall.checkElement=true +com.gigaide.elements.ext.stack.threads.InterruptCall.checkElement=true +com.gigaide.elements.ext.stack.threads.InvokeAllCall.checkElement=true +com.gigaide.elements.ext.stack.threads.InvokeAnyCall.checkElement=true +com.gigaide.elements.ext.stack.threads.LockCall.checkElement=true +com.gigaide.elements.ext.stack.threads.LockInterruptiblyCall.checkElement=true +com.gigaide.elements.ext.stack.threads.NotifyAllStatement.checkElement=true +com.gigaide.elements.ext.stack.threads.NotifyStatement.checkElement=true +com.gigaide.elements.ext.stack.threads.ReleaseCall.checkElement=true +com.gigaide.elements.ext.stack.threads.RunnableImplementation.checkElement=true +com.gigaide.elements.ext.stack.threads.ShutdownCall.checkElement=true +com.gigaide.elements.ext.stack.threads.StartCall.checkElement=true +com.gigaide.elements.ext.stack.threads.SubmitCall.checkElement=true +com.gigaide.elements.ext.stack.threads.TryLockCall.checkElement=true +com.gigaide.elements.ext.stack.threads.UnlockCall.checkElement=true +com.gigaide.elements.ext.stack.threads.WaitStatement.checkElement=true +com.gigaide.elements.ext.stack.transaction.MyBatisCommitCall.checkElement=true +com.gigaide.elements.ext.stack.vaadin.AbstractThemeImplementation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.AddChangeListenerCall.checkElement=true +com.gigaide.elements.ext.stack.vaadin.AddClassNameCall.checkElement=true +com.gigaide.elements.ext.stack.vaadin.AddClickListenerCall.checkElement=true +com.gigaide.elements.ext.stack.vaadin.AddColumnCall.checkElement=true +com.gigaide.elements.ext.stack.vaadin.AddFinishedListenerCall.checkElement=true +com.gigaide.elements.ext.stack.vaadin.AddFocusShortcutCall.checkElement=true +com.gigaide.elements.ext.stack.vaadin.AddPropertyChangeListenerCall.checkElement=true +com.gigaide.elements.ext.stack.vaadin.AppendChildCall.checkElement=true +com.gigaide.elements.ext.stack.vaadin.BeforeEnterObserverImplementation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.BeforeLeaveObserverImplementation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.BindInstanceFieldsCall.checkElement=true +com.gigaide.elements.ext.stack.vaadin.BodySizeClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.BootstrapListenerImplementation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.ClientCallableMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.ConverterImplementation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.CssImportClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.DependencyFilterImplementation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.DomEventClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.DragSourceImplementation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.DropTargetImplementation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.EventHandlerMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.ExcludeMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.ExecuteJsCall.checkElement=true +com.gigaide.elements.ext.stack.vaadin.ForFieldCall.checkElement=true +com.gigaide.elements.ext.stack.vaadin.GetAvailableRoutesCall.checkElement=true +com.gigaide.elements.ext.stack.vaadin.GetElementCall.checkElement=true +com.gigaide.elements.ext.stack.vaadin.GetParametersCall.checkElement=true +com.gigaide.elements.ext.stack.vaadin.GetStyleCall.checkElement=true +com.gigaide.elements.ext.stack.vaadin.GetTextCall.checkElement=true +com.gigaide.elements.ext.stack.vaadin.GetUICall.checkElement=true +com.gigaide.elements.ext.stack.vaadin.HasComponentsImplementation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.HasDynamicTitleImplementation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.HasErrorParameterImplementation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.HasStyleImplementation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.HasUrlParameterImplementation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.I18NProviderImplementation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.IdFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.InlineClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.JavaScriptClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.JsModuleClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.LocaleChangeObserverImplementation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.ModelEncoderImplementation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.NoThemeClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.NpmPackageClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.PWAClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.PageConfiguratorImplementation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.PageTitleClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.ParentLayoutClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.PreserveOnRefreshClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.PropertyIdFieldAnnotation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.PushClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.ReadBeanCall.checkElement=true +com.gigaide.elements.ext.stack.vaadin.RemovePropertyCall.checkElement=true +com.gigaide.elements.ext.stack.vaadin.RemoveRouteCall.checkElement=true +com.gigaide.elements.ext.stack.vaadin.RouteAliasClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.RouteClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.RoutePrefixClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.RouterLayoutImplementation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.SessionDestroyListenerImplementation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.SessionInitListenerImplementation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.SetAttributeCall.checkElement=true +com.gigaide.elements.ext.stack.vaadin.SetBeanCall.checkElement=true +com.gigaide.elements.ext.stack.vaadin.SetEnabledCall.checkElement=true +com.gigaide.elements.ext.stack.vaadin.SetInternalErrorMessageCall.checkElement=true +com.gigaide.elements.ext.stack.vaadin.SetItemLabelGeneratorCall.checkElement=true +com.gigaide.elements.ext.stack.vaadin.SetItemsCall.checkElement=true +com.gigaide.elements.ext.stack.vaadin.SetLabelCall.checkElement=true +com.gigaide.elements.ext.stack.vaadin.SetPropertyCall.checkElement=true +com.gigaide.elements.ext.stack.vaadin.SetRequiredConfiguratorCall.checkElement=true +com.gigaide.elements.ext.stack.vaadin.SetRouteCall.checkElement=true +com.gigaide.elements.ext.stack.vaadin.SetTextCall.checkElement=true +com.gigaide.elements.ext.stack.vaadin.SetVisibleCall.checkElement=true +com.gigaide.elements.ext.stack.vaadin.StyleSheetClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.SynchronizeMethodAnnotation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.SynchronizePropertyCall.checkElement=true +com.gigaide.elements.ext.stack.vaadin.SystemMessagesProviderImplementation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.TagClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.TemplateModelImplementation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.ThemeClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.VaadinServiceInitListenerImplementation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.VaadinServletConfigurationClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.ViewportClassAnnotation.checkElement=true +com.gigaide.elements.ext.stack.vaadin.WithValidatorCall.checkElement=true +com.gigaide.elements.ext.view.DefaultBlade.shouldUse=true +com.gigaide.elements.ext.view.DefaultFrameElement.shouldUse=true +com.gigaide.elements.ext.view.DefaultFrameMarker.shouldUse=true +com.gigaide.elements.ext.view.DefaultFramework.shouldUse=true +com.gigaide.elements.ext.view.DefaultJPA.shouldUse=true +com.gigaide.elements.ext.view.DefaultJaxRs.shouldUse=true +com.gigaide.elements.ext.view.DefaultJaxWs.shouldUse=true +com.gigaide.elements.ext.view.DefaultSolution.shouldUse=true +com.gigaide.elements.ext.view.DefaultSolutionElement.shouldUse=true +com.gigaide.elements.ext.view.DefaultSolutionMarker.shouldUse=true +com.gigaide.elements.ext.view.DefaultSpringFramework.shouldUse=true +com.gigaide.elements.ext.view.ExplorerFrameElement.shouldUse=true +com.gigaide.elements.ext.view.ExplorerFrameMarker.shouldUse=true +com.gigaide.elements.ext.view.ExplorerSolutionElement.shouldUse=true +com.gigaide.elements.ext.view.ExplorerSolutionMarker.shouldUse=true +com.gigaide.elements.service.marker.config.MarkerConfigHolder.analyzePriority=false +com.gigaide.elements.service.marker.config.MarkerConfigHolder.autoAnalize=false +com.gigaide.elements.service.stack.config.StackConfigHolder.autoAnalize=false +com.gigaide.elements.service.stack.config.StackConfigHolder.autoLoad=false +com.gigaide.elements.service.stack.config.StackConfigHolder.autoLoadableNotify=false +com.gigaide.elements.service.stack.config.StackConfigHolder.includeTests=false diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 00000000..d2f3b413 --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 00000000..a55e7a17 --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/README.md b/README.md index e69de29b..51fcfd7b 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,81 @@ +# Описание проектной работы первого спринта, приложение Mesto + +## Проектирование + +В качестве фреймворка для создания микрофронтэндов выбран Module Federation. +Это позволяет разделять код между несколькими независимыми приложениями и динамически загружать его в браузере пользователя. +В результате над кодом различных микрофронтэндов команды разработки могут работать и деплоить независимо, ускоряется начальная загрузка приложения. + +### Обновленная структура проекта + +Исходя из доменных зон приложения, его можно поделить на следующие микрофронтэнды: + +1. _Хост-приложение_ - главное окно, инкапсулирует все остальные микрофронтэнды и предоставляет хэдер-футер. +2. _Приложение для аутентификации_ - предоставляет функционал регистрации и авторизации пользователей. +3. _Приложение для управления профелем_ - предоставляет функционал для редатирования/отображения профиля. +4. _Приложение для управления карточками_ - функционал для отображения, добавления карточек с местами, лайки/дизлайки. + +### Дерево каталогов + +- _host_ + - _/src_ + - _/components_ + - Header.js - Хедер страницы + - Footer.js - Футер страницы + - ProtectedRoute.js - Компонент маршрутизации + - Main.js – Главный компонент для отображения профиля и карточек + - /styles + - content - Стили для контента страницы + - header - Стили для компонента хидера + - footer - Стили для компонента футера + - page - Стили для страницы + - index.js - Точка входа хостового приложения + - package.json - Зависимости и скрипты микрофронтенда + - webpack.config.js - Конфиг для сборки с помощью webpack + +- _auth_ + - _/src_ + - _/components_ + - Login.js – Компонент логина пользователя + - Register.js – Компонент регистрации пользователя + - _/styles_ + - login – Стили для компонента логина + - auth-form – Стили для компонента регистрации + - _/utils_ + - auth.js – Протокол для аутентификации + - index.js – Точка входа микрофронтенда + - package.json – Зависимости и скрипты микрофронтенда + - webpack.config.js - Конфиг для сборки с помощью webpack + +- _profile_ + - _/src_ + - _/components_ + - EditProfilePopup.js – Компонент для редактирования профиля + - EditAvatarPopup.js – Компонент для обновления аватара + - _/utils_ + - api.js – Утилиты для работы с API профиля + - _/styles_ + - profile – Стили для компонента профиля + - index.js – Точка входа микрофронтенда + - package.json – Зависимости и скрипты микрофронтенда + - webpack.config.js - Конфиг для сборки с помощью webpack + +- _/places_ + - _/src_ + - _/components_ + - Card.js – Компонент для отображения карточки + - AddPlacePopup.js – Компонент для добавления новой карточки + - ImagePopup.js – Компонент для отображения увеличенной карточки + - _/utils_ + - api.js – Утилиты для работы с API карточек + - _/styles_ + - card – Стили для карточек + - popup – Стили для всплывающих окон + - index.js – Точка входа микрофронтенда + - package.json – Зависимости и скрипты микрофронтенда + - webpack.config.js - Конфиг для сборки с помощью webpack + +## Второе задание + +Ссылка на обновленную архитектуру монолитного приложения из второго задания +https://drive.google.com/file/d/1zrW0wUP8ORCMbGSkBLfTUXk65E0LdTgp/view?usp=sharing \ No newline at end of file diff --git a/frontend/microfrontend/auth/.babelrc b/frontend/microfrontend/auth/.babelrc new file mode 100644 index 00000000..517d7ae6 --- /dev/null +++ b/frontend/microfrontend/auth/.babelrc @@ -0,0 +1,7 @@ +{ + "presets": [ + ["@babel/preset-react", { "runtime": "automatic" }], + "@babel/preset-env" + ], + "plugins": [["@babel/transform-runtime"]] +} diff --git a/frontend/microfrontend/auth/.gitignore b/frontend/microfrontend/auth/.gitignore new file mode 100644 index 00000000..1f22b9c2 --- /dev/null +++ b/frontend/microfrontend/auth/.gitignore @@ -0,0 +1,116 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* diff --git a/frontend/microfrontend/auth/compilation.config.js b/frontend/microfrontend/auth/compilation.config.js new file mode 100644 index 00000000..a4a1e343 --- /dev/null +++ b/frontend/microfrontend/auth/compilation.config.js @@ -0,0 +1,31 @@ +const printCompilationMessage = (status, port) => { + let messageColor, messageType, browserMessage; + + switch (status) { + case "success": + messageColor = "\x1b[32m"; + messageType = "Compiled successfully!"; + browserMessage = "You can now view"; + break; + case "failure": + messageColor = "\x1b[31m"; + messageType = "Compilation Failed!"; + browserMessage = "You can't now view"; + break; + case "compiling": + messageColor = "\x1b[94m"; + messageType = "Compiling..."; + browserMessage = "Compiling the"; + break; + } + + console.log(`\n\n + ${messageColor}${messageType}\x1b[0m\n + ${browserMessage} \x1b[1mRemote\x1b[0m in the browser. + ${messageColor}${messageType}\x1b[0m\n + \x1b[1mLocal\x1b[0m: http://localhost:\x1b[1m${port}\x1b[0m + \x1b[1mLocal\x1b[0m: http://localhost:\x1b[1m${port}\x1b[0m\n\n + `); +}; + +module.exports = printCompilationMessage; \ No newline at end of file diff --git a/frontend/microfrontend/auth/package.json b/frontend/microfrontend/auth/package.json new file mode 100644 index 00000000..c916c97d --- /dev/null +++ b/frontend/microfrontend/auth/package.json @@ -0,0 +1,38 @@ +{ + "name": "auth", + "version": "1.0.0", + "scripts": { + "build": "webpack --mode production", + "build:dev": "webpack --mode development", + "build:start": "cd dist && PORT=8081 npx serve", + "start": "webpack serve --mode development", + "start:live": "webpack serve --mode development --live-reload --hot" + }, + "license": "MIT", + "author": { + "name": "Jack Herrington", + "email": "jherr@pobox.com" + }, + "devDependencies": { + "@babel/core": "^7.15.8", + "@babel/plugin-transform-runtime": "^7.15.8", + "@babel/preset-env": "^7.15.8", + "@babel/preset-react": "^7.14.5", + "autoprefixer": "^10.1.0", + "babel-loader": "^8.2.2", + "css-loader": "^6.3.0", + "html-webpack-plugin": "^5.3.2", + "postcss": "^8.2.1", + "postcss-loader": "^4.1.0", + "style-loader": "^3.3.0", + "webpack": "^5.57.1", + "webpack-cli": "^4.10.0", + "webpack-dev-server": "^4.3.1", + "dotenv-webpack": "^8.0.1" + }, + "dependencies": { + "@babel/runtime": "^7.13.10", + "react": "^18.2.0", + "react-dom": "^18.2.0" + } +} \ No newline at end of file diff --git a/frontend/microfrontend/auth/src/App.jsx b/frontend/microfrontend/auth/src/App.jsx new file mode 100644 index 00000000..71200f05 --- /dev/null +++ b/frontend/microfrontend/auth/src/App.jsx @@ -0,0 +1,19 @@ +import React from "react"; +import ReactDOM from "react-dom/client"; + +import "./index.css"; + +const App = () => ( +
+
Name: auth
+
Framework: react
+
Language: JavaScript
+
CSS: Empty CSS
+
+); +const rootElement = document.getElementById("app") +if (!rootElement) throw new Error("Failed to find the root element") + +const root = ReactDOM.createRoot(rootElement) + +root.render() \ No newline at end of file diff --git a/frontend/microfrontend/auth/src/components/Login.js b/frontend/microfrontend/auth/src/components/Login.js new file mode 100644 index 00000000..8b4196d1 --- /dev/null +++ b/frontend/microfrontend/auth/src/components/Login.js @@ -0,0 +1,39 @@ +import React from 'react'; + +import '../blocks/login/login.css'; + +function Login ({ onLogin }){ + const [email, setEmail] = React.useState(''); + const [password, setPassword] = React.useState(''); + + function handleSubmit(e){ + e.preventDefault(); + const userData = { + email, + password + } + onLogin(userData); + } + return ( +
+
+
+

Вход

+ + +
+ +
+
+ ) +} + +export default Login; diff --git a/frontend/microfrontend/auth/src/components/Register.js b/frontend/microfrontend/auth/src/components/Register.js new file mode 100644 index 00000000..f72fd4dd --- /dev/null +++ b/frontend/microfrontend/auth/src/components/Register.js @@ -0,0 +1,41 @@ +import React from 'react'; +import { Link } from 'react-router-dom'; + +function Register ({ onRegister }){ + const [email, setEmail] = React.useState(''); + const [password, setPassword] = React.useState(''); + + function handleSubmit(e){ + e.preventDefault(); + const userData = { + email, + password + } + onRegister(userData); + } + return ( +
+
+
+

Регистрация

+ + +
+
+ +

Уже зарегистрированы? Войти

+
+
+
+ ) +} + +export default Register; diff --git a/frontend/microfrontend/auth/src/index.css b/frontend/microfrontend/auth/src/index.css new file mode 100644 index 00000000..20e225c5 --- /dev/null +++ b/frontend/microfrontend/auth/src/index.css @@ -0,0 +1,10 @@ +body { + font-family: Arial, Helvetica, sans-serif; +} + +.container { + font-size: 3rem; + margin: auto; + max-width: 800px; + margin-top: 20px; +} \ No newline at end of file diff --git a/frontend/microfrontend/auth/src/index.html b/frontend/microfrontend/auth/src/index.html new file mode 100644 index 00000000..cf2a83c2 --- /dev/null +++ b/frontend/microfrontend/auth/src/index.html @@ -0,0 +1,14 @@ + + + + + + + auth + + + +
+ + + diff --git a/frontend/microfrontend/auth/src/index.js b/frontend/microfrontend/auth/src/index.js new file mode 100644 index 00000000..fc3cee10 --- /dev/null +++ b/frontend/microfrontend/auth/src/index.js @@ -0,0 +1 @@ +import("./App"); diff --git a/frontend/microfrontend/auth/src/styles/auth-form/__button/auth-form__button.css b/frontend/microfrontend/auth/src/styles/auth-form/__button/auth-form__button.css new file mode 100644 index 00000000..c3d85651 --- /dev/null +++ b/frontend/microfrontend/auth/src/styles/auth-form/__button/auth-form__button.css @@ -0,0 +1,15 @@ +.auth-form__button { + width: 358px; + height: 50px; + background-color: #fff; + border: 0; + border-radius: 2px; + font-family: Inter, sans-serif; + font-size: 18px; + line-height: 22px; + cursor: pointer; +} + +.auth-form__button:hover { + opacity: .85; +} \ No newline at end of file diff --git a/frontend/microfrontend/auth/src/styles/auth-form/__form/auth-form__form.css b/frontend/microfrontend/auth/src/styles/auth-form/__form/auth-form__form.css new file mode 100644 index 00000000..30ebdfe7 --- /dev/null +++ b/frontend/microfrontend/auth/src/styles/auth-form/__form/auth-form__form.css @@ -0,0 +1,6 @@ +.auth-form__form { + display: flex; + flex-direction: column; + min-height: 60vh; + justify-content: space-between; +} \ No newline at end of file diff --git a/frontend/microfrontend/auth/src/styles/auth-form/__input/auth-form__input.css b/frontend/microfrontend/auth/src/styles/auth-form/__input/auth-form__input.css new file mode 100644 index 00000000..27c5a510 --- /dev/null +++ b/frontend/microfrontend/auth/src/styles/auth-form/__input/auth-form__input.css @@ -0,0 +1,5 @@ +.auth-form__input { + width: 358px; + margin-bottom: 30px; + display: block; +} \ No newline at end of file diff --git a/frontend/microfrontend/auth/src/styles/auth-form/__link/auth-form__link.css b/frontend/microfrontend/auth/src/styles/auth-form/__link/auth-form__link.css new file mode 100644 index 00000000..ba43bd91 --- /dev/null +++ b/frontend/microfrontend/auth/src/styles/auth-form/__link/auth-form__link.css @@ -0,0 +1,7 @@ +.auth-form__link { + color: #fff; +} + +.auth-form__link:hover { + opacity: .85; +} \ No newline at end of file diff --git a/frontend/microfrontend/auth/src/styles/auth-form/__text/auth-form__text.css b/frontend/microfrontend/auth/src/styles/auth-form/__text/auth-form__text.css new file mode 100644 index 00000000..c756474c --- /dev/null +++ b/frontend/microfrontend/auth/src/styles/auth-form/__text/auth-form__text.css @@ -0,0 +1,8 @@ +.auth-form__text { + color: #fff; + font-family: Inter, sans-serif; + text-align: center; + font-size: 14px; + line-height: 17px; + margin-top: 15px; +} \ No newline at end of file diff --git a/frontend/microfrontend/auth/src/styles/auth-form/__textfield/auth-form__textfield.css b/frontend/microfrontend/auth/src/styles/auth-form/__textfield/auth-form__textfield.css new file mode 100644 index 00000000..136b1ee5 --- /dev/null +++ b/frontend/microfrontend/auth/src/styles/auth-form/__textfield/auth-form__textfield.css @@ -0,0 +1,16 @@ +.auth-form__textfield { + font-family: Inter, sans-serif; + background-color: transparent; + border: 0; + border-bottom: 2px solid #CCCCCC; + font-size: 14px; + padding: 13px 0; + width: 100%; + color: #fff; +} + +.auth-form__textfield::-webkit-input-placeholder {color:#CCCCCC;} +.auth-form__textfield::-moz-placeholder {color:#CCCCCC;} +.auth-form__textfield:-moz-placeholder {color:#CCCCCC;} +.auth-form__textfield:-ms-input-placeholder {color:#CCCCCC;} +.auth-form__textfield::placeholder {color:#CCCCCC;} diff --git a/frontend/microfrontend/auth/src/styles/auth-form/__title/auth-form__title.css b/frontend/microfrontend/auth/src/styles/auth-form/__title/auth-form__title.css new file mode 100644 index 00000000..ec21e0f9 --- /dev/null +++ b/frontend/microfrontend/auth/src/styles/auth-form/__title/auth-form__title.css @@ -0,0 +1,8 @@ +.auth-form__title { + color: #fff; + font-weight: 900; + font-size: 24px; + line-height: 29px; + font-family: Inter, sans-serif; + text-align: center; +} \ No newline at end of file diff --git a/frontend/microfrontend/auth/src/styles/auth-form/auth-form.css b/frontend/microfrontend/auth/src/styles/auth-form/auth-form.css new file mode 100644 index 00000000..460be902 --- /dev/null +++ b/frontend/microfrontend/auth/src/styles/auth-form/auth-form.css @@ -0,0 +1,15 @@ +@import url('./__title/auth-form__title.css'); +@import url('./__form/auth-form__form.css'); +@import url('./__input/auth-form__input.css'); +@import url('./__textfield/auth-form__textfield.css'); +@import url('./__button/auth-form__button.css'); +@import url('./__text/auth-form__text.css'); +@import url('./__link/auth-form__link.css'); + +.auth-form { + flex-grow: 1; + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; +} \ No newline at end of file diff --git a/frontend/microfrontend/auth/src/styles/login/login.css b/frontend/microfrontend/auth/src/styles/login/login.css new file mode 100644 index 00000000..e69de29b diff --git a/frontend/microfrontend/auth/src/utils/auth.js b/frontend/microfrontend/auth/src/utils/auth.js new file mode 100644 index 00000000..9e33d644 --- /dev/null +++ b/frontend/microfrontend/auth/src/utils/auth.js @@ -0,0 +1,43 @@ +const BASE_URL = 'https://auth.nomoreparties.co'; + +const getResponse = (res) => { + return res.ok ? res.json() : Promise.reject(`Ошибка: ${res.status}`); +} + +export const register = (email, password) => { + return fetch(`${BASE_URL}/signup`, { + method: 'POST', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json' + }, + body: JSON.stringify({email, password}) + }) + .then(getResponse) +}; +export const login = (email, password) => { + return fetch(`${BASE_URL}/signin`, { + method: 'POST', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json' + }, + body: JSON.stringify({email, password}) + }) + .then(getResponse) + .then((data) => { + localStorage.setItem('jwt', data.token) + return data; + }) +}; +export const checkToken = (token) => { + return fetch(`${BASE_URL}/users/me`, { + method: 'GET', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'Authorization': `Bearer ${token}`, + } + }) + .then(getResponse) +} \ No newline at end of file diff --git a/frontend/microfrontend/auth/webpack.config.js b/frontend/microfrontend/auth/webpack.config.js new file mode 100644 index 00000000..84e8037f --- /dev/null +++ b/frontend/microfrontend/auth/webpack.config.js @@ -0,0 +1,86 @@ +const HtmlWebPackPlugin = require("html-webpack-plugin"); +const ModuleFederationPlugin = require("webpack/lib/container/ModuleFederationPlugin"); +const path = require('path'); +const Dotenv = require('dotenv-webpack'); + +const deps = require("./package.json").dependencies; + +const printCompilationMessage = require('./compilation.config.js'); + +module.exports = (_, argv) => ({ + output: { + publicPath: "http://localhost:8081/", + }, + + resolve: { + extensions: [".tsx", ".ts", ".jsx", ".js", ".json"], + }, + + devServer: { + port: 8081, + historyApiFallback: true, + watchFiles: [path.resolve(__dirname, 'src')], + onListening: function (devServer) { + const port = devServer.server.address().port + + printCompilationMessage('compiling', port) + + devServer.compiler.hooks.done.tap('OutputMessagePlugin', (stats) => { + setImmediate(() => { + if (stats.hasErrors()) { + printCompilationMessage('failure', port) + } else { + printCompilationMessage('success', port) + } + }) + }) + } + }, + + module: { + rules: [ + { + test: /\.m?js/, + type: "javascript/auto", + resolve: { + fullySpecified: false, + }, + }, + { + test: /\.(css|s[ac]ss)$/i, + use: ["style-loader", "css-loader", "postcss-loader"], + }, + { + test: /\.(ts|tsx|js|jsx)$/, + exclude: /node_modules/, + use: { + loader: "babel-loader", + }, + }, + ], + }, + + plugins: [ + new ModuleFederationPlugin({ + name: "auth", + filename: "remoteEntry.js", + remotes: {}, + exposes: {}, + shared: { + ...deps, + react: { + singleton: true, + requiredVersion: deps.react, + }, + "react-dom": { + singleton: true, + requiredVersion: deps["react-dom"], + }, + }, + }), + new HtmlWebPackPlugin({ + template: "./src/index.html", + }), + new Dotenv() + ], +}); diff --git a/frontend/microfrontend/host/.babelrc b/frontend/microfrontend/host/.babelrc new file mode 100644 index 00000000..517d7ae6 --- /dev/null +++ b/frontend/microfrontend/host/.babelrc @@ -0,0 +1,7 @@ +{ + "presets": [ + ["@babel/preset-react", { "runtime": "automatic" }], + "@babel/preset-env" + ], + "plugins": [["@babel/transform-runtime"]] +} diff --git a/frontend/microfrontend/host/.gitignore b/frontend/microfrontend/host/.gitignore new file mode 100644 index 00000000..1f22b9c2 --- /dev/null +++ b/frontend/microfrontend/host/.gitignore @@ -0,0 +1,116 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* diff --git a/frontend/microfrontend/host/compilation.config.js b/frontend/microfrontend/host/compilation.config.js new file mode 100644 index 00000000..a4a1e343 --- /dev/null +++ b/frontend/microfrontend/host/compilation.config.js @@ -0,0 +1,31 @@ +const printCompilationMessage = (status, port) => { + let messageColor, messageType, browserMessage; + + switch (status) { + case "success": + messageColor = "\x1b[32m"; + messageType = "Compiled successfully!"; + browserMessage = "You can now view"; + break; + case "failure": + messageColor = "\x1b[31m"; + messageType = "Compilation Failed!"; + browserMessage = "You can't now view"; + break; + case "compiling": + messageColor = "\x1b[94m"; + messageType = "Compiling..."; + browserMessage = "Compiling the"; + break; + } + + console.log(`\n\n + ${messageColor}${messageType}\x1b[0m\n + ${browserMessage} \x1b[1mRemote\x1b[0m in the browser. + ${messageColor}${messageType}\x1b[0m\n + \x1b[1mLocal\x1b[0m: http://localhost:\x1b[1m${port}\x1b[0m + \x1b[1mLocal\x1b[0m: http://localhost:\x1b[1m${port}\x1b[0m\n\n + `); +}; + +module.exports = printCompilationMessage; \ No newline at end of file diff --git a/frontend/microfrontend/host/package.json b/frontend/microfrontend/host/package.json new file mode 100644 index 00000000..83cba1f1 --- /dev/null +++ b/frontend/microfrontend/host/package.json @@ -0,0 +1,38 @@ +{ + "name": "host", + "version": "1.0.0", + "scripts": { + "build": "webpack --mode production", + "build:dev": "webpack --mode development", + "build:start": "cd dist && PORT=8080 npx serve", + "start": "webpack serve --mode development", + "start:live": "webpack serve --mode development --live-reload --hot" + }, + "license": "MIT", + "author": { + "name": "Jack Herrington", + "email": "jherr@pobox.com" + }, + "devDependencies": { + "@babel/core": "^7.15.8", + "@babel/plugin-transform-runtime": "^7.15.8", + "@babel/preset-env": "^7.15.8", + "@babel/preset-react": "^7.14.5", + "autoprefixer": "^10.1.0", + "babel-loader": "^8.2.2", + "css-loader": "^6.3.0", + "html-webpack-plugin": "^5.3.2", + "postcss": "^8.2.1", + "postcss-loader": "^4.1.0", + "style-loader": "^3.3.0", + "webpack": "^5.57.1", + "webpack-cli": "^4.10.0", + "webpack-dev-server": "^4.3.1", + "dotenv-webpack": "^8.0.1" + }, + "dependencies": { + "@babel/runtime": "^7.13.10", + "react": "^18.2.0", + "react-dom": "^18.2.0" + } +} \ No newline at end of file diff --git a/frontend/microfrontend/host/src/App.jsx b/frontend/microfrontend/host/src/App.jsx new file mode 100644 index 00000000..2378f927 --- /dev/null +++ b/frontend/microfrontend/host/src/App.jsx @@ -0,0 +1,19 @@ +import React from "react"; +import ReactDOM from "react-dom/client"; + +import "./index.css"; + +const App = () => ( +
+
Name: host
+
Framework: react
+
Language: JavaScript
+
CSS: Empty CSS
+
+); +const rootElement = document.getElementById("app") +if (!rootElement) throw new Error("Failed to find the root element") + +const root = ReactDOM.createRoot(rootElement) + +root.render() \ No newline at end of file diff --git a/frontend/microfrontend/host/src/components/Footer.js b/frontend/microfrontend/host/src/components/Footer.js new file mode 100644 index 00000000..c59e9907 --- /dev/null +++ b/frontend/microfrontend/host/src/components/Footer.js @@ -0,0 +1,13 @@ +import React from 'react'; + +function Footer() { + return ( +
+

+ © 2021 Mesto Russia +

+
+ ); +} + +export default Footer; diff --git a/frontend/microfrontend/host/src/components/Header.js b/frontend/microfrontend/host/src/components/Header.js new file mode 100644 index 00000000..abee0d7c --- /dev/null +++ b/frontend/microfrontend/host/src/components/Header.js @@ -0,0 +1,29 @@ +import React from 'react'; +import { Route, Link } from 'react-router-dom'; +import logoPath from '../images/logo.svg'; + +// В корневом компоненте App описаны обработчики: onRegister, onLogin и onSignOut. Эти обработчики переданы в соответствующие компоненты: Register.js, Login.js, Header.js +function Header ({onSignOut, email }) { + function handleSignOut(){ + onSignOut(); + } + return ( +
+ Логотип проекта Mesto + +
+

{ email }

+ +
+
+ + Войти + + + Регистрация + +
+ ) +} + +export default Header; diff --git a/frontend/microfrontend/host/src/components/Main.js b/frontend/microfrontend/host/src/components/Main.js new file mode 100644 index 00000000..d4edc7f5 --- /dev/null +++ b/frontend/microfrontend/host/src/components/Main.js @@ -0,0 +1,38 @@ +import React from 'react'; +import Card from './Card'; +import { CurrentUserContext } from '../contexts/CurrentUserContext'; + +function Main({ cards, onEditProfile, onAddPlace, onEditAvatar, onCardClick, onCardLike, onCardDelete }) { + const currentUser = React.useContext(CurrentUserContext); + + const imageStyle = { backgroundImage: `url(${currentUser.avatar})` }; + + return ( +
+
+
+
+

{currentUser.name}

+ +

{currentUser.about}

+
+ +
+
+
    + {cards.map((card) => ( + + ))} +
+
+
+ ); +} + +export default Main; diff --git a/frontend/microfrontend/host/src/components/ProtectedRoute.js b/frontend/microfrontend/host/src/components/ProtectedRoute.js new file mode 100644 index 00000000..c65ec70d --- /dev/null +++ b/frontend/microfrontend/host/src/components/ProtectedRoute.js @@ -0,0 +1,13 @@ +import React from 'react'; +import { Route, Redirect } from "react-router-dom"; + +const ProtectedRoute = ({ component: Component, ...props }) => { + return ( + + { + () => props.loggedIn ? : + } + +)} + +export default ProtectedRoute; \ No newline at end of file diff --git a/frontend/microfrontend/host/src/contexts/CurrentUserContext.js b/frontend/microfrontend/host/src/contexts/CurrentUserContext.js new file mode 100644 index 00000000..38344d08 --- /dev/null +++ b/frontend/microfrontend/host/src/contexts/CurrentUserContext.js @@ -0,0 +1,4 @@ +import React from 'react'; + +// Объект контекста CurrentUserContext экспортируется из отдельного файла директории contexts +export const CurrentUserContext = React.createContext(); diff --git a/frontend/microfrontend/host/src/images/logo.svg b/frontend/microfrontend/host/src/images/logo.svg new file mode 100644 index 00000000..772167b2 --- /dev/null +++ b/frontend/microfrontend/host/src/images/logo.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/frontend/microfrontend/host/src/index.css b/frontend/microfrontend/host/src/index.css new file mode 100644 index 00000000..8fb4ffe3 --- /dev/null +++ b/frontend/microfrontend/host/src/index.css @@ -0,0 +1,12 @@ +@import url('./vendor/normalize.css'); +@import url('./vendor/fonts.css'); +@import url('./blocks/page/page.css'); +@import url('./blocks/header/header.css'); +@import url('./blocks/content/content.css'); +@import url('./blocks/footer/footer.css'); +@import url('./blocks/profile/profile.css'); +@import url('./blocks/places/places.css'); +@import url('./blocks/card/card.css'); +@import url('./blocks/popup/popup.css'); +@import url('./blocks/popup/_is-opened/popup_is-opened.css'); +@import url('./blocks/auth-form/auth-form.css'); diff --git a/frontend/microfrontend/host/src/index.html b/frontend/microfrontend/host/src/index.html new file mode 100644 index 00000000..032cda4c --- /dev/null +++ b/frontend/microfrontend/host/src/index.html @@ -0,0 +1,14 @@ + + + + + + + host + + + +
+ + + diff --git a/frontend/microfrontend/host/src/index.js b/frontend/microfrontend/host/src/index.js new file mode 100644 index 00000000..8b0459b8 --- /dev/null +++ b/frontend/microfrontend/host/src/index.js @@ -0,0 +1,20 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import './index.css'; +import App from './components/App'; +import * as serviceWorker from './serviceWorker'; +import { BrowserRouter } from "react-router-dom"; + +ReactDOM.render( + + + + + , + document.getElementById('root') +); + +// If you want your app to work offline and load faster, you can change +// unregister() to register() below. Note this comes with some pitfalls. +// Learn more about service workers: https://bit.ly/CRA-PWA +serviceWorker.unregister(); diff --git a/frontend/microfrontend/host/src/logo.svg b/frontend/microfrontend/host/src/logo.svg new file mode 100644 index 00000000..6b60c104 --- /dev/null +++ b/frontend/microfrontend/host/src/logo.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/frontend/microfrontend/host/src/serviceWorker.js b/frontend/microfrontend/host/src/serviceWorker.js new file mode 100644 index 00000000..b04b771a --- /dev/null +++ b/frontend/microfrontend/host/src/serviceWorker.js @@ -0,0 +1,141 @@ +// This optional code is used to register a service worker. +// register() is not called by default. + +// This lets the app load faster on subsequent visits in production, and gives +// it offline capabilities. However, it also means that developers (and users) +// will only see deployed updates on subsequent visits to a page, after all the +// existing tabs open on the page have been closed, since previously cached +// resources are updated in the background. + +// To learn more about the benefits of this model and instructions on how to +// opt-in, read https://bit.ly/CRA-PWA + +const isLocalhost = Boolean( + window.location.hostname === 'localhost' || + // [::1] is the IPv6 localhost address. + window.location.hostname === '[::1]' || + // 127.0.0.0/8 are considered localhost for IPv4. + window.location.hostname.match( + /^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/ + ) +); + +export function register(config) { + if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) { + // The URL constructor is available in all browsers that support SW. + const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href); + if (publicUrl.origin !== window.location.origin) { + // Our service worker won't work if PUBLIC_URL is on a different origin + // from what our page is served on. This might happen if a CDN is used to + // serve assets; see https://github.com/facebook/create-react-app/issues/2374 + return; + } + + window.addEventListener('load', () => { + const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`; + + if (isLocalhost) { + // This is running on localhost. Let's check if a service worker still exists or not. + checkValidServiceWorker(swUrl, config); + + // Add some additional logging to localhost, pointing developers to the + // service worker/PWA documentation. + navigator.serviceWorker.ready.then(() => { + console.log( + 'This web app is being served cache-first by a service ' + + 'worker. To learn more, visit https://bit.ly/CRA-PWA' + ); + }); + } else { + // Is not localhost. Just register service worker + registerValidSW(swUrl, config); + } + }); + } +} + +function registerValidSW(swUrl, config) { + navigator.serviceWorker + .register(swUrl) + .then(registration => { + registration.onupdatefound = () => { + const installingWorker = registration.installing; + if (installingWorker == null) { + return; + } + installingWorker.onstatechange = () => { + if (installingWorker.state === 'installed') { + if (navigator.serviceWorker.controller) { + // At this point, the updated precached content has been fetched, + // but the previous service worker will still serve the older + // content until all client tabs are closed. + console.log( + 'New content is available and will be used when all ' + + 'tabs for this page are closed. See https://bit.ly/CRA-PWA.' + ); + + // Execute callback + if (config && config.onUpdate) { + config.onUpdate(registration); + } + } else { + // At this point, everything has been precached. + // It's the perfect time to display a + // "Content is cached for offline use." message. + console.log('Content is cached for offline use.'); + + // Execute callback + if (config && config.onSuccess) { + config.onSuccess(registration); + } + } + } + }; + }; + }) + .catch(error => { + console.error('Error during service worker registration:', error); + }); +} + +function checkValidServiceWorker(swUrl, config) { + // Check if the service worker can be found. If it can't reload the page. + fetch(swUrl, { + headers: { 'Service-Worker': 'script' }, + }) + .then(response => { + // Ensure service worker exists, and that we really are getting a JS file. + const contentType = response.headers.get('content-type'); + if ( + response.status === 404 || + (contentType != null && contentType.indexOf('javascript') === -1) + ) { + // No service worker found. Probably a different app. Reload the page. + navigator.serviceWorker.ready.then(registration => { + registration.unregister().then(() => { + window.location.reload(); + }); + }); + } else { + // Service worker found. Proceed as normal. + registerValidSW(swUrl, config); + } + }) + .catch(() => { + console.log( + 'No internet connection found. App is running in offline mode.' + ); + }); +} + +export function unregister() { + if ('serviceWorker' in navigator) { + navigator.serviceWorker.ready + .then(registration => { + registration.unregister(); + }) + .catch(error => { + console.error(error.message); + }); + } +} diff --git a/frontend/microfrontend/host/src/setupTests.js b/frontend/microfrontend/host/src/setupTests.js new file mode 100644 index 00000000..74b1a275 --- /dev/null +++ b/frontend/microfrontend/host/src/setupTests.js @@ -0,0 +1,5 @@ +// jest-dom adds custom jest matchers for asserting on DOM nodes. +// allows you to do things like: +// expect(element).toHaveTextContent(/react/i) +// learn more: https://github.com/testing-library/jest-dom +import '@testing-library/jest-dom/extend-expect'; diff --git a/frontend/microfrontend/host/src/styles/content/content.css b/frontend/microfrontend/host/src/styles/content/content.css new file mode 100644 index 00000000..84ac9e4d --- /dev/null +++ b/frontend/microfrontend/host/src/styles/content/content.css @@ -0,0 +1,4 @@ +.content { + flex-shrink: 0; + flex-grow: 1; +} diff --git a/frontend/microfrontend/host/src/styles/footer/__copyright/footer__copyright.css b/frontend/microfrontend/host/src/styles/footer/__copyright/footer__copyright.css new file mode 100644 index 00000000..5941b681 --- /dev/null +++ b/frontend/microfrontend/host/src/styles/footer/__copyright/footer__copyright.css @@ -0,0 +1,13 @@ +.footer__copyright { + font-size: 18px; + line-height: 22px; + color: #545454; + margin: 0; +} + +@media screen and (max-width: 568px) { + .footer__copyright { + font-size: 14px; + line-height: 17px; + } +} diff --git a/frontend/microfrontend/host/src/styles/footer/footer.css b/frontend/microfrontend/host/src/styles/footer/footer.css new file mode 100644 index 00000000..9455f1b2 --- /dev/null +++ b/frontend/microfrontend/host/src/styles/footer/footer.css @@ -0,0 +1,13 @@ +@import url('./__copyright/footer__copyright.css'); + +.footer { + font-family: 'Inter', Arial, sans-serif; + flex-shrink: 0; + padding: 30px 0 60px; +} + +@media screen and (max-width: 568px) { + .footer { + padding: 30px 0 36px; + } +} diff --git a/frontend/microfrontend/host/src/styles/header/__auth-link/header__auth-link.css b/frontend/microfrontend/host/src/styles/header/__auth-link/header__auth-link.css new file mode 100644 index 00000000..18a11e1a --- /dev/null +++ b/frontend/microfrontend/host/src/styles/header/__auth-link/header__auth-link.css @@ -0,0 +1,10 @@ +.header__auth-link { + font-size: 18px; + line-height: 22px; + color: #FFFFFF; + text-decoration: none; +} + +.header__auth-link:hover { + opacity: .85; +} \ No newline at end of file diff --git a/frontend/microfrontend/host/src/styles/header/__logo/header__logo.css b/frontend/microfrontend/host/src/styles/header/__logo/header__logo.css new file mode 100644 index 00000000..2fec6e16 --- /dev/null +++ b/frontend/microfrontend/host/src/styles/header/__logo/header__logo.css @@ -0,0 +1,13 @@ +.header__logo { + width: 142px; + height: 33px; + object-fit: contain; +} + +@media screen and (max-width: 480px) { + .header__logo { + width: 104px; + height: 24px; + margin: 0 0 0 7px; + } +} diff --git a/frontend/microfrontend/host/src/styles/header/__logout/header__logout.css b/frontend/microfrontend/host/src/styles/header/__logout/header__logout.css new file mode 100644 index 00000000..77bad6e7 --- /dev/null +++ b/frontend/microfrontend/host/src/styles/header/__logout/header__logout.css @@ -0,0 +1,8 @@ +.header__logout { + font-size: 18px; + line-height: 22px; + color: #A9A9A9; + background-color: transparent; + border: 0; + cursor: pointer; +} \ No newline at end of file diff --git a/frontend/microfrontend/host/src/styles/header/__user/header__user.css b/frontend/microfrontend/host/src/styles/header/__user/header__user.css new file mode 100644 index 00000000..8b0b29d1 --- /dev/null +++ b/frontend/microfrontend/host/src/styles/header/__user/header__user.css @@ -0,0 +1,7 @@ +.header__user { + color: #fff; + font-weight: 500; + font-size: 18px; + line-height: 22px; + margin-right: 24px; +} \ No newline at end of file diff --git a/frontend/microfrontend/host/src/styles/header/__wrapper/header__wrapper.css b/frontend/microfrontend/host/src/styles/header/__wrapper/header__wrapper.css new file mode 100644 index 00000000..3470dc44 --- /dev/null +++ b/frontend/microfrontend/host/src/styles/header/__wrapper/header__wrapper.css @@ -0,0 +1,3 @@ +.header__wrapper { + display: flex; +} \ No newline at end of file diff --git a/frontend/microfrontend/host/src/styles/header/header.css b/frontend/microfrontend/host/src/styles/header/header.css new file mode 100644 index 00000000..80611d86 --- /dev/null +++ b/frontend/microfrontend/host/src/styles/header/header.css @@ -0,0 +1,39 @@ +@import url('./__logo/header__logo.css'); +@import url('./__auth-link/header__auth-link.css'); +@import url('./__wrapper/header__wrapper.css'); +@import url('./__user/header__user.css'); +@import url('./__logout/header__logout.css'); + +.header { + min-height: 120px; + font-family: 'Inter', Arial, sans-serif; + display: flex; + align-items: center; + flex-shrink: 0; + justify-content: space-between; +} + +.header::before { + content: ''; + width: 100%; + height: 1px; + opacity: 0.7; + background: #545454; + position: absolute; + left: 50%; + -webkit-transform: translateX(-50%); + -moz-transform: translateX(-50%); + -ms-transform: translateX(-50%); + -o-transform: translateX(-50%); + transform: translateX(-50%); + bottom: 0; +} + +@media screen and (max-width: 480px) { + .header { + min-height: 85px; + } + .header::before { + width: calc(100% + 40px); + } +} diff --git a/frontend/microfrontend/host/src/styles/page/__content/page__content.css b/frontend/microfrontend/host/src/styles/page/__content/page__content.css new file mode 100644 index 00000000..91bc1443 --- /dev/null +++ b/frontend/microfrontend/host/src/styles/page/__content/page__content.css @@ -0,0 +1,8 @@ +.page__content { + background-color: black; + min-height: 100vh; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + display: flex; + flex-direction: column; +} diff --git a/frontend/microfrontend/host/src/styles/page/__section/page__section.css b/frontend/microfrontend/host/src/styles/page/__section/page__section.css new file mode 100644 index 00000000..460c63d3 --- /dev/null +++ b/frontend/microfrontend/host/src/styles/page/__section/page__section.css @@ -0,0 +1,15 @@ +.page__section { + width: 100%; + max-width: 882px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + position: relative; + margin: 0 auto; +} + +@media screen and (max-width: 1140px) { + .page__section { + width: calc(100% - 40px); + } +} diff --git a/frontend/microfrontend/host/src/styles/page/page.css b/frontend/microfrontend/host/src/styles/page/page.css new file mode 100644 index 00000000..fddc4256 --- /dev/null +++ b/frontend/microfrontend/host/src/styles/page/page.css @@ -0,0 +1,6 @@ +@import url('./__content/page__content.css'); +@import url('./__section/page__section.css'); + +.page { + background: #000; +} diff --git a/frontend/microfrontend/host/src/vendor/fonts.css b/frontend/microfrontend/host/src/vendor/fonts.css new file mode 100644 index 00000000..61345e93 --- /dev/null +++ b/frontend/microfrontend/host/src/vendor/fonts.css @@ -0,0 +1,13 @@ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 400; + src: url("./fonts/Inter-Regular.woff2") format("woff2"); +} + +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 900; + src: url("./fonts/Inter-Black.woff2") format("woff2"); +} diff --git a/frontend/microfrontend/host/src/vendor/fonts/Inter-Black.woff2 b/frontend/microfrontend/host/src/vendor/fonts/Inter-Black.woff2 new file mode 100644 index 00000000..79fb4d6e Binary files /dev/null and b/frontend/microfrontend/host/src/vendor/fonts/Inter-Black.woff2 differ diff --git a/frontend/microfrontend/host/src/vendor/fonts/Inter-Regular.woff2 b/frontend/microfrontend/host/src/vendor/fonts/Inter-Regular.woff2 new file mode 100644 index 00000000..41ba4fe6 Binary files /dev/null and b/frontend/microfrontend/host/src/vendor/fonts/Inter-Regular.woff2 differ diff --git a/frontend/microfrontend/host/src/vendor/normalize.css b/frontend/microfrontend/host/src/vendor/normalize.css new file mode 100644 index 00000000..192eb9ce --- /dev/null +++ b/frontend/microfrontend/host/src/vendor/normalize.css @@ -0,0 +1,349 @@ +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ + +/* Document + ========================================================================== */ + +/** + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in iOS. + */ + +html { + line-height: 1.15; /* 1 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/* Sections + ========================================================================== */ + +/** + * Remove the margin in all browsers. + */ + +body { + margin: 0; +} + +/** + * Render the `main` element consistently in IE. + */ + +main { + display: block; +} + +/** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/* Grouping content + ========================================================================== */ + +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ + +hr { + box-sizing: content-box; /* 1 */ + height: 0; /* 1 */ + overflow: visible; /* 2 */ +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +pre { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/* Text-level semantics + ========================================================================== */ + +/** + * Remove the gray background on active links in IE 10. + */ + +a { + background-color: transparent; +} + +/** + * 1. Remove the bottom border in Chrome 57- + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ + +abbr[title] { + border-bottom: none; /* 1 */ + text-decoration: underline; /* 2 */ + text-decoration: underline dotted; /* 2 */ +} + +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ + +b, +strong { + font-weight: bolder; +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +code, +kbd, +samp { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/** + * Add the correct font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* Embedded content + ========================================================================== */ + +/** + * Remove the border on images inside links in IE 10. + */ + +img { + border-style: none; +} + +/* Forms + ========================================================================== */ + +/** + * 1. Change the font styles in all browsers. + * 2. Remove the margin in Firefox and Safari. + */ + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; /* 1 */ + font-size: 100%; /* 1 */ + line-height: 1.15; /* 1 */ + margin: 0; /* 2 */ +} + +/** + * Show the overflow in IE. + * 1. Show the overflow in Edge. + */ + +button, +input { /* 1 */ + overflow: visible; +} + +/** + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. + */ + +button, +select { /* 1 */ + text-transform: none; +} + +/** + * Correct the inability to style clickable types in iOS and Safari. + */ + +button, +[type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; +} + +/** + * Remove the inner border and padding in Firefox. + */ + +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; +} + +/** + * Restore the focus styles unset by the previous rule. + */ + +button:-moz-focusring, +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; +} + +/** + * Correct the padding in Firefox. + */ + +fieldset { + padding: 0.35em 0.75em 0.625em; +} + +/** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ + +legend { + box-sizing: border-box; /* 1 */ + color: inherit; /* 2 */ + display: table; /* 1 */ + max-width: 100%; /* 1 */ + padding: 0; /* 3 */ + white-space: normal; /* 1 */ +} + +/** + * Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ + +progress { + vertical-align: baseline; +} + +/** + * Remove the default vertical scrollbar in IE 10+. + */ + +textarea { + overflow: auto; +} + +/** + * 1. Add the correct box sizing in IE 10. + * 2. Remove the padding in IE 10. + */ + +[type="checkbox"], +[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ + +[type="search"] { + -webkit-appearance: textfield; /* 1 */ + outline-offset: -2px; /* 2 */ +} + +/** + * Remove the inner padding in Chrome and Safari on macOS. + */ + +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ + +::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ +} + +/* Interactive + ========================================================================== */ + +/* + * Add the correct display in Edge, IE 10+, and Firefox. + */ + +details { + display: block; +} + +/* + * Add the correct display in all browsers. + */ + +summary { + display: list-item; +} + +/* Misc + ========================================================================== */ + +/** + * Add the correct display in IE 10+. + */ + +template { + display: none; +} + +/** + * Add the correct display in IE 10. + */ + +[hidden] { + display: none; +} diff --git a/frontend/microfrontend/host/webpack.config.js b/frontend/microfrontend/host/webpack.config.js new file mode 100644 index 00000000..aab64c41 --- /dev/null +++ b/frontend/microfrontend/host/webpack.config.js @@ -0,0 +1,86 @@ +const HtmlWebPackPlugin = require("html-webpack-plugin"); +const ModuleFederationPlugin = require("webpack/lib/container/ModuleFederationPlugin"); +const path = require('path'); +const Dotenv = require('dotenv-webpack'); + +const deps = require("./package.json").dependencies; + +const printCompilationMessage = require('./compilation.config.js'); + +module.exports = (_, argv) => ({ + output: { + publicPath: "http://localhost:8080/", + }, + + resolve: { + extensions: [".tsx", ".ts", ".jsx", ".js", ".json"], + }, + + devServer: { + port: 8080, + historyApiFallback: true, + watchFiles: [path.resolve(__dirname, 'src')], + onListening: function (devServer) { + const port = devServer.server.address().port + + printCompilationMessage('compiling', port) + + devServer.compiler.hooks.done.tap('OutputMessagePlugin', (stats) => { + setImmediate(() => { + if (stats.hasErrors()) { + printCompilationMessage('failure', port) + } else { + printCompilationMessage('success', port) + } + }) + }) + } + }, + + module: { + rules: [ + { + test: /\.m?js/, + type: "javascript/auto", + resolve: { + fullySpecified: false, + }, + }, + { + test: /\.(css|s[ac]ss)$/i, + use: ["style-loader", "css-loader", "postcss-loader"], + }, + { + test: /\.(ts|tsx|js|jsx)$/, + exclude: /node_modules/, + use: { + loader: "babel-loader", + }, + }, + ], + }, + + plugins: [ + new ModuleFederationPlugin({ + name: "host", + filename: "remoteEntry.js", + remotes: {}, + exposes: {}, + shared: { + ...deps, + react: { + singleton: true, + requiredVersion: deps.react, + }, + "react-dom": { + singleton: true, + requiredVersion: deps["react-dom"], + }, + }, + }), + new HtmlWebPackPlugin({ + template: "./src/index.html", + }), + new Dotenv() + ], +}); diff --git a/frontend/microfrontend/places/.babelrc b/frontend/microfrontend/places/.babelrc new file mode 100644 index 00000000..517d7ae6 --- /dev/null +++ b/frontend/microfrontend/places/.babelrc @@ -0,0 +1,7 @@ +{ + "presets": [ + ["@babel/preset-react", { "runtime": "automatic" }], + "@babel/preset-env" + ], + "plugins": [["@babel/transform-runtime"]] +} diff --git a/frontend/microfrontend/places/.gitignore b/frontend/microfrontend/places/.gitignore new file mode 100644 index 00000000..1f22b9c2 --- /dev/null +++ b/frontend/microfrontend/places/.gitignore @@ -0,0 +1,116 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* diff --git a/frontend/microfrontend/places/compilation.config.js b/frontend/microfrontend/places/compilation.config.js new file mode 100644 index 00000000..a4a1e343 --- /dev/null +++ b/frontend/microfrontend/places/compilation.config.js @@ -0,0 +1,31 @@ +const printCompilationMessage = (status, port) => { + let messageColor, messageType, browserMessage; + + switch (status) { + case "success": + messageColor = "\x1b[32m"; + messageType = "Compiled successfully!"; + browserMessage = "You can now view"; + break; + case "failure": + messageColor = "\x1b[31m"; + messageType = "Compilation Failed!"; + browserMessage = "You can't now view"; + break; + case "compiling": + messageColor = "\x1b[94m"; + messageType = "Compiling..."; + browserMessage = "Compiling the"; + break; + } + + console.log(`\n\n + ${messageColor}${messageType}\x1b[0m\n + ${browserMessage} \x1b[1mRemote\x1b[0m in the browser. + ${messageColor}${messageType}\x1b[0m\n + \x1b[1mLocal\x1b[0m: http://localhost:\x1b[1m${port}\x1b[0m + \x1b[1mLocal\x1b[0m: http://localhost:\x1b[1m${port}\x1b[0m\n\n + `); +}; + +module.exports = printCompilationMessage; \ No newline at end of file diff --git a/frontend/microfrontend/places/package.json b/frontend/microfrontend/places/package.json new file mode 100644 index 00000000..4fbb01bf --- /dev/null +++ b/frontend/microfrontend/places/package.json @@ -0,0 +1,38 @@ +{ + "name": "places", + "version": "1.0.0", + "scripts": { + "build": "webpack --mode production", + "build:dev": "webpack --mode development", + "build:start": "cd dist && PORT=8083 npx serve", + "start": "webpack serve --mode development", + "start:live": "webpack serve --mode development --live-reload --hot" + }, + "license": "MIT", + "author": { + "name": "Jack Herrington", + "email": "jherr@pobox.com" + }, + "devDependencies": { + "@babel/core": "^7.15.8", + "@babel/plugin-transform-runtime": "^7.15.8", + "@babel/preset-env": "^7.15.8", + "@babel/preset-react": "^7.14.5", + "autoprefixer": "^10.1.0", + "babel-loader": "^8.2.2", + "css-loader": "^6.3.0", + "html-webpack-plugin": "^5.3.2", + "postcss": "^8.2.1", + "postcss-loader": "^4.1.0", + "style-loader": "^3.3.0", + "webpack": "^5.57.1", + "webpack-cli": "^4.10.0", + "webpack-dev-server": "^4.3.1", + "dotenv-webpack": "^8.0.1" + }, + "dependencies": { + "@babel/runtime": "^7.13.10", + "react": "^18.2.0", + "react-dom": "^18.2.0" + } +} \ No newline at end of file diff --git a/frontend/microfrontend/places/src/App.jsx b/frontend/microfrontend/places/src/App.jsx new file mode 100644 index 00000000..bfa10a44 --- /dev/null +++ b/frontend/microfrontend/places/src/App.jsx @@ -0,0 +1,19 @@ +import React from "react"; +import ReactDOM from "react-dom/client"; + +import "./index.css"; + +const App = () => ( +
+
Name: places
+
Framework: react
+
Language: JavaScript
+
CSS: Empty CSS
+
+); +const rootElement = document.getElementById("app") +if (!rootElement) throw new Error("Failed to find the root element") + +const root = ReactDOM.createRoot(rootElement) + +root.render() \ No newline at end of file diff --git a/frontend/microfrontend/places/src/components/AddPlacePopup.js b/frontend/microfrontend/places/src/components/AddPlacePopup.js new file mode 100644 index 00000000..90b0a812 --- /dev/null +++ b/frontend/microfrontend/places/src/components/AddPlacePopup.js @@ -0,0 +1,45 @@ +import React from 'react'; +import PopupWithForm from './PopupWithForm'; + +function AddPlacePopup({ isOpen, onAddPlace, onClose }) { + const [name, setName] = React.useState(''); + const [link, setLink] = React.useState(''); + + function handleNameChange(e) { + setName(e.target.value); + } + + function handleLinkChange(e) { + setLink(e.target.value); + } + + function handleSubmit(e) { + e.preventDefault(); + + onAddPlace({ + name, + link + }); + } + + return ( + + + + + ); +} + +export default AddPlacePopup; diff --git a/frontend/microfrontend/places/src/components/Card.js b/frontend/microfrontend/places/src/components/Card.js new file mode 100644 index 00000000..a03c38b7 --- /dev/null +++ b/frontend/microfrontend/places/src/components/Card.js @@ -0,0 +1,47 @@ +import React from 'react'; +import { CurrentUserContext } from '../contexts/CurrentUserContext'; + +function Card({ card, onCardClick, onCardLike, onCardDelete }) { + const cardStyle = { backgroundImage: `url(${card.link})` }; + + function handleClick() { + onCardClick(card); + } + + function handleLikeClick() { + onCardLike(card); + } + + function handleDeleteClick() { + onCardDelete(card); + } + + const currentUser = React.useContext(CurrentUserContext); + + const isLiked = card.likes.some(i => i._id === currentUser._id); + const cardLikeButtonClassName = `card__like-button ${isLiked && 'card__like-button_is-active'}`; + + const isOwn = card.owner._id === currentUser._id; + const cardDeleteButtonClassName = ( + `card__delete-button ${isOwn ? 'card__delete-button_visible' : 'card__delete-button_hidden'}` + ); + + return ( +
  • +
    +
    + +
    +

    + {card.name} +

    +
    + +

    {card.likes.length}

    +
    +
    +
  • + ); +} + +export default Card; diff --git a/frontend/microfrontend/places/src/components/ImagePopup.js b/frontend/microfrontend/places/src/components/ImagePopup.js new file mode 100644 index 00000000..7bd63a2c --- /dev/null +++ b/frontend/microfrontend/places/src/components/ImagePopup.js @@ -0,0 +1,15 @@ +import React from 'react'; + +function ImagePopup({ card, onClose }) { + return ( +
    +
    + + {card +

    {card ? card.name : ''}

    +
    +
    + ); +} + +export default ImagePopup; diff --git a/frontend/microfrontend/places/src/images/add-icon.svg b/frontend/microfrontend/places/src/images/add-icon.svg new file mode 100644 index 00000000..393e5ad3 --- /dev/null +++ b/frontend/microfrontend/places/src/images/add-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/microfrontend/places/src/images/card_1.jpg b/frontend/microfrontend/places/src/images/card_1.jpg new file mode 100644 index 00000000..8b15fbf0 Binary files /dev/null and b/frontend/microfrontend/places/src/images/card_1.jpg differ diff --git a/frontend/microfrontend/places/src/images/card_2.jpg b/frontend/microfrontend/places/src/images/card_2.jpg new file mode 100644 index 00000000..6ab0d22f Binary files /dev/null and b/frontend/microfrontend/places/src/images/card_2.jpg differ diff --git a/frontend/microfrontend/places/src/images/card_3.jpg b/frontend/microfrontend/places/src/images/card_3.jpg new file mode 100644 index 00000000..064e3ae5 Binary files /dev/null and b/frontend/microfrontend/places/src/images/card_3.jpg differ diff --git a/frontend/microfrontend/places/src/images/close.svg b/frontend/microfrontend/places/src/images/close.svg new file mode 100644 index 00000000..22b249e9 --- /dev/null +++ b/frontend/microfrontend/places/src/images/close.svg @@ -0,0 +1,4 @@ + + + + diff --git a/frontend/microfrontend/places/src/images/delete-icon.svg b/frontend/microfrontend/places/src/images/delete-icon.svg new file mode 100644 index 00000000..fb9be5f7 --- /dev/null +++ b/frontend/microfrontend/places/src/images/delete-icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/frontend/microfrontend/places/src/images/edit-icon.svg b/frontend/microfrontend/places/src/images/edit-icon.svg new file mode 100644 index 00000000..6f3b5d06 --- /dev/null +++ b/frontend/microfrontend/places/src/images/edit-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/microfrontend/places/src/images/error-icon.svg b/frontend/microfrontend/places/src/images/error-icon.svg new file mode 100644 index 00000000..cc5d979b --- /dev/null +++ b/frontend/microfrontend/places/src/images/error-icon.svg @@ -0,0 +1,15 @@ + + + Group 2 + + + + + + + + + + + + \ No newline at end of file diff --git a/frontend/microfrontend/places/src/images/like-active.svg b/frontend/microfrontend/places/src/images/like-active.svg new file mode 100644 index 00000000..986e65de --- /dev/null +++ b/frontend/microfrontend/places/src/images/like-active.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/microfrontend/places/src/images/like-inactive.svg b/frontend/microfrontend/places/src/images/like-inactive.svg new file mode 100644 index 00000000..b3b66a5c --- /dev/null +++ b/frontend/microfrontend/places/src/images/like-inactive.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/microfrontend/places/src/images/success-icon.svg b/frontend/microfrontend/places/src/images/success-icon.svg new file mode 100644 index 00000000..226537a2 --- /dev/null +++ b/frontend/microfrontend/places/src/images/success-icon.svg @@ -0,0 +1,14 @@ + + + Group + + + + + + + + + + + \ No newline at end of file diff --git a/frontend/microfrontend/places/src/index.css b/frontend/microfrontend/places/src/index.css new file mode 100644 index 00000000..20e225c5 --- /dev/null +++ b/frontend/microfrontend/places/src/index.css @@ -0,0 +1,10 @@ +body { + font-family: Arial, Helvetica, sans-serif; +} + +.container { + font-size: 3rem; + margin: auto; + max-width: 800px; + margin-top: 20px; +} \ No newline at end of file diff --git a/frontend/microfrontend/places/src/index.html b/frontend/microfrontend/places/src/index.html new file mode 100644 index 00000000..376db710 --- /dev/null +++ b/frontend/microfrontend/places/src/index.html @@ -0,0 +1,14 @@ + + + + + + + places + + + +
    + + + diff --git a/frontend/microfrontend/places/src/index.js b/frontend/microfrontend/places/src/index.js new file mode 100644 index 00000000..fc3cee10 --- /dev/null +++ b/frontend/microfrontend/places/src/index.js @@ -0,0 +1 @@ +import("./App"); diff --git a/frontend/microfrontend/places/src/styles/card/__delete-button/_hidden/card__delete-button_hidden.css b/frontend/microfrontend/places/src/styles/card/__delete-button/_hidden/card__delete-button_hidden.css new file mode 100644 index 00000000..629780bc --- /dev/null +++ b/frontend/microfrontend/places/src/styles/card/__delete-button/_hidden/card__delete-button_hidden.css @@ -0,0 +1,3 @@ +.card__delete-button_hidden { + display: none; +} diff --git a/frontend/microfrontend/places/src/styles/card/__delete-button/_visible/card__delete-button_visible.css b/frontend/microfrontend/places/src/styles/card/__delete-button/_visible/card__delete-button_visible.css new file mode 100644 index 00000000..7e69ad82 --- /dev/null +++ b/frontend/microfrontend/places/src/styles/card/__delete-button/_visible/card__delete-button_visible.css @@ -0,0 +1,3 @@ +.card__delete-button_visible { + display: block; +} diff --git a/frontend/microfrontend/places/src/styles/card/__delete-button/card__delete-button.css b/frontend/microfrontend/places/src/styles/card/__delete-button/card__delete-button.css new file mode 100644 index 00000000..5b950e4e --- /dev/null +++ b/frontend/microfrontend/places/src/styles/card/__delete-button/card__delete-button.css @@ -0,0 +1,22 @@ +.card__delete-button { + width: 18px; + height: 18px; + background: transparent url('../../../images/delete-icon.svg') center no-repeat; + background-size: 18px 18px; + border: none; + cursor: pointer; + position: absolute; + top: 18px; + right: 15px; + padding: 0; + margin: 0; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -ms-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} + +.card__delete-button:hover { + opacity: 0.6; +} diff --git a/frontend/microfrontend/places/src/styles/card/__description/card__description.css b/frontend/microfrontend/places/src/styles/card/__description/card__description.css new file mode 100644 index 00000000..3c430cd5 --- /dev/null +++ b/frontend/microfrontend/places/src/styles/card/__description/card__description.css @@ -0,0 +1,7 @@ +.card__description { + display: flex; + justify-content: space-between; + align-items: center; + background: #fff; + padding: 25px 20px; +} diff --git a/frontend/microfrontend/places/src/styles/card/__image/card__image.css b/frontend/microfrontend/places/src/styles/card/__image/card__image.css new file mode 100644 index 00000000..551129a9 --- /dev/null +++ b/frontend/microfrontend/places/src/styles/card/__image/card__image.css @@ -0,0 +1,9 @@ +.card__image { + min-height: 282px; + -webkit-background-size: cover; + background-size: cover; +} + +.card__image:hover { + cursor: pointer; +} diff --git a/frontend/microfrontend/places/src/styles/card/__like-button/_is-active/card__like-button_is-active.css b/frontend/microfrontend/places/src/styles/card/__like-button/_is-active/card__like-button_is-active.css new file mode 100644 index 00000000..9c619d24 --- /dev/null +++ b/frontend/microfrontend/places/src/styles/card/__like-button/_is-active/card__like-button_is-active.css @@ -0,0 +1,3 @@ +.card__like-button_is-active { + background: transparent url('../../../../images/like-active.svg') no-repeat; +} diff --git a/frontend/microfrontend/places/src/styles/card/__like-button/card__like-button.css b/frontend/microfrontend/places/src/styles/card/__like-button/card__like-button.css new file mode 100644 index 00000000..2a5c4cc4 --- /dev/null +++ b/frontend/microfrontend/places/src/styles/card/__like-button/card__like-button.css @@ -0,0 +1,19 @@ +.card__like-button { + width: 21px; + height: 18px; + background: transparent url('../../../images/like-inactive.svg') no-repeat; + background-size: 21px 18px; + border: none; + cursor: pointer; + padding: 0; + margin: 0; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -ms-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} + +.card__like-button:hover { + opacity: 0.6; +} diff --git a/frontend/microfrontend/places/src/styles/card/__like-count/card__like-count.css b/frontend/microfrontend/places/src/styles/card/__like-count/card__like-count.css new file mode 100644 index 00000000..9ae97ccb --- /dev/null +++ b/frontend/microfrontend/places/src/styles/card/__like-count/card__like-count.css @@ -0,0 +1,6 @@ +.card__like-count { + font-size: 13px; + line-height: 16px; + text-align: center; + margin: 0; +} diff --git a/frontend/microfrontend/places/src/styles/card/__title/card__title.css b/frontend/microfrontend/places/src/styles/card/__title/card__title.css new file mode 100644 index 00000000..d899fcc9 --- /dev/null +++ b/frontend/microfrontend/places/src/styles/card/__title/card__title.css @@ -0,0 +1,9 @@ +.card__title { + max-width: 220px; + font-size: 24px; + line-height: 29px; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + margin: 0; +} diff --git a/frontend/microfrontend/places/src/styles/card/card.css b/frontend/microfrontend/places/src/styles/card/card.css new file mode 100644 index 00000000..9092ef2f --- /dev/null +++ b/frontend/microfrontend/places/src/styles/card/card.css @@ -0,0 +1,18 @@ +@import url('./__description/card__description.css'); +@import url('./__image/card__image.css'); +@import url('./__like-button/card__like-button.css'); +@import url('./__like-button/_is-active/card__like-button_is-active.css'); +@import url('./__delete-button/card__delete-button.css'); +@import url('./__delete-button/_hidden/card__delete-button_hidden.css'); +@import url('./__delete-button/_visible/card__delete-button_visible.css'); +@import url('./__title/card__title.css'); +@import url('./__like-count/card__like-count.css'); + +.card { + font-family: 'Inter', Arial, sans-serif; + -webkit-border-radius: 10px; + -moz-border-radius: 10px; + border-radius: 10px; + position: relative; + overflow: hidden; +} diff --git a/frontend/microfrontend/places/src/styles/popup/__button/_disabled/popup__button_disabled.css b/frontend/microfrontend/places/src/styles/popup/__button/_disabled/popup__button_disabled.css new file mode 100644 index 00000000..1ad56853 --- /dev/null +++ b/frontend/microfrontend/places/src/styles/popup/__button/_disabled/popup__button_disabled.css @@ -0,0 +1,4 @@ +.popup__button_disabled { + opacity: 0.2; + pointer-events: none; +} diff --git a/frontend/microfrontend/places/src/styles/popup/__button/popup__button.css b/frontend/microfrontend/places/src/styles/popup/__button/popup__button.css new file mode 100644 index 00000000..7552a022 --- /dev/null +++ b/frontend/microfrontend/places/src/styles/popup/__button/popup__button.css @@ -0,0 +1,26 @@ +.popup__button { + width: 100%; + height: 50px; + font-size: 18px; + line-height: 22px; + color: white; + display: flex; + align-items: center; + justify-content: center; + background: #000; + border-radius: 2px; + border: none; + transition: visibility 0s, background 0.3s; + margin-top: 48px; +} + +.popup__button:hover { + background: rgba(0, 0, 0, 0.8); +} + +@media screen and (max-width: 568px) { + .popup__button { + font-size: 14px; + line-height: 17px; + } +} diff --git a/frontend/microfrontend/places/src/styles/popup/__caption/popup__caption.css b/frontend/microfrontend/places/src/styles/popup/__caption/popup__caption.css new file mode 100644 index 00000000..35ef2b88 --- /dev/null +++ b/frontend/microfrontend/places/src/styles/popup/__caption/popup__caption.css @@ -0,0 +1,9 @@ +.popup__caption { + font-size: 12px; + line-height: 15px; + color: #fff; + position: absolute; + left: 0; + top: calc(100% + 10px); + margin: 0; +} diff --git a/frontend/microfrontend/places/src/styles/popup/__close/popup__close.css b/frontend/microfrontend/places/src/styles/popup/__close/popup__close.css new file mode 100644 index 00000000..db3a2db6 --- /dev/null +++ b/frontend/microfrontend/places/src/styles/popup/__close/popup__close.css @@ -0,0 +1,23 @@ +.popup__close { + width: 35px; + height: 35px; + background: transparent url('../../../images/close.svg') center no-repeat; + background-size: 35px 35px; + border: none; + position: absolute; + top: -36px; + right: -34px; + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -ms-transform: rotate(90deg); + -o-transform: rotate(90deg); + transform: rotate(90deg); + transition: visibility 0s, opacity 0.3s; + padding: 0; + margin: 0; + cursor: pointer; +} + +.popup__close:hover { + opacity: 0.6; +} diff --git a/frontend/microfrontend/places/src/styles/popup/__content/_content/popup__content_content_image.css b/frontend/microfrontend/places/src/styles/popup/__content/_content/popup__content_content_image.css new file mode 100644 index 00000000..ad7ff951 --- /dev/null +++ b/frontend/microfrontend/places/src/styles/popup/__content/_content/popup__content_content_image.css @@ -0,0 +1,14 @@ +.popup__content_content_image { + max-width: 75vw; + max-height: 75vh; + height: auto; + width: auto; + display: flex; + background: transparent; + -webkit-background-size: cover; + background-size: cover; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + padding: 0; +} diff --git a/frontend/microfrontend/places/src/styles/popup/__content/popup__content.css b/frontend/microfrontend/places/src/styles/popup/__content/popup__content.css new file mode 100644 index 00000000..668c80eb --- /dev/null +++ b/frontend/microfrontend/places/src/styles/popup/__content/popup__content.css @@ -0,0 +1,19 @@ +.popup__content { + max-width: 430px; + width: 100%; + min-height: 330px; + background-color: #fff; + border-radius: 10px; + position: relative; + box-sizing: border-box; + padding: 34px 36px; +} + +@media screen and (max-width: 568px) { + .popup__content { + width: 100%; + max-width: calc(100% - 80px); + margin-top: 40px; + padding: 30px 20px; + } +} diff --git a/frontend/microfrontend/places/src/styles/popup/__error/_visible/popup__error_visible.css b/frontend/microfrontend/places/src/styles/popup/__error/_visible/popup__error_visible.css new file mode 100644 index 00000000..4293d5cc --- /dev/null +++ b/frontend/microfrontend/places/src/styles/popup/__error/_visible/popup__error_visible.css @@ -0,0 +1,3 @@ +.popup__error_visible { + opacity: 1; +} diff --git a/frontend/microfrontend/places/src/styles/popup/__error/popup__error.css b/frontend/microfrontend/places/src/styles/popup/__error/popup__error.css new file mode 100644 index 00000000..017e1dd9 --- /dev/null +++ b/frontend/microfrontend/places/src/styles/popup/__error/popup__error.css @@ -0,0 +1,10 @@ +.popup__error { + font-size: 12px; + line-height: 15px; + color: #FF0000; + opacity: 0; + position: absolute; + top: calc(100% + 5px); + left: 0; + transition: opacity 0.3s; +} diff --git a/frontend/microfrontend/places/src/styles/popup/__form/popup__form.css b/frontend/microfrontend/places/src/styles/popup/__form/popup__form.css new file mode 100644 index 00000000..425f78ca --- /dev/null +++ b/frontend/microfrontend/places/src/styles/popup/__form/popup__form.css @@ -0,0 +1,3 @@ +.popup__form { + margin-top: 27px; +} diff --git a/frontend/microfrontend/places/src/styles/popup/__icon/popup__icon.css b/frontend/microfrontend/places/src/styles/popup/__icon/popup__icon.css new file mode 100644 index 00000000..3ea53b9c --- /dev/null +++ b/frontend/microfrontend/places/src/styles/popup/__icon/popup__icon.css @@ -0,0 +1,6 @@ +.popup__icon { + display: block; + margin: auto; + width: 120px; + height: 120px; +} \ No newline at end of file diff --git a/frontend/microfrontend/places/src/styles/popup/__image/popup__image.css b/frontend/microfrontend/places/src/styles/popup/__image/popup__image.css new file mode 100644 index 00000000..20effa1c --- /dev/null +++ b/frontend/microfrontend/places/src/styles/popup/__image/popup__image.css @@ -0,0 +1,6 @@ +.popup__image { + max-height: 100%; + max-width: 100%; + object-fit: cover; + display: block; +} diff --git a/frontend/microfrontend/places/src/styles/popup/__input/_type/popup__input_type_error.css b/frontend/microfrontend/places/src/styles/popup/__input/_type/popup__input_type_error.css new file mode 100644 index 00000000..79876daf --- /dev/null +++ b/frontend/microfrontend/places/src/styles/popup/__input/_type/popup__input_type_error.css @@ -0,0 +1,3 @@ +.popup__input_type_error { + border-bottom: 1px solid #FF0000; +} diff --git a/frontend/microfrontend/places/src/styles/popup/__input/popup__input.css b/frontend/microfrontend/places/src/styles/popup/__input/popup__input.css new file mode 100644 index 00000000..8dc0a28f --- /dev/null +++ b/frontend/microfrontend/places/src/styles/popup/__input/popup__input.css @@ -0,0 +1,26 @@ +.popup__input { + width: 100%; + border: 0; + border-bottom: 1px solid rgba(0, 0, 0, .2); + font-size: 14px; + line-height: 18px; + box-sizing: border-box; + margin-bottom: 10px; + padding: 0 0 13px; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -ms-transition: 0.3s; + -o-transition: 0.3s; + transition: border-bottom 0.3s; +} + +.popup__input:last-of-type { + margin-bottom: 0; +} + +@media screen and (max-width: 568px) { + .popup__title { + font-size: 12px; + line-height: 15px; + } +} diff --git a/frontend/microfrontend/places/src/styles/popup/__label/popup__label.css b/frontend/microfrontend/places/src/styles/popup/__label/popup__label.css new file mode 100644 index 00000000..a9122bc5 --- /dev/null +++ b/frontend/microfrontend/places/src/styles/popup/__label/popup__label.css @@ -0,0 +1,5 @@ +.popup__label { + position: relative; + display: block; + padding: 30px 0 0; +} diff --git a/frontend/microfrontend/places/src/styles/popup/__status-message/popup__status-message.css b/frontend/microfrontend/places/src/styles/popup/__status-message/popup__status-message.css new file mode 100644 index 00000000..577b880a --- /dev/null +++ b/frontend/microfrontend/places/src/styles/popup/__status-message/popup__status-message.css @@ -0,0 +1,8 @@ +.popup__status-message { + font-family: Inter, sans-serif; + font-weight: 900; + font-size: 24px; + line-height: 29px; + text-align: center; + margin-top: 32px; +} \ No newline at end of file diff --git a/frontend/microfrontend/places/src/styles/popup/__title/popup__title.css b/frontend/microfrontend/places/src/styles/popup/__title/popup__title.css new file mode 100644 index 00000000..1092b827 --- /dev/null +++ b/frontend/microfrontend/places/src/styles/popup/__title/popup__title.css @@ -0,0 +1,12 @@ +.popup__title { + margin: 0; + font-size: 24px; + line-height: 30px; +} + +@media screen and (max-width: 568px) { + .popup__title { + font-size: 18px; + line-height: 22px; + } +} diff --git a/frontend/microfrontend/places/src/styles/popup/_is-opened/popup_is-opened.css b/frontend/microfrontend/places/src/styles/popup/_is-opened/popup_is-opened.css new file mode 100644 index 00000000..207e395e --- /dev/null +++ b/frontend/microfrontend/places/src/styles/popup/_is-opened/popup_is-opened.css @@ -0,0 +1,6 @@ +.popup_is-opened { + visibility: visible; + opacity: 1; + pointer-events: all; + transition: visibility 0s, opacity 0.6s; +} diff --git a/frontend/microfrontend/places/src/styles/popup/_type/popup_type_edit-avatar.css b/frontend/microfrontend/places/src/styles/popup/_type/popup_type_edit-avatar.css new file mode 100644 index 00000000..b357b631 --- /dev/null +++ b/frontend/microfrontend/places/src/styles/popup/_type/popup_type_edit-avatar.css @@ -0,0 +1,3 @@ +.popup_type_edit-avatar .popup__content { + min-height: auto; +} diff --git a/frontend/microfrontend/places/src/styles/popup/_type/popup_type_remove-card.css b/frontend/microfrontend/places/src/styles/popup/_type/popup_type_remove-card.css new file mode 100644 index 00000000..ac639298 --- /dev/null +++ b/frontend/microfrontend/places/src/styles/popup/_type/popup_type_remove-card.css @@ -0,0 +1,3 @@ +.popup_type_remove-card .popup__content { + min-height: auto; +} diff --git a/frontend/microfrontend/places/src/styles/popup/popup.css b/frontend/microfrontend/places/src/styles/popup/popup.css new file mode 100644 index 00000000..c5f3b2cb --- /dev/null +++ b/frontend/microfrontend/places/src/styles/popup/popup.css @@ -0,0 +1,37 @@ +@import url('./__content/popup__content.css'); +@import url('./__content/_content/popup__content_content_image.css'); +@import url('./__close/popup__close.css'); +@import url('./__title/popup__title.css'); +@import url('./__form/popup__form.css'); +@import url('./__input/popup__input.css'); +@import url('./__input/_type/popup__input_type_error.css'); +@import url('./__button/popup__button.css'); +@import url('./__button/_disabled/popup__button_disabled.css'); +@import url('./__caption/popup__caption.css'); +@import url('./__image/popup__image.css'); +@import url('./__label/popup__label.css'); +@import url('./__error/popup__error.css'); +@import url('./__error/_visible/popup__error_visible.css'); +@import url('./_type/popup_type_remove-card.css'); +@import url('./_type/popup_type_edit-avatar.css'); +@import url('./__icon/popup__icon.css'); +@import url('./__status-message/popup__status-message.css'); + +.popup { + font-family: 'Inter', Arial, sans-serif; + display: flex; + align-items: center; + justify-content: center; + background-color: rgba(0, 0, 0, .5); + position: fixed; + top: 0; + left: 0; + bottom: 0; + right: 0; + visibility: hidden; + opacity: 0; + pointer-events: none; + user-select: none; + transition: visibility 0s 0.6s, opacity 0.6s; + z-index: 10; +} diff --git a/frontend/microfrontend/places/src/utils/api.js b/frontend/microfrontend/places/src/utils/api.js new file mode 100644 index 00000000..6146ceb0 --- /dev/null +++ b/frontend/microfrontend/places/src/utils/api.js @@ -0,0 +1,68 @@ +class Api { + constructor({ address, token, groupId }) { + // стандартная реализация -- объект options + this._token = token; + this._groupId = groupId; + this._address = address; + + // Запросы в примере работы выполняются к старому Api, в новом URL изменены. + } + + getAppInfo() { + return Promise.all([this.getCardList(), this.getUserInfo()]); + } + + getCardList() { + return fetch(`${this._address}/${this._groupId}/cards`, { + headers: { + authorization: this._token, + }, + }) + .then(res => res.ok ? res.json() : Promise.reject(`Ошибка: ${res.status}`)); + } + + addCard({ name, link }) { + return fetch(`${this._address}/${this._groupId}/cards`, { + method: 'POST', + headers: { + authorization: this._token, + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + name, + link, + }), + }) + .then(res => res.ok ? res.json() : Promise.reject(`Ошибка: ${res.status}`)); + } + + removeCard(cardID) { + return fetch(`${this._address}/${this._groupId}/cards/${cardID}`, { + method: 'DELETE', + headers: { + authorization: this._token, + }, + }) + .then(res => res.ok ? res.json() : Promise.reject(`Ошибка: ${res.status}`)); + } + + changeLikeCardStatus(cardID, like) { + // Обычная реализация: 2 разных метода для удаления и постановки лайка. + return fetch(`${this._address}/${this._groupId}/cards/like/${cardID}`, { + method: like ? 'PUT' : 'DELETE', + headers: { + authorization: this._token, + 'Content-Type': 'application/json', + }, + }) + .then(res => res.ok ? res.json() : Promise.reject(`Ошибка: ${res.status}`)); + } +} + +const api = new Api({ + address: 'https://nomoreparties.co', + groupId: `cohort0`, + token: `80a75492-21c5-4330-a02f-308029e94b63`, +}); + +export default api; diff --git a/frontend/microfrontend/places/webpack.config.js b/frontend/microfrontend/places/webpack.config.js new file mode 100644 index 00000000..7cdfc0b1 --- /dev/null +++ b/frontend/microfrontend/places/webpack.config.js @@ -0,0 +1,86 @@ +const HtmlWebPackPlugin = require("html-webpack-plugin"); +const ModuleFederationPlugin = require("webpack/lib/container/ModuleFederationPlugin"); +const path = require('path'); +const Dotenv = require('dotenv-webpack'); + +const deps = require("./package.json").dependencies; + +const printCompilationMessage = require('./compilation.config.js'); + +module.exports = (_, argv) => ({ + output: { + publicPath: "http://localhost:8083/", + }, + + resolve: { + extensions: [".tsx", ".ts", ".jsx", ".js", ".json"], + }, + + devServer: { + port: 8083, + historyApiFallback: true, + watchFiles: [path.resolve(__dirname, 'src')], + onListening: function (devServer) { + const port = devServer.server.address().port + + printCompilationMessage('compiling', port) + + devServer.compiler.hooks.done.tap('OutputMessagePlugin', (stats) => { + setImmediate(() => { + if (stats.hasErrors()) { + printCompilationMessage('failure', port) + } else { + printCompilationMessage('success', port) + } + }) + }) + } + }, + + module: { + rules: [ + { + test: /\.m?js/, + type: "javascript/auto", + resolve: { + fullySpecified: false, + }, + }, + { + test: /\.(css|s[ac]ss)$/i, + use: ["style-loader", "css-loader", "postcss-loader"], + }, + { + test: /\.(ts|tsx|js|jsx)$/, + exclude: /node_modules/, + use: { + loader: "babel-loader", + }, + }, + ], + }, + + plugins: [ + new ModuleFederationPlugin({ + name: "places", + filename: "remoteEntry.js", + remotes: {}, + exposes: {}, + shared: { + ...deps, + react: { + singleton: true, + requiredVersion: deps.react, + }, + "react-dom": { + singleton: true, + requiredVersion: deps["react-dom"], + }, + }, + }), + new HtmlWebPackPlugin({ + template: "./src/index.html", + }), + new Dotenv() + ], +}); diff --git a/frontend/microfrontend/profile/.babelrc b/frontend/microfrontend/profile/.babelrc new file mode 100644 index 00000000..517d7ae6 --- /dev/null +++ b/frontend/microfrontend/profile/.babelrc @@ -0,0 +1,7 @@ +{ + "presets": [ + ["@babel/preset-react", { "runtime": "automatic" }], + "@babel/preset-env" + ], + "plugins": [["@babel/transform-runtime"]] +} diff --git a/frontend/microfrontend/profile/.gitignore b/frontend/microfrontend/profile/.gitignore new file mode 100644 index 00000000..1f22b9c2 --- /dev/null +++ b/frontend/microfrontend/profile/.gitignore @@ -0,0 +1,116 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* diff --git a/frontend/microfrontend/profile/compilation.config.js b/frontend/microfrontend/profile/compilation.config.js new file mode 100644 index 00000000..a4a1e343 --- /dev/null +++ b/frontend/microfrontend/profile/compilation.config.js @@ -0,0 +1,31 @@ +const printCompilationMessage = (status, port) => { + let messageColor, messageType, browserMessage; + + switch (status) { + case "success": + messageColor = "\x1b[32m"; + messageType = "Compiled successfully!"; + browserMessage = "You can now view"; + break; + case "failure": + messageColor = "\x1b[31m"; + messageType = "Compilation Failed!"; + browserMessage = "You can't now view"; + break; + case "compiling": + messageColor = "\x1b[94m"; + messageType = "Compiling..."; + browserMessage = "Compiling the"; + break; + } + + console.log(`\n\n + ${messageColor}${messageType}\x1b[0m\n + ${browserMessage} \x1b[1mRemote\x1b[0m in the browser. + ${messageColor}${messageType}\x1b[0m\n + \x1b[1mLocal\x1b[0m: http://localhost:\x1b[1m${port}\x1b[0m + \x1b[1mLocal\x1b[0m: http://localhost:\x1b[1m${port}\x1b[0m\n\n + `); +}; + +module.exports = printCompilationMessage; \ No newline at end of file diff --git a/frontend/microfrontend/profile/package.json b/frontend/microfrontend/profile/package.json new file mode 100644 index 00000000..7e8a8d86 --- /dev/null +++ b/frontend/microfrontend/profile/package.json @@ -0,0 +1,38 @@ +{ + "name": "profile", + "version": "1.0.0", + "scripts": { + "build": "webpack --mode production", + "build:dev": "webpack --mode development", + "build:start": "cd dist && PORT=8082 npx serve", + "start": "webpack serve --mode development", + "start:live": "webpack serve --mode development --live-reload --hot" + }, + "license": "MIT", + "author": { + "name": "Jack Herrington", + "email": "jherr@pobox.com" + }, + "devDependencies": { + "@babel/core": "^7.15.8", + "@babel/plugin-transform-runtime": "^7.15.8", + "@babel/preset-env": "^7.15.8", + "@babel/preset-react": "^7.14.5", + "autoprefixer": "^10.1.0", + "babel-loader": "^8.2.2", + "css-loader": "^6.3.0", + "html-webpack-plugin": "^5.3.2", + "postcss": "^8.2.1", + "postcss-loader": "^4.1.0", + "style-loader": "^3.3.0", + "webpack": "^5.57.1", + "webpack-cli": "^4.10.0", + "webpack-dev-server": "^4.3.1", + "dotenv-webpack": "^8.0.1" + }, + "dependencies": { + "@babel/runtime": "^7.13.10", + "react": "^18.2.0", + "react-dom": "^18.2.0" + } +} \ No newline at end of file diff --git a/frontend/microfrontend/profile/src/App.jsx b/frontend/microfrontend/profile/src/App.jsx new file mode 100644 index 00000000..ab1ca813 --- /dev/null +++ b/frontend/microfrontend/profile/src/App.jsx @@ -0,0 +1,19 @@ +import React from "react"; +import ReactDOM from "react-dom/client"; + +import "./index.css"; + +const App = () => ( +
    +
    Name: profile
    +
    Framework: react
    +
    Language: JavaScript
    +
    CSS: Empty CSS
    +
    +); +const rootElement = document.getElementById("app") +if (!rootElement) throw new Error("Failed to find the root element") + +const root = ReactDOM.createRoot(rootElement) + +root.render() \ No newline at end of file diff --git a/frontend/microfrontend/profile/src/components/EditAvatarPopup.js b/frontend/microfrontend/profile/src/components/EditAvatarPopup.js new file mode 100644 index 00000000..6fdb564b --- /dev/null +++ b/frontend/microfrontend/profile/src/components/EditAvatarPopup.js @@ -0,0 +1,30 @@ +import React from 'react'; +import PopupWithForm from './PopupWithForm'; + +function EditAvatarPopup({ isOpen, onUpdateAvatar, onClose }) { + const inputRef = React.useRef(); + + function handleSubmit(e) { + e.preventDefault(); + + onUpdateAvatar({ + avatar: inputRef.current.value, + }); + } + + return ( + + + + + ); +} + +export default EditAvatarPopup; diff --git a/frontend/microfrontend/profile/src/components/EditProfilePopup.js b/frontend/microfrontend/profile/src/components/EditProfilePopup.js new file mode 100644 index 00000000..9efd9545 --- /dev/null +++ b/frontend/microfrontend/profile/src/components/EditProfilePopup.js @@ -0,0 +1,57 @@ +import React from 'react'; +import PopupWithForm from './PopupWithForm'; +import { CurrentUserContext } from '../contexts/CurrentUserContext'; + +function EditProfilePopup({ isOpen, onUpdateUser, onClose }) { + const [name, setName] = React.useState(''); + const [description, setDescription] = React.useState(''); + + function handleNameChange(e) { + setName(e.target.value); + } + + function handleDescriptionChange(e) { + setDescription(e.target.value); + } + + const currentUser = React.useContext(CurrentUserContext); + + React.useEffect(() => { + if (currentUser) { + setName(currentUser.name); + setDescription(currentUser.about); + } + }, [currentUser]); + + function handleSubmit(e) { + e.preventDefault(); + + onUpdateUser({ + name, + about: description, + }); + } + + return ( + + + + + ); +} + +export default EditProfilePopup; diff --git a/frontend/microfrontend/profile/src/images/avatar.jpg b/frontend/microfrontend/profile/src/images/avatar.jpg new file mode 100644 index 00000000..929c8cb1 Binary files /dev/null and b/frontend/microfrontend/profile/src/images/avatar.jpg differ diff --git a/frontend/microfrontend/profile/src/index.css b/frontend/microfrontend/profile/src/index.css new file mode 100644 index 00000000..20e225c5 --- /dev/null +++ b/frontend/microfrontend/profile/src/index.css @@ -0,0 +1,10 @@ +body { + font-family: Arial, Helvetica, sans-serif; +} + +.container { + font-size: 3rem; + margin: auto; + max-width: 800px; + margin-top: 20px; +} \ No newline at end of file diff --git a/frontend/microfrontend/profile/src/index.html b/frontend/microfrontend/profile/src/index.html new file mode 100644 index 00000000..8e746a55 --- /dev/null +++ b/frontend/microfrontend/profile/src/index.html @@ -0,0 +1,14 @@ + + + + + + + profile + + + +
    + + + diff --git a/frontend/microfrontend/profile/src/index.js b/frontend/microfrontend/profile/src/index.js new file mode 100644 index 00000000..fc3cee10 --- /dev/null +++ b/frontend/microfrontend/profile/src/index.js @@ -0,0 +1 @@ +import("./App"); diff --git a/frontend/microfrontend/profile/src/styles/profile/__add-button/profile__add-button.css b/frontend/microfrontend/profile/src/styles/profile/__add-button/profile__add-button.css new file mode 100644 index 00000000..06dee3d4 --- /dev/null +++ b/frontend/microfrontend/profile/src/styles/profile/__add-button/profile__add-button.css @@ -0,0 +1,34 @@ +.profile__add-button { + width: 150px; + height: 50px; + background: transparent url("../../../images/add-icon.svg") center no-repeat; + background-size: 22px; + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px; + border: 2px solid #fff; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -ms-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; + cursor: pointer; + margin-left: auto; +} + +.profile__add-button:hover { + opacity: 0.6; +} + +@media screen and (max-width: 740px) { + .profile__add-button { + width: 50px; + height: 50px; + } +} + +@media screen and (max-width: 480px) { + .profile__add-button { + width: 100%; + } +} diff --git a/frontend/microfrontend/profile/src/styles/profile/__description/profile__description.css b/frontend/microfrontend/profile/src/styles/profile/__description/profile__description.css new file mode 100644 index 00000000..67b0d18b --- /dev/null +++ b/frontend/microfrontend/profile/src/styles/profile/__description/profile__description.css @@ -0,0 +1,20 @@ +.profile__description { + font-size: 18px; + line-height: 22px; + grid-area: description; + margin: 0; +} + +@media screen and (max-width: 568px) { + .profile__description { + font-size: 14px; + line-height: 17px; + } +} + +@media screen and (max-width: 480px) { + .profile__description { + width: 100%; + margin: 7px 0 0 0; + } +} diff --git a/frontend/microfrontend/profile/src/styles/profile/__edit-button/profile__edit-button.css b/frontend/microfrontend/profile/src/styles/profile/__edit-button/profile__edit-button.css new file mode 100644 index 00000000..9816cdf1 --- /dev/null +++ b/frontend/microfrontend/profile/src/styles/profile/__edit-button/profile__edit-button.css @@ -0,0 +1,29 @@ +.profile__edit-button { + width: 24px; + height: 24px; + background: transparent url('../../../images/edit-icon.svg') center no-repeat; + background-size: 10px 10px; + border: 1px solid #fff; + grid-area: button; + align-self: center; + cursor: pointer; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -ms-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; + padding: 0; + margin: 0; +} + +.profile__edit-button:hover { + opacity: 0.6; +} + +@media screen and (max-width: 480px) { + .profile__edit-button { + width: 18px; + height: 18px; + background-size: 8px 8px; + } +} diff --git a/frontend/microfrontend/profile/src/styles/profile/__image/profile__image.css b/frontend/microfrontend/profile/src/styles/profile/__image/profile__image.css new file mode 100644 index 00000000..a8c43084 --- /dev/null +++ b/frontend/microfrontend/profile/src/styles/profile/__image/profile__image.css @@ -0,0 +1,72 @@ +.profile__image { + width: 120px; + height: 120px; + -webkit-border-radius: 50%; + -moz-border-radius: 50%; + border-radius: 50%; + background-size: cover; + background-position: center; + position: relative; + margin: 0 29px 0 0; +} + +.profile__image:hover { + cursor: pointer; +} + +.profile__image::before, +.profile__image::after { + content: ''; + position: absolute; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -ms-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; + pointer-events: none; +} + +.profile__image::before { + background: rgba(0, 0, 0, 0); + top: 0; + right: 0; + left: 0; + bottom: 0; +} + +.profile__image::after { + width: 26px; + height: 26px; + background-image: url('../../../images/edit-icon.svg'); + -webkit-background-size: contain; + background-size: contain; + opacity: 0; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + -moz-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + -o-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} + +.profile__image:hover::before { + background: rgba(0, 0, 0, 0.8); +} + +.profile__image:hover::after { + opacity: 1; +} + + +@media screen and (max-width: 740px) { + .profile__image { + margin: 0 10px 0 0; + } +} + +@media screen and (max-width: 480px) { + .profile__image { + margin-right: 0; + } +} diff --git a/frontend/microfrontend/profile/src/styles/profile/__info/profile__info.css b/frontend/microfrontend/profile/src/styles/profile/__info/profile__info.css new file mode 100644 index 00000000..7aaefee7 --- /dev/null +++ b/frontend/microfrontend/profile/src/styles/profile/__info/profile__info.css @@ -0,0 +1,30 @@ +.profile__info { + display: grid; + grid-template-areas: "title button" + "description description"; + grid-template-columns: minmax(auto, 295px) auto; + grid-gap: 9px 17px; +} + +@media screen and (max-width: 740px) { + .profile__info { + grid-template-columns: minmax(auto, 228px) auto; + grid-gap: 9px 5px; + } +} + +@media screen and (max-width: 568px) { + .profile__info { + grid-template-columns: minmax(auto, 195px) auto; + } +} + +@media screen and (max-width: 480px) { + .profile__info { + width: 100%; + display: flex; + flex-wrap: wrap; + justify-content: center; + margin: 26px 0 33px 0; + } +} diff --git a/frontend/microfrontend/profile/src/styles/profile/__title/profile__title.css b/frontend/microfrontend/profile/src/styles/profile/__title/profile__title.css new file mode 100644 index 00000000..4c7e2ddf --- /dev/null +++ b/frontend/microfrontend/profile/src/styles/profile/__title/profile__title.css @@ -0,0 +1,30 @@ +.profile__title { + font-size: 42px; + line-height: 48px; + font-weight: 400; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + grid-area: title; + margin: 0; +} + +@media screen and (max-width: 740px) { + .profile__title { + font-size: 32px; + line-height: 38px; + } +} + +@media screen and (max-width: 568px) { + .profile__title { + font-size: 27px; + line-height: 33px; + } +} + +@media screen and (max-width: 480px) { + .profile__title { + min-width: 201px; + } +} diff --git a/frontend/microfrontend/profile/src/styles/profile/profile.css b/frontend/microfrontend/profile/src/styles/profile/profile.css new file mode 100644 index 00000000..01d738e7 --- /dev/null +++ b/frontend/microfrontend/profile/src/styles/profile/profile.css @@ -0,0 +1,22 @@ +@import url('./__description/profile__description.css'); +@import url('./__add-button/profile__add-button.css'); +@import url('./__edit-button/profile__edit-button.css'); +@import url('./__info/profile__info.css'); +@import url('./__title/profile__title.css'); +@import url('./__image/profile__image.css'); + +.profile { + font-family: 'Inter', Arial, sans-serif; + color: #fff; + display: flex; + align-items: center; + padding: 36px 0; +} + +@media screen and (max-width: 480px) { + .profile { + padding: 43px 0; + flex-direction: column; + text-align: center; + } +} diff --git a/frontend/microfrontend/profile/src/utils/api.js b/frontend/microfrontend/profile/src/utils/api.js new file mode 100644 index 00000000..33bc2acb --- /dev/null +++ b/frontend/microfrontend/profile/src/utils/api.js @@ -0,0 +1,61 @@ +class Api { + constructor({ address, token, groupId }) { + // стандартная реализация -- объект options + this._token = token; + this._groupId = groupId; + this._address = address; + + // Запросы в примере работы выполняются к старому Api, в новом URL изменены. + } + + getAppInfo() { + return Promise.all([this.getCardList(), this.getUserInfo()]); + } + + getUserInfo() { + return fetch(`${this._address}/${this._groupId}/users/me`, { + headers: { + authorization: this._token, + }, + }) + .then(res => res.ok ? res.json() : Promise.reject(`Ошибка: ${res.status}`)); + } + + setUserInfo({ name, about }) { + return fetch(`${this._address}/${this._groupId}/users/me`, { + method: 'PATCH', + headers: { + authorization: this._token, + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + name, + about, + }), + }) + .then(res => res.ok ? res.json() : Promise.reject(`Ошибка: ${res.status}`)); + } + + setUserAvatar({ avatar }) { + return fetch(`${this._address}/${this._groupId}/users/me/avatar`, { + method: 'PATCH', + headers: { + authorization: this._token, + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + avatar, + }), + }) + .then(res => res.ok ? res.json() : Promise.reject(`Ошибка: ${res.status}`)); + } + +} + +const api = new Api({ + address: 'https://nomoreparties.co', + groupId: `cohort0`, + token: `80a75492-21c5-4330-a02f-308029e94b63`, +}); + +export default api; diff --git a/frontend/microfrontend/profile/webpack.config.js b/frontend/microfrontend/profile/webpack.config.js new file mode 100644 index 00000000..a2407dbe --- /dev/null +++ b/frontend/microfrontend/profile/webpack.config.js @@ -0,0 +1,86 @@ +const HtmlWebPackPlugin = require("html-webpack-plugin"); +const ModuleFederationPlugin = require("webpack/lib/container/ModuleFederationPlugin"); +const path = require('path'); +const Dotenv = require('dotenv-webpack'); + +const deps = require("./package.json").dependencies; + +const printCompilationMessage = require('./compilation.config.js'); + +module.exports = (_, argv) => ({ + output: { + publicPath: "http://localhost:8082/", + }, + + resolve: { + extensions: [".tsx", ".ts", ".jsx", ".js", ".json"], + }, + + devServer: { + port: 8082, + historyApiFallback: true, + watchFiles: [path.resolve(__dirname, 'src')], + onListening: function (devServer) { + const port = devServer.server.address().port + + printCompilationMessage('compiling', port) + + devServer.compiler.hooks.done.tap('OutputMessagePlugin', (stats) => { + setImmediate(() => { + if (stats.hasErrors()) { + printCompilationMessage('failure', port) + } else { + printCompilationMessage('success', port) + } + }) + }) + } + }, + + module: { + rules: [ + { + test: /\.m?js/, + type: "javascript/auto", + resolve: { + fullySpecified: false, + }, + }, + { + test: /\.(css|s[ac]ss)$/i, + use: ["style-loader", "css-loader", "postcss-loader"], + }, + { + test: /\.(ts|tsx|js|jsx)$/, + exclude: /node_modules/, + use: { + loader: "babel-loader", + }, + }, + ], + }, + + plugins: [ + new ModuleFederationPlugin({ + name: "profile", + filename: "remoteEntry.js", + remotes: {}, + exposes: {}, + shared: { + ...deps, + react: { + singleton: true, + requiredVersion: deps.react, + }, + "react-dom": { + singleton: true, + requiredVersion: deps["react-dom"], + }, + }, + }), + new HtmlWebPackPlugin({ + template: "./src/index.html", + }), + new Dotenv() + ], +});