From 62029b5a29875e1b3caea75e940c02c9ce8301ff Mon Sep 17 00:00:00 2001 From: Marco Collovati Date: Wed, 27 Dec 2023 20:40:59 +0100 Subject: [PATCH] refactor: drop Vaadin 8 and refactor project structure (#80) --- .circleci/{config.yml => config.yml.old} | 0 .github/workflows/deploy-classifiers.yml | 13 +- .github/workflows/deploy-snapshots.yml | 33 + .github/workflows/validation.yml | 322 + .travis.yml | 22 - README.md | 83 +- pom.xml | 84 +- tools/build_flow_widgetsets.sh | 6 +- tools/build_v8_widgetsets.sh | 17 - .../pom.xml | 5 +- .../sockjs/client/SockJSPushConnection.java | 0 .../sockjs/communication/PushException.java | 0 .../sockjs/communication/PushSocket.java | 0 .../communication/SockJSPushConnection.java | 0 .../SockJSPushConnectionFactory.java | 0 .../VAADIN/static/push/vaadinPushSockJS.js | 0 ...server.communication.PushConnectionFactory | 0 .../vaadin/sockjs/SockjsClientEngine.gwt.xml | 0 .../sockjs/SockjsClientEngineXSI.gwt.xml | 0 vertx-vaadin-8-parent/pom.xml | 34 - .../vaadin8-sockjs/README.md | 3 - vertx-vaadin-8-parent/vaadin8-sockjs/pom.xml | 260 - .../sockjs/client/SockJSPushConnection.java | 522 -- .../sockjs/communication/PushException.java | 53 - .../sockjs/communication/PushSocket.java | 40 - .../communication/SockJSPushConnection.java | 201 - .../VAADIN/vaadinPushSockJS.debug.js | 110 - .../sockjs/VaadinSockjsWidgetset.gwt.xml | 11 - vertx-vaadin-8-parent/vertx-vaadin8/README.md | 268 - vertx-vaadin-8-parent/vertx-vaadin8/pom.xml | 281 - .../com/github/mcollovati/vertx/Sync.java | 62 - .../mcollovati/vertx/vaadin/CookieUtils.java | 57 - .../mcollovati/vertx/vaadin/UIProxy.java | 85 - .../vertx/vaadin/VaadinVerticle.java | 179 - .../vaadin/VaadinVerticleConfiguration.java | 42 - .../vertx/vaadin/VertxBootstrapHandler.java | 61 - .../mcollovati/vertx/vaadin/VertxVaadin.java | 275 - .../vertx/vaadin/VertxVaadinRequest.java | 313 - .../vertx/vaadin/VertxVaadinResponse.java | 166 - .../vertx/vaadin/VertxVaadinService.java | 234 - .../vertx/vaadin/VertxWrappedSession.java | 206 - .../communication/SockJSPushHandler.java | 614 -- .../sstore/ExtendedLocalSessionStoreImpl.java | 128 - .../web/sstore/NearCacheSessionStoreImpl.java | 175 - .../vaadin/server/ExposeVaadinServerPkg.java | 33 - .../ExposeVaadinCommunicationPkg.java | 50 - .../vertx/vaadin/SessionStoreAdapterIT.java | 113 - .../vaadin/VaadinVerticleWidgetsetUT.java | 81 - .../vertx/vaadin/VertxVaadinRequestUT.java | 431 -- .../vertx/vaadin/VertxVaadinResponseUT.java | 256 - .../vertx/vaadin/VertxVaadinServiceUT.java | 89 - .../vertx/vaadin/VertxWrappedSessionUT.java | 258 - .../src/test/resources/logback-test.xml | 14 - .../vertx/vaadin/VaadinVertxWidgetset.gwt.xml | 13 - .../pom.xml | 4 +- vertx-vaadin-flow-parent/pom.xml | 37 - .../vertx/http/HttpServerResponseWrapper.java | 34 - .../mcollovati/vertx/web/ExtendedSession.java | 65 - .../vertx/web/ExtendedSessionImpl.java | 165 - .../web/serialization/SerializableHolder.java | 56 - .../serialization/SerializationSupport.java | 67 - .../web/sstore/ExtendedLocalSessionStore.java | 77 - .../web/sstore/ExtendedSessionStore.java | 41 - .../web/sstore/NearCacheSessionStore.java | 125 - .../vertx/vaadin/version.properties | 1 - .../vertx/utils/RandomStringGenerator.java | 45 - ...pedSessionWithClusteredSessionStoreUT.java | 122 - ...WrappedSessionWithLocalSessionStoreUT.java | 113 - .../vertx/web/sstore/ExtendedSessionUT.java | 66 - .../web/sstore/NearCacheSessionStoreIT.java | 313 - .../vite-basics/vite.generated.ts | 640 -- .../vite-context-path/vite.generated.ts | 635 -- .../vite-embedded/vite.generated.ts | 635 -- .../vite-production/vite.config.ts | 9 - .../vite-production/vite.generated.ts | 640 -- .../vite.config.ts | 9 - .../vite.generated.ts | 635 -- .../vite-pwa-disabled-offline/vite.config.ts | 9 - .../vite.generated.ts | 635 -- .../vite-pwa-production/vite.config.ts | 9 - .../vite-pwa-production/vite.generated.ts | 635 -- .../test-frontend/vite-pwa/.pnpmfile.cjs | 42 - .../test-frontend/vite-pwa/tsconfig.json | 35 - .../test-frontend/vite-pwa/types.d.ts | 10 - .../test-frontend/vite-pwa/vite.config.ts | 9 - .../test-frontend/vite-pwa/vite.generated.ts | 635 -- .../test-root-context/tsconfig.json | 39 - .../test-root-context/types.d.ts | 10 - .../frontend/generated/vaadin.ts | 3 - .../test-scalability/tsconfig.json | 39 - .../test-scalability/types.d.ts | 10 - .../vertx-vaadin-tests/tsconfig.json | 28 - .../vertx-vaadin-tests/types.d.ts | 9 - .../README.md | 0 vertx-vaadin-flow/frontend/generated/index.ts | 32 + .../frontend/generated/vaadin-featureflags.ts | 11 + .../frontend/generated/vaadin.ts | 5 + .../frontend/generated/vite-devmode.ts | 31 + .../frontend/index.html | 0 .../pom.xml | 5 +- .../com/github/mcollovati/vertx/Sync.java | 0 .../vertx/http/HttpReverseProxy.java | 0 .../vertx/http/HttpServerResponseWrapper.java | 0 .../support/BufferInputStreamAdapter.java | 0 .../vertx/support/HillaWorkAround.java | 0 .../vertx/support/StartupContext.java | 0 .../vertx/support/VaadinPatches.java | 0 .../mcollovati/vertx/vaadin/CookieUtils.java | 0 .../DeploymentConfigurationFactory.java | 0 .../mcollovati/vertx/vaadin/HttpUtils.java | 0 .../mcollovati/vertx/vaadin/UIProxy.java | 0 .../vertx/vaadin/VaadinOptions.java | 0 .../vertx/vaadin/VaadinVerticle.java | 0 .../vaadin/VaadinVerticleConfiguration.java | 0 .../vertx/vaadin/VertxBootstrapHandler.java | 0 .../vertx/vaadin/VertxLookupInitializer.java | 0 .../vertx/vaadin/VertxStaticFileServer.java | 0 .../mcollovati/vertx/vaadin/VertxUI.java | 0 .../mcollovati/vertx/vaadin/VertxVaadin.java | 0 .../vaadin/VertxVaadinBrowserLiveReload.java | 0 .../vertx/vaadin/VertxVaadinConfig.java | 0 .../vertx/vaadin/VertxVaadinContext.java | 0 .../vertx/vaadin/VertxVaadinInstantiator.java | 0 .../vertx/vaadin/VertxVaadinRequest.java | 0 .../vertx/vaadin/VertxVaadinResponse.java | 0 .../vertx/vaadin/VertxVaadinService.java | 0 .../vertx/vaadin/VertxVaadinSession.java | 0 .../vertx/vaadin/VertxWrappedSession.java | 0 .../RequestHandlerReplacements.java | 0 .../communication/StreamReceiverHandler.java | 0 .../communication/StreamResourceHandler.java | 0 .../VertxDebugWindowConnection.java | 0 .../VertxIndexHtmlRequestHandler.java | 0 .../VertxJavaScriptBootstrapHandler.java | 0 .../VertxStreamRequestHandler.java | 0 .../VertxUidlRequestHandler.java | 0 .../VertxWebComponentBootstrapHandler.java | 0 .../BaseVaadinConnectEndpointService.java | 0 .../connect/DefaultVaadinConnectResponse.java | 0 .../connect/EndpointServiceContext.java | 0 .../EndpointServiceContextSupport.java | 0 .../connect/VaadinConnectEndpointService.java | 0 .../vaadin/connect/VaadinConnectHandler.java | 0 .../vaadin/connect/VaadinConnectResponse.java | 0 .../connect/VaadinEndpointRegistry.java | 0 .../connect/VertxConnectRequestContext.java | 0 .../vaadin/connect/VertxEndpointRegistry.java | 0 .../VertxEndpointRegistryInitializer.java | 0 .../VertxVaadinConnectEndpointService.java | 0 .../connect/auth/AccessAnnotationChecker.java | 0 .../vaadin/connect/auth/CsrfChecker.java | 0 .../vaadin/connect/auth/UserAwareRequest.java | 0 .../auth/VaadinConnectAccessChecker.java | 0 .../VaadinConnectAccessCheckerSupport.java | 0 .../auth/VertxAccessAnnotationChecker.java | 0 .../vaadin/connect/auth/VertxCsrfChecker.java | 0 .../auth/VertxVaadinConnectAccessChecker.java | 0 .../devserver/VertxDevModeHandlerManager.java | 0 .../communication/ShareableSockJsSocket.java | 0 .../communication/SockJSPushHandler.java | 0 .../communication/VertxVaadinLiveReload.java | 0 .../mcollovati/vertx/web/ExtendedSession.java | 0 .../vertx/web/ExtendedSessionImpl.java | 0 .../web/serialization/SerializableHolder.java | 0 .../serialization/SerializationSupport.java | 0 .../web/sstore/ExtendedLocalSessionStore.java | 0 .../sstore/ExtendedLocalSessionStoreImpl.java | 0 .../web/sstore/ExtendedSessionStore.java | 0 .../web/sstore/NearCacheSessionStore.java | 0 .../web/sstore/NearCacheSessionStoreImpl.java | 0 .../vertx/vaadin/version.properties | 0 .../lookup/FakeLookupInitializer.java | 0 .../lookup/FakeLookupInitializer2.java | 0 .../vertx/support/HillaWorkAroundUT.java | 0 .../vertx/support/VaadinPatchesTest.java | 0 .../vertx/utils/ClassGraphTest.java | 0 .../utils/MockDeploymentConfiguration.java | 0 .../vertx/utils/MockServiceSessionSetup.java | 0 .../vertx/utils/MockVaadinContext.java | 0 .../vertx/utils/RandomStringGenerator.java | 0 .../vertx/vaadin/SessionStoreAdapterIT.java | 0 .../vertx/vaadin/StartupContextTest.java | 0 .../vertx/vaadin/VaadinVerticleUT.java | 0 .../vaadin/VertxStaticFileServerTest.java | 0 .../vertx/vaadin/VertxVaadinContextTest.java | 0 .../vertx/vaadin/VertxVaadinRequestUT.java | 0 .../vertx/vaadin/VertxVaadinResponseUT.java | 0 .../vertx/vaadin/VertxVaadinServiceUT.java | 0 .../vertx/vaadin/VertxWrappedSessionUT.java | 2 +- ...pedSessionWithClusteredSessionStoreUT.java | 0 ...WrappedSessionWithLocalSessionStoreUT.java | 0 ...VertxVaadinConnectEndpointServiceTest.java | 0 .../VertxAccessAnnotationCheckerTest.java | 0 .../auth/VertxConnectAccessCheckerTest.java | 0 .../superclassmethods/CrudEndpoint.java | 0 .../superclassmethods/NonEndpoint.java | 0 .../superclassmethods/NonEndpointImpl.java | 0 .../superclassmethods/PagedData.java | 0 .../superclassmethods/PersonEndpoint.java | 0 .../superclassmethods/ReadOnlyEndpoint.java | 0 .../rest/BeanWithJacksonAnnotation.java | 0 .../connect/rest/BeanWithPrivateFields.java | 0 .../rest/EndpointWithVertxHandlerTest.java | 0 .../connect/rest/VaadinConnectEndpoints.java | 0 .../BridgeMethodTestEndpoint.java | 0 .../AnotherTestInstantiatorFactory.java | 0 .../OneMoreTestInstantiatorFactory.java | 0 .../testdata/TestInstantiatorFactory.java | 0 .../testdata/TestResourceProvider.java | 0 .../vertx/web/sstore/ExtendedSessionUT.java | 0 .../web/sstore/NearCacheSessionStoreIT.java | 0 .../VAADIN/config/flow-build-info.json | 0 .../META-INF/VAADIN/config/stats.json | 0 .../VAADIN/config/stats_no_export.json | 0 .../META-INF/VAADIN/webapp/index.html | 0 .../META-INF/VAADIN/webapp/manifest.json | 0 .../resources/META-INF/VAADIN/webapp/sw.js | 0 .../VAADIN/static/client/compile.properties | 0 .../META-INF/resources/icons/icon.png | Bin .../com.vaadin.flow.di.InstantiatorFactory | 0 .../src/test/resources/logback-test.xml | 0 .../deployment/pom.xml | 2 +- .../VertxVaadinExtensionProcessor.java | 0 .../common-test-code/pom.xml | 2 +- .../vaadin/quarkus/it/AppShellConfig.java | 0 .../vertx/vaadin/quarkus/it/Counter.java | 0 .../vaadin/quarkus/it/HelloProvider.java | 0 .../vaadin/quarkus/it/SmokeTestView.java | 0 .../vertx/vaadin/quarkus/it/TestVerticle.java | 0 .../quarkus/it/TestVerticleDeployer.java | 0 .../vaadin/quarkus/it/addons/AddonsView.java | 0 .../quarkus/it/push/PushUpdateDivView.java | 0 .../it/regression/RemoveOldContentView.java | 0 .../it/routecontext/AbstractCountedBean.java | 0 .../it/routecontext/AbstractCountedView.java | 0 .../quarkus/it/routecontext/ApartBean.java | 0 .../quarkus/it/routecontext/AssignedBean.java | 0 .../quarkus/it/routecontext/BeanNoOwner.java | 0 .../it/routecontext/ChildNoOwnerView.java | 0 .../quarkus/it/routecontext/CountedPerUI.java | 0 .../it/routecontext/CustomException.java | 0 .../it/routecontext/DetailApartView.java | 0 .../it/routecontext/DetailAssignedView.java | 0 .../it/routecontext/ErrorHandlerView.java | 0 .../it/routecontext/ErrorParentView.java | 0 .../quarkus/it/routecontext/ErrorView.java | 0 .../quarkus/it/routecontext/EventView.java | 0 .../quarkus/it/routecontext/InvalidView.java | 0 .../quarkus/it/routecontext/MainLayout.java | 0 .../quarkus/it/routecontext/MasterView.java | 0 .../it/routecontext/ParentNoOwnerView.java | 0 .../quarkus/it/routecontext/PostponeView.java | 0 .../routecontext/PreserveOnRefreshBean.java | 0 .../routecontext/PreserveOnRefreshView.java | 0 .../quarkus/it/routecontext/RerouteView.java | 0 .../quarkus/it/routecontext/RootView.java | 0 .../it/service/BootstrapCustomizeView.java | 0 .../it/service/BootstrapCustomizer.java | 0 .../quarkus/it/service/EventObserver.java | 0 .../quarkus/it/service/ServiceBean.java | 0 .../quarkus/it/service/ServiceView.java | 0 .../quarkus/it/service/TestErrorHandler.java | 0 .../service/TestSystemMessagesProvider.java | 0 .../it/sessioncontext/SessionContextView.java | 0 .../it/uicontext/UIContextRootView.java | 0 .../it/uicontext/UINormalScopedBeanView.java | 0 .../it/uicontext/UIScopeInjecterView.java | 0 .../quarkus/it/uicontext/UIScopedBean.java | 0 .../quarkus/it/uicontext/UIScopedLabel.java | 0 .../quarkus/it/uicontext/UIScopedView.java | 0 .../it/uievents/NavigationObserver.java | 0 .../quarkus/it/uievents/UIEventsView.java | 0 .../src/main/resources/application.properties | 0 .../vaadin/quarkus/it/AbstractCdiIT.java | 0 .../vaadin/quarkus/it/AbstractChromeIT.java | 0 .../vertx/vaadin/quarkus/it/AddonsIT.java | 0 .../vertx/vaadin/quarkus/it/PushSmokeIT.java | 0 .../vaadin/quarkus/it/RemoveOldContentIT.java | 0 .../vaadin/quarkus/it/RouteContextIT.java | 0 .../it/ScreenshotsOnFailureExtension.java | 0 .../vertx/vaadin/quarkus/it/ServiceIT.java | 0 .../quarkus/it/SessionContextCloseIT.java | 0 .../vaadin/quarkus/it/SessionContextIT.java | 0 .../vertx/vaadin/quarkus/it/SmokeTestIT.java | 0 .../vertx/vaadin/quarkus/it/UIContextIT.java | 0 .../vertx/vaadin/quarkus/it/UIEventsIT.java | 0 .../development/frontend/generated/index.ts | 32 + .../generated/jar-resources/Flow.d.ts | 74 + .../frontend/generated/jar-resources/Flow.js | 324 + .../generated/jar-resources/Flow.js.map | 1 + .../jar-resources/FlowBootstrap.d.ts | 1 + .../generated/jar-resources/FlowBootstrap.js | 262 + .../generated/jar-resources/FlowClient.d.ts | 1 + .../generated/jar-resources/FlowClient.js | 1132 +++ .../generated/jar-resources/License.d.ts | 14 + .../generated/jar-resources/License.js | 110 + .../generated/jar-resources/License.js.map | 1 + .../jar-resources/copy-to-clipboard.js | 150 + .../jar-resources/dndConnector-es6.js | 1 + .../generated/jar-resources/dndConnector.js | 110 + .../generated/jar-resources/index.d.ts | 1 + .../frontend/generated/jar-resources/index.js | 2 + .../generated/jar-resources/index.js.map | 1 + .../generated/jar-resources/lumo-includes.ts | 9 + .../jar-resources}/src/hello-world-jandex.ts | 0 .../jar-resources}/src/hello-world.ts | 0 .../themes/reusable-theme/styles.css | 0 .../generated/jar-resources/tooltip.ts | 11 + .../jar-resources/vaadin-dev-tools.d.ts | 119 + .../jar-resources/vaadin-dev-tools.js | 1477 ++++ .../jar-resources/vaadin-dev-tools.js.map | 1 + .../theme-reusable-theme.generated.js | 114 + .../development/frontend/generated/theme.d.ts | 1 + .../development/frontend/generated/theme.js | 2 + .../frontend/generated/vaadin-featureflags.ts | 11 + .../development/frontend/generated/vaadin.ts | 8 + .../frontend/generated/vite-devmode.ts | 31 + .../development}/frontend/index.html | 0 .../integration-tests/development/pom.xml | 2 +- .../integration-tests/pom.xml | 2 +- .../production/frontend/generated/index.ts | 32 + .../generated/jar-resources/Flow.d.ts | 74 + .../frontend/generated/jar-resources/Flow.js | 324 + .../generated/jar-resources/Flow.js.map | 1 + .../jar-resources/FlowBootstrap.d.ts | 1 + .../generated/jar-resources/FlowBootstrap.js | 262 + .../generated/jar-resources/FlowClient.d.ts | 1 + .../generated/jar-resources/FlowClient.js | 1132 +++ .../generated/jar-resources/License.d.ts | 14 + .../generated/jar-resources/License.js | 110 + .../generated/jar-resources/License.js.map | 1 + .../jar-resources/copy-to-clipboard.js | 150 + .../jar-resources/dndConnector-es6.js | 1 + .../generated/jar-resources/dndConnector.js | 110 + .../generated/jar-resources/index.d.ts | 1 + .../frontend/generated/jar-resources/index.js | 2 + .../generated/jar-resources/index.js.map | 1 + .../generated/jar-resources/lumo-includes.ts | 9 + .../jar-resources/src/hello-world-jandex.ts | 15 + .../jar-resources/src/hello-world.ts | 15 + .../themes/reusable-theme/styles.css | 13 + .../generated/jar-resources/tooltip.ts | 11 + .../jar-resources/vaadin-dev-tools.d.ts | 119 + .../jar-resources/vaadin-dev-tools.js | 1477 ++++ .../jar-resources/vaadin-dev-tools.js.map | 1 + .../theme-reusable-theme.generated.js | 114 + .../production/frontend/generated/theme.d.ts | 1 + .../production/frontend/generated/theme.js | 2 + .../frontend/generated/vaadin-featureflags.ts | 11 + .../production/frontend/generated/vaadin.ts | 6 + .../production}/frontend/index.html | 0 .../production/frontend/my.css | 3 + .../integration-tests/production/pom.xml | 2 +- .../integration-tests/reusable-theme/pom.xml | 2 +- .../themes/reusable-theme/styles.css | 13 + .../test-addons/addon-with-jandex/pom.xml | 2 +- .../org/vaadin/jandex/HelloWorldJandex.java | 0 .../frontend/src/hello-world-jandex.ts | 15 + .../test-addons/addon-without-jandex/pom.xml | 2 +- .../java/org/vaadin/nojandex/HelloWorld.java | 0 .../META-INF/frontend/src/hello-world.ts | 15 + .../pom.xml | 5 +- .../runtime/pom.xml | 2 +- .../mcollovati/vertx/quarkus/AnyLiteral.java | 0 .../mcollovati/vertx/quarkus/BeanLookup.java | 0 .../vertx/quarkus/QuarkusInstantiator.java | 0 .../quarkus/QuarkusResourceProvider.java | 0 .../vertx/quarkus/QuarkusVaadinVerticle.java | 0 .../vertx/quarkus/QuarkusVertxVaadin.java | 0 .../quarkus/QuarkusVertxVaadinService.java | 0 .../quarkus/VaadinVerticleConfigurer.java | 0 .../vertx/quarkus/VaadinVerticleDeployer.java | 0 .../quarkus/annotation/NormalRouteScoped.java | 0 .../quarkus/annotation/NormalUIScoped.java | 0 .../quarkus/annotation/RouteScopeOwner.java | 0 .../vertx/quarkus/annotation/RouteScoped.java | 0 .../vertx/quarkus/annotation/UIScoped.java | 0 .../annotation/VaadinServiceEnabled.java | 0 .../annotation/VaadinServiceScoped.java | 0 .../annotation/VaadinSessionScoped.java | 0 .../quarkus/context/AbstractContext.java | 0 .../AbstractContextualStorageManager.java | 0 .../vertx/quarkus/context/BeanProvider.java | 0 .../vertx/quarkus/context/ContextUtils.java | 0 .../context/ContextualInstanceInfo.java | 0 .../quarkus/context/ContextualStorage.java | 0 .../quarkus/context/RouteContextWrapper.java | 0 .../quarkus/context/RouteScopedContext.java | 0 .../quarkus/context/UIContextWrapper.java | 0 .../quarkus/context/UIScopedContext.java | 0 .../context/VaadinServiceScopedContext.java | 0 .../context/VaadinSessionScopedContext.java | 0 .../src/main/resources/META-INF/beans.xml | 0 .../resources/META-INF/quarkus-extension.yaml | 0 .../src/main/resources/application.properties | 0 .../vertx/quarkus/NoOpVaadinVerticle.java | 0 .../vertx/quarkus/ResourceProviderTest.java | 0 .../TestQuarkusVertxVaadinServletService.java | 0 .../quarkus/context/AbstractContextTest.java | 0 .../quarkus/context/BeanManagerProxy.java | 0 .../context/InjectableContextTest.java | 0 .../quarkus/context/RouteContextTest.java | 0 .../RouteContextWithinDifferentUITest.java | 0 .../context/RouteContextWrapperTest.java | 0 ...teContextWrapperWithinDifferentUITest.java | 0 .../RouteContextualStorageManagerTest.java | 0 .../context/RouteUnderTestContext.java | 0 .../quarkus/context/ServiceContextTest.java | 0 .../context/ServiceUnderTestContext.java | 0 .../quarkus/context/SessionContextTest.java | 0 .../context/SessionUnderTestContext.java | 0 .../vertx/quarkus/context/TestBean.java | 0 .../context/TestContextualStorageManager.java | 0 .../vertx/quarkus/context/TestHasElement.java | 0 .../quarkus/context/TestNavigationTarget.java | 0 .../context/TestRouteScopedContext.java | 0 .../quarkus/context/UIUnderTestContext.java | 0 .../vertx/quarkus/context/UiContextTest.java | 0 .../context/UiPseudoScopeContextTest.java | 0 .../quarkus/context/UnderTestContext.java | 0 .../resource-provider/some-resource.json | 0 .../.gitignore | 0 .../drivers.xml | 0 .../pom.xml | 42 +- .../test-common/pom.xml | 2 +- .../flow/uitest/ui/AbstractDivView.java | 0 .../DependenciesLoadingBaseView.java | 0 ...oductionModeTimingDataViewTestServlet.java | 0 .../vertx/ProductionModeViewTestServlet.java | 0 .../flow/uitest/vertx/RouterTestServlet.java | 0 .../flow/uitest/vertx/TestBootVerticle.java | 0 .../flow/uitest/vertx/ViewClassLocator.java | 0 .../flow/uitest/vertx/ViewTestLayout.java | 0 .../flow/uitest/vertx/ViewTestServlet.java | 0 .../flow/uitest/vertx/WebJarsServlet.java | 0 .../main/resources/simplelogger.properties | 0 .../addon-with-templates/pom.xml | 2 +- .../example/addon/AddonLitComponent.java | 0 .../META-INF/frontend/AddonLitComponent.ts | 0 .../test-frontend}/frontend/index.html | 0 .../test-frontend/pom.xml | 10 +- .../test-frontend/test-npm/README.md | 0 .../test-npm}/frontend/index.html | 0 .../test-npm/frontend/my-component.js | 0 .../test-frontend/test-npm/pom-production.xml | 0 .../test-frontend/test-npm/pom.xml | 0 .../vaadin/flow/mixedtest/ui/IdTestView.java | 0 .../mixedtest/ui/MissingDependenciesView.java | 0 .../resources/vaadin-featureflags.properties | 0 .../vaadin/flow/mixedtest/ui/IdTestIT.java | 0 .../vaadin/flow/mixedtest/ui/NpmUsedIT.java | 0 .../test-frontend/test-pnpm/.npmrc | 0 .../test-frontend/test-pnpm/.pnpmfile.cjs | 0 .../test-frontend/test-pnpm/README.md | 0 .../test-pnpm}/frontend/index.html | 0 .../test-pnpm/frontend/my-component.js | 0 .../test-pnpm/pom-production.xml | 0 .../test-frontend/test-pnpm/pom.xml | 0 .../vaadin/flow/mixedtest/ui/IdTestView.java | 0 .../mixedtest/ui/MissingDependenciesView.java | 0 .../resources/vaadin-featureflags.properties | 0 .../vaadin/flow/mixedtest/ui/IdTestIT.java | 0 .../vaadin/flow/mixedtest/ui/PnpmUsedIT.java | 0 .../test-frontend/vite-basics/.npmrc | 0 .../vite-basics/frontend/a-directory/index.js | 0 .../frontend/cssimport-textfield.css | 0 .../vite-basics/frontend/cssimport.css | 0 .../vite-basics/frontend/importdir.js | 0 .../vite-basics/frontend/index.html | 0 .../vite-basics/frontend/jsonloader.js | 0 .../vite-basics/frontend/my.json | 0 .../frontend/testscopebuttonloader.js | 0 .../frontend/testscopemaploader.js | 0 .../themes/vite-basics/images/plant.png | Bin .../frontend/themes/vite-basics/styles.css | 0 .../frontend/themes/vite-basics/theme.json | 0 .../vite-basics/package-outside-npm/index.js | 0 .../package-outside-npm/package.json | 0 .../test-frontend/vite-basics/package.json | 22 +- .../vite-basics/package2-outside-npm/index.js | 0 .../package2-outside-npm/package.json | 0 .../test-frontend/vite-basics/pom.xml | 2 +- .../java/com/vaadin/viteapp/AppShell.java | 0 .../vaadin/viteapp/views/empty/MainView.java | 0 .../src/test/conf/vertx-vaadin-test.conf | 0 .../java/com/vaadin/viteapp/BasicsIT.java | 0 .../java/com/vaadin/viteapp/BundlesIT.java | 0 .../com/vaadin/viteapp/ExternalPackageIT.java | 0 .../java/com/vaadin/viteapp/FileAccessIT.java | 0 .../com/vaadin/viteapp/PostinstallIT.java | 0 .../test/java/com/vaadin/viteapp/ThemeIT.java | 0 .../com/vaadin/viteapp/ThemeReloadIT.java | 0 .../com/vaadin/viteapp/ViteDevModeIT.java | 0 .../test-frontend/vite-basics/tsconfig.json | 0 .../test-frontend/vite-basics}/types.d.ts | 0 .../test-frontend/vite-basics/vite.config.ts | 0 .../test-frontend/vite-context-path/.npmrc | 0 .../vite-context-path}/.pnpmfile.cjs | 0 .../vite-context-path}/frontend/index.html | 0 .../themes/vite-context-path/styles.css | 0 .../themes/vite-context-path/theme.json | 0 .../vite-context-path/pom-production.xml | 0 .../test-frontend/vite-context-path/pom.xml | 0 .../java/com/vaadin/viteapp/AppShell.java | 0 .../vaadin/viteapp/views/empty/MainView.java | 0 .../java/com/vaadin/viteapp/BundlesIT.java | 0 .../com/vaadin/viteapp/ContextPathIT.java | 0 .../vite-context-path}/tsconfig.json | 0 .../vite-context-path}/types.d.ts | 0 .../vite-context-path/vite.config.ts | 0 .../test-frontend/vite-embedded/.gitignore | 0 .../test-frontend/vite-embedded/.npmrc | 0 .../vite-embedded}/.pnpmfile.cjs | 0 .../vite-embedded}/frontend/index.html | 0 .../frontend/themes/my-theme/styles.css | 0 .../vite-embedded/frontend/web-component.html | 0 .../vite-embedded/pom-production.xml | 0 .../test-frontend/vite-embedded/pom.xml | 0 .../com/vaadin/viteapp/BasicComponent.java | 0 .../com/vaadin/viteapp/PushComponent.java | 0 .../src/main/webapp/basic-component.html | 0 .../src/main/webapp/push-component.html | 0 .../com/vaadin/viteapp/BasicComponentIT.java | 0 .../com/vaadin/viteapp/PushComponentIT.java | 0 .../vite-embedded}/tsconfig.json | 0 .../test-frontend/vite-embedded}/types.d.ts | 0 .../lit-templates/test-form.js | 0 .../vite-production-custom-frontend/pom.xml | 0 .../java/com/vaadin/viteapp/AppShell.java | 0 .../vaadin/viteapp/littemplate/TestForm.java | 0 .../com/vaadin/viteapp/view/TestView.java | 0 .../vaadin/viteapp/ProductionBasicsIT.java | 0 .../test-frontend/vite-production/.npmrc | 0 .../vite-production}/.pnpmfile.cjs | 0 .../vite-production/frontend/image.css | 0 .../vite-production/frontend/index.html | 0 .../frontend/lit-invalid-imports.ts | 0 .../themes/vite-production/images/plant.png | Bin .../themes/vite-production/styles.css | 0 .../themes/vite-production/theme.json | 0 .../vite-production/frontend/yes.png | Bin .../vite-production/package-lock.json | 6262 +++++++++++++++++ .../vite-production/package.json | 6 +- .../test-frontend/vite-production/pom.xml | 2 +- .../java/com/vaadin/viteapp/AppShell.java | 0 .../vaadin/viteapp/views/empty/MainView.java | 0 .../src/test/conf/vertx-vaadin-test.conf | 0 .../java/com/vaadin/viteapp/BundlesIT.java | 0 .../com/vaadin/viteapp/CompressionIT.java | 0 .../vaadin/viteapp/ProductionBasicsIT.java | 0 .../vite-production/tsconfig.json | 0 .../test-frontend/vite-production}/types.d.ts | 0 .../vite-production}/vite.config.ts | 0 .../vite-pwa-custom-offline-path/.npmrc | 0 .../.pnpmfile.cjs | 0 .../frontend/index.html | 23 + .../pom-production.xml | 0 .../vite-pwa-custom-offline-path/pom.xml | 0 .../java/com/vaadin/viteapp/AppShell.java | 0 .../java/com/vaadin/viteapp/MainView.java | 0 .../src/main/webapp/offline.html | 0 .../test/java/com/vaadin/viteapp/MainIT.java | 0 .../tsconfig.json | 0 .../vite-pwa-custom-offline-path}/types.d.ts | 0 .../vite-pwa-disabled-offline/.npmrc | 0 .../vite-pwa-disabled-offline}/.pnpmfile.cjs | 0 .../frontend/index.html | 23 + .../pom-production.xml | 0 .../vite-pwa-disabled-offline/pom.xml | 0 .../java/com/vaadin/viteapp/AppShell.java | 0 .../ApplicationServiceInitListener.java | 0 .../java/com/vaadin/viteapp/MainView.java | 0 ...adin.flow.server.VaadinServiceInitListener | 0 .../test/java/com/vaadin/viteapp/MainIT.java | 0 .../vite-pwa-disabled-offline}/tsconfig.json | 0 .../vite-pwa-disabled-offline}/types.d.ts | 0 .../vite-pwa-production/.gitignore | 0 .../test-frontend/vite-pwa-production/.npmrc | 0 .../vite-pwa-production}/.pnpmfile.cjs | 0 .../frontend/about-view.ts | 0 .../vite-pwa-production/frontend/home-view.ts | 0 .../vite-pwa-production/frontend/index.html | 0 .../vite-pwa-production/frontend/index.ts | 0 .../themes/my-theme/fonts/Roboto-Regular.woff | Bin .../frontend/themes/my-theme/images/bg.jpeg | Bin .../frontend/themes/my-theme/styles.css | 0 .../test-frontend/vite-pwa-production/pom.xml | 0 .../java/com/vaadin/viteapp/AppShell.java | 0 .../java/com/vaadin/viteapp/MainView.java | 0 .../test/java/com/vaadin/viteapp/MainIT.java | 0 .../vite-pwa-production}/tsconfig.json | 0 .../vite-pwa-production}/types.d.ts | 0 .../test-frontend/vite-pwa/.gitignore | 0 .../test-frontend/vite-pwa/.npmrc | 0 .../test-frontend/vite-pwa}/.pnpmfile.cjs | 0 .../vite-pwa/frontend/about-view.ts | 0 .../vite-pwa/frontend/home-view.css | 0 .../vite-pwa/frontend/home-view.ts | 0 .../vite-pwa/frontend/index.html | 23 + .../test-frontend/vite-pwa/frontend/index.ts | 0 .../themes/my-theme/fonts/Roboto-Regular.woff | Bin .../frontend/themes/my-theme/images/bg.jpeg | Bin .../frontend/themes/my-theme/styles.css | 0 .../test-frontend/vite-pwa/pom.xml | 0 .../java/com/vaadin/viteapp/AppShell.java | 0 .../java/com/vaadin/viteapp/MainView.java | 0 .../test/java/com/vaadin/viteapp/MainIT.java | 0 .../test-frontend/vite-pwa}/tsconfig.json | 0 .../test-frontend/vite-pwa}/types.d.ts | 0 .../test-frontend/vite-test-assets/.gitignore | 0 .../packages/@testscope/all/all.js | 0 .../packages/@testscope/all/package.json | 0 .../packages/@testscope/button/package.json | 0 .../@testscope/button/src/testscope-button.js | 0 .../@testscope/button/testscope-button.js | 0 .../packages/@testscope/map/package.json | 0 .../packages/@testscope/map/src/lib.js | 0 .../@testscope/map/src/testscope-map.js | 0 .../packages/@testscope/map/testscope-map.js | 0 .../packages/@vaadin/bundles-old/package.json | 0 .../@vaadin/bundles-old/vaadin-bundle.json | 0 .../packages/@vaadin/bundles-old/vaadin.js | 0 .../packages/@vaadin/bundles/package.json | 0 .../@vaadin/bundles/vaadin-bundle.json | 0 .../packages/@vaadin/bundles/vaadin.js | 0 .../test-frontend/vite-test-assets/pom.xml | 2 +- .../flow/uitest/vertx/TestBootVerticle.java | 0 .../viteapp/views/template/LitComponent.java | 0 .../views/template/PolymerComponent.java | 0 .../ReflectivelyReferencedComponent.java | 0 .../viteapp/views/template/TemplateView.java | 0 .../main/resources/META-INF/frontend/bad.ts | 0 .../frontend/templates/LitComponent.ts | 0 .../frontend/templates/PolymerComponent.ts | 0 .../ReflectivelyReferencedComponent.ts | 0 .../java/com/vaadin/viteapp/TemplateIT.java | 0 .../test-lumo/pom.xml | 2 +- .../java/com/vaadin/flow/theme/lumo/Lumo.java | 0 .../resources/frontend/lumo-includes.ts | 0 .../test-resources/pom.xml | 2 +- .../uitest/ui/dependencies/TestVersion.java | 0 .../ui/dependencies/ThemableTextField.java | 0 .../test-files/css/allblueimportant.css | 0 .../resources/test-files/css/allred.css | 0 .../test-files/html/combinedMixed.html | 0 .../test-files/html/htmlimport1.html | 0 .../test-files/html/htmlimport2.html | 0 .../test-files/html/htmlimport4-js.js | 0 .../test-files/html/htmlimport4.html | 0 .../test-files/html/mixedImport1.html | 0 .../test-files/html/mixedImport2.html | 0 .../test-files/html/orderedHtmlImport.html | 0 .../test-files/js/body-click-listener.js | 0 .../test-files/js/read-global-var.js | 0 .../resources/test-files/js/script1.js | 0 .../resources/test-files/js/script2.js | 0 .../resources/test-files/js/set-global-var.js | 0 .../main/resources/simplelogger.properties | 0 .../test-root-context/.gitignore | 0 .../frontend/AfterServerChanges.js | 0 .../frontend/AttachExistingDomElementById.js | 0 .../frontend/BasicTypeList.js | 0 .../frontend/BeanInListing.js | 0 .../ChangeInjectedComponentTextView.js | 0 .../frontend/ChildIdTemplate.js | 0 .../frontend/ChildOrderTemplate.js | 0 .../frontend/ChildTemplate.js | 0 .../test-root-context/frontend/ClearList.js | 0 .../frontend/ClearNodeChildren.js | 0 .../frontend/ClientUpdateMode.js | 0 .../frontend/ConvertToBean.js | 0 .../frontend/DomListenerOnAttach.js | 0 .../frontend/DomRepeatPolymerTemplate.js | 0 .../frontend/ElementInitOrder.js | 0 .../test-root-context/frontend/EmptyLists.js | 0 .../frontend/EventHandler.js | 0 .../ExceptionsDuringPropertyUpdates.js | 0 .../frontend/HiddenTemplate.js | 0 .../frontend/InjectScriptTagTemplate.js | 0 .../frontend/InjectedChild.js | 0 .../frontend/InjectsJsTemplate.js | 0 .../frontend/JsGrandParent.js | 0 .../frontend/JsInjectedElement.js | 0 .../frontend/JsInjectedGrandChild.js | 0 .../frontend/JsSubTemplate.js | 0 .../test-root-context/frontend/ListBinding.js | 0 .../frontend/ListInsideListBinding.js | 0 .../frontend/MixinInjectsElement.js | 0 .../test-root-context/frontend/ModelList.js | 0 .../frontend/MultiplePropsMutation.js | 0 .../frontend/OneWayPolymerBinding.js | 0 .../frontend/ParentIdTemplate.js | 0 .../frontend/ParentTemplate.js | 0 .../frontend/ParentTemplateInjectChild.js | 0 .../frontend/PolymerDefaultPropertyValue.js | 0 .../frontend/PolymerModelProperties.js | 0 .../frontend/PolymerPropertyChange.js | 0 .../PolymerPropertyMutationInObserver.js | 0 .../PropertiesUpdatedBeforeChangeEvents.js | 0 .../frontend/ServerModelNullList.js | 0 .../frontend/ServerRequest.js | 0 .../frontend/SubPropertyModel.js | 0 .../frontend/TemplateMappingDetector.js | 0 .../frontend/TemplateMappingDetectorParent.js | 0 .../frontend/TemplateProperties.js | 0 .../TemplateWithConnectedCallbacks.js | 0 .../frontend/TemplateWithInjectedId.js | 0 .../frontend/TwoWayListBinding.js | 0 .../frontend/TwoWayPolymerBinding.js | 0 .../frontend/UpdatableModelProperties.js | 0 .../frontend/UpgradeElement.js | 0 .../flow/uitest/ui/CustomCustomElement.js | 0 .../flow/uitest/ui/dependencies/eager.js | 0 .../flow/uitest/ui/dependencies/inline.js | 0 .../flow/uitest/ui/dependencies/lazy.js | 0 .../frontend/components/context-inline.js | 0 .../frontend/components/frontend-inline.js | 0 .../frontend/dependencies/eager-module.js | 0 .../frontend/dependencies/eager.css | 0 .../frontend/dependencies/eager.js | 0 .../frontend/dependencies/inline.css | 0 .../frontend/dependencies/inline.js | 0 .../frontend/dependencies/lazy.css | 0 .../frontend/dependencies/lazy.js | 0 .../frontend/divConnector.js | 0 .../frontend/in-memory-connector.js | 0 .../test-root-context/frontend/index.html | 0 .../test-root-context/frontend/index.ts | 0 .../frontend/js-get-by-id.js | 0 .../frontend/template-scalability-panel.js | 0 .../frontend/template-scalability-view.js | 0 .../template-without-shadow-root-view.js | 0 .../frontend/x-lazy-widget.js | 0 .../test-root-context/pom.xml | 25 +- .../reference-screenshots/.gitkeep | 0 .../InitialExtendedClientDetailsView.java | 0 .../java/com/vaadin/flow/TestAppShell.java | 0 .../main/java/com/vaadin/flow/TestPush.java | 0 .../vaadin/flow/VerifyBrowserVersionView.java | 0 .../com/vaadin/flow/uitest/MyException.java | 0 .../ui/AbstractDebounceSynchronizeView.java | 0 .../uitest/ui/AbstractErrorHandlerView.java | 0 .../uitest/ui/AbstractPushUpdateDivView.java | 0 .../uitest/ui/AttachExistingElementView.java | 0 .../flow/uitest/ui/AttachListenerView.java | 0 .../ui/BackButtonServerRoundTripView.java | 0 .../vaadin/flow/uitest/ui/BaseHrefView.java | 0 .../flow/uitest/ui/BasicComponentView.java | 0 .../flow/uitest/ui/BasicElementView.java | 0 .../vaadin/flow/uitest/ui/BodyScrollView.java | 0 .../uitest/ui/BrowserWindowResizeView.java | 0 .../ui/CallFunctionBeforeRemoveView.java | 0 .../flow/uitest/ui/CompositeNestedView.java | 0 .../vaadin/flow/uitest/ui/CompositeView.java | 0 .../vaadin/flow/uitest/ui/CountUIsView.java | 0 .../uitest/ui/CustomCustomElementView.java | 0 .../ui/DebounceSynchronizePropertyView.java | 0 .../flow/uitest/ui/DnDAttachDetachView.java | 0 .../uitest/ui/DnDCustomComponentView.java | 0 .../com/vaadin/flow/uitest/ui/DnDView.java | 0 .../flow/uitest/ui/DomEventFilterView.java | 0 .../uitest/ui/DomListenerOnAttachView.java | 0 .../flow/uitest/ui/DynamicTitleView.java | 0 .../uitest/ui/DynamicallyRegisteredRoute.java | 0 .../flow/uitest/ui/ElementInitOrderView.java | 0 .../flow/uitest/ui/ElementInnerHtmlView.java | 0 .../uitest/ui/ElementRemoveItselfView.java | 0 .../flow/uitest/ui/ElementStyleView.java | 0 .../vaadin/flow/uitest/ui/EnabledView.java | 0 .../flow/uitest/ui/ErrorHandlingView.java | 0 .../flow/uitest/ui/EventListenersView.java | 0 .../uitest/ui/ExceptionDuringMapSyncView.java | 0 .../flow/uitest/ui/ExecJavaScriptView.java | 0 .../uitest/ui/ExtendedClientDetailsView.java | 0 .../vaadin/flow/uitest/ui/ForwardToView.java | 0 .../flow/uitest/ui/FragmentLinkView.java | 0 .../flow/uitest/ui/FragmentLinkView2.java | 0 .../uitest/ui/HasUrlParameterErrorView.java | 0 .../vaadin/flow/uitest/ui/HistoryView.java | 0 .../vaadin/flow/uitest/ui/ImageClickView.java | 0 .../flow/uitest/ui/InMemoryChildrenView.java | 0 .../flow/uitest/ui/InternalErrorView.java | 0 .../uitest/ui/JavaScriptReturnValueView.java | 0 .../flow/uitest/ui/JsApiGetByIdView.java | 0 .../flow/uitest/ui/KeyboardEventView.java | 0 .../flow/uitest/ui/LoadingIndicatorView.java | 0 .../ui/LongPollingMultipleThreadsView.java | 0 .../flow/uitest/ui/LongPollingPushView.java | 0 .../flow/uitest/ui/MyExceptionHandler.java | 0 .../flow/uitest/ui/NavigationTriggerView.java | 0 .../com/vaadin/flow/uitest/ui/PageView.java | 0 .../flow/uitest/ui/PopStateHandlerView.java | 0 .../flow/uitest/ui/PostponeProceedView.java | 0 .../flow/uitest/ui/PreserveOnRefreshView.java | 0 .../ui/PushLongPollingUpdateDivView.java | 0 .../flow/uitest/ui/PushSettingsView.java | 0 .../flow/uitest/ui/PushWSUpdateDivView.java | 0 .../ui/RequestParametersHistoryView.java | 0 .../flow/uitest/ui/RequestParametersView.java | 0 .../vaadin/flow/uitest/ui/RerouteView.java | 0 .../flow/uitest/ui/ResynchronizationView.java | 0 .../flow/uitest/ui/ReturnChannelView.java | 0 .../vaadin/flow/uitest/ui/RouterLinkView.java | 0 .../flow/uitest/ui/ScriptInjectView.java | 0 .../flow/uitest/ui/SerializeUIView.java | 0 .../uitest/ui/ServiceInitListenersView.java | 0 .../uitest/ui/SessionCloseLogoutView.java | 0 .../uitest/ui/SetParameterForwardToView.java | 0 .../vaadin/flow/uitest/ui/ShadowRootView.java | 0 .../vaadin/flow/uitest/ui/ShortcutsView.java | 0 .../vaadin/flow/uitest/ui/StaticHtmlView.java | 0 .../flow/uitest/ui/StreamResourceView.java | 0 .../uitest/ui/SynchronizedPropertyView.java | 0 .../uitest/ui/TestingServiceInitListener.java | 0 .../uitest/ui/TimingInfoReportedView.java | 0 .../com/vaadin/flow/uitest/ui/TitleView.java | 0 .../vaadin/flow/uitest/ui/UIElementView.java | 0 .../flow/uitest/ui/ValueChangeModeView.java | 0 .../vaadin/flow/uitest/ui/VisibilityView.java | 0 .../flow/uitest/ui/WaitForVaadinView.java | 0 .../flow/uitest/ui/WebComponentsView.java | 0 .../AnnotatedFrontendInlineView.java | 0 .../ComponentWithExternalJavaScript.java | 0 .../DependenciesLoadingAnnotationsView.java | 0 .../DependenciesLoadingPageApiView.java | 0 .../dependencies/DynamicDependencyView.java | 0 .../dependencies/ExternalJavaScriptView.java | 0 .../ui/frontend/UsageStatisticsView.java | 0 .../flow/uitest/ui/routing/ForwardPage.java | 0 .../flow/uitest/ui/routing/ISEHandler.java | 0 .../flow/uitest/ui/routing/ISELayout.java | 0 .../flow/uitest/ui/routing/ISETargetView.java | 0 .../flow/uitest/ui/routing/NPEHandler.java | 0 .../flow/uitest/ui/routing/NPETargetView.java | 0 .../flow/uitest/ui/routing/PushLayout.java | 0 .../ui/routing/PushRouteNotFoundView.java | 0 .../ui/scroll/CustomScrollCallbacksView.java | 0 .../flow/uitest/ui/scroll/LongToOpenView.java | 0 .../uitest/ui/scroll/MultipleAnchorsView.java | 0 .../uitest/ui/scroll/PushStateScrollView.java | 0 .../flow/uitest/ui/scroll/ScrollView.java | 0 .../ui/scroll/ServerRequestScrollView.java | 0 .../ui/template/AfterServerChangesView.java | 0 .../AttachExistingDomElementByIdView.java | 0 .../ui/template/BasicTypeInListView.java | 0 .../uitest/ui/template/BeanInListingView.java | 0 .../ChangeInjectedComponentTextView.java | 0 .../uitest/ui/template/ChildOrderView.java | 0 .../ui/template/ClearNodeChildrenView.java | 0 .../ui/template/ClientUpdateModeView.java | 0 .../uitest/ui/template/ConvertToBeanView.java | 0 .../uitest/ui/template/DomRepeatView.java | 0 .../uitest/ui/template/EmptyListsView.java | 0 .../uitest/ui/template/EventHandlerView.java | 0 .../ExceptionsDuringPropertyUpdatesView.java | 0 .../ui/template/HiddenTemplateView.java | 0 .../ui/template/InjectScriptTagView.java | 0 ...njectedElementInsideMixinBehaviorView.java | 0 .../ui/template/InjectsJsTemplateView.java | 0 .../InvisibleDefaultPropertyValueView.java | 0 .../uitest/ui/template/JsGrandParentView.java | 0 .../uitest/ui/template/JsInjectedDiv.java | 0 .../uitest/ui/template/JsInjectedElement.java | 0 .../ui/template/JsInjectedGrandChild.java | 0 .../uitest/ui/template/JsSubTemplate.java | 0 .../flow/uitest/ui/template/Message.java | 0 .../MutationSeveralSyncedPropsView.java | 0 .../ui/template/OneWayPolymerBindingView.java | 0 .../flow/uitest/ui/template/Person.java | 0 .../template/PolymerDefaultPropertyValue.java | 0 .../PolymerDefaultPropertyValueView.java | 0 .../template/PolymerModelPropertiesView.java | 0 .../ui/template/PolymerPropertiesView.java | 0 .../PolymerPropertyChangeEventView.java | 0 ...PolymerPropertyMutationInObserverView.java | 0 ...opertiesUpdatedBeforeChangeEventsView.java | 0 .../RestoreViewWithAttachedByIdView.java | 0 .../ui/template/SubPropertyModelTemplate.java | 0 .../ui/template/SubPropertyModelView.java | 0 .../TemplateHasInjectedSubTemplateView.java | 0 .../ui/template/TemplateInTemplateView.java | 0 .../TemplateInTemplateWithIdView.java | 0 .../template/TemplateMappingDetectorView.java | 0 .../ui/template/TemplateScalabilityPanel.java | 0 .../ui/template/TemplateScalabilityView.java | 0 .../TemplateWithConnectedCallbacks.java | 0 .../TemplateWithConnectedCallbacksView.java | 0 .../ui/template/TemplatesVisibilityView.java | 0 .../ui/template/TwoWayPolymerBindingView.java | 0 .../UpdatableModelPropertiesView.java | 0 .../ui/template/UpgradeElementView.java | 0 .../template/collections/ClearListView.java | 0 .../template/collections/ListBindingView.java | 0 .../ListInsideListBindingView.java | 0 .../ui/template/collections/Message.java | 0 .../template/collections/ModelListView.java | 0 .../collections/ToggleNullListView.java | 0 .../collections/TwoWayListBindingView.java | 0 .../ui/template/imports/LazyWidgetView.java | 0 .../flow/uitest/ui/webcomponent/HasMax.java | 0 .../flow/uitest/ui/webcomponent/HasValue.java | 0 .../uitest/ui/webcomponent/PaperInput.java | 0 .../ui/webcomponent/PaperInputView.java | 0 .../uitest/ui/webcomponent/PaperSlider.java | 0 .../ui/webcomponent/PaperSliderView.java | 0 ...adin.flow.server.VaadinServiceInitListener | 0 .../vaadin/flow/uitest/ui/StaticHtmlView.html | 0 .../src/main/webapp/include.js | 0 .../src/main/webapp/loading-indicator.css | 0 .../src/main/webapp/plain-script.js | 0 .../src/test/conf/vertx-vaadin-test-prod.conf | 0 .../src/test/conf/vertx-vaadin-test.conf | 0 .../java/com/vaadin/flow/AssertionTest.java | 0 .../java/com/vaadin/flow/DevModeOnly.java | 0 .../java/com/vaadin/flow/DevModeRule.java | 0 .../com/vaadin/flow/FaultyLocationIT.java | 0 .../flow/InitialExtendedClientDetailsIT.java | 0 .../vaadin/flow/VerifyBrowserVersionIT.java | 0 .../flow/testutil/ChromeBrowserTest.java | 0 .../ui/AbstractBasicElementComponentIT.java | 0 .../ui/AbstractDebounceSynchronizeIT.java | 0 .../flow/uitest/ui/AbstractErrorIT.java | 0 .../uitest/ui/AbstractStreamResourceIT.java | 0 .../flow/uitest/ui/AbstractUpdateDivIT.java | 0 .../uitest/ui/AttachExistingElementIT.java | 0 .../flow/uitest/ui/AttachListenerIT.java | 0 .../ui/BackButtonServerRoundTripIT.java | 0 .../com/vaadin/flow/uitest/ui/BaseHrefIT.java | 0 .../flow/uitest/ui/BasicComponentIT.java | 0 .../vaadin/flow/uitest/ui/BasicElementIT.java | 0 .../vaadin/flow/uitest/ui/BodyScrollIT.java | 0 .../flow/uitest/ui/BrowserWindowResizeIT.java | 0 .../uitest/ui/CallFunctionBeforeRemoveIT.java | 0 .../vaadin/flow/uitest/ui/CompositeIT.java | 0 .../flow/uitest/ui/CompositeNestedIT.java | 0 .../com/vaadin/flow/uitest/ui/CountUIsIT.java | 0 .../flow/uitest/ui/CustomCustomElementIT.java | 0 .../ui/DebounceSynchronizePropertyIT.java | 0 .../flow/uitest/ui/DnDAttachDetachIT.java | 0 .../java/com/vaadin/flow/uitest/ui/DnDIT.java | 0 .../flow/uitest/ui/DomEventFilterIT.java | 0 .../flow/uitest/ui/DomListenerOnAttachIT.java | 0 .../ui/DynamicallyRegisteredRouteIT.java | 0 .../flow/uitest/ui/ElementInitOrderIT.java | 0 .../flow/uitest/ui/ElementInnerHtmlIT.java | 0 .../flow/uitest/ui/ElementRemoveItselfIT.java | 0 .../vaadin/flow/uitest/ui/ElementStyleIT.java | 0 .../com/vaadin/flow/uitest/ui/EnabledIT.java | 0 .../flow/uitest/ui/ErrorHandlingIT.java | 0 .../vaadin/flow/uitest/ui/ErrorPageIT.java | 0 .../flow/uitest/ui/EventListenersIT.java | 0 .../uitest/ui/ExceptionDuringMapSyncIT.java | 0 .../flow/uitest/ui/ExecJavaScriptIT.java | 0 .../uitest/ui/ExtendedClientDetailsIT.java | 0 .../vaadin/flow/uitest/ui/ForwardToIT.java | 0 .../vaadin/flow/uitest/ui/FragmentLinkIT.java | 0 .../uitest/ui/HasUrlParameterErrorIT.java | 0 .../com/vaadin/flow/uitest/ui/HistoryIT.java | 0 .../vaadin/flow/uitest/ui/ImageClickIT.java | 0 .../flow/uitest/ui/InMemoryChildrenIT.java | 0 .../flow/uitest/ui/InternalErrorIT.java | 0 .../uitest/ui/JavaScriptReturnValueIT.java | 0 .../vaadin/flow/uitest/ui/JsApiGetByIdIT.java | 0 .../flow/uitest/ui/KeyboardEventIT.java | 0 .../flow/uitest/ui/LoadingIndicatorIT.java | 0 .../ui/LongPollingMultipleThreadsIT.java | 0 .../flow/uitest/ui/LongPollingPushIT.java | 0 .../flow/uitest/ui/NavigationTriggerIT.java | 0 .../com/vaadin/flow/uitest/ui/PageIT.java | 0 .../flow/uitest/ui/PopStateHandlerIT.java | 0 .../flow/uitest/ui/PostponeProceedIT.java | 0 .../flow/uitest/ui/PreserveOnRefreshIT.java | 0 .../uitest/ui/PushLongPollingUpdateDivIT.java | 0 .../vaadin/flow/uitest/ui/PushSettingsIT.java | 0 .../flow/uitest/ui/PushWSUpdateDivIT.java | 0 .../uitest/ui/RequestParametersHistoryIT.java | 0 .../flow/uitest/ui/RequestParametersIT.java | 0 .../com/vaadin/flow/uitest/ui/RerouteIT.java | 0 .../flow/uitest/ui/ResynchronizationIT.java | 0 .../flow/uitest/ui/ReturnChannelIT.java | 0 .../uitest/ui/RouteNotFoundDevModeIT.java | 0 .../flow/uitest/ui/RouteNotFoundIT.java | 0 .../uitest/ui/RouteNotFoundProdModeIT.java | 0 .../com/vaadin/flow/uitest/ui/RouterIT.java | 0 .../vaadin/flow/uitest/ui/RouterLinkIT.java | 0 .../flow/uitest/ui/RouterParallelIT.java | 0 .../uitest/ui/RouterSessionExpirationIT.java | 0 .../vaadin/flow/uitest/ui/ScriptInjectIT.java | 0 .../vaadin/flow/uitest/ui/SerializeUIIT.java | 0 .../uitest/ui/ServiceInitListenersIT.java | 0 .../flow/uitest/ui/SessionCloseLogoutIT.java | 0 .../uitest/ui/SetParameterForwardToIT.java | 0 .../vaadin/flow/uitest/ui/ShadowRootIT.java | 0 .../vaadin/flow/uitest/ui/ShortcutsIT.java | 0 .../vaadin/flow/uitest/ui/StaticHtmlIT.java | 0 .../flow/uitest/ui/StreamResourceIT.java | 0 .../uitest/ui/SynchronizedPropertyIT.java | 0 .../flow/uitest/ui/TimingInfoReportedIT.java | 0 .../vaadin/flow/uitest/ui/UIElementIT.java | 0 .../flow/uitest/ui/ValueChangeModeIT.java | 0 .../vaadin/flow/uitest/ui/ViewTitleIT.java | 0 .../vaadin/flow/uitest/ui/VisibilityIT.java | 0 .../flow/uitest/ui/WaitForVaadinIT.java | 0 .../flow/uitest/ui/WebComponentsIT.java | 0 .../AbstractFrontendInlineIT.java | 0 .../DependenciesLoadingAnnotationsIT.java | 0 .../DependenciesLoadingPageApiIT.java | 0 .../ui/dependencies/DynamicDependencyIT.java | 0 .../ui/dependencies/ExternalJavaScriptIT.java | 0 .../ui/routing/InfiniteRerouteLoopIT.java | 0 .../ui/routing/PushRouteNotFoundIT.java | 0 .../uitest/ui/scroll/AbstractScrollIT.java | 0 .../uitest/ui/scroll/MultipleAnchorsIT.java | 0 .../uitest/ui/scroll/PushStateScrollIT.java | 0 .../flow/uitest/ui/scroll/ScrollIT.java | 0 .../ui/scroll/ServerRequestScrollIT.java | 0 .../ui/template/AfterServerChangesIT.java | 0 .../AttachExistingDomElementByIdIT.java | 0 .../uitest/ui/template/BasicTypeInListIT.java | 0 .../uitest/ui/template/BeanInListingIT.java | 0 .../ChangeInjectedComponentTextIT.java | 0 .../flow/uitest/ui/template/ChildOrderIT.java | 0 .../ui/template/ClearNodeChildrenIT.java | 0 .../uitest/ui/template/ConvertToBeanIT.java | 0 .../flow/uitest/ui/template/DomRepeatIT.java | 0 .../flow/uitest/ui/template/EmptyListsIT.java | 0 .../uitest/ui/template/EventHandlerIT.java | 0 .../ExceptionsDuringPropertyUpdatesIT.java | 0 .../uitest/ui/template/HiddenTemplateIT.java | 0 .../uitest/ui/template/InjectScriptTagIT.java | 0 .../InjectedElementInsideMixinBehaviorIT.java | 0 .../ui/template/InjectsJsTemplateIT.java | 0 .../InvisibleDefaultPropertyValueIT.java | 0 .../uitest/ui/template/JsGrandParentIT.java | 0 .../MutationSeveralSyncedPropsIT.java | 0 .../ui/template/OneWayPolymerBindingIT.java | 0 .../PolymerDefaultPropertyValueIT.java | 0 .../ui/template/PolymerModelPropertiesIT.java | 0 .../ui/template/PolymerPropertiesIT.java | 0 .../PolymerPropertyChangeEventIT.java | 0 .../PolymerPropertyMutationInObserverIT.java | 0 ...PropertiesUpdatedBeforeChangeEventsIT.java | 0 .../RestoreViewWithAttachedByIdIT.java | 0 .../ui/template/SubPropertyModelIT.java | 0 .../TemplateHasInjectedSubTemplateIT.java | 0 .../ui/template/TemplateInTemplateIT.java | 0 .../template/TemplateInTemplateWithIdIT.java | 0 .../template/TemplateMappingDetectorIT.java | 0 .../ui/template/TemplateScalabilityIT.java | 0 .../TemplateWithConnectedCallbacksIT.java | 0 .../ui/template/TemplatesVisibilityIT.java | 0 .../ui/template/TwoWayPolymerBindingIT.java | 0 .../template/UpdatableModelPropertiesIT.java | 0 .../uitest/ui/template/UpgradeElementIT.java | 0 .../ui/template/collections/ClearListIT.java | 0 .../template/collections/ListBindingIT.java | 0 .../collections/ListInsideListBindingIT.java | 0 .../ui/template/collections/ModelListIT.java | 0 .../collections/ToggleNullListIT.java | 0 .../collections/TwoWayListBindingIT.java | 0 .../ui/template/imports/LazyWidgetIT.java | 0 .../uitest/ui/webcomponent/PaperInputIT.java | 0 .../uitest/ui/webcomponent/PaperSliderIT.java | 0 .../test-scalability/.gitignore | 0 .../test-scalability/frontend/index.html | 23 + .../test-scalability/pom.xml | 2 +- .../vaadin/test/scalability/HelloWorldUI.java | 0 .../src/test/conf/vertx-vaadin-test.conf | 0 .../bodies/HelloWorld_0001_request.json | 0 .../test/resources/bodies/clickButton.json | 0 .../src/test/resources/logback-test.xml | 0 .../flow/test/scalability/HelloWorld.scala | 0 .../flow/test/scalability/WarmupFlow.scala | 0 1073 files changed, 14976 insertions(+), 12660 deletions(-) rename .circleci/{config.yml => config.yml.old} (100%) create mode 100644 .github/workflows/deploy-snapshots.yml create mode 100644 .github/workflows/validation.yml delete mode 100644 .travis.yml delete mode 100755 tools/build_v8_widgetsets.sh rename {vertx-vaadin-flow-parent/vaadin-flow-sockjs => vaadin-flow-sockjs}/pom.xml (99%) rename {vertx-vaadin-flow-parent/vaadin-flow-sockjs => vaadin-flow-sockjs}/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/client/SockJSPushConnection.java (100%) rename {vertx-vaadin-flow-parent/vaadin-flow-sockjs => vaadin-flow-sockjs}/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/PushException.java (100%) rename {vertx-vaadin-flow-parent/vaadin-flow-sockjs => vaadin-flow-sockjs}/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/PushSocket.java (100%) rename {vertx-vaadin-flow-parent/vaadin-flow-sockjs => vaadin-flow-sockjs}/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/SockJSPushConnection.java (100%) rename {vertx-vaadin-flow-parent/vaadin-flow-sockjs => vaadin-flow-sockjs}/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/SockJSPushConnectionFactory.java (100%) rename {vertx-vaadin-flow-parent/vaadin-flow-sockjs => vaadin-flow-sockjs}/src/main/resources/META-INF/resources/VAADIN/static/push/vaadinPushSockJS.js (100%) rename {vertx-vaadin-flow-parent/vaadin-flow-sockjs => vaadin-flow-sockjs}/src/main/resources/META-INF/services/com.vaadin.flow.server.communication.PushConnectionFactory (100%) rename {vertx-vaadin-flow-parent/vaadin-flow-sockjs => vaadin-flow-sockjs}/src/main/resources/com/github/mcollovati/vertx/vaadin/sockjs/SockjsClientEngine.gwt.xml (100%) rename {vertx-vaadin-flow-parent/vaadin-flow-sockjs => vaadin-flow-sockjs}/src/main/resources/com/github/mcollovati/vertx/vaadin/sockjs/SockjsClientEngineXSI.gwt.xml (100%) delete mode 100644 vertx-vaadin-8-parent/pom.xml delete mode 100644 vertx-vaadin-8-parent/vaadin8-sockjs/README.md delete mode 100644 vertx-vaadin-8-parent/vaadin8-sockjs/pom.xml delete mode 100644 vertx-vaadin-8-parent/vaadin8-sockjs/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/client/SockJSPushConnection.java delete mode 100644 vertx-vaadin-8-parent/vaadin8-sockjs/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/PushException.java delete mode 100644 vertx-vaadin-8-parent/vaadin8-sockjs/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/PushSocket.java delete mode 100644 vertx-vaadin-8-parent/vaadin8-sockjs/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/SockJSPushConnection.java delete mode 100644 vertx-vaadin-8-parent/vaadin8-sockjs/src/main/resources/VAADIN/vaadinPushSockJS.debug.js delete mode 100644 vertx-vaadin-8-parent/vaadin8-sockjs/src/main/resources/com/github/mcollovati/vertx/vaadin/sockjs/VaadinSockjsWidgetset.gwt.xml delete mode 100644 vertx-vaadin-8-parent/vertx-vaadin8/README.md delete mode 100644 vertx-vaadin-8-parent/vertx-vaadin8/pom.xml delete mode 100644 vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/Sync.java delete mode 100644 vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/vaadin/CookieUtils.java delete mode 100644 vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/vaadin/UIProxy.java delete mode 100644 vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/vaadin/VaadinVerticle.java delete mode 100644 vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/vaadin/VaadinVerticleConfiguration.java delete mode 100644 vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/vaadin/VertxBootstrapHandler.java delete mode 100644 vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadin.java delete mode 100644 vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinRequest.java delete mode 100644 vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinResponse.java delete mode 100644 vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinService.java delete mode 100644 vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/vaadin/VertxWrappedSession.java delete mode 100644 vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/SockJSPushHandler.java delete mode 100644 vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/web/sstore/ExtendedLocalSessionStoreImpl.java delete mode 100644 vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/web/sstore/NearCacheSessionStoreImpl.java delete mode 100644 vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/vaadin/server/ExposeVaadinServerPkg.java delete mode 100644 vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/vaadin/server/communication/ExposeVaadinCommunicationPkg.java delete mode 100644 vertx-vaadin-8-parent/vertx-vaadin8/src/test/java/com/github/mcollovati/vertx/vaadin/SessionStoreAdapterIT.java delete mode 100644 vertx-vaadin-8-parent/vertx-vaadin8/src/test/java/com/github/mcollovati/vertx/vaadin/VaadinVerticleWidgetsetUT.java delete mode 100644 vertx-vaadin-8-parent/vertx-vaadin8/src/test/java/com/github/mcollovati/vertx/vaadin/VertxVaadinRequestUT.java delete mode 100644 vertx-vaadin-8-parent/vertx-vaadin8/src/test/java/com/github/mcollovati/vertx/vaadin/VertxVaadinResponseUT.java delete mode 100644 vertx-vaadin-8-parent/vertx-vaadin8/src/test/java/com/github/mcollovati/vertx/vaadin/VertxVaadinServiceUT.java delete mode 100644 vertx-vaadin-8-parent/vertx-vaadin8/src/test/java/com/github/mcollovati/vertx/vaadin/VertxWrappedSessionUT.java delete mode 100644 vertx-vaadin-8-parent/vertx-vaadin8/src/test/resources/logback-test.xml delete mode 100644 vertx-vaadin-8-parent/vertx-vaadin8/src/widgetset/resources/com/github/mcollovati/vertx/vaadin/VaadinVertxWidgetset.gwt.xml rename {vertx-vaadin-flow-parent/vertx-vaadin-flow-jandex => vertx-vaadin-flow-jandex}/pom.xml (97%) delete mode 100644 vertx-vaadin-flow-parent/pom.xml delete mode 100644 vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/http/HttpServerResponseWrapper.java delete mode 100644 vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/ExtendedSession.java delete mode 100644 vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/ExtendedSessionImpl.java delete mode 100644 vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/serialization/SerializableHolder.java delete mode 100644 vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/serialization/SerializationSupport.java delete mode 100644 vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/sstore/ExtendedLocalSessionStore.java delete mode 100644 vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/sstore/ExtendedSessionStore.java delete mode 100644 vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/sstore/NearCacheSessionStore.java delete mode 100644 vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/resources/com/github/mcollovati/vertx/vaadin/version.properties delete mode 100644 vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/utils/RandomStringGenerator.java delete mode 100644 vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/VertxWrappedSessionWithClusteredSessionStoreUT.java delete mode 100644 vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/VertxWrappedSessionWithLocalSessionStoreUT.java delete mode 100644 vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/web/sstore/ExtendedSessionUT.java delete mode 100644 vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/web/sstore/NearCacheSessionStoreIT.java delete mode 100644 vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/vite.generated.ts delete mode 100644 vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-context-path/vite.generated.ts delete mode 100644 vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-embedded/vite.generated.ts delete mode 100644 vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production/vite.config.ts delete mode 100644 vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production/vite.generated.ts delete mode 100644 vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/vite.config.ts delete mode 100644 vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/vite.generated.ts delete mode 100644 vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/vite.config.ts delete mode 100644 vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/vite.generated.ts delete mode 100644 vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-production/vite.config.ts delete mode 100644 vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-production/vite.generated.ts delete mode 100644 vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa/.pnpmfile.cjs delete mode 100644 vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa/tsconfig.json delete mode 100644 vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa/types.d.ts delete mode 100644 vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa/vite.config.ts delete mode 100644 vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa/vite.generated.ts delete mode 100644 vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/tsconfig.json delete mode 100644 vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/types.d.ts delete mode 100644 vertx-vaadin-flow-parent/vertx-vaadin-tests/test-scalability/frontend/generated/vaadin.ts delete mode 100644 vertx-vaadin-flow-parent/vertx-vaadin-tests/test-scalability/tsconfig.json delete mode 100644 vertx-vaadin-flow-parent/vertx-vaadin-tests/test-scalability/types.d.ts delete mode 100644 vertx-vaadin-flow-parent/vertx-vaadin-tests/tsconfig.json delete mode 100644 vertx-vaadin-flow-parent/vertx-vaadin-tests/types.d.ts rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/README.md (100%) create mode 100644 vertx-vaadin-flow/frontend/generated/index.ts create mode 100644 vertx-vaadin-flow/frontend/generated/vaadin-featureflags.ts create mode 100644 vertx-vaadin-flow/frontend/generated/vaadin.ts create mode 100644 vertx-vaadin-flow/frontend/generated/vite-devmode.ts rename {vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend => vertx-vaadin-flow}/frontend/index.html (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/pom.xml (99%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/Sync.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/http/HttpReverseProxy.java (100%) rename {vertx-vaadin-8-parent/vertx-vaadin8 => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/http/HttpServerResponseWrapper.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/support/BufferInputStreamAdapter.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/support/HillaWorkAround.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/support/StartupContext.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/support/VaadinPatches.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/CookieUtils.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/DeploymentConfigurationFactory.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/HttpUtils.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/UIProxy.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/VaadinOptions.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/VaadinVerticle.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/VaadinVerticleConfiguration.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/VertxBootstrapHandler.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/VertxLookupInitializer.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/VertxStaticFileServer.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/VertxUI.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadin.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinBrowserLiveReload.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinConfig.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinContext.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinInstantiator.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinRequest.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinResponse.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinService.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinSession.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/VertxWrappedSession.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/communication/RequestHandlerReplacements.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/communication/StreamReceiverHandler.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/communication/StreamResourceHandler.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/communication/VertxDebugWindowConnection.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/communication/VertxIndexHtmlRequestHandler.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/communication/VertxJavaScriptBootstrapHandler.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/communication/VertxStreamRequestHandler.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/communication/VertxUidlRequestHandler.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/communication/VertxWebComponentBootstrapHandler.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/connect/BaseVaadinConnectEndpointService.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/connect/DefaultVaadinConnectResponse.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/connect/EndpointServiceContext.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/connect/EndpointServiceContextSupport.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/connect/VaadinConnectEndpointService.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/connect/VaadinConnectHandler.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/connect/VaadinConnectResponse.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/connect/VaadinEndpointRegistry.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/connect/VertxConnectRequestContext.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/connect/VertxEndpointRegistry.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/connect/VertxEndpointRegistryInitializer.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/connect/VertxVaadinConnectEndpointService.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/connect/auth/AccessAnnotationChecker.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/connect/auth/CsrfChecker.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/connect/auth/UserAwareRequest.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/connect/auth/VaadinConnectAccessChecker.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/connect/auth/VaadinConnectAccessCheckerSupport.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/connect/auth/VertxAccessAnnotationChecker.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/connect/auth/VertxCsrfChecker.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/connect/auth/VertxVaadinConnectAccessChecker.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/devserver/VertxDevModeHandlerManager.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/ShareableSockJsSocket.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/SockJSPushHandler.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/VertxVaadinLiveReload.java (100%) rename {vertx-vaadin-8-parent/vertx-vaadin8 => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/web/ExtendedSession.java (100%) rename {vertx-vaadin-8-parent/vertx-vaadin8 => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/web/ExtendedSessionImpl.java (100%) rename {vertx-vaadin-8-parent/vertx-vaadin8 => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/web/serialization/SerializableHolder.java (100%) rename {vertx-vaadin-8-parent/vertx-vaadin8 => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/web/serialization/SerializationSupport.java (100%) rename {vertx-vaadin-8-parent/vertx-vaadin8 => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/web/sstore/ExtendedLocalSessionStore.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/web/sstore/ExtendedLocalSessionStoreImpl.java (100%) rename {vertx-vaadin-8-parent/vertx-vaadin8 => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/web/sstore/ExtendedSessionStore.java (100%) rename {vertx-vaadin-8-parent/vertx-vaadin8 => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/web/sstore/NearCacheSessionStore.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/main/java/com/github/mcollovati/vertx/web/sstore/NearCacheSessionStoreImpl.java (100%) rename {vertx-vaadin-8-parent/vertx-vaadin8 => vertx-vaadin-flow}/src/main/resources/com/github/mcollovati/vertx/vaadin/version.properties (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/test/java/com/github/mcollovati/failures/lookup/FakeLookupInitializer.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/test/java/com/github/mcollovati/failures/lookup/FakeLookupInitializer2.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/test/java/com/github/mcollovati/vertx/support/HillaWorkAroundUT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/test/java/com/github/mcollovati/vertx/support/VaadinPatchesTest.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/test/java/com/github/mcollovati/vertx/utils/ClassGraphTest.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/test/java/com/github/mcollovati/vertx/utils/MockDeploymentConfiguration.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/test/java/com/github/mcollovati/vertx/utils/MockServiceSessionSetup.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/test/java/com/github/mcollovati/vertx/utils/MockVaadinContext.java (100%) rename {vertx-vaadin-8-parent/vertx-vaadin8 => vertx-vaadin-flow}/src/test/java/com/github/mcollovati/vertx/utils/RandomStringGenerator.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/test/java/com/github/mcollovati/vertx/vaadin/SessionStoreAdapterIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/test/java/com/github/mcollovati/vertx/vaadin/StartupContextTest.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/test/java/com/github/mcollovati/vertx/vaadin/VaadinVerticleUT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/test/java/com/github/mcollovati/vertx/vaadin/VertxStaticFileServerTest.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/test/java/com/github/mcollovati/vertx/vaadin/VertxVaadinContextTest.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/test/java/com/github/mcollovati/vertx/vaadin/VertxVaadinRequestUT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/test/java/com/github/mcollovati/vertx/vaadin/VertxVaadinResponseUT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/test/java/com/github/mcollovati/vertx/vaadin/VertxVaadinServiceUT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/test/java/com/github/mcollovati/vertx/vaadin/VertxWrappedSessionUT.java (99%) rename {vertx-vaadin-8-parent/vertx-vaadin8 => vertx-vaadin-flow}/src/test/java/com/github/mcollovati/vertx/vaadin/VertxWrappedSessionWithClusteredSessionStoreUT.java (100%) rename {vertx-vaadin-8-parent/vertx-vaadin8 => vertx-vaadin-flow}/src/test/java/com/github/mcollovati/vertx/vaadin/VertxWrappedSessionWithLocalSessionStoreUT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/test/java/com/github/mcollovati/vertx/vaadin/connect/VertxVaadinConnectEndpointServiceTest.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/test/java/com/github/mcollovati/vertx/vaadin/connect/auth/VertxAccessAnnotationCheckerTest.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/test/java/com/github/mcollovati/vertx/vaadin/connect/auth/VertxConnectAccessCheckerTest.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/test/java/com/github/mcollovati/vertx/vaadin/connect/generator/endpoints/superclassmethods/CrudEndpoint.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/test/java/com/github/mcollovati/vertx/vaadin/connect/generator/endpoints/superclassmethods/NonEndpoint.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/test/java/com/github/mcollovati/vertx/vaadin/connect/generator/endpoints/superclassmethods/NonEndpointImpl.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/test/java/com/github/mcollovati/vertx/vaadin/connect/generator/endpoints/superclassmethods/PagedData.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/test/java/com/github/mcollovati/vertx/vaadin/connect/generator/endpoints/superclassmethods/PersonEndpoint.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/test/java/com/github/mcollovati/vertx/vaadin/connect/generator/endpoints/superclassmethods/ReadOnlyEndpoint.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/test/java/com/github/mcollovati/vertx/vaadin/connect/rest/BeanWithJacksonAnnotation.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/test/java/com/github/mcollovati/vertx/vaadin/connect/rest/BeanWithPrivateFields.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/test/java/com/github/mcollovati/vertx/vaadin/connect/rest/EndpointWithVertxHandlerTest.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/test/java/com/github/mcollovati/vertx/vaadin/connect/rest/VaadinConnectEndpoints.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/test/java/com/github/mcollovati/vertx/vaadin/connect/testendpoint/BridgeMethodTestEndpoint.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/test/java/com/github/mcollovati/vertx/vaadin/startup/testdata/AnotherTestInstantiatorFactory.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/test/java/com/github/mcollovati/vertx/vaadin/startup/testdata/OneMoreTestInstantiatorFactory.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/test/java/com/github/mcollovati/vertx/vaadin/startup/testdata/TestInstantiatorFactory.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/test/java/com/github/mcollovati/vertx/vaadin/startup/testdata/TestResourceProvider.java (100%) rename {vertx-vaadin-8-parent/vertx-vaadin8 => vertx-vaadin-flow}/src/test/java/com/github/mcollovati/vertx/web/sstore/ExtendedSessionUT.java (100%) rename {vertx-vaadin-8-parent/vertx-vaadin8 => vertx-vaadin-flow}/src/test/java/com/github/mcollovati/vertx/web/sstore/NearCacheSessionStoreIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/test/resources/META-INF/VAADIN/config/flow-build-info.json (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/test/resources/META-INF/VAADIN/config/stats.json (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/test/resources/META-INF/VAADIN/config/stats_no_export.json (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/test/resources/META-INF/VAADIN/webapp/index.html (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/test/resources/META-INF/VAADIN/webapp/manifest.json (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/test/resources/META-INF/VAADIN/webapp/sw.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/test/resources/META-INF/resources/VAADIN/static/client/compile.properties (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/test/resources/META-INF/resources/icons/icon.png (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/test/resources/META-INF/services/com.vaadin.flow.di.InstantiatorFactory (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-flow => vertx-vaadin-flow}/src/test/resources/logback-test.xml (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/deployment/pom.xml (98%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/deployment/src/main/java/com/github/mcollovati/vertx/vaadin/extension/deployment/VertxVaadinExtensionProcessor.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/pom.xml (98%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/AppShellConfig.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/Counter.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/HelloProvider.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/SmokeTestView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/TestVerticle.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/TestVerticleDeployer.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/addons/AddonsView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/push/PushUpdateDivView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/regression/RemoveOldContentView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/AbstractCountedBean.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/AbstractCountedView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/ApartBean.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/AssignedBean.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/BeanNoOwner.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/ChildNoOwnerView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/CountedPerUI.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/CustomException.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/DetailApartView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/DetailAssignedView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/ErrorHandlerView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/ErrorParentView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/ErrorView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/EventView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/InvalidView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/MainLayout.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/MasterView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/ParentNoOwnerView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/PostponeView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/PreserveOnRefreshBean.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/PreserveOnRefreshView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/RerouteView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/RootView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/service/BootstrapCustomizeView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/service/BootstrapCustomizer.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/service/EventObserver.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/service/ServiceBean.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/service/ServiceView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/service/TestErrorHandler.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/service/TestSystemMessagesProvider.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/sessioncontext/SessionContextView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/uicontext/UIContextRootView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/uicontext/UINormalScopedBeanView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/uicontext/UIScopeInjecterView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/uicontext/UIScopedBean.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/uicontext/UIScopedLabel.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/uicontext/UIScopedView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/uievents/NavigationObserver.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/uievents/UIEventsView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/main/resources/application.properties (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/AbstractCdiIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/AbstractChromeIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/AddonsIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/PushSmokeIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/RemoveOldContentIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/RouteContextIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/ScreenshotsOnFailureExtension.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/ServiceIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/SessionContextCloseIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/SessionContextIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/SmokeTestIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/UIContextIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/UIEventsIT.java (100%) create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/index.ts create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/Flow.d.ts create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/Flow.js create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/Flow.js.map create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/FlowBootstrap.d.ts create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/FlowBootstrap.js create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/FlowClient.d.ts create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/FlowClient.js create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/License.d.ts create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/License.js create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/License.js.map create mode 100755 vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/copy-to-clipboard.js create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/dndConnector-es6.js create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/dndConnector.js create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/index.d.ts create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/index.js create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/index.js.map create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/lumo-includes.ts rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/test-addons/addon-with-jandex/src/main/resources/META-INF/frontend => vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources}/src/hello-world-jandex.ts (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/test-addons/addon-without-jandex/src/main/resources/META-INF/frontend => vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources}/src/hello-world.ts (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/reusable-theme/src/main/resources/META-INF/resources => vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources}/themes/reusable-theme/styles.css (100%) create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/tooltip.ts create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/vaadin-dev-tools.d.ts create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/vaadin-dev-tools.js create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/vaadin-dev-tools.js.map create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/theme-reusable-theme.generated.js create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/theme.d.ts create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/theme.js create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/vaadin-featureflags.ts create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/vaadin.ts create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/vite-devmode.ts rename {vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/test-npm => vertx-vaadin-quarkus-extension/integration-tests/development}/frontend/index.html (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/development/pom.xml (99%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/pom.xml (98%) create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/index.ts create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/Flow.d.ts create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/Flow.js create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/Flow.js.map create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/FlowBootstrap.d.ts create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/FlowBootstrap.js create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/FlowClient.d.ts create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/FlowClient.js create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/License.d.ts create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/License.js create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/License.js.map create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/copy-to-clipboard.js create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/dndConnector-es6.js create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/dndConnector.js create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/index.d.ts create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/index.js create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/index.js.map create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/lumo-includes.ts create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/src/hello-world-jandex.ts create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/src/hello-world.ts create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/themes/reusable-theme/styles.css create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/tooltip.ts create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/vaadin-dev-tools.d.ts create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/vaadin-dev-tools.js create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/vaadin-dev-tools.js.map create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/theme-reusable-theme.generated.js create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/theme.d.ts create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/theme.js create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/vaadin-featureflags.ts create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/vaadin.ts rename {vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/test-pnpm => vertx-vaadin-quarkus-extension/integration-tests/production}/frontend/index.html (100%) create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/production/frontend/my.css rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/production/pom.xml (99%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/reusable-theme/pom.xml (95%) create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/reusable-theme/src/main/resources/META-INF/resources/themes/reusable-theme/styles.css rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/test-addons/addon-with-jandex/pom.xml (98%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/test-addons/addon-with-jandex/src/main/java/org/vaadin/jandex/HelloWorldJandex.java (100%) create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/test-addons/addon-with-jandex/src/main/resources/META-INF/frontend/src/hello-world-jandex.ts rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/test-addons/addon-without-jandex/pom.xml (98%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/integration-tests/test-addons/addon-without-jandex/src/main/java/org/vaadin/nojandex/HelloWorld.java (100%) create mode 100644 vertx-vaadin-quarkus-extension/integration-tests/test-addons/addon-without-jandex/src/main/resources/META-INF/frontend/src/hello-world.ts rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/pom.xml (97%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/pom.xml (98%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/AnyLiteral.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/BeanLookup.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/QuarkusInstantiator.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/QuarkusResourceProvider.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/QuarkusVaadinVerticle.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/QuarkusVertxVaadin.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/QuarkusVertxVaadinService.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/VaadinVerticleConfigurer.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/VaadinVerticleDeployer.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/annotation/NormalRouteScoped.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/annotation/NormalUIScoped.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/annotation/RouteScopeOwner.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/annotation/RouteScoped.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/annotation/UIScoped.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/annotation/VaadinServiceEnabled.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/annotation/VaadinServiceScoped.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/annotation/VaadinSessionScoped.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/AbstractContext.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/AbstractContextualStorageManager.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/BeanProvider.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/ContextUtils.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/ContextualInstanceInfo.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/ContextualStorage.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/RouteContextWrapper.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/RouteScopedContext.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/UIContextWrapper.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/UIScopedContext.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/VaadinServiceScopedContext.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/VaadinSessionScopedContext.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/main/resources/META-INF/beans.xml (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/main/resources/META-INF/quarkus-extension.yaml (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/main/resources/application.properties (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/NoOpVaadinVerticle.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/ResourceProviderTest.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/TestQuarkusVertxVaadinServletService.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/AbstractContextTest.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/BeanManagerProxy.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/InjectableContextTest.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/RouteContextTest.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/RouteContextWithinDifferentUITest.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/RouteContextWrapperTest.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/RouteContextWrapperWithinDifferentUITest.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/RouteContextualStorageManagerTest.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/RouteUnderTestContext.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/ServiceContextTest.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/ServiceUnderTestContext.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/SessionContextTest.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/SessionUnderTestContext.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/TestBean.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/TestContextualStorageManager.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/TestHasElement.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/TestNavigationTarget.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/TestRouteScopedContext.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/UIUnderTestContext.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/UiContextTest.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/UiPseudoScopeContextTest.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/UnderTestContext.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension => vertx-vaadin-quarkus-extension}/runtime/src/test/resources/resource-provider/some-resource.json (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/.gitignore (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/drivers.xml (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/pom.xml (84%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-common/pom.xml (96%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-common/src/main/java/com/vaadin/flow/uitest/ui/AbstractDivView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-common/src/main/java/com/vaadin/flow/uitest/ui/dependencies/DependenciesLoadingBaseView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-common/src/main/java/com/vaadin/flow/uitest/vertx/ProductionModeTimingDataViewTestServlet.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-common/src/main/java/com/vaadin/flow/uitest/vertx/ProductionModeViewTestServlet.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-common/src/main/java/com/vaadin/flow/uitest/vertx/RouterTestServlet.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-common/src/main/java/com/vaadin/flow/uitest/vertx/TestBootVerticle.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-common/src/main/java/com/vaadin/flow/uitest/vertx/ViewClassLocator.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-common/src/main/java/com/vaadin/flow/uitest/vertx/ViewTestLayout.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-common/src/main/java/com/vaadin/flow/uitest/vertx/ViewTestServlet.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-common/src/main/java/com/vaadin/flow/uitest/vertx/WebJarsServlet.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-common/src/main/resources/simplelogger.properties (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/addon-with-templates/pom.xml (95%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/addon-with-templates/src/main/java/org/vaadin/example/addon/AddonLitComponent.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/addon-with-templates/src/main/resources/META-INF/frontend/AddonLitComponent.ts (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-context-path => vertx-vaadin-tests/test-frontend}/frontend/index.html (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/pom.xml (87%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/test-npm/README.md (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-embedded => vertx-vaadin-tests/test-frontend/test-npm}/frontend/index.html (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/test-npm/frontend/my-component.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/test-npm/pom-production.xml (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/test-npm/pom.xml (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/test-npm/src/main/java/com/vaadin/flow/mixedtest/ui/IdTestView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/test-npm/src/main/java/com/vaadin/flow/mixedtest/ui/MissingDependenciesView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/test-npm/src/main/resources/vaadin-featureflags.properties (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/test-npm/src/test/java/com/vaadin/flow/mixedtest/ui/IdTestIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/test-npm/src/test/java/com/vaadin/flow/mixedtest/ui/NpmUsedIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/test-pnpm/.npmrc (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/test-pnpm/.pnpmfile.cjs (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/test-pnpm/README.md (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path => vertx-vaadin-tests/test-frontend/test-pnpm}/frontend/index.html (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/test-pnpm/frontend/my-component.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/test-pnpm/pom-production.xml (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/test-pnpm/pom.xml (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/test-pnpm/src/main/java/com/vaadin/flow/mixedtest/ui/IdTestView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/test-pnpm/src/main/java/com/vaadin/flow/mixedtest/ui/MissingDependenciesView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/test-pnpm/src/main/resources/vaadin-featureflags.properties (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/test-pnpm/src/test/java/com/vaadin/flow/mixedtest/ui/IdTestIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/test-pnpm/src/test/java/com/vaadin/flow/mixedtest/ui/PnpmUsedIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-basics/.npmrc (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-basics/frontend/a-directory/index.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-basics/frontend/cssimport-textfield.css (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-basics/frontend/cssimport.css (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-basics/frontend/importdir.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-basics/frontend/index.html (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-basics/frontend/jsonloader.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-basics/frontend/my.json (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-basics/frontend/testscopebuttonloader.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-basics/frontend/testscopemaploader.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-basics/frontend/themes/vite-basics/images/plant.png (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-basics/frontend/themes/vite-basics/styles.css (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-basics/frontend/themes/vite-basics/theme.json (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-basics/package-outside-npm/index.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-basics/package-outside-npm/package.json (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-basics/package.json (84%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-basics/package2-outside-npm/index.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-basics/package2-outside-npm/package.json (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-basics/pom.xml (98%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-basics/src/main/java/com/vaadin/viteapp/AppShell.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-basics/src/main/java/com/vaadin/viteapp/views/empty/MainView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-basics/src/test/conf/vertx-vaadin-test.conf (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-basics/src/test/java/com/vaadin/viteapp/BasicsIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-basics/src/test/java/com/vaadin/viteapp/BundlesIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-basics/src/test/java/com/vaadin/viteapp/ExternalPackageIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-basics/src/test/java/com/vaadin/viteapp/FileAccessIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-basics/src/test/java/com/vaadin/viteapp/PostinstallIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-basics/src/test/java/com/vaadin/viteapp/ThemeIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-basics/src/test/java/com/vaadin/viteapp/ThemeReloadIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-basics/src/test/java/com/vaadin/viteapp/ViteDevModeIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-basics/tsconfig.json (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend => vertx-vaadin-tests/test-frontend/vite-basics}/types.d.ts (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-basics/vite.config.ts (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-context-path/.npmrc (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics => vertx-vaadin-tests/test-frontend/vite-context-path}/.pnpmfile.cjs (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline => vertx-vaadin-tests/test-frontend/vite-context-path}/frontend/index.html (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-context-path/frontend/themes/vite-context-path/styles.css (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-context-path/frontend/themes/vite-context-path/theme.json (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-context-path/pom-production.xml (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-context-path/pom.xml (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-context-path/src/main/java/com/vaadin/viteapp/AppShell.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-context-path/src/main/java/com/vaadin/viteapp/views/empty/MainView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-context-path/src/test/java/com/vaadin/viteapp/BundlesIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-context-path/src/test/java/com/vaadin/viteapp/ContextPathIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend => vertx-vaadin-tests/test-frontend/vite-context-path}/tsconfig.json (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics => vertx-vaadin-tests/test-frontend/vite-context-path}/types.d.ts (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-context-path/vite.config.ts (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-embedded/.gitignore (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-embedded/.npmrc (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-context-path => vertx-vaadin-tests/test-frontend/vite-embedded}/.pnpmfile.cjs (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa => vertx-vaadin-tests/test-frontend/vite-embedded}/frontend/index.html (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-embedded/frontend/themes/my-theme/styles.css (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-embedded/frontend/web-component.html (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-embedded/pom-production.xml (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-embedded/pom.xml (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-embedded/src/main/java/com/vaadin/viteapp/BasicComponent.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-embedded/src/main/java/com/vaadin/viteapp/PushComponent.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-embedded/src/main/webapp/basic-component.html (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-embedded/src/main/webapp/push-component.html (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-embedded/src/test/java/com/vaadin/viteapp/BasicComponentIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-embedded/src/test/java/com/vaadin/viteapp/PushComponentIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-context-path => vertx-vaadin-tests/test-frontend/vite-embedded}/tsconfig.json (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-context-path => vertx-vaadin-tests/test-frontend/vite-embedded}/types.d.ts (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-production-custom-frontend/frontend-custom/lit-templates/test-form.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-production-custom-frontend/pom.xml (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-production-custom-frontend/src/main/java/com/vaadin/viteapp/AppShell.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-production-custom-frontend/src/main/java/com/vaadin/viteapp/littemplate/TestForm.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-production-custom-frontend/src/main/java/com/vaadin/viteapp/view/TestView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-production-custom-frontend/src/test/java/com/vaadin/viteapp/ProductionBasicsIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-production/.npmrc (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-embedded => vertx-vaadin-tests/test-frontend/vite-production}/.pnpmfile.cjs (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-production/frontend/image.css (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-production/frontend/index.html (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-production/frontend/lit-invalid-imports.ts (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-production/frontend/themes/vite-production/images/plant.png (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-production/frontend/themes/vite-production/styles.css (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-production/frontend/themes/vite-production/theme.json (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-production/frontend/yes.png (100%) create mode 100644 vertx-vaadin-tests/test-frontend/vite-production/package-lock.json rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-production/package.json (95%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-production/pom.xml (98%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-production/src/main/java/com/vaadin/viteapp/AppShell.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-production/src/main/java/com/vaadin/viteapp/views/empty/MainView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-production/src/test/conf/vertx-vaadin-test.conf (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-production/src/test/java/com/vaadin/viteapp/BundlesIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-production/src/test/java/com/vaadin/viteapp/CompressionIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-production/src/test/java/com/vaadin/viteapp/ProductionBasicsIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-production/tsconfig.json (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-embedded => vertx-vaadin-tests/test-frontend/vite-production}/types.d.ts (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-embedded => vertx-vaadin-tests/test-frontend/vite-production}/vite.config.ts (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-pwa-custom-offline-path/.npmrc (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production => vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path}/.pnpmfile.cjs (100%) create mode 100644 vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/frontend/index.html rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-pwa-custom-offline-path/pom-production.xml (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-pwa-custom-offline-path/pom.xml (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-pwa-custom-offline-path/src/main/java/com/vaadin/viteapp/AppShell.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-pwa-custom-offline-path/src/main/java/com/vaadin/viteapp/MainView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-pwa-custom-offline-path/src/main/webapp/offline.html (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-pwa-custom-offline-path/src/test/java/com/vaadin/viteapp/MainIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-embedded => vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path}/tsconfig.json (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production => vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path}/types.d.ts (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-pwa-disabled-offline/.npmrc (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path => vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline}/.pnpmfile.cjs (100%) create mode 100644 vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/frontend/index.html rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-pwa-disabled-offline/pom-production.xml (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-pwa-disabled-offline/pom.xml (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-pwa-disabled-offline/src/main/java/com/vaadin/viteapp/AppShell.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-pwa-disabled-offline/src/main/java/com/vaadin/viteapp/ApplicationServiceInitListener.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-pwa-disabled-offline/src/main/java/com/vaadin/viteapp/MainView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-pwa-disabled-offline/src/main/resources/META-INF/services/com.vaadin.flow.server.VaadinServiceInitListener (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-pwa-disabled-offline/src/test/java/com/vaadin/viteapp/MainIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path => vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline}/tsconfig.json (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path => vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline}/types.d.ts (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-pwa-production/.gitignore (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-pwa-production/.npmrc (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline => vertx-vaadin-tests/test-frontend/vite-pwa-production}/.pnpmfile.cjs (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-pwa-production/frontend/about-view.ts (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-pwa-production/frontend/home-view.ts (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-pwa-production/frontend/index.html (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-pwa-production/frontend/index.ts (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-pwa-production/frontend/themes/my-theme/fonts/Roboto-Regular.woff (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-pwa-production/frontend/themes/my-theme/images/bg.jpeg (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-pwa-production/frontend/themes/my-theme/styles.css (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-pwa-production/pom.xml (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-pwa-production/src/main/java/com/vaadin/viteapp/AppShell.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-pwa-production/src/main/java/com/vaadin/viteapp/MainView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-pwa-production/src/test/java/com/vaadin/viteapp/MainIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline => vertx-vaadin-tests/test-frontend/vite-pwa-production}/tsconfig.json (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline => vertx-vaadin-tests/test-frontend/vite-pwa-production}/types.d.ts (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-pwa/.gitignore (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-pwa/.npmrc (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-production => vertx-vaadin-tests/test-frontend/vite-pwa}/.pnpmfile.cjs (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-pwa/frontend/about-view.ts (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-pwa/frontend/home-view.css (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-pwa/frontend/home-view.ts (100%) create mode 100644 vertx-vaadin-tests/test-frontend/vite-pwa/frontend/index.html rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-pwa/frontend/index.ts (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-pwa/frontend/themes/my-theme/fonts/Roboto-Regular.woff (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-pwa/frontend/themes/my-theme/images/bg.jpeg (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-pwa/frontend/themes/my-theme/styles.css (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-pwa/pom.xml (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-pwa/src/main/java/com/vaadin/viteapp/AppShell.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-pwa/src/main/java/com/vaadin/viteapp/MainView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-pwa/src/test/java/com/vaadin/viteapp/MainIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-production => vertx-vaadin-tests/test-frontend/vite-pwa}/tsconfig.json (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-production => vertx-vaadin-tests/test-frontend/vite-pwa}/types.d.ts (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-test-assets/.gitignore (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-test-assets/packages/@testscope/all/all.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-test-assets/packages/@testscope/all/package.json (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-test-assets/packages/@testscope/button/package.json (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-test-assets/packages/@testscope/button/src/testscope-button.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-test-assets/packages/@testscope/button/testscope-button.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-test-assets/packages/@testscope/map/package.json (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-test-assets/packages/@testscope/map/src/lib.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-test-assets/packages/@testscope/map/src/testscope-map.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-test-assets/packages/@testscope/map/testscope-map.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-test-assets/packages/@vaadin/bundles-old/package.json (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-test-assets/packages/@vaadin/bundles-old/vaadin-bundle.json (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-test-assets/packages/@vaadin/bundles-old/vaadin.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-test-assets/packages/@vaadin/bundles/package.json (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-test-assets/packages/@vaadin/bundles/vaadin-bundle.json (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-test-assets/packages/@vaadin/bundles/vaadin.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-test-assets/pom.xml (98%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-test-assets/src/main/java/com/vaadin/flow/uitest/vertx/TestBootVerticle.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-test-assets/src/main/java/com/vaadin/viteapp/views/template/LitComponent.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-test-assets/src/main/java/com/vaadin/viteapp/views/template/PolymerComponent.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-test-assets/src/main/java/com/vaadin/viteapp/views/template/ReflectivelyReferencedComponent.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-test-assets/src/main/java/com/vaadin/viteapp/views/template/TemplateView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-test-assets/src/main/resources/META-INF/frontend/bad.ts (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-test-assets/src/main/resources/META-INF/frontend/templates/LitComponent.ts (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-test-assets/src/main/resources/META-INF/frontend/templates/PolymerComponent.ts (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-test-assets/src/main/resources/META-INF/frontend/templates/ReflectivelyReferencedComponent.ts (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-frontend/vite-test-assets/src/test/java/com/vaadin/viteapp/TemplateIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-lumo/pom.xml (95%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-lumo/src/main/java/com/vaadin/flow/theme/lumo/Lumo.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-lumo/src/main/resources/META-INF/resources/frontend/lumo-includes.ts (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-resources/pom.xml (94%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-resources/src/main/java/com/vaadin/flow/uitest/ui/dependencies/TestVersion.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-resources/src/main/java/com/vaadin/flow/uitest/ui/dependencies/ThemableTextField.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-resources/src/main/resources/META-INF/resources/test-files/css/allblueimportant.css (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-resources/src/main/resources/META-INF/resources/test-files/css/allred.css (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-resources/src/main/resources/META-INF/resources/test-files/html/combinedMixed.html (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-resources/src/main/resources/META-INF/resources/test-files/html/htmlimport1.html (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-resources/src/main/resources/META-INF/resources/test-files/html/htmlimport2.html (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-resources/src/main/resources/META-INF/resources/test-files/html/htmlimport4-js.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-resources/src/main/resources/META-INF/resources/test-files/html/htmlimport4.html (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-resources/src/main/resources/META-INF/resources/test-files/html/mixedImport1.html (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-resources/src/main/resources/META-INF/resources/test-files/html/mixedImport2.html (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-resources/src/main/resources/META-INF/resources/test-files/html/orderedHtmlImport.html (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-resources/src/main/resources/META-INF/resources/test-files/js/body-click-listener.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-resources/src/main/resources/META-INF/resources/test-files/js/read-global-var.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-resources/src/main/resources/META-INF/resources/test-files/js/script1.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-resources/src/main/resources/META-INF/resources/test-files/js/script2.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-resources/src/main/resources/META-INF/resources/test-files/js/set-global-var.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-resources/src/main/resources/simplelogger.properties (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/.gitignore (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/AfterServerChanges.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/AttachExistingDomElementById.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/BasicTypeList.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/BeanInListing.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/ChangeInjectedComponentTextView.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/ChildIdTemplate.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/ChildOrderTemplate.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/ChildTemplate.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/ClearList.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/ClearNodeChildren.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/ClientUpdateMode.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/ConvertToBean.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/DomListenerOnAttach.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/DomRepeatPolymerTemplate.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/ElementInitOrder.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/EmptyLists.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/EventHandler.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/ExceptionsDuringPropertyUpdates.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/HiddenTemplate.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/InjectScriptTagTemplate.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/InjectedChild.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/InjectsJsTemplate.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/JsGrandParent.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/JsInjectedElement.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/JsInjectedGrandChild.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/JsSubTemplate.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/ListBinding.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/ListInsideListBinding.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/MixinInjectsElement.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/ModelList.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/MultiplePropsMutation.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/OneWayPolymerBinding.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/ParentIdTemplate.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/ParentTemplate.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/ParentTemplateInjectChild.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/PolymerDefaultPropertyValue.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/PolymerModelProperties.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/PolymerPropertyChange.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/PolymerPropertyMutationInObserver.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/PropertiesUpdatedBeforeChangeEvents.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/ServerModelNullList.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/ServerRequest.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/SubPropertyModel.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/TemplateMappingDetector.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/TemplateMappingDetectorParent.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/TemplateProperties.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/TemplateWithConnectedCallbacks.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/TemplateWithInjectedId.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/TwoWayListBinding.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/TwoWayPolymerBinding.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/UpdatableModelProperties.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/UpgradeElement.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/com/vaadin/flow/uitest/ui/CustomCustomElement.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/com/vaadin/flow/uitest/ui/dependencies/eager.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/com/vaadin/flow/uitest/ui/dependencies/inline.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/com/vaadin/flow/uitest/ui/dependencies/lazy.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/components/context-inline.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/components/frontend-inline.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/dependencies/eager-module.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/dependencies/eager.css (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/dependencies/eager.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/dependencies/inline.css (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/dependencies/inline.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/dependencies/lazy.css (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/dependencies/lazy.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/divConnector.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/in-memory-connector.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/index.html (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/index.ts (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/js-get-by-id.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/template-scalability-panel.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/template-scalability-view.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/template-without-shadow-root-view.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/frontend/x-lazy-widget.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/pom.xml (90%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/reference-screenshots/.gitkeep (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/InitialExtendedClientDetailsView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/TestAppShell.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/TestPush.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/VerifyBrowserVersionView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/MyException.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/AbstractDebounceSynchronizeView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/AbstractErrorHandlerView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/AbstractPushUpdateDivView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/AttachExistingElementView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/AttachListenerView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/BackButtonServerRoundTripView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/BaseHrefView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/BasicComponentView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/BasicElementView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/BodyScrollView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/BrowserWindowResizeView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/CallFunctionBeforeRemoveView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/CompositeNestedView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/CompositeView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/CountUIsView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/CustomCustomElementView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/DebounceSynchronizePropertyView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/DnDAttachDetachView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/DnDCustomComponentView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/DnDView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/DomEventFilterView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/DomListenerOnAttachView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/DynamicTitleView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/DynamicallyRegisteredRoute.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ElementInitOrderView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ElementInnerHtmlView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ElementRemoveItselfView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ElementStyleView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/EnabledView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ErrorHandlingView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/EventListenersView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ExceptionDuringMapSyncView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ExecJavaScriptView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ExtendedClientDetailsView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ForwardToView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/FragmentLinkView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/FragmentLinkView2.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/HasUrlParameterErrorView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/HistoryView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ImageClickView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/InMemoryChildrenView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/InternalErrorView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/JavaScriptReturnValueView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/JsApiGetByIdView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/KeyboardEventView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/LoadingIndicatorView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/LongPollingMultipleThreadsView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/LongPollingPushView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/MyExceptionHandler.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/NavigationTriggerView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/PageView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/PopStateHandlerView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/PostponeProceedView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/PreserveOnRefreshView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/PushLongPollingUpdateDivView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/PushSettingsView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/PushWSUpdateDivView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/RequestParametersHistoryView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/RequestParametersView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/RerouteView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ResynchronizationView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ReturnChannelView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/RouterLinkView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ScriptInjectView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/SerializeUIView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ServiceInitListenersView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/SessionCloseLogoutView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/SetParameterForwardToView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ShadowRootView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ShortcutsView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/StaticHtmlView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/StreamResourceView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/SynchronizedPropertyView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/TestingServiceInitListener.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/TimingInfoReportedView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/TitleView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/UIElementView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ValueChangeModeView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/VisibilityView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/WaitForVaadinView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/WebComponentsView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/dependencies/AnnotatedFrontendInlineView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/dependencies/ComponentWithExternalJavaScript.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/dependencies/DependenciesLoadingAnnotationsView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/dependencies/DependenciesLoadingPageApiView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/dependencies/DynamicDependencyView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/dependencies/ExternalJavaScriptView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/frontend/UsageStatisticsView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/routing/ForwardPage.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/routing/ISEHandler.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/routing/ISELayout.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/routing/ISETargetView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/routing/NPEHandler.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/routing/NPETargetView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/routing/PushLayout.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/routing/PushRouteNotFoundView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/scroll/CustomScrollCallbacksView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/scroll/LongToOpenView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/scroll/MultipleAnchorsView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/scroll/PushStateScrollView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/scroll/ScrollView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/scroll/ServerRequestScrollView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/AfterServerChangesView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/AttachExistingDomElementByIdView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/BasicTypeInListView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/BeanInListingView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/ChangeInjectedComponentTextView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/ChildOrderView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/ClearNodeChildrenView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/ClientUpdateModeView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/ConvertToBeanView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/DomRepeatView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/EmptyListsView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/EventHandlerView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/ExceptionsDuringPropertyUpdatesView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/HiddenTemplateView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/InjectScriptTagView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/InjectedElementInsideMixinBehaviorView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/InjectsJsTemplateView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/InvisibleDefaultPropertyValueView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/JsGrandParentView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/JsInjectedDiv.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/JsInjectedElement.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/JsInjectedGrandChild.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/JsSubTemplate.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/Message.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/MutationSeveralSyncedPropsView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/OneWayPolymerBindingView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/Person.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/PolymerDefaultPropertyValue.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/PolymerDefaultPropertyValueView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/PolymerModelPropertiesView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/PolymerPropertiesView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/PolymerPropertyChangeEventView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/PolymerPropertyMutationInObserverView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/PropertiesUpdatedBeforeChangeEventsView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/RestoreViewWithAttachedByIdView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/SubPropertyModelTemplate.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/SubPropertyModelView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TemplateHasInjectedSubTemplateView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TemplateInTemplateView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TemplateInTemplateWithIdView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TemplateMappingDetectorView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TemplateScalabilityPanel.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TemplateScalabilityView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TemplateWithConnectedCallbacks.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TemplateWithConnectedCallbacksView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TemplatesVisibilityView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TwoWayPolymerBindingView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/UpdatableModelPropertiesView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/UpgradeElementView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/collections/ClearListView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/collections/ListBindingView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/collections/ListInsideListBindingView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/collections/Message.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/collections/ModelListView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/collections/ToggleNullListView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/collections/TwoWayListBindingView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/imports/LazyWidgetView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/webcomponent/HasMax.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/webcomponent/HasValue.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/webcomponent/PaperInput.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/webcomponent/PaperInputView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/webcomponent/PaperSlider.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/webcomponent/PaperSliderView.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/resources/META-INF/services/com.vaadin.flow.server.VaadinServiceInitListener (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/resources/com/vaadin/flow/uitest/ui/StaticHtmlView.html (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/webapp/include.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/webapp/loading-indicator.css (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/main/webapp/plain-script.js (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/conf/vertx-vaadin-test-prod.conf (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/conf/vertx-vaadin-test.conf (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/AssertionTest.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/DevModeOnly.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/DevModeRule.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/FaultyLocationIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/InitialExtendedClientDetailsIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/VerifyBrowserVersionIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/testutil/ChromeBrowserTest.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/AbstractBasicElementComponentIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/AbstractDebounceSynchronizeIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/AbstractErrorIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/AbstractStreamResourceIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/AbstractUpdateDivIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/AttachExistingElementIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/AttachListenerIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/BackButtonServerRoundTripIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/BaseHrefIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/BasicComponentIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/BasicElementIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/BodyScrollIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/BrowserWindowResizeIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/CallFunctionBeforeRemoveIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/CompositeIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/CompositeNestedIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/CountUIsIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/CustomCustomElementIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/DebounceSynchronizePropertyIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/DnDAttachDetachIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/DnDIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/DomEventFilterIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/DomListenerOnAttachIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/DynamicallyRegisteredRouteIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ElementInitOrderIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ElementInnerHtmlIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ElementRemoveItselfIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ElementStyleIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/EnabledIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ErrorHandlingIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ErrorPageIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/EventListenersIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ExceptionDuringMapSyncIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ExecJavaScriptIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ExtendedClientDetailsIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ForwardToIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/FragmentLinkIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/HasUrlParameterErrorIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/HistoryIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ImageClickIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/InMemoryChildrenIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/InternalErrorIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/JavaScriptReturnValueIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/JsApiGetByIdIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/KeyboardEventIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/LoadingIndicatorIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/LongPollingMultipleThreadsIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/LongPollingPushIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/NavigationTriggerIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/PageIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/PopStateHandlerIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/PostponeProceedIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/PreserveOnRefreshIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/PushLongPollingUpdateDivIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/PushSettingsIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/PushWSUpdateDivIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RequestParametersHistoryIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RequestParametersIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RerouteIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ResynchronizationIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ReturnChannelIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RouteNotFoundDevModeIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RouteNotFoundIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RouteNotFoundProdModeIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RouterIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RouterLinkIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RouterParallelIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RouterSessionExpirationIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ScriptInjectIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/SerializeUIIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ServiceInitListenersIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/SessionCloseLogoutIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/SetParameterForwardToIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ShadowRootIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ShortcutsIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/StaticHtmlIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/StreamResourceIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/SynchronizedPropertyIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/TimingInfoReportedIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/UIElementIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ValueChangeModeIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ViewTitleIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/VisibilityIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/WaitForVaadinIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/WebComponentsIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/dependencies/AbstractFrontendInlineIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/dependencies/DependenciesLoadingAnnotationsIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/dependencies/DependenciesLoadingPageApiIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/dependencies/DynamicDependencyIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/dependencies/ExternalJavaScriptIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/routing/InfiniteRerouteLoopIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/routing/PushRouteNotFoundIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/scroll/AbstractScrollIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/scroll/MultipleAnchorsIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/scroll/PushStateScrollIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/scroll/ScrollIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/scroll/ServerRequestScrollIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/AfterServerChangesIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/AttachExistingDomElementByIdIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/BasicTypeInListIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/BeanInListingIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/ChangeInjectedComponentTextIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/ChildOrderIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/ClearNodeChildrenIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/ConvertToBeanIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/DomRepeatIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/EmptyListsIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/EventHandlerIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/ExceptionsDuringPropertyUpdatesIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/HiddenTemplateIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/InjectScriptTagIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/InjectedElementInsideMixinBehaviorIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/InjectsJsTemplateIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/InvisibleDefaultPropertyValueIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/JsGrandParentIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/MutationSeveralSyncedPropsIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/OneWayPolymerBindingIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/PolymerDefaultPropertyValueIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/PolymerModelPropertiesIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/PolymerPropertiesIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/PolymerPropertyChangeEventIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/PolymerPropertyMutationInObserverIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/PropertiesUpdatedBeforeChangeEventsIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/RestoreViewWithAttachedByIdIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/SubPropertyModelIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/TemplateHasInjectedSubTemplateIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/TemplateInTemplateIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/TemplateInTemplateWithIdIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/TemplateMappingDetectorIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/TemplateScalabilityIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/TemplateWithConnectedCallbacksIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/TemplatesVisibilityIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/TwoWayPolymerBindingIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/UpdatableModelPropertiesIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/UpgradeElementIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/collections/ClearListIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/collections/ListBindingIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/collections/ListInsideListBindingIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/collections/ModelListIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/collections/ToggleNullListIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/collections/TwoWayListBindingIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/imports/LazyWidgetIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/webcomponent/PaperInputIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/webcomponent/PaperSliderIT.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-scalability/.gitignore (100%) create mode 100644 vertx-vaadin-tests/test-scalability/frontend/index.html rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-scalability/pom.xml (99%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-scalability/src/main/java/com/github/mcollovati/vertx/vaadin/test/scalability/HelloWorldUI.java (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-scalability/src/test/conf/vertx-vaadin-test.conf (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-scalability/src/test/resources/bodies/HelloWorld_0001_request.json (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-scalability/src/test/resources/bodies/clickButton.json (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-scalability/src/test/resources/logback-test.xml (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-scalability/src/test/scala/com/vaadin/flow/test/scalability/HelloWorld.scala (100%) rename {vertx-vaadin-flow-parent/vertx-vaadin-tests => vertx-vaadin-tests}/test-scalability/src/test/scala/com/vaadin/flow/test/scalability/WarmupFlow.scala (100%) diff --git a/.circleci/config.yml b/.circleci/config.yml.old similarity index 100% rename from .circleci/config.yml rename to .circleci/config.yml.old diff --git a/.github/workflows/deploy-classifiers.yml b/.github/workflows/deploy-classifiers.yml index a036d6fe..dd1bf911 100644 --- a/.github/workflows/deploy-classifiers.yml +++ b/.github/workflows/deploy-classifiers.yml @@ -28,9 +28,9 @@ jobs: with: # running setup-java again overwrites the settings.xml distribution: 'temurin' java-version: '11' - server-id: github-vertx-vaadin # Value of the distributionManagement/repository/id field of the pom.xml - #server-username: mcollovati # env variable for username in deploy - #server-password: ${{ secrets.GH_PKG_DEPLOY_TOKEN }} # env variable for token in deploy + server-id: repsy-vertx-vaadin + server-username: REPSY_USERNAME + server-password: REPSY_PASSWORD gpg-private-key: ${{ secrets.MAVEN_GPG_PRIVATE_KEY }} # Value of the GPG private key to import gpg-passphrase: MAVEN_GPG_PASSPHRASE # env variable for GPG private key passphrase - name: Deploy classifiers @@ -38,9 +38,8 @@ jobs: ./mvnw -N -ntp install PRJ_VERSION=$(./mvnw -pl :vaadin-flow-sockjs help:evaluate -q -Dexpression='project.version' -DforceStdout) KIND=$( [[ "${PRJ_VERSION}" =~ "-SNAPSHOT"$ ]] && echo "snapshot" || echo "release" ) - DEPLOY_OPTS="-Ddistribution.id=github-vertx-vaadin -Dvertx-vaadin.release.gpg" ./tools/build_flow_widgetsets.sh deploy ${KIND} + DEPLOY_OPTS="-Ddistribution.id=repsy-vertx-vaadin -Dvertx-vaadin.release.gpg" ./tools/build_flow_widgetsets.sh deploy ${KIND} env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - JFROG_USERNAME: mcollovati@gmail.com - JFROG_TOKEN: ${{ secrets.JFROG_TOKEN }} + REPSY_USERNAME: ${{ secrets.REPSY_USERNAME }} + REPSY_PASSWORD: ${{ secrets.REPSY_PASSWORD }} MAVEN_GPG_PASSPHRASE: ${{ secrets.MAVEN_GPG_PASSPHRASE }} diff --git a/.github/workflows/deploy-snapshots.yml b/.github/workflows/deploy-snapshots.yml new file mode 100644 index 00000000..9c98339d --- /dev/null +++ b/.github/workflows/deploy-snapshots.yml @@ -0,0 +1,33 @@ +name: Deploy snapshots + +on: + push: + branches: + - development + +jobs: + deploy-snaphost: + + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + - name: Set up Java + uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: '17' + server-id: github-vertx-vaadin + gpg-private-key: ${{ secrets.MAVEN_GPG_PRIVATE_KEY }} + gpg-passphrase: MAVEN_GPG_PASSPHRASE + - name: Deploy classifiers + run: | + mvn -V -e -B -ntp -DskipVertxRun=true -Ddistribution.id=github-vertx-vaadin -Dvertx-vaadin.release.gpg deploy + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + MAVEN_GPG_PASSPHRASE: ${{ secrets.MAVEN_GPG_PASSPHRASE }} diff --git a/.github/workflows/validation.yml b/.github/workflows/validation.yml new file mode 100644 index 00000000..593c513d --- /dev/null +++ b/.github/workflows/validation.yml @@ -0,0 +1,322 @@ +name: vertx-vaadin validation +on: + push: + branches: [development] + workflow_dispatch: + pull_request_target: + types: [opened, synchronize, reopened, edited] +permissions: + contents: read +concurrency: + group: ${{ github.head_ref || github.ref_name }} + cancel-in-progress: true +env: + JAVA_VERSION: 11 +jobs: + check-permissions: + name: Check User Permissions + runs-on: ubuntu-latest + steps: + - run: echo "Concurrency Group = ${{ github.head_ref || github.ref_name }}" + - uses: actions-cool/check-user-permission@main + id: checkUser + with: + username: ${{github.triggering_actor}} + require: 'write' + - name: Fail on workflow triggered by external contributor + if: ${{ steps.checkUser.outputs.require-result != 'true' && github.actor != 'dependabot[bot]' && github.actor != 'vertx-vaadin-bot[bot]' }} + run: | + echo "🚫 **${{ github.actor }}** is an external contributor, a **${{ github.repository }}** team member has to review this changes and re-run this build" \ + | tee -a $GITHUB_STEP_SUMMARY && exit 1 + changes: + name: Compute changes + needs: [check-permissions] + runs-on: ubuntu-latest + outputs: + validation-required: ${{ steps.filter.outputs.validate }} + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + ref: ${{ github.event.pull_request.head.sha }} + - uses: dorny/paths-filter@v2 + id: filter + with: + filters: | + validate: + - '!(README.md|LICENSE|.gitignore|tools/**)' + build: + name: Build + needs: [changes] + if: ${{ needs.changes.outputs.validation-required == 'true' }} + timeout-minutes: 30 + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + ref: ${{ github.event.pull_request.head.sha }} + - name: Set up Java + uses: actions/setup-java@v3 + with: + java-version: ${{ env.JAVA_VERSION }} + distribution: 'temurin' + cache: maven + - uses: browser-actions/setup-chrome@latest + id: setup-chrome + if: ${{ !vars.QH_DISABLE_CHROME_INSTALL }} + with: + chrome-version: stable + - name: Build + run: | + set -x -e -o pipefail + VERTX_VAADIN_VERSION=$(mvn -N -ntp -q help:evaluate -Dexpression=project.version -DforceStdout) + echo "VERTX_VAADIN_VERSION=${VERTX_VAADIN_VERSION}" >> "$GITHUB_ENV" + mvn -V -e -B -ntp -DskipTests -DskipVertxRun=true install -Pflow-ui-tests + - name: Save workspace + run: | + tar cf workspace.tar -C ~/ $(cd ~/ && echo .m2/repository/com/github/mcollovati/vertx/**/$VERTX_VAADIN_VERSION) + tar rf workspace.tar $(find . -d -name target) + - uses: actions/upload-artifact@v3 + with: + name: saved-workspace + path: workspace.tar + tests: + name: Tests + needs: [build] + if: ${{needs.changes.outputs.validation-required == 'true'}} + timeout-minutes: 30 + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + ref: ${{ github.event.pull_request.head.sha }} + - name: Set up Java + uses: actions/setup-java@v3 + with: + java-version: ${{ env.JAVA_VERSION }} + distribution: 'temurin' + cache: maven + - uses: browser-actions/setup-chrome@latest + id: setup-chrome + if: ${{ !vars.QH_DISABLE_CHROME_INSTALL }} + with: + chrome-version: stable + - uses: actions/download-artifact@v3 + if: ${{ github.run_attempt == 1 }} + with: + name: saved-workspace + - name: Restore Workspace + if: ${{ github.run_attempt == 1 }} + run: | + set -x + tar xf workspace.tar + tar cf - .m2 | (cd ~ && tar xf -) + - name: Build + if: ${{ github.run_attempt > 1 }} + run: | + set -x -e -o pipefail + mvn -V -e -B -ntp -DskipTests -DskipVertxRun=true -Dmaven.javadoc.skip=false install -Pflow-ui-tests + - name: Test + env: + VAADIN_OFFLINE_KEY: ${{ secrets.VAADIN_OFFLINE_KEY }} + run: | + set -x -e -o pipefail + mvn -V -e -B -ntp verify -Dmaven.javadoc.skip=false -DtrimStackTrace=false + - name: Package test output files + if: ${{ failure() || success() }} + run: find . -name surefire-reports -o -name failsafe-reports | tar -czf tests-report-main.tgz -T - + - uses: actions/upload-artifact@v3 + if: ${{ failure() || success() }} + with: + name: tests-output + path: tests-report-*.tgz + it-tests-1: + name: UI tests 1 + needs: [build] + if: ${{needs.changes.outputs.validation-required == 'true'}} + timeout-minutes: 30 + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + ref: ${{ github.event.pull_request.head.sha }} + - name: Set up Java + uses: actions/setup-java@v3 + with: + java-version: ${{ env.JAVA_VERSION }} + distribution: 'temurin' + cache: maven + - uses: browser-actions/setup-chrome@latest + id: setup-chrome + if: ${{ !vars.QH_DISABLE_CHROME_INSTALL }} + with: + chrome-version: stable + - name: Set Chrome Version + run: | + CHROME_VERSION=$(google-chrome --version | sed 's/^Google Chrome //' | cut -d. -f1) + echo "CHROME_VERSION=${CHROME_VERSION}" >> "$GITHUB_ENV" + - uses: actions/download-artifact@v3 + if: ${{ github.run_attempt == 1 }} + with: + name: saved-workspace + - name: Restore Workspace + if: ${{ github.run_attempt == 1 }} + run: | + set -x + tar xf workspace.tar + tar cf - .m2 | (cd ~ && tar xf -) + - name: Build + if: ${{ github.run_attempt > 1 }} + run: | + set -x -e -o pipefail + mvn -V -e -B -ntp -DskipTests -DskipVertxRun=true -Dmaven.javadoc.skip=false install -Pflow-ui-tests + - name: UI Test + env: + VAADIN_OFFLINE_KEY: ${{ secrets.VAADIN_OFFLINE_KEY }} + run: | + set -x -e -o pipefail + cd vertx-vaadin-tests + rm -rf frontend/generated + mvn -V -e -B -ntp verify -Dmaven.javadoc.skip=false -pl=:vertx-vaadin-test-root-context -DtrimStackTrace=false \ + -Dwebdriver.chrome.driver=$(which chromedriver) \ + -Duitest.chrome-version=$CHROME_VERSION + - name: Package test output files + if: ${{ failure() || success() }} + run: find . -name surefire-reports -o -name failsafe-reports -o -name verticle.log | tar -czf tests-report-it-1.tgz -T - + - uses: actions/upload-artifact@v3 + if: ${{ failure() || success() }} + with: + name: tests-output + path: tests-report-*.tgz + it-tests-2: + name: UI tests 2 + needs: [build] + if: ${{needs.changes.outputs.validation-required == 'true' }} + timeout-minutes: 30 + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + ref: ${{ github.event.pull_request.head.sha }} + - name: Set up Java + uses: actions/setup-java@v3 + with: + java-version: ${{ env.JAVA_VERSION }} + distribution: 'temurin' + cache: maven + - uses: browser-actions/setup-chrome@latest + id: setup-chrome + if: ${{ !vars.QH_DISABLE_CHROME_INSTALL }} + with: + chrome-version: stable + - uses: actions/download-artifact@v3 + if: ${{ github.run_attempt == 1 }} + with: + name: saved-workspace + - name: Restore Workspace + if: ${{ github.run_attempt == 1 }} + run: | + set -x + tar xf workspace.tar + tar cf - .m2 | (cd ~ && tar xf -) + - name: Build + if: ${{ github.run_attempt > 1 }} + run: | + set -x -e -o pipefail + mvn -V -e -B -ntp -DskipTests -Dmaven.javadoc.skip=false install -Pflow-ui-tests + - name: UI Test + env: + VAADIN_OFFLINE_KEY: ${{ secrets.VAADIN_OFFLINE_KEY }} + run: | + set -x -e -o pipefail + cd vertx-vaadin-tests/ + mvn -V -e -B -ntp verify -DtrimStackTrace=false -pl=-:vertx-vaadin-test-root-context -Dwebdriver.chrome.driver=$(which chromedriver) + - name: Package test output files + if: ${{ failure() || success() }} + run: find . -name surefire-reports -o -name failsafe-reports -o -name verticle.log | tar -czf tests-report-it-2.tgz -T - + - uses: actions/upload-artifact@v3 + if: ${{ failure() || success() }} + with: + name: tests-output + path: tests-report-*.tgz + test-results: + permissions: + issues: read + checks: write + pull-requests: write + if: ${{ always() }} + needs: [changes, tests, it-tests-1, it-tests-2] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + ref: ${{ github.event.pull_request.head.sha }} + - uses: actions/download-artifact@v3 + if: ${{ always() && needs.changes.outputs.validation-required == 'true' }} + with: + name: tests-output + - name: Extract downloaded files + if: ${{ always() && needs.changes.outputs.validation-required == 'true' }} + run: for i in *.tgz; do tar xvf $i; done + - name: Publish Unit Test Results + if: ${{ always() && needs.changes.outputs.validation-required == 'true' }} + uses: EnricoMi/publish-unit-test-result-action@v2 + with: + junit_files: "**/target/*-reports/TEST*.xml" + - name: Set Failure Status + if: ${{ always() && needs.changes.outputs.validation-required == 'true' && (needs.tests.result != 'success' || needs.it-tests-1.result != 'success' || needs.it-tests-2.result != 'success') }} + run: | + echo "🚫 THERE ARE TEST MODULES WITH FAILURES or BEEN CANCELLED" | tee -a $GITHUB_STEP_SUMMARY + exit 1 + - name: Set validation skipped status + if: ${{ always() && needs.changes.outputs.validation-required == 'false' }} + run: | + echo "✅ Pull request only contains changes on files ignored by validation workflow" | tee -a $GITHUB_STEP_SUMMARY && exit 0 + deploy-snapshots: + runs-on: ubuntu-latest + needs: [test-results] + permissions: + contents: read + packages: write + if: ${{ success() && github.event_name == 'push' && github.ref_protected }} + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Set up Java + uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: ${{ env.JAVA_VERSION }} + server-id: repsy-vertx-vaadin-snapshots + server-username: REPSY_USERNAME + server-password: REPSY_PASSWORD + gpg-private-key: ${{ secrets.MAVEN_GPG_PRIVATE_KEY }} + gpg-passphrase: MAVEN_GPG_PASSPHRASE + - uses: actions/download-artifact@v3 + if: ${{ github.run_attempt == 1 }} + with: + name: saved-workspace + - name: Restore Workspace + if: ${{ github.run_attempt == 1 }} + run: | + set -x + tar xf workspace.tar + tar cf - .m2 | (cd ~ && tar xf -) + - name: Build + if: ${{ github.run_attempt > 1 }} + run: | + set -x -e -o pipefail + mvn -V -e -B -ntp -DskipTests install + - name: Deploy classifiers + run: | + mvn -V -e -B -ntp -DskipVertxRun=true -DskipTests -Dvertx-vaadin.release=snapshot -Dvertx-vaadin.release.gpg deploy + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + REPSY_USERNAME: ${{ secrets.REPSY_USERNAME }} + REPSY_PASSWORD: ${{ secrets.REPSY_PASSWORD }} + MAVEN_GPG_PASSPHRASE: ${{ secrets.MAVEN_GPG_PASSPHRASE }} diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 94c6645a..00000000 --- a/.travis.yml +++ /dev/null @@ -1,22 +0,0 @@ -language: java -jdk: - - oraclejdk8 - - openjdk10 - - openjdk11 -env: - - VAADIN_FRAMEWORK=8.3.3 - - VAADIN_FRAMEWORK=8.4.5 - - VAADIN_FRAMEWORK=8.5.2 - - VAADIN_FRAMEWORK=8.6.0 - - VAADIN_PLATFORM=10.0.6 VAADIN_FLOW=1.0.5 - - VAADIN_PLATFORM=11.0.1 VAADIN_FLOW=1.0.5 -cache: - directories: - - $HOME/.m2 -install: - - ./mvnw install -N - - ./mvnw install -DskipTests=true -Dmaven.javadoc.skip=true -B -V -script: ./mvnw clean verify ${VAADIN_FRAMEWORK+-Dvaadin.version=$VAADIN_FRAMEWORK} ${VAADIN_PLATFORM+-Dvaadin.platform.version=$VAADIN_PLATFORM} ${VAADIN_FLOW+-Dvaadin.flow.version=$VAADIN_FLOW} -branches: - only: - - master diff --git a/README.md b/README.md index 742d6413..849c9cba 100644 --- a/README.md +++ b/README.md @@ -3,8 +3,6 @@ ## Status ![License](https://img.shields.io/github/license/mcollovati/vertx-vaadin.svg) -[![Gitter](https://badges.gitter.im/vertx-vaadin/community.svg)](https://gitter.im/vertx-vaadin/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) -![Maven Central](https://img.shields.io/maven-central/v/com.github.mcollovati.vertx/vertx-vaadin8.svg?label=vertx-vaadin8) ![Maven Central](https://img.shields.io/maven-central/v/com.github.mcollovati.vertx/vertx-vaadin-flow.svg?label=vertx-vaadin-flow) ## Description @@ -12,18 +10,14 @@ Vertx Vaadin is an adapter library that lets you run [Vaadin](https://vaadin.com/) applications on top of [Vert.x](http://vertx.io/). This means you can mix the simplicity and robustness of Vaadin applications with the powerful tools provided by Vert.x, such as event bus, clustering, High Availability and Fail-Over. +> [!IMPORTANT] +> Vaadin 8 is not supported anymore. + ## Installation and Getting Started Vertx-vaadin binaries are available on Maven Central and Bintray. ### Maven - -```xml - - com.github.mcollovati.vertx - vertx-vaadin8 - ${vertx-vaadin8.version} - ``` ```xml @@ -35,12 +29,13 @@ Vertx-vaadin binaries are available on Maven Central and Bintray. ``` -For snapshots: +Snapshot are currently published on GitHub, so a [Personal Access Token](https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-apache-maven-registry#authenticating-with-a-personal-access-token) +is required to download the artifacts ```xml vertx-vaadin-snapshots - https://mcollovati.jfrog.io/artifactory/vertx-vaadin-snapshots + https://maven.pkg.github.com/mcollovati/vertx-vaadin false @@ -50,71 +45,29 @@ For snapshots: ``` -For additional vertx-vaadin artifacts not published on Maven Central (eg Vaadin client repackages): - +In setting.xml ```xml - - vertx-vaadin-public - https://mcollovati.jfrog.io/artifactory/vertx-vaadin-public - - true - - - false - - -``` - -### Gradle - -``` -compile 'com.github.mcollovati.vertx:vertx-vaadin8:0.4.0' -``` - -For snapshots: -``` -repositories { - maven { url 'https://mcollovati.jfrog.io/artifactory/vertx-vaadin-snapshots' } -} + + vertx-vaadin-snapshots + your username + PAT with read:packages + ``` ## Compatibility matrix -| Vaadin version | Vert.x version | vertx-vaadin version |Status| -|----------------|----------------|---------------------------|------| -| 8.x -> 8.7 | 3.5 | vertx-vaadin8:1.0.1 |![CircleCI](https://img.shields.io/badge/stable-green.svg?style=for-the-badge)| -| 8.8 | 3.7 | vertx-vaadin8:2.0.0 |[![CircleCI](https://circleci.com/gh/mcollovati/vertx-vaadin/tree/master.svg?style=svg)](https://circleci.com/gh/mcollovati/vertx-vaadin/tree/master)| -| 10 | 3.5 | vertx-vaadin-flow:10.0.0 |[![CircleCI](https://img.shields.io/badge/discontinued-inactive.svg?style=for-the-badge)](https://circleci.com/gh/mcollovati/vertx-vaadin/tree/vaadin-10)| -| 12 | 3.5 | vertx-vaadin-flow:12.0.0 |[![CircleCI](https://img.shields.io/badge/discontinued-inactive.svg?style=for-the-badge)](https://circleci.com/gh/mcollovati/vertx-vaadin/tree/vaadin-12)| -| 13 | 3.5 | vertx-vaadin-flow:13.0.1 |[![CircleCI](https://img.shields.io/badge/discontinued-inactive.svg?style=for-the-badge)](https://circleci.com/gh/mcollovati/vertx-vaadin/tree/vaadin-13)| -| 14.0 | 3.7 | vertx-vaadin-flow:14.0.0 |[![CircleCI](https://img.shields.io/badge/stable-green.svg?style=for-the-badge)](https://circleci.com/gh/mcollovati/vertx-vaadin/134)| -| 14.0 | 3.8.3 | vertx-vaadin-flow:14.0.10 |[![CircleCI](https://img.shields.io/badge/stable-green.svg?style=for-the-badge)](https://circleci.com/gh/mcollovati/vertx-vaadin/tree/vaadin-14)| -| 14.1 | 3.8.3 | vertx-vaadin-flow:14.1.0 |[![CircleCI](https://img.shields.io/badge/stable-green.svg?style=for-the-badge)](https://circleci.com/gh/mcollovati/vertx-vaadin/tree/master)| -| 14.2 | 3.8.3 | vertx-vaadin-flow:14.2.x |[![CircleCI](https://img.shields.io/badge/stable-green.svg?style=for-the-badge)](https://circleci.com/gh/mcollovati/vertx-vaadin/672)| -| 14.6 | 4.0.3 | vertx-vaadin-flow:14.4.x |[![CircleCI](https://circleci.com/gh/mcollovati/vertx-vaadin/tree/vaadin-14.2.svg?style=svg)](https://circleci.com/gh/mcollovati/vertx-vaadin/tree/vaadin-14.2)| -| 15 | 3.8.5 | vertx-vaadin-flow:15.0.x |[![CircleCI](https://img.shields.io/badge/discontinued-inactive.svg?style=for-the-badge)](https://circleci.com/gh/mcollovati/vertx-vaadin/tree/vaadin-15)| -| 16 | 3.8.5 | vertx-vaadin-flow:16.0.x |[![CircleCI](https://img.shields.io/badge/discontinued-inactive.svg?style=for-the-badge)](https://circleci.com/gh/mcollovati/vertx-vaadin/tree/vaadin-16)| -| 17 | 3.8.5 | vertx-vaadin-flow:17.0.x |[![CircleCI](https://img.shields.io/badge/discontinued-inactive.svg?style=for-the-badge)](https://circleci.com/gh/mcollovati/vertx-vaadin/tree/vaadin-17)| -| 18 | 3.8.5 | vertx-vaadin-flow:18.0.x |[![CircleCI](https://img.shields.io/badge/discontinued-inactive.svg?style=for-the-badge)](https://circleci.com/gh/mcollovati/vertx-vaadin/tree/vaadin-18)| -| 19 | 3.8.5 | vertx-vaadin-flow:19.0.x |[![CircleCI](https://img.shields.io/badge/discontinued-inactive.svg?style=for-the-badge)](https://circleci.com/gh/mcollovati/vertx-vaadin/tree/vaadin-19)| -| 20 | 4.0.3 | vertx-vaadin-flow:20.0.x |[![CircleCI](https://img.shields.io/badge/discontinued-inactive.svg?style=for-the-badge)](https://circleci.com/gh/mcollovati/vertx-vaadin/721)| -| 21 | 4.0.3 | vertx-vaadin-flow:21.0.x |[![CircleCI](https://img.shields.io/badge/discontinued-inactive.svg?style=for-the-badge)](https://circleci.com/gh/mcollovati/vertx-vaadin/952)| -| 23.1.1 | 4.2.3 | vertx-vaadin-flow:23.1.x |[![CircleCI](https://circleci.com/gh/mcollovati/vertx-vaadin/tree/development.svg?style=svg)](https://circleci.com/gh/mcollovati/vertx-vaadin/tree/development)| +| Vaadin version | Vert.x version | vertx-vaadin version |Status| +|----------------|--------------|--------------------------|------| +| 23.1.1 | 4.2.3 | vertx-vaadin-flow:23.1.x |[![CircleCI](https://circleci.com/gh/mcollovati/vertx-vaadin/tree/development.svg?style=svg)](https://circleci.com/gh/mcollovati/vertx-vaadin/tree/development)| +| 23.3 | 4.3 | vertx-vaadin-flow:23.3.x |[![CircleCI](https://circleci.com/gh/mcollovati/vertx-vaadin/tree/development.svg?style=svg)](https://circleci.com/gh/mcollovati/vertx-vaadin/tree/development)| ## Documentation -See [vertx-vaadin-8](vertx-vaadin-8-parent/vertx-vaadin8) or [vertx-vaadin-flow](vertx-vaadin-flow-parent/vertx-vaadin-flow) module for more information. +See [vertx-vaadin-flow](vertx-vaadin-flow-parent/vertx-vaadin-flow) module for more information. ## Demo and samples -A public demo based on Vaadin 8 archetype application example is published on heroku and is available [here](http://vertx-vaadin-example.herokuapp.com/) - -Bookstore demo on Vaadin Flow is published on heroku and is available at the following urls: - -* [vertx-vaadin-flow:14](https://vertx-vaadin14-example.herokuapp.com/) -* [vertx-vaadin-flow:develop](https://vertx-vaadin-dev-example.herokuapp.com/) - -Source code and other samples can be found on [vaadin-vertx-samples](https://github.com/mcollovati/vaadin-vertx-samples) repository. +Source code for sample application can be found on [vaadin-vertx-samples](https://github.com/mcollovati/vaadin-vertx-samples) repository. ## Issue tracking diff --git a/pom.xml b/pom.xml index 7877bfb4..1a79236c 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.github.mcollovati.vertx vertx-vaadin-root - 1.0-dev + 23.4.0-SNAPSHOT pom Vertx Vaadin root Pom @@ -86,43 +86,42 @@ ${maven.multiModuleProjectDirectory}/checkstyle true - github-vertx-vaadin-snapshots - https://maven.pkg.github.com/mcollovati/vertx-vaadin - github-vertx-vaadin-releases - https://maven.pkg.github.com/mcollovati/vertx-vaadin + repsy-vertx-vaadin-snapshots + https://repo.repsy.io/mvn/mcollovati/vertx-vaadin-snapshots + repsy-vertx-vaadin + https://repo.repsy.io/mvn/mcollovati/vertx-vaadin - 0.8.5 - 3.0 - 3.1.1 - 3.11.0 - 3.1.2 - 3.1.2 - 3.1.2 - 2.5.3 - 3.7.0.1746 + 0.8.11 + 4.3 + 3.3.1 + 3.12.1 + 3.2.3 + 3.3.0 + 3.2.3 + 3.0.1 + 3.10.0.2594 3.1.0 3.3.2 - 3.0.0-M1 + 3.1.1 4.3.0 - 8.8.5 - 23.3.12 - 23.3.9 - 1.2-SNAPSHOT + 23.3.30 + 23.3.24 + 1.3.30 3.1.0 - 1.12.14 + 1.14.11 1.0 - 1.18.26 - 4.13.1 - 4.11.0 - 3.11.1 - 1.2.3 - 1.7.21 - 8.29 + 1.18.30 + 4.13.2 + 5.8.0 + 3.24.2 + 1.4.14 + 2.0.9 + 10.12.6 1.0.3 - 1.6 - 1.6.8 + 3.1.0 + 1.6.13 @@ -425,6 +424,12 @@ + + vaadin-flow-sockjs + vertx-vaadin-flow + vertx-vaadin-flow-jandex + vertx-vaadin-quarkus-extension + @@ -460,29 +465,10 @@ - - release-vaadin8 - - vertx-vaadin-8-parent/vaadin8-sockjs - vertx-vaadin-8-parent/vertx-vaadin8 - - - - release-flow - - true - - - vertx-vaadin-flow-parent/vaadin-flow-sockjs - vertx-vaadin-flow-parent/vertx-vaadin-flow - vertx-vaadin-flow-parent/vertx-vaadin-flow-jandex - vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension - - flow-ui-tests - vertx-vaadin-flow-parent/vertx-vaadin-tests + vertx-vaadin-tests diff --git a/tools/build_flow_widgetsets.sh b/tools/build_flow_widgetsets.sh index ead8186a..4074457c 100755 --- a/tools/build_flow_widgetsets.sh +++ b/tools/build_flow_widgetsets.sh @@ -54,8 +54,8 @@ declare -A _existing_versions for version in "${versions[@]}"; do flag=$( - mvn -q dependency:get -Dartifact=com.github.mcollovati.vertx:vaadin-flow-sockjs:${_current_version}:jar:vaadin-${version} \ - -DremoteRepositories=github-vertx-vaadin::::https://maven.pkg.github.com/mcollovati/vertx-vaadin/ -Dtransitive=false 2>&1 >/dev/null && \ + mvn -N -q dependency:get -Dartifact=com.github.mcollovati.vertx:vaadin-flow-sockjs:${_current_version}:jar:vaadin-${version} \ + -DremoteRepositories=repsy-vertx-vaadin::::https://repo.repsy.io/mvn/mcollovati/vertx-vaadin/ -Dtransitive=false 2>&1 >/dev/null && \ echo 1 || echo 0 ) echo " --> Searching classifier vaadin-${version} for version ${_current_version} ===> ${flag}" @@ -89,7 +89,7 @@ for version in "${versions[@]}"; do _mvn_target="clean $_action" fi - $_mvn -B --fail-never -ntp -Prelease-flow -pl :vaadin-flow-sockjs -Dvertx-vaadin.release=${_kind} -DskipTests -Dvaadin.platform.version=${version} -Dvaadin.flow.version=${flow_client_version} $_mvn_target ${DEPLOY_OPTS} + $_mvn -B --fail-never -ntp -pl :vaadin-flow-sockjs -Dvertx-vaadin.release=${_kind} -DskipTests -Dvaadin.platform.version=${version} -Dvaadin.flow.version=${flow_client_version} $_mvn_target ${DEPLOY_OPTS} _last_built=${flow_client_version} fi diff --git a/tools/build_v8_widgetsets.sh b/tools/build_v8_widgetsets.sh deleted file mode 100755 index 47c82d8a..00000000 --- a/tools/build_v8_widgetsets.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env bash - -_base_dir=$(dirname $(realpath $0)) -_action=${1:package} - -vaadin_releases=(8.8) -for rel in ${vaadin_releases[@]}; do - - echo "Fetch Vaadin versions for ${rel}..." - versions=$(curl -s "https://search.maven.org/solrsearch/select?q=g:com.vaadin+AND+a:vaadin-client+AND+v:${rel}.*&rows=10&core=gav" | jq -r '.response.docs[].v') - - for version in ${versions}; do - echo "Building vertx-vaadin for ${version}" - $_base_dir/../mvnw -B --fail-never -Prelease-vaadin8 -pl :vertx-vaadin8 -DskipTests -Dvertx-vaadin.release -DskipDefaultJar -Dvaadin.version=${version} clean "${_action}" - done -done - diff --git a/vertx-vaadin-flow-parent/vaadin-flow-sockjs/pom.xml b/vaadin-flow-sockjs/pom.xml similarity index 99% rename from vertx-vaadin-flow-parent/vaadin-flow-sockjs/pom.xml rename to vaadin-flow-sockjs/pom.xml index 6245e8a9..d3fc625f 100644 --- a/vertx-vaadin-flow-parent/vaadin-flow-sockjs/pom.xml +++ b/vaadin-flow-sockjs/pom.xml @@ -5,14 +5,13 @@ com.github.mcollovati.vertx vertx-vaadin-root - 1.0-dev - + 23.4.0-SNAPSHOT + ../pom.xml vaadin-flow-sockjs jar vaadin-flow-sockjs - 23.3.5-SNAPSHOT Sockjs push connection implementation for Vaadin Flow https://github.com/mcollovati/vertx-vaadin diff --git a/vertx-vaadin-flow-parent/vaadin-flow-sockjs/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/client/SockJSPushConnection.java b/vaadin-flow-sockjs/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/client/SockJSPushConnection.java similarity index 100% rename from vertx-vaadin-flow-parent/vaadin-flow-sockjs/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/client/SockJSPushConnection.java rename to vaadin-flow-sockjs/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/client/SockJSPushConnection.java diff --git a/vertx-vaadin-flow-parent/vaadin-flow-sockjs/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/PushException.java b/vaadin-flow-sockjs/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/PushException.java similarity index 100% rename from vertx-vaadin-flow-parent/vaadin-flow-sockjs/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/PushException.java rename to vaadin-flow-sockjs/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/PushException.java diff --git a/vertx-vaadin-flow-parent/vaadin-flow-sockjs/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/PushSocket.java b/vaadin-flow-sockjs/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/PushSocket.java similarity index 100% rename from vertx-vaadin-flow-parent/vaadin-flow-sockjs/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/PushSocket.java rename to vaadin-flow-sockjs/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/PushSocket.java diff --git a/vertx-vaadin-flow-parent/vaadin-flow-sockjs/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/SockJSPushConnection.java b/vaadin-flow-sockjs/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/SockJSPushConnection.java similarity index 100% rename from vertx-vaadin-flow-parent/vaadin-flow-sockjs/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/SockJSPushConnection.java rename to vaadin-flow-sockjs/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/SockJSPushConnection.java diff --git a/vertx-vaadin-flow-parent/vaadin-flow-sockjs/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/SockJSPushConnectionFactory.java b/vaadin-flow-sockjs/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/SockJSPushConnectionFactory.java similarity index 100% rename from vertx-vaadin-flow-parent/vaadin-flow-sockjs/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/SockJSPushConnectionFactory.java rename to vaadin-flow-sockjs/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/SockJSPushConnectionFactory.java diff --git a/vertx-vaadin-flow-parent/vaadin-flow-sockjs/src/main/resources/META-INF/resources/VAADIN/static/push/vaadinPushSockJS.js b/vaadin-flow-sockjs/src/main/resources/META-INF/resources/VAADIN/static/push/vaadinPushSockJS.js similarity index 100% rename from vertx-vaadin-flow-parent/vaadin-flow-sockjs/src/main/resources/META-INF/resources/VAADIN/static/push/vaadinPushSockJS.js rename to vaadin-flow-sockjs/src/main/resources/META-INF/resources/VAADIN/static/push/vaadinPushSockJS.js diff --git a/vertx-vaadin-flow-parent/vaadin-flow-sockjs/src/main/resources/META-INF/services/com.vaadin.flow.server.communication.PushConnectionFactory b/vaadin-flow-sockjs/src/main/resources/META-INF/services/com.vaadin.flow.server.communication.PushConnectionFactory similarity index 100% rename from vertx-vaadin-flow-parent/vaadin-flow-sockjs/src/main/resources/META-INF/services/com.vaadin.flow.server.communication.PushConnectionFactory rename to vaadin-flow-sockjs/src/main/resources/META-INF/services/com.vaadin.flow.server.communication.PushConnectionFactory diff --git a/vertx-vaadin-flow-parent/vaadin-flow-sockjs/src/main/resources/com/github/mcollovati/vertx/vaadin/sockjs/SockjsClientEngine.gwt.xml b/vaadin-flow-sockjs/src/main/resources/com/github/mcollovati/vertx/vaadin/sockjs/SockjsClientEngine.gwt.xml similarity index 100% rename from vertx-vaadin-flow-parent/vaadin-flow-sockjs/src/main/resources/com/github/mcollovati/vertx/vaadin/sockjs/SockjsClientEngine.gwt.xml rename to vaadin-flow-sockjs/src/main/resources/com/github/mcollovati/vertx/vaadin/sockjs/SockjsClientEngine.gwt.xml diff --git a/vertx-vaadin-flow-parent/vaadin-flow-sockjs/src/main/resources/com/github/mcollovati/vertx/vaadin/sockjs/SockjsClientEngineXSI.gwt.xml b/vaadin-flow-sockjs/src/main/resources/com/github/mcollovati/vertx/vaadin/sockjs/SockjsClientEngineXSI.gwt.xml similarity index 100% rename from vertx-vaadin-flow-parent/vaadin-flow-sockjs/src/main/resources/com/github/mcollovati/vertx/vaadin/sockjs/SockjsClientEngineXSI.gwt.xml rename to vaadin-flow-sockjs/src/main/resources/com/github/mcollovati/vertx/vaadin/sockjs/SockjsClientEngineXSI.gwt.xml diff --git a/vertx-vaadin-8-parent/pom.xml b/vertx-vaadin-8-parent/pom.xml deleted file mode 100644 index 15c95051..00000000 --- a/vertx-vaadin-8-parent/pom.xml +++ /dev/null @@ -1,34 +0,0 @@ - - 4.0.0 - - com.github.mcollovati.vertx - vertx-vaadin8-parent - 1.0.0 - pom - - Vertx Vaadin 8 parent - https://github.com/mcollovati/vertx-vaadin - - - true - - - vertx-vaadin8-parent - - vertx-vaadin8 - vaadin8-sockjs - - - - - - com.mycila - license-maven-plugin - - true - - - - - - diff --git a/vertx-vaadin-8-parent/vaadin8-sockjs/README.md b/vertx-vaadin-8-parent/vaadin8-sockjs/README.md deleted file mode 100644 index 0e6d34ba..00000000 --- a/vertx-vaadin-8-parent/vaadin8-sockjs/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Vaadin8-sockjs - -Vaadin8-sockjs is an addon for Vaadin that replaces the atmosphere communication stack. \ No newline at end of file diff --git a/vertx-vaadin-8-parent/vaadin8-sockjs/pom.xml b/vertx-vaadin-8-parent/vaadin8-sockjs/pom.xml deleted file mode 100644 index ff50fde5..00000000 --- a/vertx-vaadin-8-parent/vaadin8-sockjs/pom.xml +++ /dev/null @@ -1,260 +0,0 @@ - - 4.0.0 - - - com.github.mcollovati.vertx - vertx-vaadin-root - 1.0-dev - - - - vaadin8-sockjs - jar - 2.0.1-SNAPSHOT - vaadin8-sockjs - Sockjs push connection implementation for Vaadin 8 - https://github.com/mcollovati/vertx-vaadin - - - 1.3.0 - false - - - - - com.vaadin - vaadin-server - - - - com.vaadin - vaadin-client - provided - - - com.vaadin - vaadin-client-compiler - provided - - - - org.slf4j - slf4j-api - - - - - - - - ${project.basedir}/src/main/resources - true - - - - - com.vaadin - vaadin-maven-plugin - ${vaadin.version} - - -Xmx1024M -Xss1024k - ${basedir}/target/classes/VAADIN/widgetsets - true - false - - - - true - - - - - update-widgetset - compile - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven-jar-plugin.version} - - - - 1 - com.github.mcollovati.vertx.vaadin.sockjs.VaadinSockjsWidgetset - - - - - - VAADIN/gwt-unitCache/** - VAADIN/widgetsets/WEB-INF/** - - - - - org.apache.maven.plugins - maven-source-plugin - ${maven-source-plugin.version} - - - attach-sources - - jar - - - - - 1 - com.github.mcollovati.vertx.vaadin.sockjs.VaadinSockjsWidgetset - - - - - - - - - org.apache.maven.plugins - maven-dependency-plugin - - - unpack-sockjs - validate - - unpack - - - - - org.webjars.npm - sockjs-client - ${sockjs-client.version} - - - ${project.build.directory}/sockjs-client - META-INF/resources/**/dist/sockjs.js - - - - - - org.apache.maven.plugins - maven-resources-plugin - 3.0.2 - - false - - @@*@@ - - - - - maven-antrun-plugin - 1.8 - - - default-cli - generate-resources - - run - - - true - - - - - - - - compresspush - compile - - run - - - - - - - - - - - - - - - - - - - - com.samaxes.maven - minify-maven-plugin - 1.7.6 - - - default-minify - - ${project.build.outputDirectory} - ${project.build.outputDirectory} - CLOSURE - VAADIN - - vaadinPushSockJS.debug.js - - vaadinPushSockJS.debug-min.js - true - true - - - minify - - - - - - com.igormaznitsa - uber-pom - - - - - - - do-release - - - vertx-vaadin.release - - - - - - com.vaadin - vaadin-maven-plugin - - false - false - - - - - - - - diff --git a/vertx-vaadin-8-parent/vaadin8-sockjs/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/client/SockJSPushConnection.java b/vertx-vaadin-8-parent/vaadin8-sockjs/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/client/SockJSPushConnection.java deleted file mode 100644 index c23d1f8d..00000000 --- a/vertx-vaadin-8-parent/vaadin8-sockjs/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/client/SockJSPushConnection.java +++ /dev/null @@ -1,522 +0,0 @@ -/* - * The MIT License - * Copyright © 2016-2020 Marco Collovati (mcollovati@gmail.com) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.github.mcollovati.vertx.vaadin.sockjs.client; - -import java.util.HashMap; -import java.util.Map; -import java.util.logging.Logger; - -import com.google.gwt.core.client.JavaScriptObject; -import com.google.gwt.core.client.Scheduler; -import com.google.gwt.user.client.Command; -import com.google.gwt.user.client.Window; -import com.vaadin.client.ApplicationConfiguration; -import com.vaadin.client.ApplicationConnection; -import com.vaadin.client.ResourceLoader; -import com.vaadin.client.ValueMap; -import com.vaadin.client.communication.ConnectionStateHandler; -import com.vaadin.client.communication.MessageHandler; -import com.vaadin.client.communication.PushConnection; -import com.vaadin.shared.ApplicationConstants; -import com.vaadin.shared.Version; -import com.vaadin.shared.ui.ui.UIConstants; -import com.vaadin.shared.ui.ui.UIState; -import com.vaadin.shared.util.SharedUtil; -import elemental.json.JsonObject; - -public class SockJSPushConnection implements PushConnection { - - private ApplicationConnection connection; - private SockJS socket; - private SockJSConfiguration config; - private State state = State.CONNECTING; - private String uri; - private String transport; - - /** - * Keeps track of the disconnect confirmation command for cases where - * pending messages should be pushed before actually disconnecting. - */ - private Command pendingDisconnectCommand; - - /** - * The url to use for push requests - */ - private String url; - - @Override - public void init(ApplicationConnection connection, UIState.PushConfigurationState pushConfiguration) { - this.connection = connection; - - connection.addHandler(ApplicationConnection.ApplicationStoppedEvent.TYPE, - event -> { - if (state == State.CLOSING - || state == State.CLOSED) { - return; - } - - disconnect(() -> { - }); - }); - - config = createConfig(); - String debugParameter = Window.Location.getParameter("debug"); - if ("push".equals(debugParameter)) { - config.setStringValue("logLevel", "debug"); - } - for (String param : pushConfiguration.parameters.keySet()) { - String value = pushConfiguration.parameters.get(param); - if (value.equalsIgnoreCase("true") - || value.equalsIgnoreCase("false")) { - config.setBooleanValue(param, value.equalsIgnoreCase("true")); - } else { - config.setStringValue(param, value); - } - } - config.mapTransports(); - if (pushConfiguration.pushUrl != null) { - url = pushConfiguration.pushUrl; - } else { - url = ApplicationConstants.APP_PROTOCOL_PREFIX - + ApplicationConstants.PUSH_PATH; - } - runWhenSockJSLoaded( - () -> Scheduler.get().scheduleDeferred(this::connect)); - - } - - - @Override - public void push(JsonObject message) { - if (!isBidirectional()) { - throw new IllegalStateException( - "This server to client push connection should not be used to send client to server messages"); - } - if (state == State.OPEN) { - getLogger().info("Sending push (" + transport - + ") message to server: " + message.toJson()); - - doPush(socket, message.toJson()); - return; - } - - if (state == State.CONNECTING) { - getConnectionStateHandler().pushNotConnected(message); - return; - } - - throw new IllegalStateException("Can not push after disconnecting"); - - } - - private native void doPush(SockJS socket, String message) - /*-{ - socket.send(message); - }-*/; - - @Override - public boolean isActive() { - switch (state) { - case CONNECTING: - case OPEN: - return true; - default: - return false; - } - } - - - @Override - public String getTransportType() { - return transport; - } - - @Override - public boolean isBidirectional() { - if (transport == null) { - return false; - } - - if (!transport.equals("websocket")) { - // If we are not using websockets, we want to send XHRs - return false; - } - if (getPushConfigurationState().alwaysUseXhrForServerRequests) { - // If user has forced us to use XHR, let's abide - return false; - } - if (state == State.CONNECTING) { - // Not sure yet, let's go for using websockets still as still will - // delay the message until a connection is established. When the - // connection is established, bi-directionality will be checked - // again to be sure - } - return true; - - } - - - private void connect() { - String baseUrl = connection.translateVaadinUri(url); - String extraParams = UIConstants.UI_ID_PARAMETER + "=" - + connection.getConfiguration().getUIId(); - - String pushId = connection.getMessageHandler().getPushId(); - if (pushId != null) { - extraParams += "&" + ApplicationConstants.PUSH_ID_PARAMETER + "=" - + pushId; - } - - // uri is needed to identify the right connection when closing - uri = SharedUtil.addGetParameters(baseUrl, extraParams); - - getLogger().info("Establishing push connection"); - socket = doConnect(uri, getConfig()); - } - - @Override - public void disconnect(Command command) { - assert command != null; - - switch (state) { - case CONNECTING: - // Make the connection callback initiate the disconnection again - state = State.CLOSING; - pendingDisconnectCommand = command; - break; - case OPEN: - // Normal disconnect - getLogger().info("Closing push connection"); - doDisconnect(socket); - state = State.CLOSED; - command.execute(); - break; - case CLOSING: - case CLOSED: - throw new IllegalStateException( - "Can not disconnect more than once"); - } - - } - - protected SockJSConfiguration getConfig() { - return config; - } - - /* - * Available options - * - transport: - * - websocket: options[maxLength, protocols] - * - xhr-streaming: no-options - * - xhr-polling: no-options - * - transportOptions - * - sessionId - * - server - */ - protected native SockJSConfiguration createConfig() - /*-{ - return { - transport: 'websocket', - fallbackTransport: 'xhr-polling', - transports: ['websocket', 'xhr-polling', 'xhr-streaming'], - reconnectInterval: 5000, - maxReconnectAttempts: 10 - }; - }-*/; - - protected void onReopen(JavaScriptObject response) { - getLogger().info("Push connection re-established using " + socket.getTransport()); - onConnect(socket); - } - - protected void onOpen(JavaScriptObject event) { - getLogger().info( - "Push connection established using " + socket.getTransport()); - onConnect(socket); - } - - protected void onError(JavaScriptObject response) { - state = State.CLOSED; - getConnectionStateHandler().pushError(this, response); - } - - protected void onClose(JavaScriptObject response) { - state = State.CONNECTING; - getConnectionStateHandler().pushClosed(this, response); - } - - protected void onReconnect(JavaScriptObject response) { - if (state == State.OPEN) { - state = State.CONNECTING; - } - getConnectionStateHandler().pushReconnectPending(this); - } - - protected void onMessage(TransportMessageEvent response) { - String message = response.getResponseBody(); - ValueMap json = MessageHandler.parseWrappedJson(message); - if (json == null) { - // Invalid string (not wrapped as expected) - getConnectionStateHandler().pushInvalidContent(this, message); - } else { - getLogger().info("Received push (" + getTransportType() - + ") message: " + message); - connection.getMessageHandler().handleMessage(json); - } - } - - - protected void onConnect(SockJS socket) { - transport = socket.getTransport(); - switch (state) { - case CONNECTING: - state = State.OPEN; - getConnectionStateHandler().pushOk(this); - break; - case CLOSING: - // Set state to connected to make disconnect close the connection - state = State.OPEN; - assert pendingDisconnectCommand != null; - disconnect(pendingDisconnectCommand); - break; - case OPEN: - // IE likes to open the same connection multiple times, just ignore - break; - default: - throw new IllegalStateException( - "Got onOpen event when conncetion state is " + state - + ". This should never happen."); - } - } - - private native SockJS doConnect(String uri, - JavaScriptObject config) - /*-{ - var self = this; - - - config.url = uri; - config.onOpen = $entry(function(response) { - self.@com.github.mcollovati.vertx.vaadin.sockjs.client.SockJSPushConnection::onOpen(*)(response); - }); - config.onRepen = $entry(function(response) { - self.@com.github.mcollovati.vertx.vaadin.sockjs.client.SockJSPushConnection::onReopen(*)(response); - }); - config.onMessage = $entry(function(response) { - self.@com.github.mcollovati.vertx.vaadin.sockjs.client.SockJSPushConnection::onMessage(*)(response); - }); - config.onError = $entry(function(response) { - self.@com.github.mcollovati.vertx.vaadin.sockjs.client.SockJSPushConnection::onError(*)(response); - }); - config.onClose = $entry(function(response) { - self.@com.github.mcollovati.vertx.vaadin.sockjs.client.SockJSPushConnection::onClose(*)(response); - }); - config.onReconnect = $entry(function(response) { - self.@com.github.mcollovati.vertx.vaadin.sockjs.client.SockJSPushConnection::onReconnect(*)(response); - }); - - - return $wnd.vaadinPush.SockJS.connect(config); - }-*/; - - private void runWhenSockJSLoaded(final Command command) { - if (isSockJSLoaded()) { - command.execute(); - } else { - final String pushJs = getVersionedPushJs(); - - getLogger().info("Loading " + pushJs); - ResourceLoader.get().loadScript( - connection.getConfiguration().getVaadinDirUrl() + pushJs, - new ResourceLoader.ResourceLoadListener() { - @Override - public void onLoad(ResourceLoader.ResourceLoadEvent event) { - if (isSockJSLoaded()) { - getLogger().info(pushJs + " loaded"); - command.execute(); - } else { - // If bootstrap tried to load vaadinPush.js, - // ResourceLoader assumes it succeeded even if - // it failed (#11673) - onError(event); - } - } - - @Override - public void onError(ResourceLoader.ResourceLoadEvent event) { - getConnectionStateHandler().pushScriptLoadError( - event.getResourceUrl()); - } - }); - } - } - - private UIState.PushConfigurationState getPushConfigurationState() { - return connection.getUIConnector().getState().pushConfiguration; - } - - private ConnectionStateHandler getConnectionStateHandler() { - return connection.getConnectionStateHandler(); - } - - private String getVersionedPushJs() { - String pushJs; - if (ApplicationConfiguration.isProductionMode()) { - pushJs = "vaadinPushSockJS.js"; - } else { - pushJs = "vaadinPushSockJS.debug.js"; - } - // Parameter appended to bypass caches after version upgrade. - pushJs += "?v=" + Version.getFullVersion(); - return pushJs; - } - - private static native boolean isSockJSLoaded() - /*-{ - return $wnd.vaadinPush && $wnd.vaadinPush.SockJS; - }-*/; - - private static native void doDisconnect(SockJS sock) - /*-{ - sock.close(); - }-*/; - - - private static Logger getLogger() { - return Logger.getLogger(SockJSPushConnection.class.getName()); - } - - private enum State { - CONNECTING, OPEN, CLOSING, CLOSED - } - - public abstract static class AbstractJSO extends JavaScriptObject { - protected AbstractJSO() { - } - - protected final native String getStringValue(String key) - /*-{ - return this[key]; - }-*/; - - protected final native void setStringValue(String key, String value) - /*-{ - this[key] = value; - }-*/; - - protected final native int getIntValue(String key) - /*-{ - return this[key]; - }-*/; - - protected final native void setIntValue(String key, int value) - /*-{ - this[key] = value; - }-*/; - - protected final native boolean getBooleanValue(String key) - /*-{ - return this[key]; - }-*/; - - protected final native void setBooleanValue(String key, boolean value) - /*-{ - this[key] = value; - }-*/; - - } - - public static class SockJSConfiguration extends AbstractJSO { - - // Vaadin to SockJS transport map - private static final Map TRANSPORT_MAPPER = new HashMap<>(); - - static { - TRANSPORT_MAPPER.put("websocket", "websocket"); - TRANSPORT_MAPPER.put("websocket-xhr", "websocket"); - TRANSPORT_MAPPER.put("long-polling", "xhr-polling"); - TRANSPORT_MAPPER.put("streaming", "xhr-streaming"); - } - - protected SockJSConfiguration() { - } - - public final String getTransport() { - return getStringValue("transport"); - } - - public final void setTransport(String transport) { - setStringValue("transport", TRANSPORT_MAPPER.getOrDefault(transport, transport)); - } - - public final String getFallbackTransport() { - return getStringValue("fallbackTransport"); - } - - public final void setFallbackTransport(String fallbackTransport) { - setStringValue("fallbackTransport", TRANSPORT_MAPPER.getOrDefault(fallbackTransport, fallbackTransport)); - } - - public final void mapTransports() { - setTransport(getTransport()); - setFallbackTransport(getFallbackTransport()); - setTransports(); - } - - private native void setTransports() - /*-{ - this.transports = [this.transport, this.fallbackTransport]; - }-*/; - - - } - - public static class TransportMessageEvent extends AbstractJSO { - - protected TransportMessageEvent() { - } - - protected final String getResponseBody() { - return getStringValue("data"); - } - - } - - public static class SockJS extends AbstractJSO { - - protected SockJS() { - } - - protected native final String getTransport() - /*-{ - return this.getTransport(); - }-*/; - - protected native final int readyState() - /*-{ - return this.getReadyState(); - }-*/; - - } - -} diff --git a/vertx-vaadin-8-parent/vaadin8-sockjs/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/PushException.java b/vertx-vaadin-8-parent/vaadin8-sockjs/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/PushException.java deleted file mode 100644 index 92ce0e76..00000000 --- a/vertx-vaadin-8-parent/vaadin8-sockjs/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/PushException.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * The MIT License - * Copyright © 2016-2020 Marco Collovati (mcollovati@gmail.com) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.github.mcollovati.vertx.vaadin.sockjs.communication; - -/** - * This exception is thrown when the server is unable - * to push data to the client. - */ -public class PushException extends RuntimeException { - - /** - * Constructs a new instance of {@link PushException} using the - * arguments supplied. - * - * @param message Additional detail about this exception. - * @see java.lang.Throwable#getMessage - */ - public PushException(String message) { - super(message); - } - - /** - * Constructs a new instance of {@link PushException} using the - * arguments supplied. - * - * @param message Additional detail about this exception. - * @param cause The cause of the exception - * @see java.lang.Throwable#getMessage - */ - public PushException(String message, Throwable cause) { - super(message, cause); - } -} diff --git a/vertx-vaadin-8-parent/vaadin8-sockjs/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/PushSocket.java b/vertx-vaadin-8-parent/vaadin8-sockjs/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/PushSocket.java deleted file mode 100644 index 41d5f125..00000000 --- a/vertx-vaadin-8-parent/vaadin8-sockjs/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/PushSocket.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * The MIT License - * Copyright © 2016-2020 Marco Collovati (mcollovati@gmail.com) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.github.mcollovati.vertx.vaadin.sockjs.communication; - -import java.io.Serializable; -import java.util.concurrent.CompletionStage; - -interface PushSocket extends Serializable { - - String getUUID(); - - String remoteAddress(); - - CompletionStage send(String message); - - CompletionStage close(); - - boolean isConnected(); - -} diff --git a/vertx-vaadin-8-parent/vaadin8-sockjs/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/SockJSPushConnection.java b/vertx-vaadin-8-parent/vaadin8-sockjs/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/SockJSPushConnection.java deleted file mode 100644 index abc21994..00000000 --- a/vertx-vaadin-8-parent/vaadin8-sockjs/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/SockJSPushConnection.java +++ /dev/null @@ -1,201 +0,0 @@ -/* - * The MIT License - * Copyright © 2016-2020 Marco Collovati (mcollovati@gmail.com) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.github.mcollovati.vertx.vaadin.sockjs.communication; - -import java.io.Reader; -import java.io.StringWriter; -import java.io.Writer; -import java.util.concurrent.Future; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; -import java.util.logging.Level; -import java.util.logging.Logger; - -import com.vaadin.server.VaadinSession; -import com.vaadin.server.communication.PushConnection; -import com.vaadin.server.communication.UidlWriter; -import com.vaadin.ui.UI; - -public class SockJSPushConnection implements PushConnection { - - private static final long serialVersionUID = 8138733886026049701L; - - private final int uiId; - private PushSocket socket; - private State state = State.DISCONNECTED; - private transient Future outgoingMessage; - - public SockJSPushConnection(UI ui) { - this.uiId = ui.getUIId(); - } - - @Override - public void push() { - push(true); - } - - /** - * Pushes pending state changes and client RPC calls to the client. If - * {@code isConnected()} is false, defers the push until a connection is - * established. - * - * @param async True if this push asynchronously originates from the server, - * false if it is a response to a client request. - */ - void push(boolean async) { - if (!isConnected()) { - if (async && state != State.RESPONSE_PENDING) { - state = State.PUSH_PENDING; - } else { - state = State.RESPONSE_PENDING; - } - } else { - try { - UI ui = VaadinSession.getCurrent().getUIById(this.uiId); - Writer writer = new StringWriter(); - new UidlWriter().write(ui, writer, async); - sendMessage("for(;;);[{" + writer + "}]"); - } catch (Exception e) { - throw new PushException("Push failed", e); - } - } - } - - private void sendMessage(String message) { - this.outgoingMessage = socket.send(message).toCompletableFuture(); - } - - public Reader receiveMessage(Reader reader) { - // SockJS will always receive the whole message - return reader; - } - - - @Override - public void disconnect() { - assert isConnected(); - if (socket == null) { - // Already disconnected. Should not happen but if it does, we don't - // want to cause NPEs - getLogger().fine( - "SockJSPushConnection.disconnect() called twice, this should not happen"); - return; - } - - if (outgoingMessage != null) { - // Wait for the last message to be sent before closing the - // connection (assumes that futures are completed in order) - try { - outgoingMessage.get(1000, TimeUnit.MILLISECONDS); - } catch (TimeoutException e) { - getLogger().log(Level.INFO, - "Timeout waiting for messages to be sent to client before disconnect"); - } catch (Exception e) { - getLogger().log(Level.INFO, - "Error waiting for messages to be sent to client before disconnect"); - } - outgoingMessage = null; - } - - // Should block until disconnection happens - try { - this.socket.close().thenRun(this::connectionLost) - .toCompletableFuture().get(); - } catch (Exception e) { - getLogger().log(Level.INFO, "Error waiting for disconnection"); - this.connectionLost(); - } - } - - @Override - public boolean isConnected() { - return state == State.CONNECTED && socket != null && socket.isConnected(); - } - - void connect(PushSocket socket) { - assert socket != null; - assert socket != this.socket; - - if (isConnected()) { - disconnect(); - } - - this.socket = socket; - State oldState = state; - state = State.CONNECTED; - - if (oldState == State.PUSH_PENDING - || oldState == State.RESPONSE_PENDING) { - // Sending a "response" message (async=false) also takes care of a - // pending push, but not vice versa - push(oldState == State.PUSH_PENDING); - } - - } - - void connectionLost() { - socket = null; - if (state == State.CONNECTED) { - // Guard against connectionLost being (incorrectly) called when - // state is PUSH_PENDING or RESPONSE_PENDING - // (http://dev.vaadin.com/ticket/16919) - state = State.DISCONNECTED; - } - } - - PushSocket getSocket() { - return socket; - } - - private static Logger getLogger() { - return Logger.getLogger(SockJSPushConnection.class.getName()); - } - - protected enum State { - /** - * Not connected. Trying to push will set the connection state to - * PUSH_PENDING or RESPONSE_PENDING and defer sending the message until - * a connection is established. - */ - DISCONNECTED, - - /** - * Not connected. An asynchronous push is pending the opening of the - * connection. - */ - PUSH_PENDING, - - /** - * Not connected. A response to a client request is pending the opening - * of the connection. - */ - RESPONSE_PENDING, - - /** - * Connected. Messages can be sent through the connection. - */ - CONNECTED; - - } - -} diff --git a/vertx-vaadin-8-parent/vaadin8-sockjs/src/main/resources/VAADIN/vaadinPushSockJS.debug.js b/vertx-vaadin-8-parent/vaadin8-sockjs/src/main/resources/VAADIN/vaadinPushSockJS.debug.js deleted file mode 100644 index 954589d2..00000000 --- a/vertx-vaadin-8-parent/vaadin8-sockjs/src/main/resources/VAADIN/vaadinPushSockJS.debug.js +++ /dev/null @@ -1,110 +0,0 @@ -window.vaadinPush = window.vaadinPush || {}; -(function(define) { - - @@sockjs-client.contents@@ - - var SockJSImpl = window.SockJS; - var SockJSWrapper = function(url, options) { - var self = this; - - options = options || {}; - self.reconnectTimerID = null; - self.reconnectEnabled = false; - self.reconnectAttempts = 0; - self.firstMessage = true; - self.maxReconnectAttempts = options.maxReconnectAttempts || Infinity; - self.reconnectInterval = options.reconnectInterval || 5000; - - - var setupSockJSConnection = function() { - self.sock = SockJSImpl(url, null, options); - self.sock.onopen = function() { - self.firstMessage = true; - if (self.reconnectTimerID) { - self.reconnectAttempts = 0; - // fire separate event for reconnects - // consistent behavior with adding handlers onopen - self.onreopen && self.onreopen(); - } - }; - - self.sock.onclose = function (e) { - if (self.reconnectEnabled) { - if (self.reconnectAttempts < self.maxReconnectAttempts) { - self.onreconnect && self.onreconnect(); - self.sock = null; - // set id so users can cancel - self.reconnectTimerID = setTimeout(setupSockJSConnection, self.reconnectInterval); - ++self.reconnectAttempts; - } else { - // notify error - var ev = new Event('reconnectionError'); - ev.transport = self.sock.transport; - self.onerror && self.onerror(ev); - } - } else { - self.onclose && self.onclose(e); - } - }; - self.sock.onmessage = function(e) { - if (self.firstMessage) { - self.firstMessage = false; - // TODO: handle first message? - self.onopen && self.onopen(); - } else { - self.onmessage && self.onmessage(e); - } - }; - self.sock.onerror = function(e) { - self.onerror && self.onerror(e); - } - }; - - setupSockJSConnection(); - - }; - - SockJSWrapper.prototype.close = function () { - this.enableReconnect(false); - this.sock.close(); - }; - SockJSWrapper.prototype.send = function(message) { - if (this.sock) { - this.sock.send(message); - } else { - throw new Error('SockJS not initialized'); - } - }; - SockJSWrapper.prototype.enableReconnect = function (enable) { - var self = this; - - self.reconnectEnabled = enable; - if (!enable && self.reconnectTimerID) { - clearTimeout(self.reconnectTimerID); - self.reconnectTimerID = null; - self.reconnectAttempts = 0; - } - }; - SockJSWrapper.prototype.getTransport = function () { - return this.sock ? this.sock.transport : null; - } - SockJSWrapper.prototype.getReadyState = function () { - return this.sock ? this.sock.readyState : SockJSImpl.CONNECTING; - }; - - this.SockJS = { - connect: function(config) { - var sock = new SockJSWrapper(config.url, config); - sock.enableReconnect(parseInt(config.reconnectInterval) > 0); - sock.onopen = config.onOpen; - sock.onmessage = config.onMessage; - sock.onclose = config.onClose; - sock.onerror = config.onError - sock.onreconnect = config.onReconnect; - sock.onreopen = config.onReopen; - return sock; - }, - } - - -}).call(window.vaadinPush); diff --git a/vertx-vaadin-8-parent/vaadin8-sockjs/src/main/resources/com/github/mcollovati/vertx/vaadin/sockjs/VaadinSockjsWidgetset.gwt.xml b/vertx-vaadin-8-parent/vaadin8-sockjs/src/main/resources/com/github/mcollovati/vertx/vaadin/sockjs/VaadinSockjsWidgetset.gwt.xml deleted file mode 100644 index e150e8d4..00000000 --- a/vertx-vaadin-8-parent/vaadin8-sockjs/src/main/resources/com/github/mcollovati/vertx/vaadin/sockjs/VaadinSockjsWidgetset.gwt.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - diff --git a/vertx-vaadin-8-parent/vertx-vaadin8/README.md b/vertx-vaadin-8-parent/vertx-vaadin8/README.md deleted file mode 100644 index 118d54c6..00000000 --- a/vertx-vaadin-8-parent/vertx-vaadin8/README.md +++ /dev/null @@ -1,268 +0,0 @@ -# Vertx-Vaadin-8 - -Vertx-Vaadin-8 is an adapter library that allow Vaadin 8.x applications to run on a Vert.x environment. - -Vertx-vaadin provides a Vert.x verticle that starts an http server and initialize `VertxVaadinService`, -a custom implementation of VaadinService. - -VertxVaadinService is inspired from VaadinServletService and takes the same configuration parameters in the form -of a json configuration file and from `@VaadinServletConfiguration` annotation on `VaadinVerticle` subclasses. - -All [Servlet Configuration Parameter](https://vaadin.com/docs/-/part/framework/application/application-environment.html#application.environment.parameters) - can be defined in json file under `vaadin` key. - -``` -{ - "vaadin": { - "ui": "com.github.mcollovati.vertx.vaadin.sample.SimpleUI", - "heartbeatInterval": 500, - "UIProvider": "com.ex.my.MyUIProvider" - } -} -``` - -Two dependencies are needed to run Vaadin on Vert.x: `vertx-vaadin` adapter and servlet APIs (because Vaadin relies on them -but they are not provided from Vert.x). - -```xml - - com.github.mcollovati.vertx - vertx-vaadin8 - 1.0.0 - - - - javax.servlet - javax.servlet-api - ${javax.servlet-api.version} - runtime - -``` - - -## PUSH support - -Vertx-Vaadin supports PUSH using a custom implementation based on SockJS that replaces the atmosphere stack on client and server side; -for this reason widgetset compilation is needed for projects using vertx-vaadin. -In order to do this add a `provided` dependency to the `vaadin8-sockjs` sources in project pom - -```xml - - com.github.mcollovati.vertx - vaadin8-sockjs - ${vertx-vaadin8.version} - provided - sources - -``` - -If the project does not rely on client side addons an already compiled widgetset based on Vaadin default widgetset -can be used; to do this simply add the classifier `full` to the `vertx-vaadin8` dependency. -Remeber that `vaadin-client-compiled` dependency MUST be removed in this case. - -```xml - - com.github.mcollovati.vertx - vertx-vaadin8 - 1.0.0 - full - -``` - - -## Getting started - -To create a Vaadin application capable to run on Vertx start with a new project using Vaadin Maven archetype - -``` -mvn archetype:generate \ --DarchetypeGroupId=com.vaadin \ --DarchetypeArtifactId=vaadin-archetype-application \ --DarchetypeVersion=8.6.3 -``` - -Now you have a Vaadin project with Maven build script. -You can build the war file using `mvn install`, start the project using `mvn jetty:run` or import it into your IDE. - - -To make the Vaadin application ready to run on Vert.x first of all clean POM file from some servlet related stuff: - -- change project packaging type from `war` to `jar` -- remove `maven-war-plugin` and `jetty-maven-plugin` -- remove `vaadin-push` dependency -- move `src/main/webapp` content to `src/main/resources` -- edit `maven-clean-plugin` configuration to change references from `src/main/webapp` into `src/main/resources` - -Then add a dependency to `vertx-vaadin` - -```xml - - com.github.mcollovati.vertx - vertx-vaadin8 - ${vertx-vaadin8.version} - -``` - -Change the scope of the servlet API dependency from 'provided' to `runtime` (or `compile` if you need to refer those APIs in your code). - -```xml - - javax.servlet - javax.servlet-api - 3.0.1 - runtime - -``` - -### Default widgetset - -If you do not need PUSH nor client side addons you can use the Vaadin default widgetset; -currently, due to a bug on `vertx-vaadin`, the default widgetset must be explicitly set -using `@Widgetset` or `@VaadinServletConfiguration` annotation. - -For example: - -```java -@VaadinServletConfiguration(..., widgetset = "com.vaadin.DefaultWidgetSet") -public static class MyUIVerticle extends VaadinVerticle { -} -``` - -or - -```java -@Widgetset("com.vaadin.DefaultWidgetSet") -public class MyUI extends UI { -} -``` - -### PUSH with default widgetset - -If you do need PUSH but the project does not need other client side addons add the `full` classifier -to the `vertx-vaadin8` dependency to use an already compiled widgetset based on Vaadin default widgetset. - -```xml - - com.github.mcollovati.vertx - vertx-vaadin8 - ${vertx-vaadin8.version} - full - -``` - -Then remove `vaadin-client-compiled` dependency, remove or configure `vaadin-maven-plugin` to avoid `compile` goal execution -and annotate UI class with `@Widgetset("com.github.mcollovati.vertx.vaadin.VaadinVertxWidgetset")`. - -```java -@Widgetset("com.github.mcollovati.vertx.vaadin.VaadinVertxWidgetset") -public class MyUI extends UI { - -} -``` - -### PUSH with custom widgetset - -If you do need PUSH and also other client side addons add the dependency to `vertx-vaadin` without the `full` classifier, -add the `vaadin8-sockjs` dependency as described in **Push Support** section and compile the widgetset as usually -(see [Vaadin documentation](https://vaadin.com/docs/v8/framework/addons/addons-maven.html) for further information). - -Also remember to configure `vaadin-maven-plugin` to put widgetset and theme stuff into `target/classes` directory, as in the example below - -```xml - - com.vaadin - vaadin-maven-plugin - ${vaadin.plugin.version} - - - - update-theme - update-widgetset - compile - - compile-theme - - - ${basedir}/target/classes/VAADIN/widgetsets - - - -Xmx1024M -Xss1024k - false - false - - true - - - - -``` - -### Vaadin Verticle - -As next step, open the `MyUI` class and replace the custom `VaadinServlet` implementation with a new `VaadinVerticle` extension. -Annotate the verticle class with `@VaadinServletConfiguration` (at the moment Vert.x-Vaadin uses the same Vaadin 8 annotation used for servlet environment) -specifying the UI class that should be served (refer to [Vaadin documentation](https://vaadin.com/docs/v8/framework/application/application-environment.html#application.environment.parameters) for -more information about available configuration parameters). - - -```java -package com.github.mcollovati.vaadin.exampleapp; - -... - -@Widgetset("com.github.mcollovati.vertx.vaadin.VaadinVertxWidgetset") -public class MyUI extends UI { - ... - - @VaadinServletConfiguration(ui = MyUI.class, productionMode = false) - public static class MyUIVerticle extends VaadinVerticle { - } -} -``` - - -The simplest way to run and package your Vert.x Vaadin application is to use `vertx-maven-plugin`. - -Open your POM file and add `vertx-maven-plugin`; -the *``* element inside plugin configuration must contain the fully qualified class name of your custom verticle. -For further configurations of vertx maven plugin refer to [documentation]((https://vmp.fabric8.io/) - - -```xml - - ... - - - ... - - io.reactiverse - vertx-maven-plugin - 1.0.18 - - - vmp-init-package - - initialize - package - - - - - true - fat - true - ${project.build.directory} - com.github.mcollovati.vaadin.exampleapp.MyUI$MyUIVerticle - - - ... - - - ... - -``` - -Build the application with `mvn package`, run it with `mvn vertx:run` and -point the browser at http://localhost:8080. - -You can also start the application with `java -jar target/.jar` \ No newline at end of file diff --git a/vertx-vaadin-8-parent/vertx-vaadin8/pom.xml b/vertx-vaadin-8-parent/vertx-vaadin8/pom.xml deleted file mode 100644 index 2850abdf..00000000 --- a/vertx-vaadin-8-parent/vertx-vaadin8/pom.xml +++ /dev/null @@ -1,281 +0,0 @@ - - 4.0.0 - - - com.github.mcollovati.vertx - vertx-vaadin-root - 1.0-dev - - - - vertx-vaadin8 - jar - vertx-vaadin8 - 2.0.1-SNAPSHOT - An adapter to run Vaadin 8 applications on Vertx - https://github.com/mcollovati/vertx-vaadin - - - 1.1.4 - false - ${project.version} - - - - - io.vertx - vertx-core - - - io.vertx - vertx-web - - - - com.github.mcollovati.vertx - vaadin8-sockjs - ${vaadin8-sockjs.version} - - - - com.vaadin - vaadin-server - - - - com.vaadin - vaadin-client - provided - - - com.vaadin - vaadin-client-compiler - provided - - - - org.slf4j - slf4j-api - - - javax.servlet - javax.servlet-api - - - - org.projectlombok - lombok - provided - - - - junit - junit - test - - - io.vertx - vertx-unit - test - - - io.vertx - vertx-hazelcast - test - - - org.mockito - mockito-core - test - - - org.assertj - assertj-core - test - - - com.pholser - junit-quickcheck-core - test - - - com.pholser - junit-quickcheck-generators - test - - - ch.qos.logback - logback-classic - test - - - - - - - src/main/resources - true - - - - - com.amashchenko.maven.plugin - gitflow-maven-plugin - 1.11.0 - - - v8- - - - - - com.igormaznitsa - uber-pom - - - - - - - full - - - vertx-vaadin.release - - - - false - - - - com.github.mcollovati.vertx - vaadin8-sockjs - ${vaadin8-sockjs.version} - sources - provided - - - - - - ${project.basedir}/src/main/resources - - - ${project.basedir}/src/widgetset/resources - - - - - com.vaadin - vaadin-maven-plugin - ${vaadin.version} - - -Xmx1024M -Xss1024k - ${basedir}/target/classes/VAADIN/widgetsets - false - false - - true - - - - - update-widgetset - compile - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven-jar-plugin.version} - - - VAADIN/** - - - - - jar-with-widgetset - package - - jar - - - - - 1 - com.github.mcollovati.vertx.vaadin.VaadinVertxWidgetset - - - - - - VAADIN/gwt-unitCache/** - VAADIN/widgetsets/WEB-INF/** - - vaadin-${vaadin.version} - - - - - - maven-deploy-plugin - - - default-deploy - none - - - deploy-widgetset - deploy - - deploy-file - - - - ${build.directory}/${build.finalName}-vaadin-${vaadin.version}.${project.packaging} - - ${distribution.releases.url} - ${distribution.releases.id} - ${project.groupId} - ${project.artifactId} - ${project.version} - ${project.packaging} - vaadin-${vaadin.version} - false - - - - - - - - - skip-default-jar - - - skipDefaultJar - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven-jar-plugin.version} - - - default-jar - none - - - - - - - - diff --git a/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/Sync.java b/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/Sync.java deleted file mode 100644 index 96b58544..00000000 --- a/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/Sync.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * The MIT License - * Copyright © 2016-2020 Marco Collovati (mcollovati@gmail.com) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.github.mcollovati.vertx; - -import java.util.concurrent.CountDownLatch; -import java.util.function.Consumer; - -import io.vertx.core.AsyncResult; -import io.vertx.core.Future; -import io.vertx.core.Handler; -import io.vertx.core.Promise; -import io.vertx.core.VertxException; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; - -/** - * Created by marco on 22/07/16. - */ -@NoArgsConstructor(access = AccessLevel.PRIVATE) -public final class Sync { - - public static T await(Consumer>> task) { - CountDownLatch countDownLatch = new CountDownLatch(1); - try { - Promise p = Promise.promise(); - Future f = p.future(); - f.onComplete(ar -> { - countDownLatch.countDown(); - if (ar.failed()) { - throw new VertxException(ar.cause()); - } - }); - task.accept(p); - countDownLatch.await(); - return f.result(); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - throw new VertxException(e); - } - } - -} diff --git a/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/vaadin/CookieUtils.java b/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/vaadin/CookieUtils.java deleted file mode 100644 index 33b3159d..00000000 --- a/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/vaadin/CookieUtils.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * The MIT License - * Copyright © 2016-2020 Marco Collovati (mcollovati@gmail.com) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.github.mcollovati.vertx.vaadin; - -import javax.servlet.http.Cookie; -import java.util.Optional; - -import io.netty.handler.codec.http.cookie.ClientCookieDecoder; - -/** - * Created by marco on 24/07/16. - */ -class CookieUtils { - - - static Cookie fromVertxCookie(io.vertx.core.http.Cookie cookie) { - io.netty.handler.codec.http.cookie.Cookie decoded = ClientCookieDecoder.STRICT.decode(cookie.encode()); - Cookie out = new Cookie(decoded.name(), decoded.value()); - Optional.ofNullable(decoded.domain()).ifPresent(out::setDomain); - out.setPath(decoded.path()); - out.setHttpOnly(decoded.isHttpOnly()); - out.setSecure(decoded.isSecure()); - if (decoded.maxAge() != Long.MIN_VALUE) { - out.setMaxAge((int) decoded.maxAge()); - } - - // TODO extract other values - return out; - } - - public static io.vertx.core.http.Cookie toVertxCookie(Cookie cookie) { - return io.vertx.core.http.Cookie.cookie(cookie.getName(), cookie.getValue()) - .setMaxAge(cookie.getMaxAge()).setSecure(cookie.getSecure()) - .setHttpOnly(cookie.isHttpOnly()).setPath(cookie.getPath()) - .setDomain(cookie.getDomain()); - } -} diff --git a/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/vaadin/UIProxy.java b/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/vaadin/UIProxy.java deleted file mode 100644 index c9ed4911..00000000 --- a/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/vaadin/UIProxy.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * The MIT License - * Copyright © 2016-2020 Marco Collovati (mcollovati@gmail.com) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.github.mcollovati.vertx.vaadin; - -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.Future; - -import com.vaadin.ui.UI; - -public class UIProxy { - - private final UI ui; - private final VertxVaadinService service; - - public UIProxy(UI ui) { - this.ui = ui; - this.service = (VertxVaadinService) ui.getSession().getService(); - } - - - public Future runLater(UIRunnable task) { - return schedule(task); - } - - public Future runLater(UITask task) { - return schedule(task); - } - - private Future schedule(UITask task) { - CompletableFuture f = new CompletableFuture<>(); - service.getVertx().createSharedWorkerExecutor("vaadin.background.worker") - .executeBlocking(completer -> { - try { - completer.complete(task.execute(ui)); - } catch (Exception ex) { - completer.fail(ex); - } - }, false, res -> { - if (res.succeeded()) { - f.complete(null); - } else { - f.completeExceptionally(res.cause()); - } - }); - return f; - } - - @FunctionalInterface - public interface UITask { - T execute(UI ui) throws Exception; - } - - @FunctionalInterface - public interface UIRunnable extends UITask { - - void run() throws Exception; - - @Override - default Void execute(UI ui) throws Exception { - run(); - return null; - } - } - -} diff --git a/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/vaadin/VaadinVerticle.java b/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/vaadin/VaadinVerticle.java deleted file mode 100644 index ca1d44ef..00000000 --- a/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/vaadin/VaadinVerticle.java +++ /dev/null @@ -1,179 +0,0 @@ -/* - * The MIT License - * Copyright © 2016-2020 Marco Collovati (mcollovati@gmail.com) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.github.mcollovati.vertx.vaadin; - -import java.io.IOException; -import java.lang.reflect.Method; -import java.net.ServerSocket; -import java.util.Optional; - -import com.vaadin.annotations.VaadinServletConfiguration; -import com.vaadin.server.VaadinServlet; -import com.vaadin.server.VaadinSession; -import com.vaadin.ui.UI; -import io.vertx.core.AbstractVerticle; -import io.vertx.core.Future; -import io.vertx.core.Promise; -import io.vertx.core.VertxException; -import io.vertx.core.http.HttpServer; -import io.vertx.core.http.HttpServerOptions; -import io.vertx.core.json.JsonObject; -import io.vertx.ext.web.Router; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * Created by marco on 16/07/16. - */ -public class VaadinVerticle extends AbstractVerticle { - - public static final String DEFAULT_WIDGETSET = "com.github.mcollovati.vertx.vaadin.VaadinVertxWidgetset"; - - private static final Logger log = LoggerFactory.getLogger(VaadinVerticle.class); - - private HttpServer httpServer; - private VertxVaadinService vaadinService; - - @Override - public void start(Promise startFuture) throws Exception { - log.info("Starting vaadin verticle " + getClass().getName()); - - VaadinVerticleConfiguration vaadinVerticleConfiguration = getClass().getAnnotation(VaadinVerticleConfiguration.class); - - JsonObject vaadinConfig = new JsonObject(); - - Optional.ofNullable(vaadinVerticleConfiguration) - .map(VaadinVerticleConfiguration::serviceName) - .ifPresent(serviceName -> vaadinConfig.put("serviceName", serviceName)); - vaadinConfig.put("mountPoint", Optional.ofNullable(vaadinVerticleConfiguration) - .map(VaadinVerticleConfiguration::mountPoint).orElse("/") - ); - readUiFromEnclosingClass(vaadinConfig); - readConfigurationAnnotation(vaadinConfig); - vaadinConfig.mergeIn(config().getJsonObject("vaadin", new JsonObject())); - - String mountPoint = vaadinConfig.getString("mountPoint"); - VertxVaadin vertxVaadin = createVertxVaadin(vaadinConfig); - vaadinService = vertxVaadin.vaadinService(); - - HttpServerOptions serverOptions = new HttpServerOptions().setCompressionSupported(true); - httpServer = vertx.createHttpServer(serverOptions); - - Router router = Router.router(vertx); - router.mountSubRouter(mountPoint, vertxVaadin.router()); - - Integer httpPort = httpPort(); - httpServer.requestHandler(router).listen(httpPort); - - serviceInitialized(vaadinService, router); - - log.info("Started vaadin verticle " + getClass().getName() + " on port " + httpPort); - startFuture.complete(); - } - - private Integer httpPort() throws IOException { - Integer httpPort = config().getInteger("httpPort", 8080); - if (httpPort == 0) { - try (ServerSocket socket = new ServerSocket(0)) { - httpPort = socket.getLocalPort(); - } - } - return httpPort; - } - - protected VertxVaadin createVertxVaadin(JsonObject vaadinConfig) { - return VertxVaadin.create(vertx, vaadinConfig); - } - - protected void serviceInitialized(VertxVaadinService service, Router router) { - // empty by default - } - - - @Override - public void stop() throws Exception { - log.info("Stopping vaadin verticle " + getClass().getName()); - try { - vaadinService.destroy(); - } catch (Exception ex) { - log.error("Error during Vaadin service destroy", ex); - } - httpServer.close(); - log.info("Stopped vaadin verticle " + getClass().getName()); - } - - // From VaadinServlet - private void readUiFromEnclosingClass(JsonObject vaadinConfig) { - Class enclosingClass = getClass().getEnclosingClass(); - - if (enclosingClass != null && UI.class.isAssignableFrom(enclosingClass)) { - vaadinConfig.put(VaadinSession.UI_PARAMETER, enclosingClass.getName()); - } - } - - // From VaadinServlet - private void readConfigurationAnnotation(JsonObject vaadinConfig) { - - VaadinServletConfiguration configAnnotation = getClass().getAnnotation(VaadinServletConfiguration.class); - if (configAnnotation != null) { - Method[] methods = VaadinServletConfiguration.class - .getDeclaredMethods(); - for (Method method : methods) { - VaadinServletConfiguration.InitParameterName name = - method.getAnnotation(VaadinServletConfiguration.InitParameterName.class); - assert name != - null : "All methods declared in VaadinServletConfiguration should have a @InitParameterName annotation"; - - try { - Object value = method.invoke(configAnnotation); - - String stringValue; - if (value instanceof Class) { - stringValue = ((Class) value).getName(); - } else { - stringValue = value.toString(); - } - - if (VaadinServlet.PARAMETER_WIDGETSET.equals(name.value()) - && method.getDefaultValue().equals(stringValue)) { - // Do not set the VertxVaadinRequestUTwidgetset to anything so that the - // framework can fallback to the default. Setting - // anything to the init parameter will force that into - // use and e.g. AppWidgetset will not be used even - // though it is found. - continue; - } - - vaadinConfig.put(name.value(), stringValue); - } catch (Exception e) { - // This should never happen - throw new VertxException( - "Could not read @VaadinServletConfiguration value " - + method.getName(), e); - } - } - } - } - - -} diff --git a/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/vaadin/VaadinVerticleConfiguration.java b/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/vaadin/VaadinVerticleConfiguration.java deleted file mode 100644 index d7800413..00000000 --- a/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/vaadin/VaadinVerticleConfiguration.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * The MIT License - * Copyright © 2016-2020 Marco Collovati (mcollovati@gmail.com) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.github.mcollovati.vertx.vaadin; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Inherited; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * Created by marco on 21/07/16. - */ -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.TYPE) -@Inherited -public @interface VaadinVerticleConfiguration { - - String serviceName(); - - String mountPoint() default "/"; -} diff --git a/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/vaadin/VertxBootstrapHandler.java b/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/vaadin/VertxBootstrapHandler.java deleted file mode 100644 index ab0ed797..00000000 --- a/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/vaadin/VertxBootstrapHandler.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * The MIT License - * Copyright © 2016-2020 Marco Collovati (mcollovati@gmail.com) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.github.mcollovati.vertx.vaadin; - -import com.vaadin.server.BootstrapHandler; -import com.vaadin.server.VaadinServlet; -import com.vaadin.server.VaadinServletService; - -public class VertxBootstrapHandler extends BootstrapHandler { - @Override - protected String getServiceUrl(BootstrapContext context) { - String pathInfo = context.getRequest().getPathInfo(); - if (pathInfo == null) { - return null; - } else { - /* - * Make a relative URL to the servlet by adding one ../ for each - * path segment in pathInfo (i.e. the part of the requested path - * that comes after the servlet mapping) - */ - return VaadinServletService.getCancelingRelativePath(pathInfo); - } - } - - @Override - public String getThemeName(BootstrapContext context) { - String themeName = context.getRequest() - .getParameter(VaadinServlet.URL_PARAMETER_THEME); - if (themeName == null) { - themeName = super.getThemeName(context); - } - return themeName; - } - - @Override - protected String getContextRootPath(BootstrapContext context) { - return VertxVaadinService - .getContextRootRelativePath(context.getRequest()) + "/"; - } - -} diff --git a/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadin.java b/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadin.java deleted file mode 100644 index 47cd8c41..00000000 --- a/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadin.java +++ /dev/null @@ -1,275 +0,0 @@ -/* - * The MIT License - * Copyright © 2016-2020 Marco Collovati (mcollovati@gmail.com) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.github.mcollovati.vertx.vaadin; - -import java.util.Objects; -import java.util.Optional; -import java.util.Properties; -import java.util.concurrent.atomic.AtomicReference; - -import com.github.mcollovati.vertx.vaadin.sockjs.communication.SockJSPushHandler; -import com.github.mcollovati.vertx.web.sstore.ExtendedLocalSessionStore; -import com.github.mcollovati.vertx.web.sstore.ExtendedSessionStore; -import com.github.mcollovati.vertx.web.sstore.NearCacheSessionStore; -import com.vaadin.server.DefaultDeploymentConfiguration; -import com.vaadin.server.ServiceException; -import com.vaadin.server.WrappedSession; -import com.vaadin.shared.Registration; -import io.vertx.core.Handler; -import io.vertx.core.Vertx; -import io.vertx.core.VertxException; -import io.vertx.core.eventbus.Message; -import io.vertx.core.eventbus.MessageConsumer; -import io.vertx.core.eventbus.MessageProducer; -import io.vertx.core.http.HttpHeaders; -import io.vertx.core.json.JsonObject; -import io.vertx.ext.web.Router; -import io.vertx.ext.web.handler.BodyHandler; -import io.vertx.ext.web.handler.SessionHandler; -import io.vertx.ext.web.handler.StaticHandler; -import io.vertx.ext.web.handler.sockjs.SockJSHandler; -import io.vertx.ext.web.handler.sockjs.SockJSHandlerOptions; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import static io.vertx.ext.web.handler.SessionHandler.DEFAULT_SESSION_TIMEOUT; - -public class VertxVaadin { - - private static final Logger logger = LoggerFactory.getLogger(VertxVaadin.class); - private static final String VAADIN_SESSION_EXPIRED_ADDRESS = "vaadin.session.expired"; - private static final String VERSION; - - private final VertxVaadinService service; - private final JsonObject config; - private final Vertx vertx; - private final Router router; - private final ExtendedSessionStore sessionStore; - - static { - String version = "0.0.0"; - Properties properties = new Properties(); - try { - properties.load(VertxVaadin.class.getResourceAsStream("version.properties")); - version = properties.getProperty("vertx-vaadin.version"); - } catch (Exception e) { - logger.warn("Unable to determine VertxVaadin version"); - } - VERSION = version; - } - - - private VertxVaadin(Vertx vertx, Optional sessionStore, JsonObject config) { - this.vertx = Objects.requireNonNull(vertx); - this.config = Objects.requireNonNull(config); - this.service = createVaadinService(); - try { - service.init(); - } catch (Exception ex) { - throw new VertxException("Cannot initialize Vaadin service", ex); - } - - //SessionStore adaptedSessionStore = SessionStoreAdapter.adapt(service, sessionStore.orElseGet(this::createSessionStore)); - this.sessionStore = withSessionExpirationHandler( - this.service, sessionStore.orElseGet(this::createSessionStore) - ); - configureSessionStore(); - this.router = initRouter(); - } - - protected VertxVaadin(Vertx vertx, ExtendedSessionStore sessionStore, JsonObject config) { - this(vertx, Optional.of(sessionStore), config); - } - - protected VertxVaadin(Vertx vertx, JsonObject config) { - this(vertx, Optional.empty(), config); - } - - private void configureSessionStore() { - final Registration sessionInitListenerReg = this.service.addSessionInitListener(event -> { - MessageConsumer consumer = sessionExpiredHandler(vertx, msg -> - Optional.of(event.getSession().getSession()) - .filter(session -> msg.body().equals(session.getId())) - .ifPresent(WrappedSession::invalidate)); - AtomicReference sessionDestroyListenerUnregister = new AtomicReference<>(); - sessionDestroyListenerUnregister.set( - event.getService().addSessionDestroyListener(ev2 -> { - consumer.unregister(); - sessionDestroyListenerUnregister.get().remove(); - }) - ); - - }); - this.service.addServiceDestroyListener(event -> sessionInitListenerReg.remove()); - } - - public Router router() { - return router; - } - - public final Vertx vertx() { - return vertx; - } - - public final VertxVaadinService vaadinService() { - return service; - } - - public String serviceName() { - return config.getString("serviceName", getClass().getName() + ".service"); - } - - - protected final JsonObject config() { - return config; - } - - protected void serviceInitialized(Router router) { - } - - protected VertxVaadinService createVaadinService() { - return new VertxVaadinService(this, createDeploymentConfiguration()); - } - - protected ExtendedSessionStore createSessionStore() { - if (vertx.isClustered()) { - logger.debug("Setup clustered session store"); - return NearCacheSessionStore.create(vertx); - } - logger.debug("Setup local session store"); - return ExtendedLocalSessionStore.create(vertx); - } - - private Router initRouter() { - - logger.trace("Initializing router"); - String sessionCookieName = sessionCookieName(); - SessionHandler sessionHandler = SessionHandler.create(sessionStore) - .setSessionTimeout(config().getLong("sessionTimeout", DEFAULT_SESSION_TIMEOUT)) - .setSessionCookieName(sessionCookieName) - .setNagHttps(false) - .setCookieHttpOnlyFlag(true); - - Router vaadinRouter = Router.router(vertx); - // Redirect mountPoint to mountPoint/ - vaadinRouter.routeWithRegex("^$").handler(ctx -> ctx.response() - .putHeader(HttpHeaders.LOCATION, ctx.request().uri() + "/") - .setStatusCode(302).end() - ); - - vaadinRouter.route().handler(BodyHandler.create()); - - // Disable SessionHandler for /VAADIN/ static resources - vaadinRouter.routeWithRegex("^(?!/VAADIN/).*$").handler(sessionHandler); - - // Forward vaadinPush javascript to sockjs implementation - vaadinRouter.routeWithRegex("/VAADIN/vaadinPush(?\\.debug)?\\.js(?\\.gz)?") - .handler(ctx -> ctx.reroute( - String.format("%s/VAADIN/vaadinPushSockJS%s.js%s", ctx.mountPoint(), - Objects.toString(ctx.request().getParam("debug"), ""), - Objects.toString(ctx.request().getParam("compressed"), "") - ) - )); - vaadinRouter.route("/VAADIN/*").handler(StaticHandler.create("VAADIN")); - - initSockJS(vaadinRouter, sessionHandler); - - vaadinRouter.route("/*").handler(routingContext -> { - VertxVaadinRequest request = new VertxVaadinRequest(service, routingContext); - VertxVaadinResponse response = new VertxVaadinResponse(service, routingContext); - - try { - service.handleRequest(request, response); - response.end(); - } catch (ServiceException ex) { - routingContext.fail(ex); - } - }); - - - serviceInitialized(vaadinRouter); - return vaadinRouter; - } - - private void initSockJS(Router vaadinRouter, SessionHandler sessionHandler) { - logger.debug("Routing PUSH requests on /PUSH/* "); - SockJSHandlerOptions options = new SockJSHandlerOptions() - .setSessionTimeout(config().getLong("sessionTimeout", DEFAULT_SESSION_TIMEOUT)) - .setHeartbeatInterval(service.getDeploymentConfiguration().getHeartbeatInterval() * 1000); - SockJSHandler sockJSHandler = SockJSHandler.create(vertx, options); - SockJSPushHandler pushHandler = new SockJSPushHandler(service, sessionHandler, sockJSHandler); - vaadinRouter.route("/PUSH/*").handler(pushHandler); - } - - - private String sessionCookieName() { - return config().getString("sessionCookieName", "vertx-web.session"); - } - - private DefaultDeploymentConfiguration createDeploymentConfiguration() { - return new DefaultDeploymentConfiguration(getClass(), initProperties()); - } - - private Properties initProperties() { - Properties initParameters = new Properties(); - initParameters.putAll(config().getMap()); - return initParameters; - } - - // TODO: change JsonObject to VaadinOptions interface - public static VertxVaadin create(Vertx vertx, ExtendedSessionStore sessionStore, JsonObject config) { - return new VertxVaadin(vertx, sessionStore, config); - } - - public static VertxVaadin create(Vertx vertx, JsonObject config) { - return new VertxVaadin(vertx, config); - } - - - private static ExtendedSessionStore withSessionExpirationHandler( - VertxVaadinService service, ExtendedSessionStore store - ) { - MessageProducer sessionExpiredProducer = sessionExpiredProducer(service); - store.expirationHandler(res -> { - if (res.succeeded()) { - sessionExpiredProducer.write(res.result()); - } else { - res.cause().printStackTrace(); - } - }); - return store; - } - - private static MessageProducer sessionExpiredProducer(VertxVaadinService vaadinService) { - return vaadinService.getVertx().eventBus().sender(VAADIN_SESSION_EXPIRED_ADDRESS); - } - - public static MessageConsumer sessionExpiredHandler(Vertx vertx, Handler> handler) { - return vertx.eventBus().consumer(VAADIN_SESSION_EXPIRED_ADDRESS, handler); - } - - public static String getVersion() { - return VERSION; - } - -} diff --git a/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinRequest.java b/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinRequest.java deleted file mode 100644 index de8d9655..00000000 --- a/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinRequest.java +++ /dev/null @@ -1,313 +0,0 @@ -/* - * The MIT License - * Copyright © 2016-2020 Marco Collovati (mcollovati@gmail.com) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.github.mcollovati.vertx.vaadin; - -import javax.servlet.http.Cookie; -import java.io.BufferedReader; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.StringReader; -import java.security.Principal; -import java.time.ZoneId; -import java.time.ZonedDateTime; -import java.time.format.DateTimeFormatter; -import java.time.format.DateTimeParseException; -import java.util.Collections; -import java.util.Enumeration; -import java.util.Locale; -import java.util.Map; -import java.util.Optional; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import java.util.stream.Stream; - -import com.github.mcollovati.vertx.Sync; -import com.github.mcollovati.vertx.web.ExtendedSession; -import com.vaadin.server.VaadinRequest; -import com.vaadin.server.WrappedSession; -import io.vertx.core.http.HttpHeaders; -import io.vertx.core.http.HttpServerRequest; -import io.vertx.core.net.SocketAddress; -import io.vertx.ext.auth.User; -import io.vertx.ext.web.LanguageHeader; -import io.vertx.ext.web.RoutingContext; -import lombok.AccessLevel; -import lombok.RequiredArgsConstructor; - -import static java.util.function.Function.identity; -import static java.util.stream.Collectors.toList; -import static java.util.stream.Collectors.toMap; - -/** - * Created by marco on 16/07/16. - */ -public class VertxVaadinRequest implements VaadinRequest { - - private static final Pattern CONTENT_TYPE_PATTERN = Pattern.compile("^(.*/[^;]+)(?:;.*$|$)", Pattern.CASE_INSENSITIVE); - private static final Pattern CHARSET_PATTERN = Pattern.compile("^.*(?<=charset=)([^;]+)(?:;.*$|$)", Pattern.CASE_INSENSITIVE); - - private final VertxVaadinService service; - private final RoutingContext routingContext; - private final HttpServerRequest request; - - public VertxVaadinRequest(VertxVaadinService service, RoutingContext routingContext) { - this.service = service; - this.routingContext = routingContext; - this.request = routingContext.request(); - - } - - public HttpServerRequest getRequest() { - return request; - } - - public RoutingContext getRoutingContext() { - return routingContext; - } - - @Override - public String getParameter(String parameter) { - return request.getParam(parameter); - } - - @Override - public Map getParameterMap() { - return request.params().names() - .stream().collect(toMap(identity(), k -> request.params().getAll(k).toArray(new String[0]))); - } - - @Override - public int getContentLength() { - return routingContext.getBody().length(); - } - - @Override - public InputStream getInputStream() throws IOException { - return new ByteArrayInputStream(routingContext.getBody().getBytes()); - } - - @Override - public Object getAttribute(String name) { - return routingContext.get(name); - } - - @Override - public void setAttribute(String name, Object value) { - routingContext.put(name, value); - } - - @Override - public void removeAttribute(String name) { - routingContext.put(name, null); - } - - @Override - public String getPathInfo() { - return request.path().substring(getContextPath().length()); - } - - @Override - public String getContextPath() { - return Optional.ofNullable(routingContext.mountPoint()).orElse(""); - } - - @Override - public WrappedSession getWrappedSession() { - return getWrappedSession(true); - } - - @Override - public WrappedSession getWrappedSession(boolean allowSessionCreation) { - return Optional.ofNullable(routingContext.session()) - .map(ExtendedSession::adapt) - .map(VertxWrappedSession::new).orElse(null); - } - - @Override - public String getContentType() { - return Optional.ofNullable(request.getHeader(HttpHeaders.CONTENT_TYPE)) - .map(CONTENT_TYPE_PATTERN::matcher).filter(Matcher::matches) - .map(m -> m.group(1)).orElse(null); - } - - @Override - public Locale getLocale() { - return toJavaLocale(routingContext.preferredLanguage()); - } - - @Override - public String getRemoteAddr() { - return Optional.ofNullable(request.remoteAddress()) - .map(SocketAddress::host).orElse(null); - } - - @Override - public boolean isSecure() { - return request.isSSL(); - } - - @Override - public String getHeader(String headerName) { - return request.getHeader(headerName); - } - - @Override - public VertxVaadinService getService() { - return service; - } - - @Override - public Cookie[] getCookies() { - if (routingContext.cookieCount() > 0) { - return routingContext.cookieMap().values().stream().map(CookieUtils::fromVertxCookie).toArray(Cookie[]::new); - } - return null; - } - - // TODO - @Override - public String getAuthType() { - return null; - } - - @Override - public String getRemoteUser() { - return Optional.ofNullable(routingContext.user()) - .map(User::principal).flatMap(json -> Optional.ofNullable(json.getString("username"))) - .orElse(null); - } - - @Override - public Principal getUserPrincipal() { - return Optional.ofNullable(routingContext.user()) - .map(VertxPrincipal::new) - .orElse(null); - } - - // TODO - @Override - public boolean isUserInRole(String role) { - if (routingContext.user() != null) { - return Sync.await(completer -> routingContext.user().isAuthorized(role, completer)); - } - return false; - } - - @Override - public Enumeration getAttributeNames() { - return Collections.enumeration(routingContext.data().keySet()); - } - - @Override - public Enumeration getLocales() { - return Collections.enumeration(routingContext.acceptableLanguages().stream() - .map(VertxVaadinRequest::toJavaLocale).collect(toList())); - } - - @Override - public String getRemoteHost() { - return request.host(); - } - - @Override - public int getRemotePort() { - return Optional.ofNullable(request.remoteAddress()) - .map(SocketAddress::port).orElse(-1); - } - - @Override - public String getCharacterEncoding() { - return Optional.ofNullable(request.getHeader(HttpHeaders.CONTENT_TYPE)) - .map(CHARSET_PATTERN::matcher).filter(Matcher::matches) - .map(m -> m.group(1)).orElse(null); - } - - @Override - public BufferedReader getReader() throws IOException { - return new BufferedReader(new StringReader(routingContext.getBodyAsString())); - } - - @Override - public String getMethod() { - return request.method().name(); - } - - @Override - public long getDateHeader(String name) { - return Optional.ofNullable(request.getHeader(name)) - .flatMap(s -> tryParseDate(s, DateTimeFormatter.RFC_1123_DATE_TIME, - DateTimeFormatter.ofPattern("EEEE, dd-MMM-yy HH:mm:ss zzz"), - DateTimeFormatter.ofPattern("EEE MMM ppd HH:mm:ss yyyy").withZone(ZoneId.of("GMT")) - )).orElse(-1L); - } - - private Optional tryParseDate(String date, DateTimeFormatter... formatter) { - return Stream.of(formatter) - .findFirst().map(f -> { - try { - return Optional.of(ZonedDateTime.parse(date, f).toEpochSecond() * 1000); - } catch (DateTimeParseException ex) { - return tryParseDate(date, Stream.of(formatter).skip(1).toArray(DateTimeFormatter[]::new)); - } - }).orElse(Optional.empty()); - } - - @Override - public Enumeration getHeaderNames() { - return Collections.enumeration(request.headers().names()); - } - - @Override - public Enumeration getHeaders(String name) { - return Collections.enumeration(request.headers().getAll(name)); - } - - private static Locale toJavaLocale(LanguageHeader locale) { - return Optional.ofNullable(locale) - .map(loc -> new Locale(loc.tag(), - Optional.ofNullable(loc.subtag()).orElse(""), - Optional.ofNullable(loc.subtag(2)).orElse("") - )) - .orElse(null); - } - - public static Optional tryCast(VaadinRequest request) { - if (request instanceof VertxVaadinRequest) { - return Optional.of((VertxVaadinRequest) request); - } - return Optional.empty(); - } - - @RequiredArgsConstructor(access = AccessLevel.PRIVATE) - private static class VertxPrincipal implements Principal { - - private final User user; - - @Override - public String getName() { - return user.principal().getString("username"); - } - } - -} diff --git a/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinResponse.java b/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinResponse.java deleted file mode 100644 index f3dbecaf..00000000 --- a/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinResponse.java +++ /dev/null @@ -1,166 +0,0 @@ -/* - * The MIT License - * Copyright © 2016-2020 Marco Collovati (mcollovati@gmail.com) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.github.mcollovati.vertx.vaadin; - - -import java.io.IOException; -import java.io.OutputStream; -import java.io.PrintWriter; -import java.io.Writer; -import java.time.Instant; -import java.time.OffsetDateTime; -import java.time.ZoneId; -import java.time.format.DateTimeFormatter; - -import com.vaadin.server.ExposeVaadinServerPkg; -import com.vaadin.server.VaadinResponse; -import io.vertx.core.buffer.Buffer; -import io.vertx.core.http.HttpHeaders; -import io.vertx.core.http.HttpServerResponse; -import io.vertx.ext.web.RoutingContext; - -/** - * Created by marco on 16/07/16. - */ -public class VertxVaadinResponse implements VaadinResponse { - - private final RoutingContext routingContext; - private final HttpServerResponse response; - private final VertxVaadinService service; - ; - private Buffer outBuffer = Buffer.buffer(); - private boolean useOOS = false; - private boolean useWriter = false; - - public VertxVaadinResponse(VertxVaadinService service, RoutingContext routingContext) { - this.routingContext = routingContext; - this.response = routingContext.response(); - this.service = service; - } - - protected final RoutingContext getRoutingContext() { - return routingContext; - } - - @Override - public void setStatus(int statusCode) { - response.setStatusCode(statusCode); - } - - @Override - public void setContentType(String contentType) { - response.putHeader(HttpHeaders.CONTENT_TYPE, contentType); - } - - @Override - public void setHeader(String name, String value) { - response.putHeader(name, value); - } - - @Override - public void setDateHeader(String name, long timestamp) { - response.putHeader(name, DateTimeFormatter.RFC_1123_DATE_TIME.format( - OffsetDateTime.ofInstant(Instant.ofEpochMilli(timestamp), ZoneId.of("GMT"))) - ); - } - - @Override - public OutputStream getOutputStream() throws IOException { - if (useWriter) { - throw new IllegalStateException("getWriter() has already been called for this response"); - } - useOOS = true; - return new OutputStream() { - @Override - public void write(int b) throws IOException { - outBuffer.appendByte((byte) b); - } - - @Override - public void close() throws IOException { - response.end(outBuffer); - } - }; - } - - @Override - public PrintWriter getWriter() throws IOException { - if (useOOS) { - throw new IllegalStateException("getOutputStream() has already been called for this response"); - } - useWriter = true; - return new PrintWriter(new Writer() { - @Override - public void write(char[] cbuf, int off, int len) throws IOException { - outBuffer.appendString(new String(cbuf, off, len)); - } - - @Override - public void flush() throws IOException { - response.write(outBuffer); - outBuffer = Buffer.buffer(); - } - - @Override - public void close() throws IOException { - response.end(outBuffer); - } - }); - } - - @Override - public void setCacheTime(long milliseconds) { - ExposeVaadinServerPkg.setCacheTime(this, milliseconds); - } - - @Override - public void sendError(int errorCode, String message) throws IOException { - response.setStatusCode(errorCode).end(message); - } - - @Override - public VertxVaadinService getService() { - return service; - } - - @Override - public void addCookie(javax.servlet.http.Cookie cookie) { - routingContext.addCookie(CookieUtils.toVertxCookie(cookie)); - } - - @Override - public void setContentLength(int len) { - response.putHeader(HttpHeaders.CONTENT_LENGTH, Integer.toString(len)); - } - - /** - * Ends the response. - * - * Does nothing if response is already endend or if it is chunked. - */ - void end() { - if (!response.ended() && !response.isChunked()) { - response.end(outBuffer); - } - } -} diff --git a/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinService.java b/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinService.java deleted file mode 100644 index 82fcf1fb..00000000 --- a/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinService.java +++ /dev/null @@ -1,234 +0,0 @@ -/* - * The MIT License - * Copyright © 2016-2020 Marco Collovati (mcollovati@gmail.com) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.github.mcollovati.vertx.vaadin; - -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.InputStream; -import java.nio.file.Paths; -import java.util.List; -import java.util.Optional; - -import com.vaadin.server.DefaultDeploymentConfiguration; -import com.vaadin.server.RequestHandler; -import com.vaadin.server.ServiceException; -import com.vaadin.server.ServletPortletHelper; -import com.vaadin.server.VaadinRequest; -import com.vaadin.server.VaadinService; -import com.vaadin.server.VaadinServlet; -import com.vaadin.server.VaadinServletService; -import com.vaadin.server.VaadinSession; -import com.vaadin.server.communication.ServletUIInitHandler; -import com.vaadin.ui.UI; -import com.vaadin.ui.themes.ValoTheme; -import io.vertx.core.Vertx; -import io.vertx.core.VertxException; -import io.vertx.core.file.FileSystem; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * Created by marco on 16/07/16. - */ -public class VertxVaadinService extends VaadinService { - - private static final Logger logger = LoggerFactory.getLogger(VertxVaadinService.class); - - private final VertxVaadin vertxVaadin; - - public VertxVaadinService(VertxVaadin vertxVaadin, DefaultDeploymentConfiguration deploymentConfiguration) { - super(deploymentConfiguration); - this.vertxVaadin = vertxVaadin; - } - - public Vertx getVertx() { - return vertxVaadin.vertx(); - } - - @Override - protected List createRequestHandlers() - throws ServiceException { - List handlers = super.createRequestHandlers(); - handlers.add(0, new VertxBootstrapHandler()); - handlers.add(new ServletUIInitHandler()); - return handlers; - } - - @Override - public boolean ensurePushAvailable() { - return true; - } - - @Override - public String getStaticFileLocation(VaadinRequest request) { - String staticFileLocation; - // if property is defined in configurations, use that - staticFileLocation = getDeploymentConfiguration().getResourcesPath(); - if (staticFileLocation != null) { - return staticFileLocation; - } - - VertxVaadinRequest vertxRequest = (VertxVaadinRequest) request; - String requestedPath = vertxRequest.getRequest().path() - .substring( - Optional.ofNullable(vertxRequest.getRoutingContext().mountPoint()) - .map(String::length).orElse(0) - ); - return VaadinServletService.getCancelingRelativePath(requestedPath); - } - - @Override - public String getConfiguredWidgetset(VaadinRequest request) { - return getDeploymentConfiguration().getWidgetset(VaadinServlet.DEFAULT_WIDGETSET); - } - - @Override - public String getConfiguredTheme(VaadinRequest request) { - return ValoTheme.THEME_NAME; - } - - @Override - public boolean isStandalone(VaadinRequest request) { - return true; - } - - @Override - public String getMimeType(String resourceName) { - return null; - } - - // TODO: from system property? - @Override - public File getBaseDirectory() { - return new File("."); - } - - // From VaadinServletService - @Override - protected boolean requestCanCreateSession(VaadinRequest request) { - if (ServletUIInitHandler.isUIInitRequest(request)) { - // This is the first request if you are embedding by writing the - // embedding code yourself - return true; - } else if (isOtherRequest(request)) { - /* - * I.e URIs that are not RPC calls or static (theme) files. - */ - return true; - } - - return false; - } - - // From VaadinServletService - private boolean isOtherRequest(VaadinRequest request) { - // TODO This should be refactored in some way. It should not be - // necessary to check all these types. - return (!ServletPortletHelper.isAppRequest(request) - && !ServletUIInitHandler.isUIInitRequest(request) - && !ServletPortletHelper.isFileUploadRequest(request) - && !ServletPortletHelper.isHeartbeatRequest(request) - && !ServletPortletHelper.isPublishedFileRequest(request) - && !ServletPortletHelper.isUIDLRequest(request) && !ServletPortletHelper - .isPushRequest(request)); - } - - @Override - public String getServiceName() { - return vertxVaadin.serviceName(); - } - - @Override - public InputStream getThemeResourceAsStream(UI uI, String themeName, String resource) { - String filename = VaadinServlet.THEME_DIR_PATH + '/' + themeName - + "/" + resource; - - String normalized = Paths.get(filename).normalize().toString(); - if (!normalized.startsWith("VAADIN/") - || normalized.contains("/../")) { - throw new VertxException(String.format( - "Requested resource [%s] not accessible in the VAADIN directory or access to it is forbidden.", - filename)); - } - FileSystem fileSystem = getVertx().fileSystem(); - if (fileSystem.existsBlocking(filename)) { - - return new ByteArrayInputStream(fileSystem.readFileBlocking(filename).getBytes()); - } - return null; - } - - - // Adapted from VaadinServletService - @Override - public String getMainDivId(VaadinSession session, VaadinRequest request, Class uiClass) { - String appId = request.getPathInfo(); - if (appId == null || "".equals(appId) || "/".equals(appId)) { - appId = "ROOT"; - } - appId = appId.replaceAll("[^a-zA-Z0-9]", ""); - // Add hashCode to the end, so that it is still (sort of) - // predictable, but indicates that it should not be used in CSS - // and - // such: - int hashCode = appId.hashCode(); - if (hashCode < 0) { - hashCode = -hashCode; - } - appId = appId + "-" + hashCode; - return appId; - } - - @Override - public void destroy() { - super.destroy(); - } - - /** - * Gets a relative path you can use to refer to the context root. - * - * @param request the request for which the location should be determined - * @return A relative path to the context root. Never ends with a slash (/). - */ - public static String getContextRootRelativePath(VaadinRequest request) { - VertxVaadinRequest servletRequest = (VertxVaadinRequest) request; - // Generate location from the request by finding how many "../" should - // be added to the servlet path before we get to the context root - - String servletPath = ""; - - String pathInfo = servletRequest.getPathInfo(); - if (pathInfo != null && !pathInfo.isEmpty()) { - servletPath += pathInfo; - } - - return getCancelingRelativePath(servletPath); - } - - // Just to avoid direct calls to VaadinServletService - // from outside VertxVaadinService - public static String getCancelingRelativePath(String servletPath) { - return VaadinServletService.getCancelingRelativePath(servletPath); - } - -} diff --git a/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/vaadin/VertxWrappedSession.java b/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/vaadin/VertxWrappedSession.java deleted file mode 100644 index c235bd58..00000000 --- a/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/vaadin/VertxWrappedSession.java +++ /dev/null @@ -1,206 +0,0 @@ -/* - * The MIT License - * Copyright © 2016-2020 Marco Collovati (mcollovati@gmail.com) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.github.mcollovati.vertx.vaadin; - -import javax.servlet.ServletContext; -import javax.servlet.http.HttpSession; -import javax.servlet.http.HttpSessionBindingEvent; -import javax.servlet.http.HttpSessionBindingListener; -import javax.servlet.http.HttpSessionContext; -import java.util.Collections; -import java.util.Enumeration; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; -import java.util.Set; - -import com.github.mcollovati.vertx.web.ExtendedSession; -import com.vaadin.server.WrappedSession; -import lombok.AccessLevel; -import lombok.RequiredArgsConstructor; -import lombok.experimental.Delegate; - -import static java.util.stream.Collectors.toMap; - -/** - * Created by marco on 16/07/16. - */ -@RequiredArgsConstructor(access = AccessLevel.PUBLIC) -public class VertxWrappedSession implements WrappedSession { - - - private final ExtendedSession delegate; - - public ExtendedSession getVertxSession() { - return delegate; - } - - @Override - public int getMaxInactiveInterval() { - return Long.valueOf(delegate.timeout()).intValue() / 1000; - } - - @Override - public void setMaxInactiveInterval(int interval) { - throw new UnsupportedOperationException("Setting max interval is not supported on Vert.x session"); - } - - @Override - public Object getAttribute(String name) { - checkSessionState(); - return delegate.get(name); - } - - @Override - // TODO: fire HttpSessionAttributeListener - public void setAttribute(String name, Object value) { - checkSessionState(); - if (value == null) { - removeAttribute(name); - } else { - tryCastHttpSessionBindingListener(delegate.get(name)) - .ifPresent(oldValue -> oldValue.valueUnbound(createHttpSessionBindingEvent(name, oldValue))); - delegate.put(name, value); - tryCastHttpSessionBindingListener(value) - .ifPresent(listener -> listener.valueBound(createHttpSessionBindingEvent(name, value))); - } - } - - @Override - public Set getAttributeNames() { - checkSessionState(); - return delegate.data().keySet(); - } - - @Override - // TODO: catch HttpSessionBindingListener exceptions? - public void invalidate() { - checkSessionState(); - Map toUnbind = delegate.data().entrySet().stream() - .filter(entry -> HttpSessionBindingListener.class.isInstance(entry.getValue())) - .collect(toMap(Map.Entry::getKey, e -> HttpSessionBindingListener.class.cast(e.getValue()))); - delegate.destroy(); - toUnbind.forEach((name, listener) -> listener.valueUnbound(createHttpSessionBindingEvent(name, listener))); - toUnbind.clear(); - } - - @Override - public String getId() { - return delegate.id(); - } - - @Override - public long getCreationTime() { - return delegate.createdAt(); - } - - @Override - public long getLastAccessedTime() { - checkSessionState(); - return delegate.lastAccessed(); - } - - @Override - public boolean isNew() { - checkSessionState(); - return delegate.lastAccessed() == 0L; - } - - @Override - public void removeAttribute(String name) { - checkSessionState(); - tryCastHttpSessionBindingListener(delegate.remove(name)) - .ifPresent(oldValue -> oldValue.valueUnbound(createHttpSessionBindingEvent(name, oldValue))); - } - - private void checkSessionState() { - if (delegate.isDestroyed()) { - throw new IllegalStateException("Session already invalidated"); - } - } - - private Optional tryCastHttpSessionBindingListener(Object value) { - return Optional.ofNullable(value) - .filter(HttpSessionBindingListener.class::isInstance) - .map(HttpSessionBindingListener.class::cast); - } - - private HttpSessionBindingEvent createHttpSessionBindingEvent(String name, Object value) { - return new HttpSessionBindingEvent(new VertxHttpSession(this), name, value); - } - -} - -class VertxHttpSession implements HttpSession { - - @Delegate(excludes = Exclusions.class) - private VertxWrappedSession delegate; - - VertxHttpSession(ExtendedSession session) { - this(new VertxWrappedSession(Objects.requireNonNull(session))); - } - - public VertxHttpSession(VertxWrappedSession session) { - this.delegate = Objects.requireNonNull(session); - } - - @Override - public ServletContext getServletContext() { - return null; - } - - @Override - public HttpSessionContext getSessionContext() { - throw new UnsupportedOperationException("Deprecated"); - } - - @Override - public Object getValue(String name) { - return delegate.getAttribute(name); - } - - @Override - public Enumeration getAttributeNames() { - return Collections.enumeration(delegate.getAttributeNames()); - } - - @Override - public String[] getValueNames() { - return delegate.getAttributeNames().toArray(new String[0]); - } - - @Override - public void putValue(String name, Object value) { - delegate.setAttribute(name, value); - } - - @Override - public void removeValue(String name) { - delegate.removeAttribute(name); - } - - private interface Exclusions { - Set getAttributeNames(); - } - -} diff --git a/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/SockJSPushHandler.java b/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/SockJSPushHandler.java deleted file mode 100644 index 568315d3..00000000 --- a/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/SockJSPushHandler.java +++ /dev/null @@ -1,614 +0,0 @@ -/* - * The MIT License - * Copyright © 2016-2020 Marco Collovati (mcollovati@gmail.com) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.github.mcollovati.vertx.vaadin.sockjs.communication; - -import java.io.IOException; -import java.io.Reader; -import java.io.StringReader; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Objects; -import java.util.Optional; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.CompletionStage; -import java.util.concurrent.TimeUnit; -import java.util.function.Function; - -import com.github.mcollovati.vertx.http.HttpServerResponseWrapper; -import com.github.mcollovati.vertx.vaadin.VertxVaadinRequest; -import com.github.mcollovati.vertx.vaadin.VertxVaadinService; -import com.vaadin.server.ErrorEvent; -import com.vaadin.server.ErrorHandler; -import com.vaadin.server.LegacyCommunicationManager; -import com.vaadin.server.ServiceException; -import com.vaadin.server.ServletPortletHelper; -import com.vaadin.server.SessionExpiredException; -import com.vaadin.server.SystemMessages; -import com.vaadin.server.VaadinRequest; -import com.vaadin.server.VaadinService; -import com.vaadin.server.VaadinSession; -import com.vaadin.server.communication.ExposeVaadinCommunicationPkg; -import com.vaadin.server.communication.PushConnection; -import com.vaadin.server.communication.ServerRpcHandler; -import com.vaadin.shared.ApplicationConstants; -import com.vaadin.shared.communication.PushMode; -import com.vaadin.ui.UI; -import com.vaadin.util.CurrentInstance; -import elemental.json.JsonException; -import io.vertx.core.Handler; -import io.vertx.core.Vertx; -import io.vertx.core.buffer.Buffer; -import io.vertx.core.http.HttpServerRequest; -import io.vertx.core.http.HttpServerResponse; -import io.vertx.core.shareddata.LocalMap; -import io.vertx.ext.web.RoutingContext; -import io.vertx.ext.web.Session; -import io.vertx.ext.web.handler.SessionHandler; -import io.vertx.ext.web.handler.sockjs.SockJSHandler; -import io.vertx.ext.web.handler.sockjs.SockJSSocket; -import io.vertx.ext.web.impl.RoutingContextDecorator; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * Handles incoming push connections and messages and dispatches them to the - * correct {@link UI}/ {@link SockJSPushConnection}. - * - * Source code adapted from Vaadin {@link com.vaadin.server.communication.PushHandler} - */ -public class SockJSPushHandler implements Handler { - - private static final Logger logger = LoggerFactory.getLogger(SockJSPushHandler.class); - - /** - * Callback used when we receive a UIDL request through Atmosphere. If the - * push channel is bidirectional (websockets), the request was sent via the - * same channel. Otherwise, the client used a separate AJAX request. Handle - * the request and send changed UI state via the push channel (we do not - * respond to the request directly.) - */ - private final PushEventCallback receiveCallback = (PushEvent event, UI ui) -> { - - logger.debug("Received message from resource {}", event.socket().getUUID()); - - PushSocket socket = event.socket; - SockJSPushConnection connection = getConnectionForUI(ui); - - assert connection != null : "Got push from the client " - + "even though the connection does not seem to be " - + "valid. This might happen if a HttpSession is " - + "serialized and deserialized while the push " - + "connection is kept open or if the UI has a " - + "connection of unexpected type."; - - - Reader reader = event.message().map(buffer -> new StringReader(buffer.toString())) - .map(connection::receiveMessage).orElse(null); - if (reader == null) { - // The whole message was not yet received - return; - } - - - // Should be set up by caller - VaadinRequest vaadinRequest = VaadinService.getCurrentRequest(); - assert vaadinRequest != null; - - try { - new ServerRpcHandler().handleRpc(ui, reader, vaadinRequest); - connection.push(false); - } catch (JsonException e) { - logger.error("Error writing JSON to response", e); - // Refresh on client side - sendRefreshAndDisconnect(socket); - } catch (LegacyCommunicationManager.InvalidUIDLSecurityKeyException e) { - logger.warn("Invalid security key received from {}", socket.remoteAddress()); - // Refresh on client side - sendRefreshAndDisconnect(socket); - } - }; - private final VertxVaadinService service; - private final SockJSHandler sockJSHandler; - private final SessionHandler sessionHandler; - private final LocalMap connectedSocketsLocalMap; - - /** - * Callback used when we receive a request to establish a push channel for a - * UI. Associate the SockJS socket with the UI and leave the connection - * open. If there is a pending push, send it now. - */ - private final PushEventCallback establishCallback = (PushEvent event, UI ui) -> { - logger.debug("New push connection for resource {} with transport {}", event.socket().getUUID(), "resource.transport()"); - - VaadinSession session = ui.getSession(); - PushSocket socket = event.socket; - - HttpServerRequest request = event.routingContext.request(); - - String requestToken = request.getParam(ApplicationConstants.PUSH_ID_PARAMETER); - if (!isPushIdValid(session, requestToken)) { - logger.warn("Invalid identifier in new connection received from {}", socket.remoteAddress()); - // Refresh on client side, create connection just for - // sending a message - sendRefreshAndDisconnect(socket); - return; - } - - SockJSPushConnection connection = getConnectionForUI(ui); - assert (connection != null); - - connection.connect(socket); - }; - - public SockJSPushHandler(VertxVaadinService service, SessionHandler sessionHandler, SockJSHandler sockJSHandler) { - this.service = service; - this.sessionHandler = sessionHandler; - this.sockJSHandler = sockJSHandler; - this.connectedSocketsLocalMap = socketsMap(service.getVertx()); - this.sockJSHandler.socketHandler(this::onConnect); - } - - - private void onConnect(SockJSSocket sockJSSocket) { - RoutingContext routingContext = CurrentInstance.get(RoutingContext.class); - - String uuid = sockJSSocket.writeHandlerID(); - connectedSocketsLocalMap.put(uuid, sockJSSocket); - PushSocket socket = new PushSocketImpl(sockJSSocket); - - initSocket(sockJSSocket, routingContext, socket); - - // Send an ACK - socket.send("ACK-CONN|" + uuid); - - sessionHandler.handle(new SockJSRoutingContext(routingContext, rc -> - callWithUi(new PushEvent(socket, routingContext, null), establishCallback) - )); - } - - private void initSocket(SockJSSocket sockJSSocket, RoutingContext routingContext, PushSocket socket) { - sockJSSocket.handler(data -> sessionHandler.handle( - new SockJSRoutingContext(routingContext, rc -> onMessage(new PushEvent(socket, rc, data))) - )); - sockJSSocket.endHandler(unused -> sessionHandler.handle( - new SockJSRoutingContext(routingContext, rc -> onDisconnect(new PushEvent(socket, rc, null))) - )); - sockJSSocket.exceptionHandler(t -> sessionHandler.handle( - new SockJSRoutingContext(routingContext, rc -> onError(new PushEvent(socket, routingContext, null), t)) - )); - - } - - private void onDisconnect(PushEvent ev) { - connectedSocketsLocalMap.remove(ev.socket.getUUID()); - connectionLost(ev); - } - - private void onError(PushEvent ev, Throwable t) { - logger.error("Exception in push connection", t); - connectionLost(ev); - } - - private void onMessage(PushEvent event) { - callWithUi(event, receiveCallback); - } - - @Override - public void handle(RoutingContext routingContext) { - CurrentInstance.set(RoutingContext.class, routingContext); - try { - sockJSHandler.handle(routingContext); - } finally { - CurrentInstance.set(RoutingContext.class, null); - } - } - - private void callWithUi(final PushEvent event, final PushEventCallback callback) { - - PushSocket socket = event.socket; - RoutingContext routingContext = event.routingContext; - VertxVaadinRequest vaadinRequest = new VertxVaadinRequest(service, routingContext); - VaadinSession session = null; - - service.requestStart(vaadinRequest, null); - try { - try { - session = service.findVaadinSession(vaadinRequest); - assert VaadinSession.getCurrent() == session; - - } catch (ServiceException e) { - logger.error("Could not get session. This should never happen", e); - return; - } catch (SessionExpiredException e) { - SystemMessages msg = service - .getSystemMessages(ServletPortletHelper.findLocale(null, - null, vaadinRequest), vaadinRequest); - sendNotificationAndDisconnect(socket, - VaadinService.createCriticalNotificationJSON( - msg.getSessionExpiredCaption(), - msg.getSessionExpiredMessage(), null, - msg.getSessionExpiredURL())); - return; - } - - UI ui = null; - session.lock(); - try { - ui = service.findUI(vaadinRequest); - assert UI.getCurrent() == ui; - - if (ui == null) { - sendNotificationAndDisconnect( - socket, ExposeVaadinCommunicationPkg.getUINotFoundErrorJSON(service, vaadinRequest) - ); - } else { - callback.run(event, ui); - } - } catch (final IOException e) { - callErrorHandler(session, e); - } catch (final Exception e) { - SystemMessages msg = service - .getSystemMessages(ServletPortletHelper.findLocale(null, - null, vaadinRequest), vaadinRequest); - - - /* TODO: verify */ - PushSocket errorSocket = getOpenedPushConnection(socket, ui); - sendNotificationAndDisconnect(errorSocket, - VaadinService.createCriticalNotificationJSON( - msg.getInternalErrorCaption(), - msg.getInternalErrorMessage(), null, - msg.getInternalErrorURL())); - callErrorHandler(session, e); - } finally { - try { - session.unlock(); - } catch (Exception e) { - logger.warn("Error while unlocking session", e); - // can't call ErrorHandler, we (hopefully) don't have a lock - } - } - } finally { - try { - service.requestEnd(vaadinRequest, null, session); - } catch (Exception e) { - logger.warn("Error while ending request", e); - - // can't call ErrorHandler, we don't have a lock - } - - } - } - - private PushSocket getOpenedPushConnection(PushSocket socket, UI ui) { - PushSocket errorSocket = socket; - if (ui != null && ui.getPushConnection() != null) { - // We MUST use the opened push connection if there is one. - // Otherwise we will write the response to the wrong request - // when using streaming (the client -> server request - // instead of the opened push channel) - errorSocket = ((SockJSPushConnection) ui.getPushConnection()).getSocket(); - } - return errorSocket; - } - - /** - * Call the session's {@link ErrorHandler}, if it has one, with the given - * exception wrapped in an {@link ErrorEvent}. - */ - private void callErrorHandler(VaadinSession session, Exception e) { - try { - ErrorHandler errorHandler = ErrorEvent.findErrorHandler(session); - if (errorHandler != null) { - errorHandler.error(new ErrorEvent(e)); - } - } catch (Exception ex) { - // Let's not allow error handling to cause trouble; log fails - logger.warn("ErrorHandler call failed", ex); - } - } - - void connectionLost(PushEvent event) { - // We don't want to use callWithUi here, as it assumes there's a client - // request active and does requestStart and requestEnd among other - // things. - - VaadinRequest vaadinRequest = new VertxVaadinRequest(service, event.routingContext); - VaadinSession session; - - try { - session = service.findVaadinSession(vaadinRequest); - } catch (ServiceException e) { - logger.error("Could not get session. This should never happen", e); - return; - } catch (SessionExpiredException e) { - // This happens at least if the server is restarted without - // preserving the session. After restart the client reconnects, gets - // a session expired notification and then closes the connection and - // ends up here - logger.debug("Session expired before push disconnect event was received", e); - return; - } - - UI ui; - session.lock(); - try { - VaadinSession.setCurrent(session); - // Sets UI.currentInstance - ui = service.findUI(vaadinRequest); - if (ui == null) { - /* - * UI not found, could be because FF has asynchronously closed - * the websocket connection and Atmosphere has already done - * cleanup of the request attributes. - * - * In that case, we still have a chance of finding the right UI - * by iterating through the UIs in the session looking for one - * using the same AtmosphereResource. - */ - ui = findUiUsingSocket(event.socket(), session.getUIs()); - - if (ui == null) { - logger.debug("Could not get UI. This should never happen," - + " except when reloading in Firefox and Chrome -" - + " see http://dev.vaadin.com/ticket/14251."); - return; - } else { - logger.info("No UI was found based on data in the request," - + " but a slower lookup based on the AtmosphereResource succeeded." - + " See http://dev.vaadin.com/ticket/14251 for more details."); - } - } - - PushMode pushMode = ui.getPushConfiguration().getPushMode(); - SockJSPushConnection pushConnection = getConnectionForUI(ui); - - String id = event.socket().getUUID(); - - if (pushConnection == null) { - logger.warn("Could not find push connection to close: {} with transport {}", id, "resource.transport()"); - } else { - if (!pushMode.isEnabled()) { - /* - * The client is expected to close the connection after push - * mode has been set to disabled. - */ - logger.debug("Connection closed for resource {}", id); - } else { - /* - * Unexpected cancel, e.g. if the user closes the browser - * tab. - */ - logger.debug("Connection unexpectedly closed for resource {} with transport {}", id, "resource.transport()"); - } - - pushConnection.connectionLost(); - } - - } catch (final Exception e) { - callErrorHandler(session, e); - } finally { - try { - session.unlock(); - } catch (Exception e) { - logger.warn("Error while unlocking session", e); - // can't call ErrorHandler, we (hopefully) don't have a lock - } - } - } - - private static LocalMap socketsMap(Vertx vertx) { - return vertx.sharedData().getLocalMap(SockJSPushHandler.class.getName() + ".push-sockets"); - } - - /** - * Checks whether a given push id matches the session's push id. - * - * @param session the vaadin session for which the check should be done - * @param requestPushId the push id provided in the request - * @return {@code true} if the id is valid, {@code false} otherwise - */ - private static boolean isPushIdValid(VaadinSession session, String requestPushId) { - - String sessionPushId = session.getPushId(); - return requestPushId != null && requestPushId.equals(sessionPushId); - } - - /** - * Tries to send a critical notification to the client and close the - * connection. Does nothing if the connection is already closed. - */ - private static void sendNotificationAndDisconnect( - PushSocket socket, String notificationJson) { - try { - socket.send(notificationJson); - socket.close(); - } catch (Exception e) { - logger.debug("Failed to send critical notification to client", e); - } - } - - private static SockJSPushConnection getConnectionForUI(UI ui) { - PushConnection pushConnection = ui.getPushConnection(); - if (pushConnection instanceof SockJSPushConnection) { - return (SockJSPushConnection) pushConnection; - } else { - return null; - } - } - - private static UI findUiUsingSocket(PushSocket socket, Collection uIs) { - for (UI ui : uIs) { - PushConnection pushConnection = ui.getPushConnection(); - if (pushConnection instanceof SockJSPushConnection && - ((SockJSPushConnection) pushConnection).getSocket() == socket) { - return ui; - } - } - return null; - } - - private static void sendRefreshAndDisconnect(PushSocket socket) { - sendNotificationAndDisconnect(socket, VaadinService - .createCriticalNotificationJSON(null, null, null, null)); - } - - private interface PushEventCallback { - void run(PushEvent event, UI ui) throws IOException; - } - - private static class PushSocketImpl implements PushSocket { - - private final String socketUUID; - private final String remoteAddress; - - PushSocketImpl(SockJSSocket socket) { - this.socketUUID = socket.writeHandlerID(); - this.remoteAddress = socket.remoteAddress().toString(); - } - - @Override - public String getUUID() { - return socketUUID; - } - - @Override - public String remoteAddress() { - return remoteAddress; - } - - @Override - public CompletionStage send(String message) { - return runCommand(socket -> { - socket.write(Buffer.buffer(message)); - return Boolean.TRUE; - }); - } - - @Override - public CompletionStage close() { - return runCommand(socket -> { - socket.close(); - return Boolean.TRUE; - }); - } - - @Override - public boolean isConnected() { - try { - return runCommand(Objects::nonNull).get(1000, TimeUnit.MILLISECONDS); - } catch (Exception e) { - return false; - } - } - - // Should run sync to avoid hanging on vaadin session - private CompletableFuture runCommand(Function action) { - CompletableFuture future = new CompletableFuture<>(); - Vertx vertx = Vertx.currentContext().owner(); - SockJSSocket socket = SockJSPushHandler.socketsMap(vertx).get(socketUUID); - if (socket != null) { - try { - future.complete(action.apply(socket)); - } catch (Exception ex) { - future.completeExceptionally(ex); - } - } else { - future.completeExceptionally(new RuntimeException("Socket not registered: " + socketUUID)); - } - return future; - } - } - - private static class PushEvent { - private final Buffer message; - private final RoutingContext routingContext; - private final PushSocket socket; - - PushEvent(PushSocket socket, RoutingContext routingContext, Buffer message) { - this.message = message; - this.routingContext = routingContext; - this.socket = socket; - } - - PushSocket socket() { - return socket; - } - - Optional message() { - return Optional.ofNullable(message); - } - } - - -} - -class SockJSRoutingContext extends RoutingContextDecorator { - - private final List> headersEndHandlers = new ArrayList<>(); - private final Handler action; - private Session session; - - SockJSRoutingContext(RoutingContext source, Handler action) { - super(source.currentRoute(), source); - this.action = action; - } - - - @Override - public HttpServerResponse response() { - return new HttpServerResponseWrapper(super.response()) { - @Override - public int getStatusCode() { - return 200; - } - }; - - } - - @Override - public Session session() { - return this.session; - } - - @Override - public void setSession(Session session) { - this.session = session; - } - - @Override - public void next() { - vertx().runOnContext(future -> { - action.handle(this); - headersEndHandlers.forEach(h -> h.handle(null)); - }); - } - - @Override - public int addHeadersEndHandler(Handler handler) { - headersEndHandlers.add(handler); - return headersEndHandlers.size(); - } - -} \ No newline at end of file diff --git a/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/web/sstore/ExtendedLocalSessionStoreImpl.java b/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/web/sstore/ExtendedLocalSessionStoreImpl.java deleted file mode 100644 index 2b8ab4c5..00000000 --- a/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/web/sstore/ExtendedLocalSessionStoreImpl.java +++ /dev/null @@ -1,128 +0,0 @@ -/* - * The MIT License - * Copyright © 2016-2020 Marco Collovati (mcollovati@gmail.com) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.github.mcollovati.vertx.web.sstore; - -import java.util.Objects; -import java.util.Set; - -import io.vertx.core.AsyncResult; -import io.vertx.core.Future; -import io.vertx.core.Handler; -import io.vertx.core.Vertx; -import io.vertx.core.json.JsonObject; -import io.vertx.core.shareddata.LocalMap; -import io.vertx.ext.web.Session; -import io.vertx.ext.web.sstore.LocalSessionStore; -import io.vertx.ext.web.sstore.impl.LocalSessionStoreImpl; - -class ExtendedLocalSessionStoreImpl implements ExtendedLocalSessionStore { - - - private final LocalMap localMap; - private final LocalSessionStore sessionsStore; - private Handler> expirationHandler = x -> {}; - - public ExtendedLocalSessionStoreImpl(Vertx vertx, String sessionMapName, long reaperInterval) { - this.localMap = vertx.sharedData().getLocalMap(sessionMapName); - this.sessionsStore = new LocalSessionStoreImpl() { - @Override - public synchronized void handle(Long tid) { - notifyExpiredSessions(() -> super.handle(tid)); - } - }; - this.sessionsStore.init(vertx, new JsonObject().put("mapName", sessionMapName).put("reaperInterval", reaperInterval)); - } - - @Override - public ExtendedSessionStore init(Vertx vertx, JsonObject options) { - return this; - } - - @Override - public ExtendedLocalSessionStore expirationHandler(Handler> handler) { - this.expirationHandler = Objects.requireNonNull(handler); - return this; - } - - @Override - public long retryTimeout() { - return sessionsStore.retryTimeout(); - } - - @Override - public Session createSession(long timeout) { - return sessionsStore.createSession(timeout); - } - - @Override - public Session createSession(long timeout, int length) { - return sessionsStore.createSession(timeout, length); - } - - @Override - public void get(String id, Handler> resultHandler) { - sessionsStore.get(id, resultHandler); - } - - @Override - public void delete(String id, Handler> resultHandler) { - sessionsStore.delete(id, resultHandler); - } - - - @Override - public void put(Session session, Handler> resultHandler) { - sessionsStore.put(session, resultHandler); - } - - @Override - public void clear(Handler> resultHandler) { - sessionsStore.clear(resultHandler); - } - - @Override - public void size(Handler> resultHandler) { - sessionsStore.size(resultHandler); - } - - @Override - public void close() { - sessionsStore.close(); - } - - private void notifyExpiredSessions(Runnable reaper) { - Set before = localMap.keySet(); - reaper.run(); - before.removeAll(localMap.keySet()); - before.forEach(this::onSessionExpired); - } - - protected void onSessionExpired(String sessionId) { - try { - expirationHandler.handle(Future.succeededFuture(sessionId)); - } catch (Exception ex) { - expirationHandler.handle(Future.failedFuture(ex)); - } - } - -} diff --git a/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/web/sstore/NearCacheSessionStoreImpl.java b/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/web/sstore/NearCacheSessionStoreImpl.java deleted file mode 100644 index 5711c66e..00000000 --- a/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/web/sstore/NearCacheSessionStoreImpl.java +++ /dev/null @@ -1,175 +0,0 @@ -/* - * The MIT License - * Copyright © 2016-2020 Marco Collovati (mcollovati@gmail.com) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.github.mcollovati.vertx.web.sstore; - -import java.util.HashSet; -import java.util.Objects; -import java.util.Set; - -import io.vertx.core.AsyncResult; -import io.vertx.core.Future; -import io.vertx.core.Handler; -import io.vertx.core.Vertx; -import io.vertx.core.json.JsonObject; -import io.vertx.core.shareddata.LocalMap; -import io.vertx.ext.web.Session; -import io.vertx.ext.web.sstore.ClusteredSessionStore; -import io.vertx.ext.web.sstore.SessionStore; - -class NearCacheSessionStoreImpl implements NearCacheSessionStore, Handler { - - - private final Vertx vertx; - private final long reaperInterval; - private final LocalMap localMap; - private final ClusteredSessionStore clusteredSessionStore; - private Handler> expirationHandler = x -> {}; - private long timerID = -1; - private boolean closed; - - public NearCacheSessionStoreImpl(Vertx vertx, String sessionMapName, long retryTimeout, long reaperInterval) { - this.vertx = vertx; - this.reaperInterval = reaperInterval; - this.clusteredSessionStore = ClusteredSessionStore.create(vertx, sessionMapName, retryTimeout); - this.localMap = vertx.sharedData().getLocalMap(sessionMapName); - this.setTimer(); - } - - @Override - public NearCacheSessionStore expirationHandler(Handler> handler) { - this.expirationHandler = Objects.requireNonNull(handler); - return this; - } - - @Override - public SessionStore init(Vertx vertx, JsonObject options) { - return this; - } - - @Override - public long retryTimeout() { - return clusteredSessionStore.retryTimeout(); - } - - @Override - public Session createSession(long timeout) { - return clusteredSessionStore.createSession(timeout); - } - - @Override - public Session createSession(long timeout, int length) { - return clusteredSessionStore.createSession(timeout, length); - } - - @Override - public void get(String id, Handler> resultHandler) { - clusteredSessionStore.get(id, res -> { - if (res.succeeded()) { - Session localSession = localMap.get(id); - if (localSession == null && res.result() != null) { - localMap.put(id, res.result()); - } - resultHandler.handle(Future.succeededFuture(localMap.get(id))); - } else { - resultHandler.handle(Future.failedFuture(res.cause())); - } - }); - } - - @Override - public void delete(String id, Handler> resultHandler) { - clusteredSessionStore.delete(id, res -> { - if (res.succeeded()) { - localMap.remove(id); - resultHandler.handle(Future.succeededFuture()); - } else { - resultHandler.handle(Future.failedFuture(res.cause())); - } - }); - } - - - @Override - public void put(Session session, Handler> resultHandler) { - clusteredSessionStore.put(session, res -> { - localMap.put(session.id(), session); - if (res.succeeded()) { - resultHandler.handle(Future.succeededFuture()); - } else { - resultHandler.handle(Future.failedFuture(res.cause())); - } - }); - } - - @Override - public void clear(Handler> resultHandler) { - clusteredSessionStore.clear(res -> { - if (res.succeeded()) { - localMap.clear(); - resultHandler.handle(Future.succeededFuture()); - } else { - resultHandler.handle(Future.failedFuture(res.cause())); - } - }); - } - - @Override - public void size(Handler> resultHandler) { - resultHandler.handle(Future.succeededFuture(localMap.size())); - } - - @Override - public synchronized void close() { - clusteredSessionStore.close(); - localMap.close(); - if (timerID != -1) { - vertx.cancelTimer(timerID); - } - closed = true; - } - - @Override - public synchronized void handle(Long tid) { - long now = System.currentTimeMillis(); - Set toRemove = new HashSet<>(); - for (Session session : localMap.values()) { - if (now - session.lastAccessed() > session.timeout()) { - toRemove.add(session.id()); - } - } - for (String id : toRemove) { - delete(id, res -> expirationHandler.handle(res.map(x -> id))); - } - if (!closed) { - setTimer(); - } - } - - private void setTimer() { - if (reaperInterval != 0) { - timerID = vertx.setTimer(reaperInterval, this); - } - } - - -} diff --git a/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/vaadin/server/ExposeVaadinServerPkg.java b/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/vaadin/server/ExposeVaadinServerPkg.java deleted file mode 100644 index 2c8e4bd1..00000000 --- a/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/vaadin/server/ExposeVaadinServerPkg.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * The MIT License - * Copyright © 2016-2020 Marco Collovati (mcollovati@gmail.com) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.vaadin.server; - -/** - * Created by marco on 24/07/16. - */ -public interface ExposeVaadinServerPkg { - - static void setCacheTime(VaadinResponse vaadinResponse, long millis) { - VaadinServletResponse.doSetCacheTime(vaadinResponse, millis); - } -} diff --git a/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/vaadin/server/communication/ExposeVaadinCommunicationPkg.java b/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/vaadin/server/communication/ExposeVaadinCommunicationPkg.java deleted file mode 100644 index d6fd84ff..00000000 --- a/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/vaadin/server/communication/ExposeVaadinCommunicationPkg.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * The MIT License - * Copyright © 2016-2020 Marco Collovati (mcollovati@gmail.com) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.vaadin.server.communication; - -import java.io.IOException; -import java.io.Reader; - -import com.vaadin.server.VaadinRequest; -import com.vaadin.server.VaadinService; - -/** - * Created by marco on 18/07/16. - */ -public interface ExposeVaadinCommunicationPkg { - - static String getUINotFoundErrorJSON(VaadinService service, VaadinRequest vaadinRequest) { - return UidlRequestHandler.getUINotFoundErrorJSON(service, vaadinRequest); - } - - /* - static AtmosphereResource resourceFromPushConnection(UI ui) { - return ((AtmospherePushConnection) ui.getPushConnection()).getResource(); - } - */ - - static Reader readMessageFromPushConnection(AtmospherePushConnection pushConnection, Reader reader) throws IOException { - return pushConnection.receiveMessage(reader); - } - -} diff --git a/vertx-vaadin-8-parent/vertx-vaadin8/src/test/java/com/github/mcollovati/vertx/vaadin/SessionStoreAdapterIT.java b/vertx-vaadin-8-parent/vertx-vaadin8/src/test/java/com/github/mcollovati/vertx/vaadin/SessionStoreAdapterIT.java deleted file mode 100644 index aadec982..00000000 --- a/vertx-vaadin-8-parent/vertx-vaadin8/src/test/java/com/github/mcollovati/vertx/vaadin/SessionStoreAdapterIT.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * The MIT License - * Copyright © 2016-2020 Marco Collovati (mcollovati@gmail.com) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.github.mcollovati.vertx.vaadin; - -import java.util.ArrayList; -import java.util.List; - -import com.vaadin.annotations.VaadinServletConfiguration; -import com.vaadin.server.VaadinRequest; -import com.vaadin.ui.UI; -import io.vertx.core.Vertx; -import io.vertx.core.http.HttpClientRequest; -import io.vertx.core.http.HttpClientResponse; -import io.vertx.core.http.HttpMethod; -import io.vertx.ext.unit.Async; -import io.vertx.ext.unit.TestContext; -import io.vertx.ext.unit.junit.VertxUnitRunner; -import io.vertx.ext.web.Router; -import org.junit.After; -import org.junit.Before; -import org.junit.Ignore; -import org.junit.Test; -import org.junit.runner.RunWith; - -/** - * Created by marco on 16/07/16. - */ -@RunWith(VertxUnitRunner.class) -@Ignore -public class SessionStoreAdapterIT { - - private static final int PORT = 8080; - Vertx vertx; - SessionTestVerticle testVerticle; - - @Before - public void setUp(TestContext context) { - vertx = Vertx.vertx(); - testVerticle = new SessionTestVerticle(); - vertx.deployVerticle(testVerticle, context.asyncAssertSuccess()); - } - - @After - public void tearDown(TestContext context) { - vertx.close(context.asyncAssertSuccess()); - } - - @Test - public void testVerticle(TestContext context) { - - final Async async = context.async(); - - vertx.createHttpClient().request(HttpMethod.GET, PORT, "localhost", "/") - .flatMap(HttpClientRequest::send) - .flatMap(HttpClientResponse::body) - .onComplete(b -> { - context.assertTrue(b.toString().contains("Done")); - async.complete(); - }); - } - - @VaadinServletConfiguration(productionMode = false, ui = MyUi.class) - public static class SessionTestVerticle extends VaadinVerticle { - - List sessionEvents = new ArrayList<>(); - - void registerSessionEvent(String event) { - sessionEvents.add(event); - } - - @Override - protected void serviceInitialized(VertxVaadinService service, Router router) { - context.put("mySelf", this); - router.get("/destroySession").handler(rc -> { - rc.session().destroy(); - rc.response().end("Session destroyed"); - }); - } - - } - - public static class MyUi extends UI { - - @Override - protected void init(VaadinRequest request) { - request.getService().addSessionDestroyListener(e -> { - ((SessionTestVerticle) ((VertxVaadinService) e.getService()).getVertx().getOrCreateContext().get("mySelf")) - .registerSessionEvent("Session destroyed"); - }); - } - } - -} diff --git a/vertx-vaadin-8-parent/vertx-vaadin8/src/test/java/com/github/mcollovati/vertx/vaadin/VaadinVerticleWidgetsetUT.java b/vertx-vaadin-8-parent/vertx-vaadin8/src/test/java/com/github/mcollovati/vertx/vaadin/VaadinVerticleWidgetsetUT.java deleted file mode 100644 index f6961717..00000000 --- a/vertx-vaadin-8-parent/vertx-vaadin8/src/test/java/com/github/mcollovati/vertx/vaadin/VaadinVerticleWidgetsetUT.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * The MIT License - * Copyright © 2016-2020 Marco Collovati (mcollovati@gmail.com) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.github.mcollovati.vertx.vaadin; - -import com.vaadin.annotations.VaadinServletConfiguration; -import com.vaadin.server.VaadinServlet; -import com.vaadin.ui.UI; -import io.vertx.core.json.JsonObject; -import io.vertx.ext.unit.TestContext; -import io.vertx.ext.unit.junit.RunTestOnContext; -import io.vertx.ext.unit.junit.VertxUnitRunner; -import org.junit.Rule; -import org.junit.Test; -import org.junit.runner.RunWith; - -import static org.assertj.core.api.Assertions.assertThat; - -@RunWith(VertxUnitRunner.class) -public class VaadinVerticleWidgetsetUT { - - public static final String TEST_WIDGETSET = "MyWidgetSet"; - @Rule - public RunTestOnContext rule = new RunTestOnContext(); - - @Test - public void shouldIgnoreDefaultWidgetsetFromVaadinServletConfiguration(TestContext context) { - WithoutDefaultWidgetSet verticle = new WithoutDefaultWidgetSet(); - rule.vertx().deployVerticle(verticle, context.asyncAssertSuccess(event -> { - assertThat(verticle.config.containsKey(VaadinServlet.PARAMETER_WIDGETSET)).isFalse(); - })); - } - - @Test - public void shouldUseWidgetsetFromVaadinServletConfiguration(TestContext context) { - WithDefaultWidgetSet verticle = new WithDefaultWidgetSet(); - rule.vertx().deployVerticle(verticle, context.asyncAssertSuccess(event -> { - assertThat(verticle.config.containsKey(VaadinServlet.PARAMETER_WIDGETSET)).isTrue(); - assertThat(verticle.config.getString(VaadinServlet.PARAMETER_WIDGETSET)).isEqualTo(TEST_WIDGETSET); - })); - } - - private static abstract class StubVerticle extends VaadinVerticle { - JsonObject config; - - @Override - protected VertxVaadin createVertxVaadin(JsonObject vaadinConfig) { - this.config = vaadinConfig; - return super.createVertxVaadin(vaadinConfig); - } - } - - @VaadinServletConfiguration(ui = UI.class, productionMode = false, widgetset = TEST_WIDGETSET) - private static class WithDefaultWidgetSet extends StubVerticle { - } - - @VaadinServletConfiguration(ui = UI.class, productionMode = false) - private static class WithoutDefaultWidgetSet extends StubVerticle { - } - - -} diff --git a/vertx-vaadin-8-parent/vertx-vaadin8/src/test/java/com/github/mcollovati/vertx/vaadin/VertxVaadinRequestUT.java b/vertx-vaadin-8-parent/vertx-vaadin8/src/test/java/com/github/mcollovati/vertx/vaadin/VertxVaadinRequestUT.java deleted file mode 100644 index 5a13a5a0..00000000 --- a/vertx-vaadin-8-parent/vertx-vaadin8/src/test/java/com/github/mcollovati/vertx/vaadin/VertxVaadinRequestUT.java +++ /dev/null @@ -1,431 +0,0 @@ -/* - * The MIT License - * Copyright © 2016-2020 Marco Collovati (mcollovati@gmail.com) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.github.mcollovati.vertx.vaadin; - -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.time.ZonedDateTime; -import java.util.Arrays; -import java.util.HashMap; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import com.github.mcollovati.vertx.utils.RandomStringGenerator; -import com.github.mcollovati.vertx.web.ExtendedSession; -import com.pholser.junit.quickcheck.From; -import com.pholser.junit.quickcheck.Property; -import com.pholser.junit.quickcheck.generator.InRange; -import com.pholser.junit.quickcheck.runner.JUnitQuickcheck; -import io.vertx.core.AsyncResult; -import io.vertx.core.Future; -import io.vertx.core.Handler; -import io.vertx.core.MultiMap; -import io.vertx.core.buffer.Buffer; -import io.vertx.core.http.HttpHeaders; -import io.vertx.core.http.HttpMethod; -import io.vertx.core.http.HttpServerRequest; -import io.vertx.core.json.JsonObject; -import io.vertx.core.net.impl.SocketAddressImpl; -import io.vertx.ext.auth.User; -import io.vertx.core.http.Cookie; -import io.vertx.ext.web.RoutingContext; -import io.vertx.ext.web.Session; -import io.vertx.ext.web.impl.ParsableLanguageValue; -import org.junit.Before; -import org.junit.Ignore; -import org.junit.Rule; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.junit.MockitoJUnit; -import org.mockito.junit.MockitoRule; - -import static java.util.Collections.emptyList; -import static java.util.Collections.emptyMap; -import static java.util.Collections.list; -import static java.util.function.Function.identity; -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.entry; -import static org.mockito.Matchers.isA; -import static org.mockito.Mockito.doAnswer; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -/** - * Created by marco on 16/07/16. - */ -@SuppressWarnings("unchecked") -@RunWith(JUnitQuickcheck.class) -public class VertxVaadinRequestUT { - - private static final int TRIALS = 10; - @Rule - public MockitoRule mokitoRule = MockitoJUnit.rule(); - - @Mock - HttpServerRequest httpServerRequest; - @Mock - RoutingContext routingContext; - - @Mock - VertxVaadinService vaadinService; - - VertxVaadinRequest vaadinRequest; - - @Before - public void setUp() { - when(routingContext.request()).thenReturn(httpServerRequest); - vaadinRequest = new VertxVaadinRequest(vaadinService, routingContext); - } - - - @Property(trials = TRIALS) - public void shouldDelegateGetParameterToHttpServerRequest(@From(RandomStringGenerator.class) String paramName, - @From(RandomStringGenerator.class) String value) { - when(httpServerRequest.getParam(paramName)).thenReturn(value); - assertThat(vaadinRequest.getParameter(paramName)).isEqualTo(value); - assertThat(vaadinRequest.getParameter(paramName + "NotExists")).isNull(); - } - - @Property(trials = TRIALS) - public void shouldDelegateGetParameterMapToHttpServerRequest(Map> map) { - MultiMap multiMap = map.entrySet().stream().collect(MultiMap::caseInsensitiveMultiMap, - (mm, kv) -> mm.add(kv.getKey(), kv.getValue()), MultiMap::addAll); - when(httpServerRequest.params()).thenReturn(multiMap); - Map.Entry[] expected = map.entrySet().stream() - .map(e -> entry(e.getKey(), - e.getValue().stream().toArray(String[]::new))) - .toArray(Map.Entry[]::new); - - assertThat(vaadinRequest.getParameterMap()) - .containsOnlyKeys(map.keySet().stream().toArray(String[]::new)) - .containsOnly(expected); - } - - @Property(trials = TRIALS) - public void shouldDelegateGetContentLengthToHttpServerRequest(@InRange(minInt = 0, maxInt = 5000) int length) { - when(routingContext.getBody()).thenReturn(Buffer.buffer(new byte[length])); - assertThat(vaadinRequest.getContentLength()).isEqualTo(length); - } - - @Property(trials = TRIALS) - public void shouldDelegateGetInputStreamToHttpServerRequest(String body) throws IOException { - when(routingContext.getBody()).thenReturn(Buffer.buffer(body)); - assertThat(vaadinRequest.getInputStream()) - .hasSameContentAs(new ByteArrayInputStream(body.getBytes())); - } - - @Property(trials = TRIALS) - public void shouldDelegateGetReaderToHttpServerRequest(String body) throws IOException { - when(routingContext.getBodyAsString()).thenReturn(body); - assertThat(vaadinRequest.getReader().lines().collect(Collectors.joining(System.lineSeparator()))) - .isEqualTo(body); - } - - @Property(trials = TRIALS) - public void shouldDelegateGetAttributeToRoutingContext(@From(RandomStringGenerator.class) String paramName, - @From(RandomStringGenerator.class) String value) { - when(routingContext.get(paramName)).thenReturn(value); - assertThat(vaadinRequest.getAttribute(paramName)).isEqualTo(value); - assertThat(vaadinRequest.getAttribute(paramName + "NotExists")).isNull(); - } - - @Property(trials = TRIALS) - public void shouldDelegateSetAttributeToRoutingContext(@From(RandomStringGenerator.class) String paramName, - Object value) { - vaadinRequest.setAttribute(paramName, value); - verify(routingContext).put(paramName, value); - } - - @Property(trials = TRIALS) - public void shouldDelegateRemoveAttributeToRoutingContext(@From(RandomStringGenerator.class) String paramName) { - vaadinRequest.removeAttribute(paramName); - verify(routingContext).put(paramName, null); - } - - @Test - public void shouldDelegateGetAttributeNamesToRoutingContext() { - Map data = new HashMap() {{ - put("a", "a"); - put("b", "b"); - put("c", "c"); - }}; - when(routingContext.data()).thenReturn(emptyMap(), data); - assertThat(list(vaadinRequest.getAttributeNames())).isEmpty(); - assertThat(list(vaadinRequest.getAttributeNames())).contains("a", "b", "c"); - } - - @Test - public void shouldDelegateGetPathInfo() { - assertPathInfo("", "", ""); - assertPathInfo("", "/", "/"); - assertPathInfo("", "/path", "/path"); - assertPathInfo("", "/path/other", "/path/other"); - assertPathInfo("/ui", "/ui", ""); - assertPathInfo("/ui", "/ui/", "/"); - assertPathInfo("/ui", "/ui/path", "/path"); - assertPathInfo("/ui", "/ui/path/other", "/path/other"); - } - - @Test - public void shouldDelegateGetContextPath() { - when(routingContext.mountPoint()).thenReturn(null); - assertThat(vaadinRequest.getContextPath()).isEqualTo(""); - when(routingContext.mountPoint()).thenReturn(""); - assertThat(vaadinRequest.getContextPath()).isEqualTo(""); - when(routingContext.mountPoint()).thenReturn("/ui"); - assertThat(vaadinRequest.getContextPath()).isEqualTo("/ui"); - } - - @Test - public void shouldDelegateGetWrappedSessionToRoutingContext() { - when(routingContext.session()).thenReturn(null); - assertThat(vaadinRequest.getWrappedSession()).isNull(); - assertThat(vaadinRequest.getWrappedSession(true)).isNull(); - assertThat(vaadinRequest.getWrappedSession(false)).isNull(); - - Session session = mock(ExtendedSession.class); - when(routingContext.session()).thenReturn(session); - assertThat(vaadinRequest.getWrappedSession()).isExactlyInstanceOf(VertxWrappedSession.class) - .extracting(ws -> ((VertxWrappedSession) ws).getVertxSession()).isEqualTo(session); - assertThat(vaadinRequest.getWrappedSession(true)).isExactlyInstanceOf(VertxWrappedSession.class) - .extracting(ws -> ((VertxWrappedSession) ws).getVertxSession()).isEqualTo(session); - assertThat(vaadinRequest.getWrappedSession(false)).isExactlyInstanceOf(VertxWrappedSession.class) - .extracting(ws -> ((VertxWrappedSession) ws).getVertxSession()).isEqualTo(session); - - } - - @Test - public void shouldDelegateGetContentType() { - when(httpServerRequest.getHeader(HttpHeaders.CONTENT_TYPE)).thenReturn(null, "text/html", - "text/html;charset=UTF-8", "text/html; charset=UTF-8", "text/html; charset=UTF-8;", - "text/plain; charset=ISO-8859-1; format=flowed"); - assertThat(vaadinRequest.getContentType()).isNull(); - assertThat(vaadinRequest.getContentType()).isEqualTo("text/html"); - assertThat(vaadinRequest.getContentType()).isEqualTo("text/html"); - assertThat(vaadinRequest.getContentType()).isEqualTo("text/html"); - assertThat(vaadinRequest.getContentType()).isEqualTo("text/html"); - assertThat(vaadinRequest.getContentType()).isEqualTo("text/plain"); - } - - @Test - public void shouldDelegateGetLocale() { - when(routingContext.preferredLanguage()).thenReturn(null) - .thenReturn(new ParsableLanguageValue("en_US")); - assertThat(vaadinRequest.getLocale()).isNull(); - assertThat(vaadinRequest.getLocale()).isEqualTo(java.util.Locale.forLanguageTag("en-US")); - } - - @Test - public void shouldDelegateGetRemoteAddress() { - when(httpServerRequest.remoteAddress()) - .thenReturn(null) - .thenReturn(new SocketAddressImpl(8080, "10.3.100.108")); - assertThat(vaadinRequest.getRemoteAddr()).isNull(); - assertThat(vaadinRequest.getRemoteAddr()).isEqualTo("10.3.100.108"); - } - - @Test - public void shouldDelegateIsSecure() { - when(httpServerRequest.isSSL()) - .thenReturn(false).thenReturn(true); - assertThat(vaadinRequest.isSecure()).isFalse(); - assertThat(vaadinRequest.isSecure()).isTrue(); - } - - @Property(trials = TRIALS) - public void shouldDelegateGetHeader(@From(RandomStringGenerator.class) String name, - @From(RandomStringGenerator.class) String value) { - when(httpServerRequest.getHeader(name)).thenReturn(value); - assertThat(vaadinRequest.getHeader(name)).isEqualTo(value); - assertThat(vaadinRequest.getHeader(name + "notExist")).isNull(); - } - - @Test - public void shouldDelegateGetHeaders() { - when(httpServerRequest.headers()).thenReturn( - MultiMap.caseInsensitiveMultiMap(), - MultiMap.caseInsensitiveMultiMap().add("a", Arrays.asList("1", "2")) - .add("b", "b").add("c", "c") - ); - assertThat(list(vaadinRequest.getHeaders("a"))).isEmpty(); - assertThat(list(vaadinRequest.getHeaders("a"))).containsExactly("1", "2"); - assertThat(list(vaadinRequest.getHeaders("b"))).containsExactly("b"); - assertThat(list(vaadinRequest.getHeaders("notPresent"))).isEmpty(); - } - - @Test - public void shouldDelegateGetHeaderNames() { - when(httpServerRequest.headers()).thenReturn( - MultiMap.caseInsensitiveMultiMap(), - MultiMap.caseInsensitiveMultiMap().add("a", "a").add("b", "b").add("c", "c") - ); - assertThat(list(vaadinRequest.getHeaderNames())).isEmpty(); - assertThat(list(vaadinRequest.getHeaderNames())).contains("a", "b", "c"); - } - - @Test - public void shouldDelegateGetCookies() { - Cookie cookie1 = Cookie.cookie("cookie1", "value1") - .setDomain("domain").setHttpOnly(true) - .setMaxAge(90L).setPath("path").setSecure(true); - Cookie cookie2 = Cookie.cookie("cookie2", "value2"); - when(routingContext.cookieCount()).thenReturn(0).thenReturn(2); - when(routingContext.cookieMap()).thenReturn(Stream.of(cookie1, cookie2).collect(Collectors.toMap(Cookie::getName, identity()))); - assertThat(vaadinRequest.getCookies()).isNull(); - javax.servlet.http.Cookie[] cookies = vaadinRequest.getCookies(); - assertThat(cookies).hasSize(2); - assertThat(cookies[0]).extracting("name", "value", "domain", "httpOnly", "maxAge", "path", "secure") - .containsExactly(cookie1.getName(), cookie1.getValue(), cookie1.getDomain(), true, 90, "path", true); - assertThat(cookies[1]).extracting("name", "value", "domain", "httpOnly", "maxAge", "path", "secure") - .containsExactly(cookie2.getName(), cookie2.getValue(), null, false, -1, null, false); - } - - @Test - @Ignore - public void shouldDelegateGetAuthType() { - - } - - @Test - public void shouldDelegateGetRemoteUser() { - User user = mock(User.class); - when(user.principal()) - .thenReturn(new JsonObject().put("username", "marco")) - .thenReturn(new JsonObject()); - when(routingContext.user()).thenReturn(null).thenReturn(user); - assertThat(vaadinRequest.getRemoteUser()).isNull(); - assertThat(vaadinRequest.getRemoteUser()).isEqualTo("marco"); - assertThat(vaadinRequest.getRemoteUser()).isNull(); - } - - @Test - public void shouldDelegateGetPrincipal() { - User user = mock(User.class); - when(user.principal()) - .thenReturn(new JsonObject().put("username", "marco")) - .thenReturn(new JsonObject()); - when(routingContext.user()).thenReturn(null).thenReturn(user); - assertThat(vaadinRequest.getUserPrincipal()).isNull(); - assertThat(vaadinRequest.getUserPrincipal().getName()).isEqualTo("marco"); - assertThat(vaadinRequest.getUserPrincipal().getName()).isNull(); - } - - @Test - public void shouldDelegateIsUserInRole() { - User user = mock(User.class); - doAnswer(invocation -> { - String role = invocation.getArgumentAt(0, String.class); - Handler> handler = invocation.getArgumentAt(1, Handler.class); - handler.handle(Future.succeededFuture("USER".equals(role))); - return user; - }).when(user).isAuthorized(isA(String.class), isA(Handler.class)); - when(user.principal()) - .thenReturn(new JsonObject().put("username", "marco")) - .thenReturn(new JsonObject()); - when(routingContext.user()).thenReturn(null).thenReturn(user); - assertThat(vaadinRequest.isUserInRole("USER")).isFalse(); - assertThat(vaadinRequest.isUserInRole("ADMIN")).isFalse(); - assertThat(vaadinRequest.isUserInRole("USER")).isTrue(); - //assertThat(vaadinRequest.getUserPrincipal().getName()).isNull(); - } - - @Test - public void shouldDelegateGetLocalesToRoutingContext() { - when(routingContext.acceptableLanguages()).thenReturn(emptyList(), Arrays.asList( - new ParsableLanguageValue("it"), new ParsableLanguageValue("en_US"), - new ParsableLanguageValue("de") - )); - assertThat(list(vaadinRequest.getLocales())).isEmpty(); - assertThat(list(vaadinRequest.getLocales())).contains( - new java.util.Locale("it"), new java.util.Locale("en", "US"), new java.util.Locale("de") - ); - } - - @Test - public void shouldDelegateGetRemoteHost() { - when(httpServerRequest.remoteAddress()).thenReturn(null, new SocketAddressImpl(5555, "10.1.1.1")); - assertThat(vaadinRequest.getRemoteAddr()).isNull(); - assertThat(vaadinRequest.getRemoteAddr()).isEqualTo("10.1.1.1"); - } - - @Test - public void shouldDelegateGetRemotePort() { - when(httpServerRequest.remoteAddress()).thenReturn(null, new SocketAddressImpl(5555, "10.1.1.1")); - assertThat(vaadinRequest.getRemotePort()).isEqualTo(-1); - assertThat(vaadinRequest.getRemotePort()).isEqualTo(5555); - } - - @Test - public void shouldDelegateGetCharacterEncoding() { - when(httpServerRequest.getHeader(HttpHeaders.CONTENT_TYPE)).thenReturn(null, "text/html", - "text/html;charset=UTF-8", "text/html; charset=UTF-8", "text/html; charset=UTF-8;", - "text/plain; charset=ISO-8859-1; format=flowed"); - assertThat(vaadinRequest.getCharacterEncoding()).isNull(); - assertThat(vaadinRequest.getCharacterEncoding()).isNull(); - assertThat(vaadinRequest.getCharacterEncoding()).isEqualTo("UTF-8"); - assertThat(vaadinRequest.getCharacterEncoding()).isEqualTo("UTF-8"); - assertThat(vaadinRequest.getCharacterEncoding()).isEqualTo("UTF-8"); - assertThat(vaadinRequest.getCharacterEncoding()).isEqualTo("ISO-8859-1"); - } - - @Test - public void shouldDelegateGetMethod() { - HttpMethod.values().forEach(met -> { - when(httpServerRequest.method()).thenReturn(met); - assertThat(vaadinRequest.getMethod()).isEqualTo(met.name()); - }); - verify(httpServerRequest,times(HttpMethod.values().size())).method(); - } - - @Test - public void shouldDelegateGetDateHeader() { - ZonedDateTime headerValue = LocalDateTime.of(2016, 7, 3, 8, 49, 37) - .atZone(ZoneId.of("GMT")); - long longHeaderValue = headerValue.toEpochSecond() * 1000; - when(httpServerRequest.getHeader(HttpHeaders.IF_MODIFIED_SINCE.toString())) - .thenReturn(null) - .thenReturn("Sun, 03 Jul 2016 08:49:37 GMT") - .thenReturn("Sunday, 03-Jul-16 08:49:37 GMT") - .thenReturn("Sun Jul 3 08:49:37 2016"); - assertThat(vaadinRequest.getDateHeader(HttpHeaders.IF_MODIFIED_SINCE.toString())).isEqualTo(-1); - assertThat(vaadinRequest.getDateHeader(HttpHeaders.IF_MODIFIED_SINCE.toString())).isEqualTo(longHeaderValue); - assertThat(vaadinRequest.getDateHeader(HttpHeaders.IF_MODIFIED_SINCE.toString())).isEqualTo(longHeaderValue); - assertThat(vaadinRequest.getDateHeader(HttpHeaders.IF_MODIFIED_SINCE.toString())).isEqualTo(longHeaderValue); - } - - - private void assertPathInfo(String mountPoint, String path, String expected) { - when(httpServerRequest.path()).thenReturn(path); - when(routingContext.mountPoint()).thenReturn(mountPoint); - assertThat(vaadinRequest.getPathInfo()).isEqualTo(expected); - } - -} diff --git a/vertx-vaadin-8-parent/vertx-vaadin8/src/test/java/com/github/mcollovati/vertx/vaadin/VertxVaadinResponseUT.java b/vertx-vaadin-8-parent/vertx-vaadin8/src/test/java/com/github/mcollovati/vertx/vaadin/VertxVaadinResponseUT.java deleted file mode 100644 index 4f529a8f..00000000 --- a/vertx-vaadin-8-parent/vertx-vaadin8/src/test/java/com/github/mcollovati/vertx/vaadin/VertxVaadinResponseUT.java +++ /dev/null @@ -1,256 +0,0 @@ -/* - * The MIT License - * Copyright © 2016-2020 Marco Collovati (mcollovati@gmail.com) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.github.mcollovati.vertx.vaadin; - -import javax.servlet.http.Cookie; -import java.io.OutputStream; -import java.io.PrintWriter; -import java.time.Instant; -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.time.format.DateTimeFormatter; -import java.util.LinkedHashSet; -import java.util.Set; - -import com.github.mcollovati.vertx.utils.RandomStringGenerator; -import com.pholser.junit.quickcheck.From; -import com.pholser.junit.quickcheck.Property; -import com.pholser.junit.quickcheck.generator.InRange; -import com.pholser.junit.quickcheck.runner.JUnitQuickcheck; -import io.vertx.core.buffer.Buffer; -import io.vertx.core.http.HttpHeaders; -import io.vertx.core.http.HttpServerResponse; -import io.vertx.ext.web.RoutingContext; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.ArgumentCaptor; -import org.mockito.ArgumentMatcher; -import org.mockito.Mock; -import org.mockito.Mockito; -import org.mockito.junit.MockitoJUnit; -import org.mockito.junit.MockitoRule; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatExceptionOfType; -import static org.mockito.Matchers.anyInt; -import static org.mockito.Matchers.anyString; -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -/** - * Created by marco on 24/07/16. - */ -@RunWith(JUnitQuickcheck.class) -public class VertxVaadinResponseUT { - - private static final int TRIALS = 10; - - @Rule - public MockitoRule mokitoRule = MockitoJUnit.rule(); - - @Mock - HttpServerResponse httpServerResponse; - - @Mock - RoutingContext routingContext; - - @Mock - VertxVaadinService vaadinService; - - VertxVaadinResponse vaadinResponse; - - @Before - public void setUp() { - when(routingContext.response()).thenReturn(httpServerResponse); - vaadinResponse = new VertxVaadinResponse(vaadinService, routingContext); - } - - @Property(trials = TRIALS) - public void shouldDelegateSetStatus(@InRange(minInt = 100, maxInt = 599) int status) throws Exception { - vaadinResponse.setStatus(status); - verify(httpServerResponse).setStatusCode(status); - } - - @Test - public void shouldDelegateSetContentType() throws Exception { - String contentType = "text/html"; - vaadinResponse.setContentType(contentType); - verify(httpServerResponse).putHeader(HttpHeaders.CONTENT_TYPE, contentType); - } - - @Property(trials = TRIALS) - public void shouldDelegateSetHeader(@From(RandomStringGenerator.class) String name, - @From(RandomStringGenerator.class) String value) throws Exception { - vaadinResponse.setHeader(name, value); - verify(httpServerResponse).putHeader(name, value); - } - - @Test - public void shouldDelegateSetDateHeader() throws Exception { - assertDateHeader("HeaderName", LocalDateTime.of(1970, 1, 1, 0, 0, 0), "Thu, 1 Jan 1970 00:00:00"); - assertDateHeader("HeaderName", LocalDateTime.of(2016, 7, 24, 15, 53, 40), "Sun, 24 Jul 2016 15:53:40"); - } - - @Test - public void shouldDelegateGetOutputStream() throws Exception { - String test = "A test string"; - OutputStream oos = vaadinResponse.getOutputStream(); - assertThat(oos).isNotNull(); - oos.write(test.getBytes()); - oos.close(); - - ArgumentCaptor byteBufferCaptor = ArgumentCaptor.forClass(Buffer.class); - verify(httpServerResponse).end(byteBufferCaptor.capture()); - assertThat(byteBufferCaptor.getValue()).isEqualTo(Buffer.buffer(test.getBytes())); - } - - @Test - public void getOutputStreamShouldFailIfGetWriterHasBeenCalled() throws Exception { - vaadinResponse.getWriter(); - assertThatExceptionOfType(IllegalStateException.class) - .isThrownBy(vaadinResponse::getOutputStream) - .withMessage("getWriter() has already been called for this response"); - } - - @Test - public void shouldDelegateGetWriter() throws Exception { - String test = "A test string"; - PrintWriter writer = vaadinResponse.getWriter(); - writer.write(test); - writer.flush(); - writer.write(test); - writer.close(); - - ArgumentCaptor byteBufferCaptor = ArgumentCaptor.forClass(Buffer.class); - verify(httpServerResponse).write(byteBufferCaptor.capture()); - verify(httpServerResponse).end(byteBufferCaptor.capture()); - - assertThat(byteBufferCaptor.getAllValues()) - .containsExactly(Buffer.buffer(test.getBytes()), Buffer.buffer(test.getBytes())); - } - - @Test - public void getWriterShouldFailIfGetOutputStreamHasBeenCalled() throws Exception { - vaadinResponse.getOutputStream(); - assertThatExceptionOfType(IllegalStateException.class) - .isThrownBy(vaadinResponse::getWriter) - .withMessage("getOutputStream() has already been called for this response"); - } - - - @Test - public void shouldDelegateSetCacheTimeForNoCache() throws Exception { - vaadinResponse.setCacheTime(-1); - verify(httpServerResponse).putHeader(caseInsensitive(HttpHeaders.CACHE_CONTROL.toString()), eq("no-cache")); - verify(httpServerResponse).putHeader(caseInsensitive("Pragma"), eq("no-cache")); - assertDateHeader(HttpHeaders.EXPIRES.toString(), LocalDateTime.of(1970, 1, 1, 0, 0, 0), "Thu, 1 Jan 1970 00:00:00", false); - } - - - @Test - public void shouldDelegateSetCacheTime() throws Exception { - long millis = 3000; - vaadinResponse.setCacheTime(millis); - verify(httpServerResponse).putHeader(caseInsensitive(HttpHeaders.CACHE_CONTROL.toString()), eq("max-age=3")); - verify(httpServerResponse).putHeader(caseInsensitive(HttpHeaders.EXPIRES.toString()), anyString()); - verify(httpServerResponse).putHeader("Pragma", "cache"); - } - - @Test - public void shouldDelegateSendError() throws Exception { - doReturn(httpServerResponse).when(httpServerResponse).setStatusCode(anyInt()); - vaadinResponse.sendError(500, "error"); - verify(httpServerResponse).setStatusCode(500); - verify(httpServerResponse).end("error"); - } - - @Test - public void shouldDelegateAadCookie() throws Exception { - Set cookies = new LinkedHashSet<>(); - Cookie cookie = new Cookie("name", "value"); - cookie.setMaxAge(10); - cookie.setSecure(true); - cookie.setHttpOnly(true); - cookie.setPath("path"); - cookie.setDomain("domain"); - vaadinResponse.addCookie(cookie); - - - ArgumentCaptor cookieCaptor = ArgumentCaptor.forClass(io.vertx.core.http.Cookie.class); - verify(routingContext).addCookie(cookieCaptor.capture()); - String expectedCookie = io.vertx.core.http.Cookie.cookie(cookie.getName(), cookie.getValue()) - .setMaxAge(cookie.getMaxAge()).setSecure(cookie.getSecure()) - .setHttpOnly(cookie.isHttpOnly()).setPath(cookie.getPath()) - .setDomain(cookie.getDomain()).encode(); - assertThat(cookieCaptor.getValue().encode()).isEqualTo(expectedCookie); - - } - - @Test - public void shouldDelegateSetContentLength() throws Exception { - vaadinResponse.setContentLength(1000); - verify(httpServerResponse).putHeader(HttpHeaders.CONTENT_LENGTH, "1000"); - } - - - private void assertDateHeader(String headerName, LocalDateTime dateTime, String expected) { - assertDateHeader(headerName, dateTime, expected, true); - } - - private void assertDateHeader(String headerName, LocalDateTime dateTime, String expected, boolean invoke) { - long epochMilli = dateTime.atZone(ZoneId.of("GMT")).toEpochSecond() * 1000; - String offset = DateTimeFormatter.ofPattern(" zzz").format( - Instant.ofEpochMilli(epochMilli).atZone(ZoneId.of("GMT")) - ); - if (" +0000".equals(offset)) { - offset = " GMT"; - } - if (invoke) { - vaadinResponse.setDateHeader(headerName, epochMilli); - } - verify(httpServerResponse).putHeader(caseInsensitive(headerName), eq(expected + offset)); - } - - private static String caseInsensitive(String arg) { - return Mockito.argThat(new CaseInsensitiveEquals(arg)); - } - - private static class CaseInsensitiveEquals extends ArgumentMatcher { - - public CaseInsensitiveEquals(String value) { - this.value = value; - } - - private final String value; - - @Override - public boolean matches(Object argument) { - return argument instanceof String && value.equalsIgnoreCase((String) argument); - } - } - -} \ No newline at end of file diff --git a/vertx-vaadin-8-parent/vertx-vaadin8/src/test/java/com/github/mcollovati/vertx/vaadin/VertxVaadinServiceUT.java b/vertx-vaadin-8-parent/vertx-vaadin8/src/test/java/com/github/mcollovati/vertx/vaadin/VertxVaadinServiceUT.java deleted file mode 100644 index b5dc3457..00000000 --- a/vertx-vaadin-8-parent/vertx-vaadin8/src/test/java/com/github/mcollovati/vertx/vaadin/VertxVaadinServiceUT.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * The MIT License - * Copyright © 2016-2020 Marco Collovati (mcollovati@gmail.com) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.github.mcollovati.vertx.vaadin; - -import java.util.Optional; - -import com.vaadin.server.VaadinRequest; -import io.vertx.core.http.HttpServerRequest; -import io.vertx.ext.web.RoutingContext; -import org.junit.Test; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -public class VertxVaadinServiceUT { - - - @Test - public void testGetContextRootRelativePath() { - - // http://dummy.host:8080/contextpath/servlet - // should return . (relative url resolving to /contextpath) - assertThat(testLocation("/contextPath", "/servlet")).isEqualTo("."); - - // http://dummy.host:8080/contextpath/servlet/ - // should return ./.. (relative url resolving to /contextpath) - assertThat(testLocation("/contextPath", "/servlet/")).isEqualTo("./.."); - - // http://dummy.host:8080/servlet - // should return "." - assertThat(testLocation(null, "/servlet")).isEqualTo("."); - - // http://dummy.host/contextpath/servlet/extra/stuff - // should return ./../.. (relative url resolving to /contextpath) - assertThat(testLocation("/contextpath", "/servlet/extra/stuff")) - .isEqualTo("./../.."); - - // http://dummy.host/contextpath/servlet/extra/stuff/ - // should return ./../../.. (relative url resolving to /contextpath) - assertThat(testLocation("/contextpath", "/servlet/extra/stuff/")) - .isEqualTo("./../../.."); - - // http://dummy.host/context/path/servlet/extra/stuff - // should return ./../.. (relative url resolving to /context/path) - assertThat(testLocation("/context/path", "/servlet/extra/stuff")) - .isEqualTo("./../.."); - - // http://dummy.host:8080/contextpath - // should return . (relative url resolving to /contextpath) - assertThat(testLocation("/contextPath", "")).isEqualTo("."); - - } - - private String testLocation(String mountPoint, String pathInfo) { - VertxVaadinService service = mock(VertxVaadinService.class); - HttpServerRequest httpServerRequest = mock(HttpServerRequest.class); - - RoutingContext routingContext = mock(RoutingContext.class); - when(routingContext.mountPoint()).thenReturn(mountPoint); - when(routingContext.request()).thenReturn(httpServerRequest); - - VaadinRequest req = new VertxVaadinRequest(service, routingContext); - - when(httpServerRequest.path()).thenReturn(Optional.ofNullable(mountPoint).orElse("") + pathInfo); - return VertxVaadinService.getContextRootRelativePath(req); - } - -} diff --git a/vertx-vaadin-8-parent/vertx-vaadin8/src/test/java/com/github/mcollovati/vertx/vaadin/VertxWrappedSessionUT.java b/vertx-vaadin-8-parent/vertx-vaadin8/src/test/java/com/github/mcollovati/vertx/vaadin/VertxWrappedSessionUT.java deleted file mode 100644 index 0afd9c6e..00000000 --- a/vertx-vaadin-8-parent/vertx-vaadin8/src/test/java/com/github/mcollovati/vertx/vaadin/VertxWrappedSessionUT.java +++ /dev/null @@ -1,258 +0,0 @@ -/* - * The MIT License - * Copyright © 2016-2020 Marco Collovati (mcollovati@gmail.com) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.github.mcollovati.vertx.vaadin; - -import javax.servlet.http.HttpSessionBindingEvent; -import javax.servlet.http.HttpSessionBindingListener; -import java.time.Instant; -import java.util.HashMap; -import java.util.Map; - -import com.github.mcollovati.vertx.web.ExtendedSession; -import org.assertj.core.api.ThrowableAssert; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.mockito.ArgumentCaptor; -import org.mockito.Mock; -import org.mockito.junit.MockitoJUnit; -import org.mockito.junit.MockitoRule; - -import static java.util.Collections.emptyMap; -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatExceptionOfType; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -/** - * Created by marco on 25/07/16. - */ -@SuppressWarnings("unchecked") -public class VertxWrappedSessionUT { - - @Rule - public MockitoRule mokitoRule = MockitoJUnit.rule(); - - @Mock - ExtendedSession session; - - @Mock - HttpSessionBindingListener sessionBindingListenerObject; - - VertxWrappedSession vertxWrappedSession; - - @Before - public void setUp() throws Exception { - vertxWrappedSession = new VertxWrappedSession(session); - } - - @Test - public void shouldDelegateGetMaxInactiveInterval() throws Exception { - long timeout = 30000L; - when(session.timeout()).thenReturn(timeout); - assertThat(vertxWrappedSession.getMaxInactiveInterval()) - .isEqualTo(Long.valueOf(timeout).intValue() / 1000); - } - - @Test - public void setMaxInactiveIntervalIsNotSupported() throws Exception { - assertThatExceptionOfType(UnsupportedOperationException.class) - .isThrownBy(() -> vertxWrappedSession.setMaxInactiveInterval(10)); - } - - @Test - public void shouldDelegateGetAttribute() throws Exception { - String attrName = "attributeName"; - Object value = new Object(); - when(session.get(attrName)).thenReturn(value, null); - when(session.isDestroyed()).thenReturn(false); - assertThat(vertxWrappedSession.getAttribute(attrName)).isSameAs(value); - assertThat(vertxWrappedSession.getAttribute(attrName)).isNull(); - } - - @Test - public void getAttributeShouldThrowExceptionWhenSessionIsInvalidated() { - shouldThrowExceptionWhenSessionIsInvalidated(() -> vertxWrappedSession.getAttribute("attr")); - } - - @Test - public void shouldDelegateSetAttribute() throws Exception { - String attrName = "attributeName"; - Object value1 = new Object(); - vertxWrappedSession.setAttribute(attrName, value1); - verify(session).put(attrName, value1); - vertxWrappedSession.setAttribute(attrName, null); - verify(session).remove(attrName); - } - - @Test - public void setAttributeShuoldInvokeValueBoundForHttpSessionBindingListener() throws Exception { - String attrName = "attributeName"; - vertxWrappedSession.setAttribute(attrName, sessionBindingListenerObject); - ArgumentCaptor sessionBindingEventCaptor = ArgumentCaptor.forClass(HttpSessionBindingEvent.class); - verify(sessionBindingListenerObject).valueBound(sessionBindingEventCaptor.capture()); - assertHttpSessionBindingEvent(attrName, sessionBindingEventCaptor.getValue()); - } - - @Test - public void setAttributeShuoldInvokeValueUnboundForReplacedHttpSessionBindingListener() throws Exception { - String attrName = "attributeName"; - when(session.get(attrName)).thenReturn(sessionBindingListenerObject); - vertxWrappedSession.setAttribute(attrName, new Object()); - ArgumentCaptor sessionBindingEventCaptor = ArgumentCaptor.forClass(HttpSessionBindingEvent.class); - verify(sessionBindingListenerObject).valueUnbound(sessionBindingEventCaptor.capture()); - assertHttpSessionBindingEvent(attrName, sessionBindingEventCaptor.getValue()); - } - - private void assertHttpSessionBindingEvent(String attrName, HttpSessionBindingEvent sessionBindingEvent) { - assertHttpSessionBindingEvent(attrName, sessionBindingListenerObject, sessionBindingEvent); - } - - private void assertHttpSessionBindingEvent(String attrName, Object value, HttpSessionBindingEvent sessionBindingEvent) { - assertThat(sessionBindingEvent.getSession()) - .isInstanceOf(VertxHttpSession.class) - .extracting("delegate").contains(vertxWrappedSession); - assertThat(sessionBindingEvent.getName()).isEqualTo(attrName); - assertThat(sessionBindingEvent.getValue()).isEqualTo(value); - } - - @Test - public void setAttributeShouldThrowExceptionWhenSessionIsInvalidated() { - shouldThrowExceptionWhenSessionIsInvalidated(() -> vertxWrappedSession.setAttribute("attr", new Object())); - } - - @Test - public void shouldDelegateGetAttributeNames() throws Exception { - Map sampleData = new HashMap<>(); - sampleData.put("a", "a"); - sampleData.put("b", "b"); - sampleData.put("c", "c"); - when(session.data()).thenReturn(emptyMap(), sampleData); - assertThat(vertxWrappedSession.getAttributeNames()).isEmpty(); - assertThat(vertxWrappedSession.getAttributeNames()).containsOnly("a", "b", "c"); - } - - @Test - public void getAttributeNamesShouldThrowExceptionWhenSessionIsInvalidated() { - shouldThrowExceptionWhenSessionIsInvalidated(() -> vertxWrappedSession.getAttributeNames()); - } - - @Test - public void shouldDelegateInvalidate() throws Exception { - vertxWrappedSession.invalidate(); - verify(session).destroy(); - } - - @Test - public void shouldUnbindOnInvalidate() throws Exception { - - Map sampleData = new HashMap<>(); - HttpSessionBindingListener mockA = mock(HttpSessionBindingListener.class); - HttpSessionBindingListener mockC = mock(HttpSessionBindingListener.class); - sampleData.put("a", mockA); - sampleData.put("b", "b"); - sampleData.put("c", mockC); - sampleData.put("b", "b"); - when(session.data()).thenReturn(sampleData); - vertxWrappedSession.invalidate(); - verify(session).destroy(); - ArgumentCaptor sessionBindingEventCaptor = ArgumentCaptor.forClass(HttpSessionBindingEvent.class); - verify(mockA).valueUnbound(sessionBindingEventCaptor.capture()); - verify(mockC).valueUnbound(sessionBindingEventCaptor.capture()); - assertThat(sessionBindingEventCaptor.getAllValues()).hasSize(2); - assertHttpSessionBindingEvent("a", mockA, sessionBindingEventCaptor.getAllValues().get(0)); - assertHttpSessionBindingEvent("c", mockC, sessionBindingEventCaptor.getAllValues().get(1)); - } - - @Test - public void invalidateShouldThrowExceptionWhenSessionIsInvalidated() { - shouldThrowExceptionWhenSessionIsInvalidated(() -> vertxWrappedSession.invalidate()); - } - - @Test - public void shouldDelegateGetId() throws Exception { - String sessionId = "sessionId"; - when(session.id()).thenReturn(sessionId); - assertThat(vertxWrappedSession.getId()).isEqualTo(sessionId); - } - - @Test - public void shouldDelegateGetCreationTime() throws Exception { - long now = Instant.now().minusSeconds(60 * 20).toEpochMilli(); - when(session.createdAt()).thenReturn(now); - assertThat(vertxWrappedSession.getCreationTime()).isEqualTo(now); - } - - @Test - public void shouldDelegateGetLastAccessedTime() throws Exception { - long lastAccessed = Instant.now().minusSeconds(10).toEpochMilli(); - when(session.lastAccessed()).thenReturn(lastAccessed); - assertThat(vertxWrappedSession.getLastAccessedTime()).isEqualTo(lastAccessed); - } - - @Test - public void getLastAccessedTimeShouldThrowExceptionWhenSessionIsInvalidated() { - shouldThrowExceptionWhenSessionIsInvalidated(() -> vertxWrappedSession.getLastAccessedTime()); - } - - @Test - public void isNewShouldBeTrueIfLastAccessedIsNotSet() throws Exception { - when(session.lastAccessed()).thenReturn(0L, System.currentTimeMillis()); - assertThat(vertxWrappedSession.isNew()).isTrue(); - assertThat(vertxWrappedSession.isNew()).isFalse(); - } - - @Test - public void isNewShouldThrowExceptionWhenSessionIsInvalidated() { - shouldThrowExceptionWhenSessionIsInvalidated(() -> vertxWrappedSession.isNew()); - } - - @Test - public void shouldDelegateRemoveAttribute() throws Exception { - vertxWrappedSession.removeAttribute("attrName"); - verify(session).remove("attrName"); - } - - @Test - public void removeAttributeShuoldInvokeValueUnboundForHttpSessionBindingListeners() throws Exception { - String attrName = "attributeName"; - when(session.remove(attrName)).thenReturn(sessionBindingListenerObject); - vertxWrappedSession.removeAttribute(attrName); - ArgumentCaptor sessionBindingEventCaptor = ArgumentCaptor.forClass(HttpSessionBindingEvent.class); - verify(sessionBindingListenerObject).valueUnbound(sessionBindingEventCaptor.capture()); - assertHttpSessionBindingEvent(attrName, sessionBindingEventCaptor.getValue()); - } - - @Test - public void removeAttributeShouldThrowExceptionWhenSessionIsInvalidated() { - shouldThrowExceptionWhenSessionIsInvalidated(() -> vertxWrappedSession.removeAttribute("attr")); - } - - - private void shouldThrowExceptionWhenSessionIsInvalidated(ThrowableAssert.ThrowingCallable op) { - when(session.isDestroyed()).thenReturn(true); - assertThatExceptionOfType(IllegalStateException.class).isThrownBy(op); - } - -} \ No newline at end of file diff --git a/vertx-vaadin-8-parent/vertx-vaadin8/src/test/resources/logback-test.xml b/vertx-vaadin-8-parent/vertx-vaadin8/src/test/resources/logback-test.xml deleted file mode 100644 index 898887fe..00000000 --- a/vertx-vaadin-8-parent/vertx-vaadin8/src/test/resources/logback-test.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - \ No newline at end of file diff --git a/vertx-vaadin-8-parent/vertx-vaadin8/src/widgetset/resources/com/github/mcollovati/vertx/vaadin/VaadinVertxWidgetset.gwt.xml b/vertx-vaadin-8-parent/vertx-vaadin8/src/widgetset/resources/com/github/mcollovati/vertx/vaadin/VaadinVertxWidgetset.gwt.xml deleted file mode 100644 index 57d92bbc..00000000 --- a/vertx-vaadin-8-parent/vertx-vaadin8/src/widgetset/resources/com/github/mcollovati/vertx/vaadin/VaadinVertxWidgetset.gwt.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow-jandex/pom.xml b/vertx-vaadin-flow-jandex/pom.xml similarity index 97% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow-jandex/pom.xml rename to vertx-vaadin-flow-jandex/pom.xml index 1cc1672a..5bbfda56 100644 --- a/vertx-vaadin-flow-parent/vertx-vaadin-flow-jandex/pom.xml +++ b/vertx-vaadin-flow-jandex/pom.xml @@ -5,13 +5,13 @@ com.github.mcollovati.vertx vertx-vaadin-root - 1.0-dev + 23.4.0-SNAPSHOT + ../pom.xml vertx-vaadin-flow-jandex jar vertx-vaadin-flow-jandex - 23.3.5-SNAPSHOT An adapter to run Vaadin Flow applications on Vertx https://github.com/mcollovati/vertx-vaadin diff --git a/vertx-vaadin-flow-parent/pom.xml b/vertx-vaadin-flow-parent/pom.xml deleted file mode 100644 index 4e0f4a8f..00000000 --- a/vertx-vaadin-flow-parent/pom.xml +++ /dev/null @@ -1,37 +0,0 @@ - - 4.0.0 - - com.github.mcollovati.vertx - vertx-vaadin-flow-parent - 1.0.0 - pom - - Vertx Vaadin 10 parent - https://github.com/mcollovati/vertx-vaadin - - - true - true - - - vertx-vaadin-flow-parent - - vaadin-flow-sockjs - vertx-vaadin-flow - vertx-vaadin-quarkus-extension - - - - - - com.mycila - license-maven-plugin - - true - - - - - - - diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/http/HttpServerResponseWrapper.java b/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/http/HttpServerResponseWrapper.java deleted file mode 100644 index e58f10dd..00000000 --- a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/http/HttpServerResponseWrapper.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * The MIT License - * Copyright © 2016-2020 Marco Collovati (mcollovati@gmail.com) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.github.mcollovati.vertx.http; - -import io.vertx.core.http.HttpServerResponse; -import lombok.RequiredArgsConstructor; -import lombok.experimental.Delegate; - -@RequiredArgsConstructor -public class HttpServerResponseWrapper implements HttpServerResponse { - - @Delegate - private final HttpServerResponse delegate; -} diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/ExtendedSession.java b/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/ExtendedSession.java deleted file mode 100644 index 3e4a3fec..00000000 --- a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/ExtendedSession.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * The MIT License - * Copyright © 2016-2020 Marco Collovati (mcollovati@gmail.com) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.github.mcollovati.vertx.web; - -import io.vertx.core.Handler; -import io.vertx.ext.web.Session; - -/** - * Created by marco on 27/07/16. - */ -public interface ExtendedSession extends Session { - - /** - * Returns the time when this session was created, measured - * in milliseconds since midnight January 1, 1970 GMT. - * - * @return a long specifying when this session was created, expressed in - * milliseconds since 1/1/1970 GMT - */ - long createdAt(); - - /** - * Add a handler that will be called after session expires. - * - * @param handler the handler - * @return the id of the handler. This can be used if you later want to remove the handler. - */ - int addExpiredHandler(Handler handler); - - /** - * Remove a session espired handler - * - * @param handlerID the id as returned from {@link #addExpiredHandler(Handler)}. - * @return true if the handler existed and was removed, false otherwise - */ - boolean removeHeadersEndHandler(int handlerID); - - - static ExtendedSession adapt(Session session) { - if (session instanceof ExtendedSession) { - return (ExtendedSession) session; - } - return new ExtendedSessionImpl(session); - } -} diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/ExtendedSessionImpl.java b/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/ExtendedSessionImpl.java deleted file mode 100644 index 8cebbaea..00000000 --- a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/ExtendedSessionImpl.java +++ /dev/null @@ -1,165 +0,0 @@ -/* - * The MIT License - * Copyright © 2016-2020 Marco Collovati (mcollovati@gmail.com) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.github.mcollovati.vertx.web; - -import java.util.HashMap; -import java.util.Map; - -import com.github.mcollovati.vertx.web.serialization.SerializableHolder; -import io.vertx.core.Handler; -import io.vertx.core.buffer.Buffer; -import io.vertx.core.shareddata.Shareable; -import io.vertx.core.shareddata.impl.ClusterSerializable; -import io.vertx.ext.web.Session; -import io.vertx.ext.web.sstore.impl.SharedDataSessionImpl; - -/** - * Created by marco on 27/07/16. - */ -public class ExtendedSessionImpl extends SharedDataSessionImpl implements ExtendedSession, Shareable, ClusterSerializable { - - - protected Session delegate; - private long createdAt; - - public ExtendedSessionImpl() { - this.delegate = new SharedDataSessionImpl(); - } - - public ExtendedSessionImpl(Session delegate) { - this.delegate = delegate; - this.createdAt = System.currentTimeMillis(); - } - - @Override - public int addExpiredHandler(Handler handler) { - return 0; - } - - @Override - public boolean removeHeadersEndHandler(int handlerID) { - return false; - } - - @Override - public String id() { - return delegate.id(); - } - - @Override - public Session put(String key, Object obj) { - return delegate.put(key, wrapIfNeeded(obj)); - } - - @Override - public T get(String key) { - return unwrapIfNeeded(delegate.get(key)); - } - - @Override - public T remove(String key) { - return unwrapIfNeeded(delegate.remove(key)); - } - - @Override - public Map data() { - Map copy = new HashMap<>(delegate.data()); - copy.replaceAll( (key, obj) -> unwrapIfNeeded(obj)); - return copy; - } - - @Override - public long lastAccessed() { - return delegate.lastAccessed(); - } - - @Override - public void destroy() { - delegate.destroy(); - } - - @Override - public boolean isDestroyed() { - return delegate.isDestroyed(); - } - - @Override - public long timeout() { - return delegate.timeout(); - } - - @Override - public void setAccessed() { - delegate.setAccessed(); - } - - @Override - public long createdAt() { - return createdAt; - } - - @Override - public Session regenerateId() { - this.createdAt = System.currentTimeMillis(); - return delegate.regenerateId(); - } - - @Override - public boolean isRegenerated() { - return delegate.isRegenerated(); - } - - @Override - public String oldId() { - return delegate.oldId(); - } - - @Override - public void writeToBuffer(Buffer buffer) { - buffer.appendLong(createdAt); - ((ClusterSerializable) delegate).writeToBuffer(buffer); - } - - @Override - public int readFromBuffer(int pos, Buffer buffer) { - createdAt = buffer.getLong(pos); - return ((ClusterSerializable) delegate).readFromBuffer(pos + 8, buffer); - } - - @SuppressWarnings("unchecked") - private T unwrapIfNeeded(T obj) { - if (obj instanceof SerializableHolder) { - return (T) ((SerializableHolder) obj).get(); - } - return obj; - } - - private Object wrapIfNeeded(Object obj) { - if (obj == null || obj instanceof Number || obj instanceof Character || obj instanceof String - || obj instanceof Boolean || obj instanceof ClusterSerializable) { - return obj; - } - return new SerializableHolder(obj); - } - -} \ No newline at end of file diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/serialization/SerializableHolder.java b/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/serialization/SerializableHolder.java deleted file mode 100644 index faa92fc7..00000000 --- a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/serialization/SerializableHolder.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * The MIT License - * Copyright © 2016-2020 Marco Collovati (mcollovati@gmail.com) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.github.mcollovati.vertx.web.serialization; - -import io.vertx.core.buffer.Buffer; -import io.vertx.core.shareddata.impl.ClusterSerializable; - -public class SerializableHolder implements ClusterSerializable { - - private transient Object object; - - public SerializableHolder() { - } - - public SerializableHolder(Object object) { - this.object = object; - } - - @Override - public void writeToBuffer(Buffer buffer) { - SerializationSupport.writeToBuffer(buffer, object); - } - - @Override - public int readFromBuffer(int pos, Buffer buffer) { - return SerializationSupport.readFromBuffer(pos, buffer, this::set); - } - - private void set(Object object) { - this.object = object; - } - - public Object get() { - return object; - } -} diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/serialization/SerializationSupport.java b/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/serialization/SerializationSupport.java deleted file mode 100644 index 53622865..00000000 --- a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/serialization/SerializationSupport.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * The MIT License - * Copyright © 2016-2020 Marco Collovati (mcollovati@gmail.com) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.github.mcollovati.vertx.web.serialization; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; -import java.util.function.Consumer; - -import io.vertx.core.buffer.Buffer; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class SerializationSupport { - - private static final Logger logger = LoggerFactory.getLogger(SerializationSupport.class); - - public static void writeToBuffer(Buffer buffer, Object object) { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - try (ObjectOutputStream objectStream = new ObjectOutputStream(baos)) { - objectStream.writeObject(object); - objectStream.flush(); - } catch (Exception ex) { - logger.error("Error serializing object of type {}", object.getClass(), ex); - } - buffer.appendInt(baos.size()); - buffer.appendBytes(baos.toByteArray()); - } - - @SuppressWarnings("unchecked") - public static int readFromBuffer(int pos, Buffer buffer, Consumer objectConsumer) { - int size = buffer.getInt(pos); - pos += 4; - int end = pos + size; - try (ObjectInputStream is = new ObjectInputStream(new ByteArrayInputStream(buffer.getBytes(pos, end)))) { - Object object = is.readObject(); - objectConsumer.accept((T) object); - } catch (Exception ex) { - logger.error("Error deserializing object", ex); - } - return end; - } - -} - - diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/sstore/ExtendedLocalSessionStore.java b/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/sstore/ExtendedLocalSessionStore.java deleted file mode 100644 index 35c09656..00000000 --- a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/sstore/ExtendedLocalSessionStore.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * The MIT License - * Copyright © 2016-2020 Marco Collovati (mcollovati@gmail.com) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.github.mcollovati.vertx.web.sstore; - -import io.vertx.core.Vertx; - - -/** - * A session store that extends {@link io.vertx.ext.web.sstore.LocalSessionStore} - * with support for expiration handler - */ -public interface ExtendedLocalSessionStore extends ExtendedSessionStore { - - /** - * Default of how often, in ms, to check for expired sessions - */ - long DEFAULT_REAPER_INTERVAL = 1000; - - /** - * Default name for map used to store sessions - */ - String DEFAULT_SESSION_MAP_NAME = "vertx-web.sessions"; - - /** - * Create a session store - * - * @param vertx the Vert.x instance - * @return the session store - */ - static ExtendedLocalSessionStore create(Vertx vertx) { - return new ExtendedLocalSessionStoreImpl(vertx, DEFAULT_SESSION_MAP_NAME, DEFAULT_REAPER_INTERVAL); - } - - /** - * Create a session store - * - * @param vertx the Vert.x instance - * @param sessionMapName name for map used to store sessions - * @return the session store - */ - static ExtendedLocalSessionStore create(Vertx vertx, String sessionMapName) { - return new ExtendedLocalSessionStoreImpl(vertx, sessionMapName, DEFAULT_REAPER_INTERVAL); - } - - /** - * Create a session store - * - * @param vertx the Vert.x instance - * @param sessionMapName name for map used to store sessions - * @param reaperInterval how often, in ms, to check for expired sessions - * @return the session store - */ - static ExtendedLocalSessionStore create(Vertx vertx, String sessionMapName, long reaperInterval) { - return new ExtendedLocalSessionStoreImpl(vertx, sessionMapName, reaperInterval); - } - -} diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/sstore/ExtendedSessionStore.java b/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/sstore/ExtendedSessionStore.java deleted file mode 100644 index 8f4dcde9..00000000 --- a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/sstore/ExtendedSessionStore.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * The MIT License - * Copyright © 2016-2020 Marco Collovati (mcollovati@gmail.com) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.github.mcollovati.vertx.web.sstore; - -import io.vertx.core.AsyncResult; -import io.vertx.core.Handler; -import io.vertx.ext.web.sstore.SessionStore; - -public interface ExtendedSessionStore extends SessionStore { - - /** - * Set an expiration handler on this {@link SessionStore}. - * - * Once a session expires {@code handler} will be called - * with the session id. - * - * @param handler The session expiration handler - * @return a reference to this, so the API can be used fluently - */ - ExtendedSessionStore expirationHandler(Handler> handler); -} diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/sstore/NearCacheSessionStore.java b/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/sstore/NearCacheSessionStore.java deleted file mode 100644 index eeec9ad3..00000000 --- a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/sstore/NearCacheSessionStore.java +++ /dev/null @@ -1,125 +0,0 @@ -/* - * The MIT License - * Copyright © 2016-2020 Marco Collovati (mcollovati@gmail.com) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.github.mcollovati.vertx.web.sstore; - -import io.vertx.core.Vertx; - -public interface NearCacheSessionStore extends ExtendedSessionStore { - /** - * The default name used for the session map - */ - String DEFAULT_SESSION_MAP_NAME = "vertx-web.sessions"; - - /** - * Default retry time out, in ms, for a session not found in this store. - */ - long DEFAULT_RETRY_TIMEOUT = 5 * 1000; // 5 seconds - - /** - * Default of how often, in ms, to check for expired sessions - */ - long DEFAULT_REAPER_INTERVAL = 1000; - - /** - * Create a session store - * - * @param vertx the Vert.x instance - * @param sessionMapName the session map name - * @return the session store - */ - static NearCacheSessionStore create(Vertx vertx, String sessionMapName) { - return new NearCacheSessionStoreImpl(vertx, sessionMapName, DEFAULT_RETRY_TIMEOUT, DEFAULT_REAPER_INTERVAL); - } - - /** - * Create a session store. - * - * The retry timeout value, configures how long the session handler will retry to get a session from the store - * when it is not found. - * - * @param vertx the Vert.x instance - * @param sessionMapName the session map name - * @param retryTimeout the store retry timeout, in ms - * @return the session store - */ - static NearCacheSessionStore create(Vertx vertx, String sessionMapName, long retryTimeout) { - return new NearCacheSessionStoreImpl(vertx, sessionMapName, retryTimeout, DEFAULT_REAPER_INTERVAL); - } - - /** - * Create a session store. - * - * The retry timeout value, configures how long the session handler will retry to get a session from the store - * when it is not found. - * The reaper interval configures how often, in ms, to check for expired sessions - * - * @param vertx the Vert.x instance - * @param sessionMapName the session map name - * @param retryTimeout the store retry timeout, in ms - * @param reaperInterval how often, in ms, to check for expired sessions - * @return the session store - */ - static NearCacheSessionStore create(Vertx vertx, String sessionMapName, long retryTimeout, long reaperInterval) { - return new NearCacheSessionStoreImpl(vertx, sessionMapName, retryTimeout, reaperInterval); - } - - /** - * Create a session store. - * - * @param vertx the Vert.x instance - * @return the session store - */ - static NearCacheSessionStore create(Vertx vertx) { - return new NearCacheSessionStoreImpl(vertx, DEFAULT_SESSION_MAP_NAME, DEFAULT_RETRY_TIMEOUT, DEFAULT_REAPER_INTERVAL); - } - - /** - * Create a session store. - * - * The retry timeout value, configures how long the session handler will retry to get a session from the store - * when it is not found. - * - * @param vertx the Vert.x instance - * @param retryTimeout the store retry timeout, in ms - * @return the session store - */ - static NearCacheSessionStore create(Vertx vertx, long retryTimeout) { - return new NearCacheSessionStoreImpl(vertx, DEFAULT_SESSION_MAP_NAME, retryTimeout, DEFAULT_REAPER_INTERVAL); - } - - /** - * Create a session store. - * - * The retry timeout value, configures how long the session handler will retry to get a session from the store - * when it is not found. - * The reaper interval configures how often, in ms, to check for expired sessions. - * - * @param vertx the Vert.x instance - * @param retryTimeout the store retry timeout, in ms - * @param reaperInterval how often, in ms, to check for expired sessions - * @return the session store - */ - static NearCacheSessionStore create(Vertx vertx, long retryTimeout, long reaperInterval) { - return new NearCacheSessionStoreImpl(vertx, DEFAULT_SESSION_MAP_NAME, retryTimeout, reaperInterval); - } -} diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/resources/com/github/mcollovati/vertx/vaadin/version.properties b/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/resources/com/github/mcollovati/vertx/vaadin/version.properties deleted file mode 100644 index 4056bf6d..00000000 --- a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/resources/com/github/mcollovati/vertx/vaadin/version.properties +++ /dev/null @@ -1 +0,0 @@ -vertx-vaadin.version=${project.version} \ No newline at end of file diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/utils/RandomStringGenerator.java b/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/utils/RandomStringGenerator.java deleted file mode 100644 index 2680ed09..00000000 --- a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/utils/RandomStringGenerator.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * The MIT License - * Copyright © 2016-2020 Marco Collovati (mcollovati@gmail.com) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.github.mcollovati.vertx.utils; - -import com.pholser.junit.quickcheck.generator.java.lang.AbstractStringGenerator; -import com.pholser.junit.quickcheck.random.SourceOfRandomness; - -/** - * Created by marco on 16/07/16. - */ -public class RandomStringGenerator extends AbstractStringGenerator { - - private static final int MIN = 32; - private static final int MAX = 126; - - @Override - protected int nextCodePoint(SourceOfRandomness random) { - return random.nextInt(MIN, MAX); - } - - @Override - protected boolean codePointInRange(int codePoint) { - return codePoint >= MIN && codePoint <= MAX; - } -} diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/VertxWrappedSessionWithClusteredSessionStoreUT.java b/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/VertxWrappedSessionWithClusteredSessionStoreUT.java deleted file mode 100644 index b80725e3..00000000 --- a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/VertxWrappedSessionWithClusteredSessionStoreUT.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * The MIT License - * Copyright © 2016-2020 Marco Collovati (mcollovati@gmail.com) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.github.mcollovati.vertx.vaadin; - -import javax.servlet.http.HttpSessionBindingEvent; -import javax.servlet.http.HttpSessionBindingListener; - -import com.github.mcollovati.vertx.web.ExtendedSession; -import io.vertx.core.Vertx; -import io.vertx.ext.unit.Async; -import io.vertx.ext.unit.TestContext; -import io.vertx.ext.unit.junit.VertxUnitRunner; -import io.vertx.ext.web.sstore.ClusteredSessionStore; -import lombok.AccessLevel; -import lombok.RequiredArgsConstructor; -import org.junit.After; -import org.junit.Before; -import org.junit.Ignore; -import org.junit.Test; -import org.junit.runner.RunWith; - -/** - * Created by marco on 26/07/16. - */ -@RunWith(VertxUnitRunner.class) -@Ignore -public class VertxWrappedSessionWithClusteredSessionStoreUT { - - Vertx vertx; - ClusteredSessionStore sessionStore; - - - @Before - public void setUp(TestContext context) { - vertx = Vertx.vertx(); - sessionStore = ClusteredSessionStore.create(vertx); - } - - @After - public void tearDown(TestContext context) { - sessionStore.close(); - vertx.close(context.asyncAssertSuccess()); - } - - @Test(timeout = 5000L) - public void shouldInvokeBindingListener(TestContext context) { - final Async async = context.async(2); - VertxWrappedSession session = new VertxWrappedSession(createSession(10000)); - Listener listener1 = new Listener(async); - session.setAttribute("key", listener1); - session.removeAttribute("key"); - } - - private ExtendedSession createSession(long timeout) { - return ExtendedSession.adapt(sessionStore.createSession(timeout)); - } - - @Test(timeout = 5000L) - public void shouldInvokeBindingListenerWhenReplaced(TestContext context) { - final Async async = context.async(2); - VertxWrappedSession session = new VertxWrappedSession(createSession(10000)); - Listener listener1 = new Listener(async); - session.setAttribute("key", listener1); - session.setAttribute("key", new Object()); - } - - @Test(timeout = 5000L) - public void shouldInvokeBindingListenerWhenSessionIsInvalidated(TestContext context) { - final Async async = context.async(2); - VertxWrappedSession session = new VertxWrappedSession(createSession(10000)); - Listener listener1 = new Listener(async); - session.setAttribute("key", listener1); - session.invalidate(); - } - - @Test(timeout = 5000L) - public void shouldInvokeBindingListenerWhenSessionExpires(TestContext context) { - final Async async = context.async(2); - VertxWrappedSession session = new VertxWrappedSession(createSession(3000)); - Listener listener1 = new Listener(async); - session.setAttribute("key", listener1); - } - - - @RequiredArgsConstructor(access = AccessLevel.PRIVATE) - private static class Listener implements HttpSessionBindingListener { - - final Async async; - - @Override - public void valueBound(HttpSessionBindingEvent event) { - async.countDown(); - } - - @Override - public void valueUnbound(HttpSessionBindingEvent event) { - async.countDown(); - } - } - - -} diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/VertxWrappedSessionWithLocalSessionStoreUT.java b/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/VertxWrappedSessionWithLocalSessionStoreUT.java deleted file mode 100644 index e3bc6e8a..00000000 --- a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/VertxWrappedSessionWithLocalSessionStoreUT.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * The MIT License - * Copyright © 2016-2020 Marco Collovati (mcollovati@gmail.com) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.github.mcollovati.vertx.vaadin; - -import javax.servlet.http.HttpSessionBindingEvent; -import javax.servlet.http.HttpSessionBindingListener; - -import com.github.mcollovati.vertx.web.ExtendedSession; -import io.vertx.core.Vertx; -import io.vertx.ext.unit.Async; -import io.vertx.ext.unit.TestContext; -import io.vertx.ext.unit.junit.VertxUnitRunner; -import io.vertx.ext.web.sstore.LocalSessionStore; -import lombok.AccessLevel; -import lombok.RequiredArgsConstructor; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; - -/** - * Created by marco on 26/07/16. - */ -@RunWith(VertxUnitRunner.class) -public class VertxWrappedSessionWithLocalSessionStoreUT { - - Vertx vertx; - LocalSessionStore localSessionStore; - - - @Before - public void setUp(TestContext context) { - vertx = Vertx.vertx(); - localSessionStore = LocalSessionStore.create(vertx); - } - - @After - public void tearDown(TestContext context) { - localSessionStore.close(); - vertx.close(context.asyncAssertSuccess()); - } - - @Test(timeout = 5000L) - public void shouldInvokeBindingListener(TestContext context) { - final Async async = context.async(2); - long timeout = 10000; - VertxWrappedSession session = new VertxWrappedSession(createSession(timeout)); - Listener listener1 = new Listener(async); - session.setAttribute("key", listener1); - session.removeAttribute("key"); - } - - private ExtendedSession createSession(long timeout) { - return ExtendedSession.adapt(localSessionStore.createSession(timeout)); - } - - @Test(timeout = 5000L) - public void shouldInvokeBindingListenerWhenReplaced(TestContext context) { - final Async async = context.async(2); - VertxWrappedSession session = new VertxWrappedSession(createSession(10000)); - Listener listener1 = new Listener(async); - session.setAttribute("key", listener1); - session.setAttribute("key", new Object()); - } - - @Test(timeout = 5000L) - public void shouldInvokeBindingListenerWhenSessionIsInvalidated(TestContext context) { - final Async async = context.async(2); - VertxWrappedSession session = new VertxWrappedSession(createSession(10000)); - Listener listener1 = new Listener(async); - session.setAttribute("key", listener1); - session.invalidate(); - } - - - @RequiredArgsConstructor(access = AccessLevel.PRIVATE) - private static class Listener implements HttpSessionBindingListener { - - final Async async; - - @Override - public void valueBound(HttpSessionBindingEvent event) { - async.countDown(); - } - - @Override - public void valueUnbound(HttpSessionBindingEvent event) { - async.countDown(); - } - } - - -} diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/web/sstore/ExtendedSessionUT.java b/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/web/sstore/ExtendedSessionUT.java deleted file mode 100644 index 5853732c..00000000 --- a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/web/sstore/ExtendedSessionUT.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * The MIT License - * Copyright © 2016-2020 Marco Collovati (mcollovati@gmail.com) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.github.mcollovati.vertx.web.sstore; - -import com.github.mcollovati.vertx.web.ExtendedSession; -import io.vertx.core.Vertx; -import io.vertx.core.buffer.Buffer; -import io.vertx.core.shareddata.impl.ClusterSerializable; -import io.vertx.ext.auth.PRNG; -import io.vertx.ext.web.sstore.SessionStore; -import io.vertx.ext.web.sstore.impl.SharedDataSessionImpl; -import org.junit.Test; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * Created by marco on 27/07/16. - */ -public class ExtendedSessionUT { - - @Test - public void extendeSessionShouldBeClusterSerializable() throws InterruptedException { - Vertx vertx = Vertx.vertx(); - SharedDataSessionImpl delegate = new SharedDataSessionImpl(new PRNG(vertx), 3000, SessionStore.DEFAULT_SESSIONID_LENGTH); - ExtendedSession extendedSession = ExtendedSession.adapt(delegate); - assertThat(extendedSession).isInstanceOf(ClusterSerializable.class); - long createdAt = extendedSession.createdAt(); - extendedSession.put("key1", "value"); - extendedSession.put("key2", 20); - Thread.sleep(300); - - Buffer buffer = Buffer.buffer(); - ((ClusterSerializable) extendedSession).writeToBuffer(buffer); - assertThat(buffer.length() > 0); - - ExtendedSession fromBuffer = ExtendedSession.adapt( - new SharedDataSessionImpl(new PRNG(vertx), 0, SessionStore.DEFAULT_SESSIONID_LENGTH) - ); - ((ClusterSerializable) fromBuffer).readFromBuffer(0, buffer); - assertThat(fromBuffer.createdAt()).isEqualTo(createdAt); - assertThat(fromBuffer.id()).isEqualTo(delegate.id()); - assertThat(fromBuffer.timeout()).isEqualTo(delegate.timeout()); - assertThat(fromBuffer.data()).isEqualTo(delegate.data()); - - } -} diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/web/sstore/NearCacheSessionStoreIT.java b/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/web/sstore/NearCacheSessionStoreIT.java deleted file mode 100644 index e6b0e079..00000000 --- a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/web/sstore/NearCacheSessionStoreIT.java +++ /dev/null @@ -1,313 +0,0 @@ -/* - * The MIT License - * Copyright © 2016-2020 Marco Collovati (mcollovati@gmail.com) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.github.mcollovati.vertx.web.sstore; - -import java.io.Serializable; -import java.util.Objects; - -import com.github.mcollovati.vertx.Sync; -import com.github.mcollovati.vertx.web.ExtendedSession; -import io.vertx.core.AsyncResult; -import io.vertx.core.Future; -import io.vertx.core.Handler; -import io.vertx.core.Vertx; -import io.vertx.core.VertxOptions; -import io.vertx.core.shareddata.AsyncMap; -import io.vertx.core.shareddata.LocalMap; -import io.vertx.ext.auth.PRNG; -import io.vertx.ext.unit.Async; -import io.vertx.ext.unit.TestContext; -import io.vertx.ext.unit.junit.RunTestOnContext; -import io.vertx.ext.unit.junit.VertxUnitRunner; -import io.vertx.ext.web.Session; -import io.vertx.ext.web.sstore.SessionStore; -import io.vertx.ext.web.sstore.impl.SharedDataSessionImpl; -import io.vertx.spi.cluster.hazelcast.HazelcastClusterManager; -import org.assertj.core.data.Offset; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.runner.RunWith; - -import static io.vertx.ext.web.sstore.SessionStore.DEFAULT_SESSIONID_LENGTH; -import static org.assertj.core.api.Assertions.assertThat; - -@RunWith(VertxUnitRunner.class) -public class NearCacheSessionStoreIT { - - public static final int DEFAULT_TIMEOUT = 30 * 60 * 1000; - @Rule - public RunTestOnContext rule = new RunTestOnContext(() -> Sync.await(completer -> Vertx.clusteredVertx( - new VertxOptions().setClusterManager(new HazelcastClusterManager()), completer - ))); - private LocalMap localMap; - private AsyncMap remoteMap; - - @Before - public void setup(TestContext context) { - getRemoteMap(context, context.asyncAssertSuccess()); - localMap = getLocalMap(); - } - - - private void getRemoteMap(TestContext context, Handler>> resultHandler) { - if (remoteMap == null) { - rule.vertx().sharedData().getClusterWideMap(NearCacheSessionStore.DEFAULT_SESSION_MAP_NAME, res -> { - if (res.succeeded()) { - remoteMap = res.result(); - resultHandler.handle(Future.succeededFuture(res.result())); - } else { - resultHandler.handle(res); - } - }); - } else { - resultHandler.handle(Future.succeededFuture(remoteMap)); - } - } - - private void doWithRemoteSession(TestContext context, Session session, Handler> handler) { - remoteMap.get(session.id(), handler); - } - - private void doWithLocalSession(TestContext context, Session session, Handler> handler) { - try { - Session localSession = localMap.get(session.id()); - handler.handle(Future.succeededFuture(localSession)); - } catch (Exception ex) { - handler.handle(Future.failedFuture(ex)); - } - } - - private LocalMap getLocalMap() { - return rule.vertx().sharedData().getLocalMap(NearCacheSessionStore.DEFAULT_SESSION_MAP_NAME); - } - - - @Test - public void createSession(TestContext context) { - - Vertx vertx = rule.vertx(); - SessionStore sessionStore = NearCacheSessionStore.create(vertx); - long beforeCreationTime = System.currentTimeMillis(); - Session session = sessionStore.createSession(3600); - assertThat(session.id()).isNotEmpty(); - assertThat(session.timeout()).isEqualTo(3600); - assertThat(session.lastAccessed()).isCloseTo(beforeCreationTime, Offset.offset(100L)); - assertThat(session.isDestroyed()).isFalse(); - - } - - @Test(timeout = 3000) - public void putShouldUpdateRemoteSession(TestContext context) { - Vertx vertx = rule.vertx(); - - TestObject testObject = new TestObject("TestObject"); - ExtendedSession session = createSession(vertx); - String testObjKey = "testObjKey"; - session.put(testObjKey, testObject); - - SessionStore sessionStore = NearCacheSessionStore.create(vertx); - sessionStore.put(session, context.asyncAssertSuccess(b -> { - doWithRemoteSession(context, session, context.asyncAssertSuccess(s -> - context.verify(unused -> assertSessionProperties(session, s)) - )); - doWithLocalSession(context, session, context.asyncAssertSuccess(s -> - context.verify(unused -> { - assertSessionProperties(session, s); - - }) - )); - })); - } - - @Test(timeout = 3000) - public void consecutiveGetAndPutShouldBeConsistent(TestContext context) { - Vertx vertx = rule.vertx(); - - TestObject testObject = new TestObject("TestObject"); - ExtendedSession session = createSession(vertx); - String testObjKey = "testObjKey"; - session.put(testObjKey, testObject); - - SessionStore sessionStore = NearCacheSessionStore.create(vertx); - sessionStore.put(session, context.asyncAssertSuccess(x -> { - sessionStore.get(session.id(), context.asyncAssertSuccess(freshSession -> { - sessionStore.put(freshSession, context.asyncAssertSuccess()); - })); - })); - - - } - - @Test(timeout = 5000) - public void getShouldReturnLocalSessionIfPresent(TestContext context) { - Vertx vertx = rule.vertx(); - TestObject testObject = new TestObject("TestObject"); - ExtendedSession session = createSession(vertx); - String testObjKey = "testObjKey"; - session.put(testObjKey, testObject); - localMap.put(session.id(), session); - - SessionStore sessionStore = NearCacheSessionStore.create(vertx); - - sessionStore.get(session.id(), context.asyncAssertSuccess(s -> { - assertSessionProperties(session, s); - assertThat(s.get(testObjKey)).isSameAs(testObject); - })); - } - - @Test(timeout = 5000) - public void getShouldReturnRemoteSessionIfLocalIsMissingPresent(TestContext context) { - Vertx vertx = rule.vertx(); - TestObject testObject = new TestObject("TestObject"); - ExtendedSession session = createSession(vertx); - String testObjKey = "testObjKey"; - session.put(testObjKey, testObject); - remoteMap.put(session.id(), session, context.asyncAssertSuccess()); - - SessionStore sessionStore = NearCacheSessionStore.create(vertx); - - sessionStore.get(session.id(), context.asyncAssertSuccess(s -> { - assertSessionProperties(session, s); - assertThat(s.get(testObjKey)).isNotSameAs(testObject).isEqualTo(testObject); - })); - } - - @Test(timeout = 5000) - public void deleteShouldSucceedIfSessionDoesNotExist(TestContext context) { - Vertx vertx = rule.vertx(); - SessionStore sessionStore = NearCacheSessionStore.create(vertx); - sessionStore.delete("XY", context.asyncAssertSuccess()); - } - - @Test(timeout = 5000) - public void deleteShouldRemoveSessionFromLocalAndRemote(TestContext context) { - Vertx vertx = rule.vertx(); - SessionStore sessionStore = NearCacheSessionStore.create(vertx); - Session session = sessionStore.createSession(DEFAULT_TIMEOUT); - TestObject testObject = new TestObject("TestObject"); - session.put("TEST_KEY", testObject); - - sessionStore.delete("XY", context.asyncAssertSuccess(u -> { - doWithLocalSession(context, session, context.asyncAssertSuccess(context::assertNull)); - doWithRemoteSession(context, session, context.asyncAssertSuccess(context::assertNull)); - })); - } - - @Test(timeout = 5000) - public void clearShouldSucceedIfSessionDoesNotExist(TestContext context) { - Vertx vertx = rule.vertx(); - SessionStore sessionStore = NearCacheSessionStore.create(vertx); - sessionStore.clear(context.asyncAssertSuccess()); - } - - @Test(timeout = 5000) - public void clearShouldEmptyLocalAndRemoteSession(TestContext context) { - Vertx vertx = rule.vertx(); - SessionStore sessionStore = NearCacheSessionStore.create(vertx); - Session session = sessionStore.createSession(DEFAULT_TIMEOUT); - TestObject testObject = new TestObject("TestObject"); - session.put("TEST_KEY", testObject); - - sessionStore.clear(context.asyncAssertSuccess(u -> { - context.assertTrue(localMap.isEmpty(), "Local map should be empty"); - remoteMap.size(context.asyncAssertSuccess(size -> - context.assertTrue(size == 0, "Remote map should be empty") - )); - - })); - } - - @Test - public void storeShouldRemoveExpiredSessionFromLocalAndRemote(TestContext context) { - Vertx vertx = rule.vertx(); - Async async = context.async(); - SessionStore sessionStore = NearCacheSessionStore.create(vertx); - Session session = sessionStore.createSession(3000); - sessionStore.put(session, context.asyncAssertSuccess()); - - - vertx.setTimer(5000, unused -> { - sessionStore.get("XY", context.asyncAssertSuccess(u -> { - doWithRemoteSession(context, session, context.asyncAssertSuccess(s -> - context.assertNull(s, "Remote session should not be present") - )); - doWithLocalSession(context, session, context.asyncAssertSuccess(s -> - context.assertNull(s, "Local session should not be present") - )); - })); - async.complete(); - }); - } - - @Test(timeout = 5000) - public void storeShouldFireExpirationEvent(TestContext context) { - Vertx vertx = rule.vertx(); - Async async = context.async(2); - NearCacheSessionStore sessionStore = NearCacheSessionStore.create(vertx); - sessionStore.expirationHandler(res -> async.countDown()); - - Session session = sessionStore.createSession(1000); - sessionStore.put(session, context.asyncAssertSuccess()); - - Session session2 = sessionStore.createSession(3000); - sessionStore.put(session2, context.asyncAssertSuccess()); - - } - - private ExtendedSession createSession(Vertx vertx) { - return ExtendedSession.adapt(new SharedDataSessionImpl(new PRNG(vertx), 36000, DEFAULT_SESSIONID_LENGTH)); - } - - private void assertSessionProperties(ExtendedSession session, Session rs) { - assertThat(rs.lastAccessed()).isEqualTo(session.lastAccessed()); - assertThat(rs.id()).isEqualTo(session.id()); - assertThat(rs.isDestroyed()).isEqualTo(session.isDestroyed()); - assertThat(rs.timeout()).isEqualTo(session.timeout()); - } - - - private static class TestObject implements Serializable { - private final String name; - private int counter = 0; - - public TestObject(String name) { - this.name = name; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof TestObject)) return false; - TestObject that = (TestObject) o; - return counter == that.counter && - Objects.equals(name, that.name); - } - - @Override - public int hashCode() { - - return Objects.hash(counter, name); - } - } -} diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/vite.generated.ts b/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/vite.generated.ts deleted file mode 100644 index 54f4c94e..00000000 --- a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/vite.generated.ts +++ /dev/null @@ -1,640 +0,0 @@ -/** - * NOTICE: this is an auto-generated file - * - * This file has been generated by the `flow:prepare-frontend` maven goal. - * This file will be overwritten on every run. Any custom changes should be made to vite.config.ts - */ -import path from 'path'; -import { readFileSync, existsSync, writeFileSync, mkdirSync } from 'fs'; -import * as net from 'net'; - -import { processThemeResources } from './target/plugins/application-theme-plugin/theme-handle.js'; -import { rewriteCssUrls } from './target/plugins/theme-loader/theme-loader-utils.js'; -import settings from './target/vaadin-dev-server-settings.json'; -import { defineConfig, mergeConfig, PluginOption, ResolvedConfig, UserConfigFn, OutputOptions, AssetInfo, ChunkInfo } from 'vite'; -import { getManifest } from 'workbox-build'; - -import * as rollup from 'rollup'; -import brotli from 'rollup-plugin-brotli'; -import replace from '@rollup/plugin-replace'; -import checker from 'vite-plugin-checker'; -import postcssLit from './target/plugins/rollup-plugin-postcss-lit-custom/rollup-plugin-postcss-lit.js'; - -const appShellUrl = '.'; - -const frontendFolder = path.resolve(__dirname, settings.frontendFolder); -const themeFolder = path.resolve(frontendFolder, settings.themeFolder); -const statsFolder = path.resolve(__dirname, settings.statsOutput); -const frontendBundleFolder = path.resolve(__dirname, settings.frontendBundleOutput); -const jarResourcesFolder = path.resolve(__dirname, settings.jarResourcesFolder); -const generatedFlowImportsFolder = path.resolve(__dirname, settings.generatedFlowImportsFolder); -const themeResourceFolder = path.resolve(__dirname, settings.themeResourceFolder); - -const statsFile = path.resolve(statsFolder, 'stats.json'); - -const projectStaticAssetsFolders = [ - path.resolve(__dirname, 'src', 'main', 'resources', 'META-INF', 'resources'), - path.resolve(__dirname, 'src', 'main', 'resources', 'static'), - frontendFolder -]; - -// Folders in the project which can contain application themes -const themeProjectFolders = projectStaticAssetsFolders.map((folder) => path.resolve(folder, settings.themeFolder)); - -const themeOptions = { - devMode: false, - // The following matches folder 'frontend/generated/themes/' - // (not 'frontend/themes') for theme in JAR that is copied there - themeResourceFolder: path.resolve(themeResourceFolder, settings.themeFolder), - themeProjectFolders: themeProjectFolders, - projectStaticAssetsOutputFolder: path.resolve(__dirname, settings.staticOutput), - frontendGeneratedFolder: path.resolve(frontendFolder, settings.generatedFolder) -}; - -const hasExportedWebComponents = existsSync(path.resolve(frontendFolder, 'web-component.html')); - -// Block debug and trace logs. -console.trace = () => {}; -console.debug = () => {}; - -function injectManifestToSWPlugin(): rollup.Plugin { - const rewriteManifestIndexHtmlUrl = (manifest) => { - const indexEntry = manifest.find((entry) => entry.url === 'index.html'); - if (indexEntry) { - indexEntry.url = appShellUrl; - } - - return { manifest, warnings: [] }; - }; - - return { - name: 'vaadin:inject-manifest-to-sw', - async transform(code, id) { - if (/sw\.(ts|js)$/.test(id)) { - const { manifestEntries } = await getManifest({ - globDirectory: frontendBundleFolder, - globPatterns: ['**/*'], - globIgnores: ['**/*.br'], - manifestTransforms: [rewriteManifestIndexHtmlUrl], - maximumFileSizeToCacheInBytes: 100 * 1024 * 1024, // 100mb, - }); - - return code.replace('self.__WB_MANIFEST', JSON.stringify(manifestEntries)); - } - } - } -} - -function buildSWPlugin(opts): PluginOption { - let config: ResolvedConfig; - const devMode = opts.devMode; - - const swObj = {} - - async function build(action: 'generate' | 'write', additionalPlugins: rollup.Plugin[] = []) { - const includedPluginNames = [ - 'alias', - 'vite:resolve', - 'vite:esbuild', - 'rollup-plugin-dynamic-import-variables', - 'vite:esbuild-transpile', - 'vite:terser', - ] - const plugins: rollup.Plugin[] = config.plugins.filter((p) => { - return includedPluginNames.includes(p.name) - }); - plugins.push( - replace({ - values: { - 'process.env.NODE_ENV': JSON.stringify(config.mode), - ...config.define, - }, - preventAssignment: true - }) - ); - if (additionalPlugins) { - plugins.push(...additionalPlugins); - } - const bundle = await rollup.rollup({ - input: path.resolve(settings.clientServiceWorkerSource), - plugins - }); - - try { - return await bundle[action]({ - file: path.resolve(frontendBundleFolder, 'sw.js'), - format: 'es', - exports: 'none', - sourcemap: config.command === 'serve' || config.build.sourcemap, - inlineDynamicImports: true, - }); - } finally { - await bundle.close(); - } - } - - return { - name: 'vaadin:build-sw', - enforce: 'post', - async configResolved(resolvedConfig) { - config = resolvedConfig; - }, - async buildStart() { - if (devMode) { - const { output } = await build('generate'); - swObj.code = output[0].code; - swObj.map = output[0].map; - } - }, - async load(id) { - if (id.endsWith('sw.js')) { - return ''; - } - }, - async transform(_code, id) { - if (id.endsWith('sw.js')) { - return swObj; - } - }, - async closeBundle() { - await build('write', [ - injectManifestToSWPlugin(), - brotli(), - ]); - } - } -} - -function statsExtracterPlugin(): PluginOption { - return { - name: 'vaadin:stats', - enforce: 'post', - async writeBundle(options: OutputOptions, bundle: { [fileName: string]: AssetInfo | ChunkInfo }) { - const modules = Object.values(bundle).flatMap((b) => (b.modules ? Object.keys(b.modules) : [])); - const nodeModulesFolders = modules.filter((id) => id.includes('node_modules')); - const npmModules = nodeModulesFolders - .map((id) => id.replace(/.*node_modules./, '')) - .map((id) => { - const parts = id.split('/'); - if (id.startsWith('@')) { - return parts[0] + '/' + parts[1]; - } else { - return parts[0]; - } - }) - .sort() - .filter((value, index, self) => self.indexOf(value) === index); - - mkdirSync(path.dirname(statsFile), { recursive: true }); - writeFileSync(statsFile, JSON.stringify({ npmModules }, null, 1)); - } - }; -} -function vaadinBundlesPlugin(): PluginOption { - type ExportInfo = - | string - | { - namespace?: string; - source: string; - }; - - type ExposeInfo = { - exports: ExportInfo[]; - }; - - type PackageInfo = { - version: string; - exposes: Record; - }; - - type BundleJson = { - packages: Record; - }; - - const disabledMessage = 'Vaadin component dependency bundles are disabled.'; - - const modulesDirectory = path.resolve(__dirname, 'node_modules').replace(/\\/g, '/'); - - let vaadinBundleJson: BundleJson; - - function parseModuleId(id: string): { packageName: string; modulePath: string } { - const [scope, scopedPackageName] = id.split('/', 3); - const packageName = scope.startsWith('@') ? `${scope}/${scopedPackageName}` : scope; - const modulePath = `.${id.substring(packageName.length)}`; - return { - packageName, - modulePath - }; - } - - function getExports(id: string): string[] | undefined { - const { packageName, modulePath } = parseModuleId(id); - const packageInfo = vaadinBundleJson.packages[packageName]; - - if (!packageInfo) return; - - const exposeInfo: ExposeInfo = packageInfo.exposes[modulePath]; - if (!exposeInfo) return; - - const exportsSet = new Set(); - for (const e of exposeInfo.exports) { - if (typeof e === 'string') { - exportsSet.add(e); - } else { - const { namespace, source } = e; - if (namespace) { - exportsSet.add(namespace); - } else { - const sourceExports = getExports(source); - if (sourceExports) { - sourceExports.forEach((e) => exportsSet.add(e)); - } - } - } - } - return Array.from(exportsSet); - } - - function getExportBinding(binding: string) { - return binding === 'default' ? '_default as default' : binding; - } - - function getImportAssigment(binding: string) { - return binding === 'default' ? 'default: _default' : binding; - } - - return { - name: 'vaadin:bundles', - enforce: 'pre', - apply(config, { command }) { - if (command !== 'serve') return false; - - try { - const vaadinBundleJsonPath = require.resolve('@vaadin/bundles/vaadin-bundle.json'); - vaadinBundleJson = JSON.parse(readFileSync(vaadinBundleJsonPath, { encoding: 'utf8' })); - } catch (e: unknown) { - if (typeof e === 'object' && (e as { code: string }).code === 'MODULE_NOT_FOUND') { - vaadinBundleJson = { packages: {} }; - console.info(`@vaadin/bundles npm package is not found, ${disabledMessage}`); - return false; - } else { - throw e; - } - } - - const versionMismatches: Array<{ name: string; bundledVersion: string; installedVersion: string }> = []; - for (const [name, packageInfo] of Object.entries(vaadinBundleJson.packages)) { - let installedVersion: string | undefined = undefined; - try { - const { version: bundledVersion } = packageInfo; - const installedPackageJsonFile = path.resolve(modulesDirectory, name, 'package.json'); - const packageJson = JSON.parse(readFileSync(installedPackageJsonFile, { encoding: 'utf8' })); - installedVersion = packageJson.version; - if (installedVersion && installedVersion !== bundledVersion) { - versionMismatches.push({ - name, - bundledVersion, - installedVersion - }); - } - } catch (_) { - // ignore package not found - } - } - if (versionMismatches.length) { - console.info(`@vaadin/bundles has version mismatches with installed packages, ${disabledMessage}`); - console.info(`Packages with version mismatches: ${JSON.stringify(versionMismatches, undefined, 2)}`); - vaadinBundleJson = { packages: {} }; - return false; - } - - return true; - }, - async config(config) { - return mergeConfig( - { - optimizeDeps: { - exclude: [ - // Vaadin bundle - '@vaadin/bundles', - ...Object.keys(vaadinBundleJson.packages), - '@vaadin/vaadin-material-styles' - ] - } - }, - config - ); - }, - load(rawId) { - const [path, params] = rawId.split('?'); - if (!path.startsWith(modulesDirectory)) return; - - const id = path.substring(modulesDirectory.length + 1); - const bindings = getExports(id); - if (bindings === undefined) return; - - const cacheSuffix = params ? `?${params}` : ''; - const bundlePath = `@vaadin/bundles/vaadin.js${cacheSuffix}`; - - return `import { init as VaadinBundleInit, get as VaadinBundleGet } from '${bundlePath}'; -await VaadinBundleInit('default'); -const { ${bindings.map(getImportAssigment).join(', ')} } = (await VaadinBundleGet('./node_modules/${id}'))(); -export { ${bindings.map(getExportBinding).join(', ')} };`; - } - }; -} - -function themePlugin(opts): PluginOption { - const fullThemeOptions = {...themeOptions, devMode: opts.devMode }; - return { - name: 'vaadin:theme', - config() { - processThemeResources(fullThemeOptions, console); - }, - configureServer(server) { - function handleThemeFileCreateDelete(themeFile, stats) { - if (themeFile.startsWith(themeFolder)) { - const changed = path.relative(themeFolder, themeFile) - console.debug('Theme file ' + (!!stats ? 'created' : 'deleted'), changed); - processThemeResources(fullThemeOptions, console); - } - } - server.watcher.on('add', handleThemeFileCreateDelete); - server.watcher.on('unlink', handleThemeFileCreateDelete); - }, - handleHotUpdate(context) { - const contextPath = path.resolve(context.file); - const themePath = path.resolve(themeFolder); - if (contextPath.startsWith(themePath)) { - const changed = path.relative(themePath, contextPath); - - console.debug('Theme file changed', changed); - - if (changed.startsWith(settings.themeName)) { - processThemeResources(fullThemeOptions, console); - } - } - }, - async resolveId(id, importer) { - // force theme generation if generated theme sources does not yet exist - // this may happen for example during Java hot reload when updating - // @Theme annotation value - if (path.resolve(themeOptions.frontendGeneratedFolder, "theme.js") === importer && - !existsSync(path.resolve(themeOptions.frontendGeneratedFolder, id))) { - console.debug('Generate theme file ' + id + ' not existing. Processing theme resource'); - processThemeResources(fullThemeOptions, console); - return; - } - if (!id.startsWith(settings.themeFolder)) { - return; - } - - for (const location of [themeResourceFolder, frontendFolder]) { - const result = await this.resolve(path.resolve(location, id)); - if (result) { - return result; - } - } - }, - async transform(raw, id, options) { - // rewrite urls for the application theme css files - const [bareId, query] = id.split('?'); - if (!bareId?.startsWith(themeFolder) || !bareId?.endsWith('.css')) { - return; - } - const [themeName] = bareId.substring(themeFolder.length + 1).split('/'); - return rewriteCssUrls(raw, path.dirname(bareId), path.resolve(themeFolder, themeName), console, opts); - } - }; -} -function lenientLitImportPlugin(): PluginOption { - return { - name: 'vaadin:lenient-lit-import', - async transform(code, id) { - const decoratorImports = [ - /import (.*?) from (['"])(lit\/decorators)(['"])/, - /import (.*?) from (['"])(lit-element\/decorators)(['"])/ - ]; - const directiveImports = [ - /import (.*?) from (['"])(lit\/directives\/)([^\\.]*?)(['"])/, - /import (.*?) from (['"])(lit-html\/directives\/)([^\\.]*?)(['"])/ - ]; - - decoratorImports.forEach((decoratorImport) => { - let decoratorMatch; - while ((decoratorMatch = code.match(decoratorImport))) { - console.warn( - `Warning: the file ${id} imports from '${decoratorMatch[3]}' when it should import from '${decoratorMatch[3]}.js'` - ); - code = code.replace(decoratorImport, 'import $1 from $2$3.js$4'); - } - }); - - directiveImports.forEach((directiveImport) => { - let directiveMatch; - while ((directiveMatch = code.match(directiveImport))) { - console.warn( - `Warning: the file ${id} imports from '${directiveMatch[3]}${directiveMatch[4]}' when it should import from '${directiveMatch[3]}${directiveMatch[4]}.js'` - ); - code = code.replace(directiveImport, 'import $1 from $2$3$4.js$5'); - } - }); - - return code; - } - }; -} - -function runWatchDog(watchDogPort, watchDogHost) { - const client = net.Socket(); - client.setEncoding('utf8'); - client.on('error', function (err) { - console.log('Watchdog connection error. Terminating vite process...', err); - client.destroy(); - process.exit(0); - }); - client.on('close', function () { - client.destroy(); - runWatchDog(watchDogPort, watchDogHost); - }); - - client.connect(watchDogPort, watchDogHost || 'localhost'); -} - -let spaMiddlewareForceRemoved = false; - -const allowedFrontendFolders = [ - frontendFolder, - path.resolve(generatedFlowImportsFolder), // Contains only generated-flow-imports - path.resolve(__dirname, 'node_modules') -]; - -function setHmrPortToServerPort(): PluginOption { - return { - name: 'set-hmr-port-to-server-port', - configResolved(config) { - if (config.server.strictPort && config.server.hmr !== false) { - if (config.server.hmr === true) config.server.hmr = {}; - config.server.hmr = config.server.hmr || {}; - config.server.hmr.clientPort = config.server.port; - } - } - }; -} -function showRecompileReason(): PluginOption { - return { - name: 'vaadin:why-you-compile', - handleHotUpdate(context) { - console.log('Recompiling because', context.file, 'changed'); - } - }; -} - -export const vaadinConfig: UserConfigFn = (env) => { - const devMode = env.mode === 'development'; - - if (devMode && process.env.watchDogPort) { - // Open a connection with the Java dev-mode handler in order to finish - // vite when it exits or crashes. - runWatchDog(process.env.watchDogPort, process.env.watchDogHost); - } - - return { - root: frontendFolder, - base: '', - resolve: { - alias: { - '@vaadin/flow-frontend': jarResourcesFolder, - Frontend: frontendFolder - }, - preserveSymlinks: true - }, - define: { - OFFLINE_PATH: settings.offlinePath, - VITE_ENABLED: 'true' - }, - server: { - host: '127.0.0.1', - strictPort: true, - fs: { - allow: allowedFrontendFolders - } - }, - build: { - outDir: frontendBundleFolder, - assetsDir: 'VAADIN/build', - rollupOptions: { - input: { - indexhtml: path.resolve(frontendFolder, 'index.html'), - - ...hasExportedWebComponents - ? { webcomponenthtml: path.resolve(frontendFolder, 'web-component.html') } - : {} - } - } - }, - optimizeDeps: { - entries: [ - // Pre-scan entrypoints in Vite to avoid reloading on first open - 'generated/vaadin.ts' - ], - exclude: [ - '@vaadin/router', - '@vaadin/vaadin-license-checker', - '@vaadin/vaadin-usage-statistics', - 'workbox-core', - 'workbox-precaching', - 'workbox-routing', - 'workbox-strategies' - ] - }, - plugins: [ - !devMode && brotli(), - devMode && vaadinBundlesPlugin(), - devMode && setHmrPortToServerPort(), - devMode && showRecompileReason(), - settings.offlineEnabled && buildSWPlugin({ devMode }), - !devMode && statsExtracterPlugin(), - themePlugin({devMode}), - lenientLitImportPlugin(), - postcssLit({ - include: ['**/*.css', '**/*.css\?*'], - exclude: [ - `${themeFolder}/**/*.css`, - `${themeFolder}/**/*.css\?*`, - `${themeResourceFolder}/**/*.css`, - `${themeResourceFolder}/**/*.css\?*`, - '**/*\?html-proxy*' - ] - }), - { - name: 'vaadin:force-remove-html-middleware', - transformIndexHtml: { - enforce: 'pre', - transform(_html, { server }) { - if (server && !spaMiddlewareForceRemoved) { - server.middlewares.stack = server.middlewares.stack.filter((mw) => { - const handleName = '' + mw.handle; - return !handleName.includes('viteHtmlFallbackMiddleware'); - }); - spaMiddlewareForceRemoved = true; - } - } - } - }, - hasExportedWebComponents && { - name: 'vaadin:inject-entrypoints-to-web-component-html', - transformIndexHtml: { - enforce: 'pre', - transform(_html, { path, server }) { - if (path !== '/web-component.html') { - return; - } - - return [ - { - tag: 'script', - attrs: { type: 'module', src: `/generated/vaadin-web-component.ts` }, - injectTo: 'head' - } - ] - } - } - }, - { - name: 'vaadin:inject-entrypoints-to-index-html', - transformIndexHtml: { - enforce: 'pre', - transform(_html, { path, server }) { - if (path !== '/index.html') { - return; - } - - const scripts = []; - - if (devMode) { - scripts.push({ - tag: 'script', - attrs: { type: 'module', src: `/generated/vite-devmode.ts` }, - injectTo: 'head' - }); - } - scripts.push({ - tag: 'script', - attrs: { type: 'module', src: '/generated/vaadin.ts' }, - injectTo: 'head' - }); - return scripts; - } - } - }, - checker({ - typescript: true - }) - ] - }; -}; - -export const overrideVaadinConfig = (customConfig: UserConfigFn) => { - return defineConfig((env) => mergeConfig(vaadinConfig(env), customConfig(env))); -}; diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-context-path/vite.generated.ts b/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-context-path/vite.generated.ts deleted file mode 100644 index e30d55d4..00000000 --- a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-context-path/vite.generated.ts +++ /dev/null @@ -1,635 +0,0 @@ -/** - * NOTICE: this is an auto-generated file - * - * This file has been generated by the `flow:prepare-frontend` maven goal. - * This file will be overwritten on every run. Any custom changes should be made to vite.config.ts - */ -import path from 'path'; -import { readFileSync, existsSync, writeFileSync } from 'fs'; -import * as net from 'net'; - -import { processThemeResources } from './target/plugins/application-theme-plugin/theme-handle'; -import { rewriteCssUrls } from './target/plugins/theme-loader/theme-loader-utils'; -import settings from './target/vaadin-dev-server-settings.json'; -import { defineConfig, mergeConfig, PluginOption, ResolvedConfig, UserConfigFn, OutputOptions, AssetInfo, ChunkInfo } from 'vite'; -import { getManifest } from 'workbox-build'; - -import * as rollup from 'rollup'; -import brotli from 'rollup-plugin-brotli'; -import replace from '@rollup/plugin-replace'; -import checker from 'vite-plugin-checker'; -import postcssLit from './target/plugins/rollup-plugin-postcss-lit-custom/rollup-plugin-postcss-lit.js'; - -const appShellUrl = '.'; - -const frontendFolder = path.resolve(__dirname, settings.frontendFolder); -const themeFolder = path.resolve(frontendFolder, settings.themeFolder); -const frontendBundleFolder = path.resolve(__dirname, settings.frontendBundleOutput); -const addonFrontendFolder = path.resolve(__dirname, settings.addonFrontendFolder); -const themeResourceFolder = path.resolve(__dirname, settings.themeResourceFolder); -const statsFile = path.resolve(frontendBundleFolder, '..', 'config', 'stats.json'); - -const projectStaticAssetsFolders = [ - path.resolve(__dirname, 'src', 'main', 'resources', 'META-INF', 'resources'), - path.resolve(__dirname, 'src', 'main', 'resources', 'static'), - frontendFolder -]; - -// Folders in the project which can contain application themes -const themeProjectFolders = projectStaticAssetsFolders.map((folder) => path.resolve(folder, settings.themeFolder)); - -const themeOptions = { - devMode: false, - // The following matches folder 'target/flow-frontend/themes/' - // (not 'frontend/themes') for theme in JAR that is copied there - themeResourceFolder: path.resolve(themeResourceFolder, settings.themeFolder), - themeProjectFolders: themeProjectFolders, - projectStaticAssetsOutputFolder: path.resolve(__dirname, settings.staticOutput), - frontendGeneratedFolder: path.resolve(frontendFolder, settings.generatedFolder) -}; - -const hasExportedWebComponents = existsSync(path.resolve(frontendFolder, 'web-component.html')); - -// Block debug and trace logs. -console.trace = () => {}; -console.debug = () => {}; - -function injectManifestToSWPlugin(): rollup.Plugin { - const rewriteManifestIndexHtmlUrl = (manifest) => { - const indexEntry = manifest.find((entry) => entry.url === 'index.html'); - if (indexEntry) { - indexEntry.url = appShellUrl; - } - - return { manifest, warnings: [] }; - }; - - return { - name: 'vaadin:inject-manifest-to-sw', - async transform(code, id) { - if (/sw\.(ts|js)$/.test(id)) { - const { manifestEntries } = await getManifest({ - globDirectory: frontendBundleFolder, - globPatterns: ['**/*'], - globIgnores: ['**/*.br'], - manifestTransforms: [rewriteManifestIndexHtmlUrl], - maximumFileSizeToCacheInBytes: 100 * 1024 * 1024, // 100mb, - }); - - return code.replace('self.__WB_MANIFEST', JSON.stringify(manifestEntries)); - } - } - } -} - -function buildSWPlugin(opts): PluginOption { - let config: ResolvedConfig; - const devMode = opts.devMode; - - const swObj = {} - - async function build(action: 'generate' | 'write', additionalPlugins: rollup.Plugin[] = []) { - const includedPluginNames = [ - 'alias', - 'vite:resolve', - 'vite:esbuild', - 'rollup-plugin-dynamic-import-variables', - 'vite:esbuild-transpile', - 'vite:terser', - ] - const plugins: rollup.Plugin[] = config.plugins.filter((p) => { - return includedPluginNames.includes(p.name) - }); - plugins.push( - replace({ - values: { - 'process.env.NODE_ENV': JSON.stringify(config.mode), - ...config.define, - }, - preventAssignment: true - }) - ); - if (additionalPlugins) { - plugins.push(...additionalPlugins); - } - const bundle = await rollup.rollup({ - input: path.resolve(settings.clientServiceWorkerSource), - plugins - }); - - try { - return await bundle[action]({ - file: path.resolve(frontendBundleFolder, 'sw.js'), - format: 'es', - exports: 'none', - sourcemap: config.command === 'serve' || config.build.sourcemap, - inlineDynamicImports: true, - }); - } finally { - await bundle.close(); - } - } - - return { - name: 'vaadin:build-sw', - enforce: 'post', - async configResolved(resolvedConfig) { - config = resolvedConfig; - }, - async buildStart() { - if (devMode) { - const { output } = await build('generate'); - swObj.code = output[0].code; - swObj.map = output[0].map; - } - }, - async load(id) { - if (id.endsWith('sw.js')) { - return ''; - } - }, - async transform(_code, id) { - if (id.endsWith('sw.js')) { - return swObj; - } - }, - async closeBundle() { - await build('write', [ - injectManifestToSWPlugin(), - brotli(), - ]); - } - } -} - -function statsExtracterPlugin(): PluginOption { - return { - name: 'vaadin:stats', - enforce: 'post', - async writeBundle(options: OutputOptions, bundle: { [fileName: string]: AssetInfo | ChunkInfo }) { - const modules = Object.values(bundle).flatMap((b) => (b.modules ? Object.keys(b.modules) : [])); - const nodeModulesFolders = modules.filter((id) => id.includes('node_modules')); - const npmModules = nodeModulesFolders - .map((id) => id.replace(/.*node_modules./, '')) - .map((id) => { - const parts = id.split('/'); - if (id.startsWith('@')) { - return parts[0] + '/' + parts[1]; - } else { - return parts[0]; - } - }) - .sort() - .filter((value, index, self) => self.indexOf(value) === index); - - writeFileSync(statsFile, JSON.stringify({ npmModules }, null, 1)); - } - }; -} -function vaadinBundlesPlugin(): PluginOption { - type ExportInfo = - | string - | { - namespace?: string; - source: string; - }; - - type ExposeInfo = { - exports: ExportInfo[]; - }; - - type PackageInfo = { - version: string; - exposes: Record; - }; - - type BundleJson = { - packages: Record; - }; - - const disabledMessage = 'Vaadin component dependency bundles are disabled.'; - - const modulesDirectory = path.resolve(__dirname, 'node_modules').replace(/\\/g, '/'); - - let vaadinBundleJson: BundleJson; - - function parseModuleId(id: string): { packageName: string; modulePath: string } { - const [scope, scopedPackageName] = id.split('/', 3); - const packageName = scope.startsWith('@') ? `${scope}/${scopedPackageName}` : scope; - const modulePath = `.${id.substring(packageName.length)}`; - return { - packageName, - modulePath - }; - } - - function getExports(id: string): string[] | undefined { - const { packageName, modulePath } = parseModuleId(id); - const packageInfo = vaadinBundleJson.packages[packageName]; - - if (!packageInfo) return; - - const exposeInfo: ExposeInfo = packageInfo.exposes[modulePath]; - if (!exposeInfo) return; - - const exportsSet = new Set(); - for (const e of exposeInfo.exports) { - if (typeof e === 'string') { - exportsSet.add(e); - } else { - const { namespace, source } = e; - if (namespace) { - exportsSet.add(namespace); - } else { - const sourceExports = getExports(source); - if (sourceExports) { - sourceExports.forEach((e) => exportsSet.add(e)); - } - } - } - } - return Array.from(exportsSet); - } - - function getExportBinding(binding: string) { - return binding === 'default' ? '_default as default' : binding; - } - - function getImportAssigment(binding: string) { - return binding === 'default' ? 'default: _default' : binding; - } - - return { - name: 'vaadin:bundles', - enforce: 'pre', - apply(config, { command }) { - if (command !== 'serve') return false; - - try { - const vaadinBundleJsonPath = require.resolve('@vaadin/bundles/vaadin-bundle.json'); - vaadinBundleJson = JSON.parse(readFileSync(vaadinBundleJsonPath, { encoding: 'utf8' })); - } catch (e: unknown) { - if (typeof e === 'object' && (e as { code: string }).code === 'MODULE_NOT_FOUND') { - vaadinBundleJson = { packages: {} }; - console.info(`@vaadin/bundles npm package is not found, ${disabledMessage}`); - return false; - } else { - throw e; - } - } - - const versionMismatches: Array<{ name: string; bundledVersion: string; installedVersion: string }> = []; - for (const [name, packageInfo] of Object.entries(vaadinBundleJson.packages)) { - let installedVersion: string | undefined = undefined; - try { - const { version: bundledVersion } = packageInfo; - const installedPackageJsonFile = path.resolve(modulesDirectory, name, 'package.json'); - const packageJson = JSON.parse(readFileSync(installedPackageJsonFile, { encoding: 'utf8' })); - installedVersion = packageJson.version; - if (installedVersion && installedVersion !== bundledVersion) { - versionMismatches.push({ - name, - bundledVersion, - installedVersion - }); - } - } catch (_) { - // ignore package not found - } - } - if (versionMismatches.length) { - console.info(`@vaadin/bundles has version mismatches with installed packages, ${disabledMessage}`); - console.info(`Packages with version mismatches: ${JSON.stringify(versionMismatches, undefined, 2)}`); - vaadinBundleJson = { packages: {} }; - return false; - } - - return true; - }, - async config(config) { - return mergeConfig( - { - optimizeDeps: { - exclude: [ - // Vaadin bundle - '@vaadin/bundles', - ...Object.keys(vaadinBundleJson.packages) - ] - } - }, - config - ); - }, - load(rawId) { - const [path, params] = rawId.split('?'); - if (!path.startsWith(modulesDirectory)) return; - - const id = path.substring(modulesDirectory.length + 1); - const bindings = getExports(id); - if (bindings === undefined) return; - - const cacheSuffix = params ? `?${params}` : ''; - const bundlePath = `@vaadin/bundles/vaadin.js${cacheSuffix}`; - - return `import { init as VaadinBundleInit, get as VaadinBundleGet } from '${bundlePath}'; -await VaadinBundleInit('default'); -const { ${bindings.map(getImportAssigment).join(', ')} } = (await VaadinBundleGet('./node_modules/${id}'))(); -export { ${bindings.map(getExportBinding).join(', ')} };`; - } - }; -} - -function themePlugin(opts): PluginOption { - const fullThemeOptions = {...themeOptions, devMode: opts.devMode }; - return { - name: 'vaadin:theme', - config() { - processThemeResources(fullThemeOptions, console); - }, - configureServer(server) { - function handleThemeFileCreateDelete(themeFile, stats) { - if (themeFile.startsWith(themeFolder)) { - const changed = path.relative(themeFolder, themeFile) - console.debug('Theme file ' + (!!stats ? 'created' : 'deleted'), changed); - processThemeResources(fullThemeOptions, console); - } - } - server.watcher.on('add', handleThemeFileCreateDelete); - server.watcher.on('unlink', handleThemeFileCreateDelete); - }, - handleHotUpdate(context) { - const contextPath = path.resolve(context.file); - const themePath = path.resolve(themeFolder); - if (contextPath.startsWith(themePath)) { - const changed = path.relative(themePath, contextPath); - - console.debug('Theme file changed', changed); - - if (changed.startsWith(settings.themeName)) { - processThemeResources(fullThemeOptions, console); - } - } - }, - async resolveId(id, importer) { - // force theme generation if generated theme sources does not yet exist - // this may happen for example during Java hot reload when updating - // @Theme annotation value - if (path.resolve(themeOptions.frontendGeneratedFolder, "theme.js") === importer && - !existsSync(path.resolve(themeOptions.frontendGeneratedFolder, id))) { - console.debug('Generate theme file ' + id + ' not existing. Processing theme resource'); - processThemeResources(fullThemeOptions, console); - return; - } - if (!id.startsWith(settings.themeFolder)) { - return; - } - - for (const location of [themeResourceFolder, frontendFolder]) { - const result = await this.resolve(path.resolve(location, id)); - if (result) { - return result; - } - } - }, - async transform(raw, id, options) { - // rewrite urls for the application theme css files - const [bareId, query] = id.split('?'); - if (!bareId?.startsWith(themeFolder) || !bareId?.endsWith('.css')) { - return; - } - const [themeName] = bareId.substring(themeFolder.length + 1).split('/'); - return rewriteCssUrls(raw, path.dirname(bareId), path.resolve(themeFolder, themeName), console, opts); - } - }; -} -function lenientLitImportPlugin(): PluginOption { - return { - name: 'vaadin:lenient-lit-import', - async transform(code, id) { - const decoratorImports = [ - /import (.*?) from (['"])(lit\/decorators)(['"])/, - /import (.*?) from (['"])(lit-element\/decorators)(['"])/ - ]; - const directiveImports = [ - /import (.*?) from (['"])(lit\/directives\/)([^\\.]*?)(['"])/, - /import (.*?) from (['"])(lit-html\/directives\/)([^\\.]*?)(['"])/ - ]; - - decoratorImports.forEach((decoratorImport) => { - let decoratorMatch; - while ((decoratorMatch = code.match(decoratorImport))) { - console.warn( - `Warning: the file ${id} imports from '${decoratorMatch[3]}' when it should import from '${decoratorMatch[3]}.js'` - ); - code = code.replace(decoratorImport, 'import $1 from $2$3.js$4'); - } - }); - - directiveImports.forEach((directiveImport) => { - let directiveMatch; - while ((directiveMatch = code.match(directiveImport))) { - console.warn( - `Warning: the file ${id} imports from '${directiveMatch[3]}${directiveMatch[4]}' when it should import from '${directiveMatch[3]}${directiveMatch[4]}.js'` - ); - code = code.replace(directiveImport, 'import $1 from $2$3$4.js$5'); - } - }); - - return code; - } - }; -} - -function runWatchDog(watchDogPort, watchDogHost) { - const client = net.Socket(); - client.setEncoding('utf8'); - client.on('error', function (err) { - console.log('Watchdog connection error. Terminating vite process...', err); - client.destroy(); - process.exit(0); - }); - client.on('close', function () { - client.destroy(); - runWatchDog(watchDogPort, watchDogHost); - }); - - client.connect(watchDogPort, watchDogHost || 'localhost'); -} - -let spaMiddlewareForceRemoved = false; - -const allowedFrontendFolders = [ - frontendFolder, - addonFrontendFolder, - path.resolve(addonFrontendFolder, '..', 'frontend'), // Contains only generated-flow-imports - path.resolve(__dirname, 'node_modules') -]; - -function setHmrPortToServerPort(): PluginOption { - return { - name: 'set-hmr-port-to-server-port', - configResolved(config) { - if (config.server.strictPort && config.server.hmr !== false) { - if (config.server.hmr === true) config.server.hmr = {}; - config.server.hmr = config.server.hmr || {}; - config.server.hmr.clientPort = config.server.port; - } - } - }; -} -function showRecompileReason(): PluginOption { - return { - name: 'vaadin:why-you-compile', - handleHotUpdate(context) { - console.log('Recompiling because', context.file, 'changed'); - } - }; -} - -export const vaadinConfig: UserConfigFn = (env) => { - const devMode = env.mode === 'development'; - - if (devMode && process.env.watchDogPort) { - // Open a connection with the Java dev-mode handler in order to finish - // vite when it exits or crashes. - runWatchDog(process.env.watchDogPort, process.env.watchDogHost); - } - - return { - root: frontendFolder, - base: '', - resolve: { - alias: { - Frontend: frontendFolder - }, - preserveSymlinks: true - }, - define: { - OFFLINE_PATH: settings.offlinePath, - VITE_ENABLED: 'true' - }, - server: { - host: '127.0.0.1', - strictPort: true, - fs: { - allow: allowedFrontendFolders - } - }, - build: { - outDir: frontendBundleFolder, - assetsDir: 'VAADIN/build', - rollupOptions: { - input: { - indexhtml: path.resolve(frontendFolder, 'index.html'), - - ...hasExportedWebComponents - ? { webcomponenthtml: path.resolve(frontendFolder, 'web-component.html') } - : {} - } - } - }, - optimizeDeps: { - entries: [ - // Pre-scan entrypoints in Vite to avoid reloading on first open - 'generated/vaadin.ts' - ], - exclude: [ - '@vaadin/router', - '@vaadin/vaadin-license-checker', - '@vaadin/vaadin-usage-statistics', - 'workbox-core', - 'workbox-precaching', - 'workbox-routing', - 'workbox-strategies' - ] - }, - plugins: [ - !devMode && brotli(), - devMode && vaadinBundlesPlugin(), - devMode && setHmrPortToServerPort(), - devMode && showRecompileReason(), - settings.offlineEnabled && buildSWPlugin({ devMode }), - !devMode && statsExtracterPlugin(), - themePlugin({devMode}), - lenientLitImportPlugin(), - postcssLit({ - include: ['**/*.css', '**/*.css\?*'], - exclude: [ - `${themeFolder}/**/*.css`, - `${themeFolder}/**/*.css\?*`, - `${themeResourceFolder}/**/*.css`, - `${themeResourceFolder}/**/*.css\?*`, - '**/*\?html-proxy*' - ] - }), - { - name: 'vaadin:force-remove-spa-middleware', - transformIndexHtml: { - enforce: 'pre', - transform(_html, { server }) { - if (server && !spaMiddlewareForceRemoved) { - server.middlewares.stack = server.middlewares.stack.filter((mw) => { - const handleName = '' + mw.handle; - return !handleName.includes('viteSpaFallbackMiddleware'); - }); - spaMiddlewareForceRemoved = true; - } - } - } - }, - hasExportedWebComponents && { - name: 'vaadin:inject-entrypoints-to-web-component-html', - transformIndexHtml: { - enforce: 'pre', - transform(_html, { path, server }) { - if (path !== '/web-component.html') { - return; - } - - return [ - { - tag: 'script', - attrs: { type: 'module', src: `/generated/vaadin-web-component.ts` }, - injectTo: 'head' - } - ] - } - } - }, - { - name: 'vaadin:inject-entrypoints-to-index-html', - transformIndexHtml: { - enforce: 'pre', - transform(_html, { path, server }) { - if (path !== '/index.html') { - return; - } - - const scripts = []; - - if (devMode) { - scripts.push({ - tag: 'script', - attrs: { type: 'module', src: `/generated/vite-devmode.ts` }, - injectTo: 'head' - }); - } - scripts.push({ - tag: 'script', - attrs: { type: 'module', src: '/generated/vaadin.ts' }, - injectTo: 'head' - }); - return scripts; - } - } - }, - checker({ - typescript: true - }) - ] - }; -}; - -export const overrideVaadinConfig = (customConfig: UserConfigFn) => { - return defineConfig((env) => mergeConfig(vaadinConfig(env), customConfig(env))); -}; diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-embedded/vite.generated.ts b/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-embedded/vite.generated.ts deleted file mode 100644 index e30d55d4..00000000 --- a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-embedded/vite.generated.ts +++ /dev/null @@ -1,635 +0,0 @@ -/** - * NOTICE: this is an auto-generated file - * - * This file has been generated by the `flow:prepare-frontend` maven goal. - * This file will be overwritten on every run. Any custom changes should be made to vite.config.ts - */ -import path from 'path'; -import { readFileSync, existsSync, writeFileSync } from 'fs'; -import * as net from 'net'; - -import { processThemeResources } from './target/plugins/application-theme-plugin/theme-handle'; -import { rewriteCssUrls } from './target/plugins/theme-loader/theme-loader-utils'; -import settings from './target/vaadin-dev-server-settings.json'; -import { defineConfig, mergeConfig, PluginOption, ResolvedConfig, UserConfigFn, OutputOptions, AssetInfo, ChunkInfo } from 'vite'; -import { getManifest } from 'workbox-build'; - -import * as rollup from 'rollup'; -import brotli from 'rollup-plugin-brotli'; -import replace from '@rollup/plugin-replace'; -import checker from 'vite-plugin-checker'; -import postcssLit from './target/plugins/rollup-plugin-postcss-lit-custom/rollup-plugin-postcss-lit.js'; - -const appShellUrl = '.'; - -const frontendFolder = path.resolve(__dirname, settings.frontendFolder); -const themeFolder = path.resolve(frontendFolder, settings.themeFolder); -const frontendBundleFolder = path.resolve(__dirname, settings.frontendBundleOutput); -const addonFrontendFolder = path.resolve(__dirname, settings.addonFrontendFolder); -const themeResourceFolder = path.resolve(__dirname, settings.themeResourceFolder); -const statsFile = path.resolve(frontendBundleFolder, '..', 'config', 'stats.json'); - -const projectStaticAssetsFolders = [ - path.resolve(__dirname, 'src', 'main', 'resources', 'META-INF', 'resources'), - path.resolve(__dirname, 'src', 'main', 'resources', 'static'), - frontendFolder -]; - -// Folders in the project which can contain application themes -const themeProjectFolders = projectStaticAssetsFolders.map((folder) => path.resolve(folder, settings.themeFolder)); - -const themeOptions = { - devMode: false, - // The following matches folder 'target/flow-frontend/themes/' - // (not 'frontend/themes') for theme in JAR that is copied there - themeResourceFolder: path.resolve(themeResourceFolder, settings.themeFolder), - themeProjectFolders: themeProjectFolders, - projectStaticAssetsOutputFolder: path.resolve(__dirname, settings.staticOutput), - frontendGeneratedFolder: path.resolve(frontendFolder, settings.generatedFolder) -}; - -const hasExportedWebComponents = existsSync(path.resolve(frontendFolder, 'web-component.html')); - -// Block debug and trace logs. -console.trace = () => {}; -console.debug = () => {}; - -function injectManifestToSWPlugin(): rollup.Plugin { - const rewriteManifestIndexHtmlUrl = (manifest) => { - const indexEntry = manifest.find((entry) => entry.url === 'index.html'); - if (indexEntry) { - indexEntry.url = appShellUrl; - } - - return { manifest, warnings: [] }; - }; - - return { - name: 'vaadin:inject-manifest-to-sw', - async transform(code, id) { - if (/sw\.(ts|js)$/.test(id)) { - const { manifestEntries } = await getManifest({ - globDirectory: frontendBundleFolder, - globPatterns: ['**/*'], - globIgnores: ['**/*.br'], - manifestTransforms: [rewriteManifestIndexHtmlUrl], - maximumFileSizeToCacheInBytes: 100 * 1024 * 1024, // 100mb, - }); - - return code.replace('self.__WB_MANIFEST', JSON.stringify(manifestEntries)); - } - } - } -} - -function buildSWPlugin(opts): PluginOption { - let config: ResolvedConfig; - const devMode = opts.devMode; - - const swObj = {} - - async function build(action: 'generate' | 'write', additionalPlugins: rollup.Plugin[] = []) { - const includedPluginNames = [ - 'alias', - 'vite:resolve', - 'vite:esbuild', - 'rollup-plugin-dynamic-import-variables', - 'vite:esbuild-transpile', - 'vite:terser', - ] - const plugins: rollup.Plugin[] = config.plugins.filter((p) => { - return includedPluginNames.includes(p.name) - }); - plugins.push( - replace({ - values: { - 'process.env.NODE_ENV': JSON.stringify(config.mode), - ...config.define, - }, - preventAssignment: true - }) - ); - if (additionalPlugins) { - plugins.push(...additionalPlugins); - } - const bundle = await rollup.rollup({ - input: path.resolve(settings.clientServiceWorkerSource), - plugins - }); - - try { - return await bundle[action]({ - file: path.resolve(frontendBundleFolder, 'sw.js'), - format: 'es', - exports: 'none', - sourcemap: config.command === 'serve' || config.build.sourcemap, - inlineDynamicImports: true, - }); - } finally { - await bundle.close(); - } - } - - return { - name: 'vaadin:build-sw', - enforce: 'post', - async configResolved(resolvedConfig) { - config = resolvedConfig; - }, - async buildStart() { - if (devMode) { - const { output } = await build('generate'); - swObj.code = output[0].code; - swObj.map = output[0].map; - } - }, - async load(id) { - if (id.endsWith('sw.js')) { - return ''; - } - }, - async transform(_code, id) { - if (id.endsWith('sw.js')) { - return swObj; - } - }, - async closeBundle() { - await build('write', [ - injectManifestToSWPlugin(), - brotli(), - ]); - } - } -} - -function statsExtracterPlugin(): PluginOption { - return { - name: 'vaadin:stats', - enforce: 'post', - async writeBundle(options: OutputOptions, bundle: { [fileName: string]: AssetInfo | ChunkInfo }) { - const modules = Object.values(bundle).flatMap((b) => (b.modules ? Object.keys(b.modules) : [])); - const nodeModulesFolders = modules.filter((id) => id.includes('node_modules')); - const npmModules = nodeModulesFolders - .map((id) => id.replace(/.*node_modules./, '')) - .map((id) => { - const parts = id.split('/'); - if (id.startsWith('@')) { - return parts[0] + '/' + parts[1]; - } else { - return parts[0]; - } - }) - .sort() - .filter((value, index, self) => self.indexOf(value) === index); - - writeFileSync(statsFile, JSON.stringify({ npmModules }, null, 1)); - } - }; -} -function vaadinBundlesPlugin(): PluginOption { - type ExportInfo = - | string - | { - namespace?: string; - source: string; - }; - - type ExposeInfo = { - exports: ExportInfo[]; - }; - - type PackageInfo = { - version: string; - exposes: Record; - }; - - type BundleJson = { - packages: Record; - }; - - const disabledMessage = 'Vaadin component dependency bundles are disabled.'; - - const modulesDirectory = path.resolve(__dirname, 'node_modules').replace(/\\/g, '/'); - - let vaadinBundleJson: BundleJson; - - function parseModuleId(id: string): { packageName: string; modulePath: string } { - const [scope, scopedPackageName] = id.split('/', 3); - const packageName = scope.startsWith('@') ? `${scope}/${scopedPackageName}` : scope; - const modulePath = `.${id.substring(packageName.length)}`; - return { - packageName, - modulePath - }; - } - - function getExports(id: string): string[] | undefined { - const { packageName, modulePath } = parseModuleId(id); - const packageInfo = vaadinBundleJson.packages[packageName]; - - if (!packageInfo) return; - - const exposeInfo: ExposeInfo = packageInfo.exposes[modulePath]; - if (!exposeInfo) return; - - const exportsSet = new Set(); - for (const e of exposeInfo.exports) { - if (typeof e === 'string') { - exportsSet.add(e); - } else { - const { namespace, source } = e; - if (namespace) { - exportsSet.add(namespace); - } else { - const sourceExports = getExports(source); - if (sourceExports) { - sourceExports.forEach((e) => exportsSet.add(e)); - } - } - } - } - return Array.from(exportsSet); - } - - function getExportBinding(binding: string) { - return binding === 'default' ? '_default as default' : binding; - } - - function getImportAssigment(binding: string) { - return binding === 'default' ? 'default: _default' : binding; - } - - return { - name: 'vaadin:bundles', - enforce: 'pre', - apply(config, { command }) { - if (command !== 'serve') return false; - - try { - const vaadinBundleJsonPath = require.resolve('@vaadin/bundles/vaadin-bundle.json'); - vaadinBundleJson = JSON.parse(readFileSync(vaadinBundleJsonPath, { encoding: 'utf8' })); - } catch (e: unknown) { - if (typeof e === 'object' && (e as { code: string }).code === 'MODULE_NOT_FOUND') { - vaadinBundleJson = { packages: {} }; - console.info(`@vaadin/bundles npm package is not found, ${disabledMessage}`); - return false; - } else { - throw e; - } - } - - const versionMismatches: Array<{ name: string; bundledVersion: string; installedVersion: string }> = []; - for (const [name, packageInfo] of Object.entries(vaadinBundleJson.packages)) { - let installedVersion: string | undefined = undefined; - try { - const { version: bundledVersion } = packageInfo; - const installedPackageJsonFile = path.resolve(modulesDirectory, name, 'package.json'); - const packageJson = JSON.parse(readFileSync(installedPackageJsonFile, { encoding: 'utf8' })); - installedVersion = packageJson.version; - if (installedVersion && installedVersion !== bundledVersion) { - versionMismatches.push({ - name, - bundledVersion, - installedVersion - }); - } - } catch (_) { - // ignore package not found - } - } - if (versionMismatches.length) { - console.info(`@vaadin/bundles has version mismatches with installed packages, ${disabledMessage}`); - console.info(`Packages with version mismatches: ${JSON.stringify(versionMismatches, undefined, 2)}`); - vaadinBundleJson = { packages: {} }; - return false; - } - - return true; - }, - async config(config) { - return mergeConfig( - { - optimizeDeps: { - exclude: [ - // Vaadin bundle - '@vaadin/bundles', - ...Object.keys(vaadinBundleJson.packages) - ] - } - }, - config - ); - }, - load(rawId) { - const [path, params] = rawId.split('?'); - if (!path.startsWith(modulesDirectory)) return; - - const id = path.substring(modulesDirectory.length + 1); - const bindings = getExports(id); - if (bindings === undefined) return; - - const cacheSuffix = params ? `?${params}` : ''; - const bundlePath = `@vaadin/bundles/vaadin.js${cacheSuffix}`; - - return `import { init as VaadinBundleInit, get as VaadinBundleGet } from '${bundlePath}'; -await VaadinBundleInit('default'); -const { ${bindings.map(getImportAssigment).join(', ')} } = (await VaadinBundleGet('./node_modules/${id}'))(); -export { ${bindings.map(getExportBinding).join(', ')} };`; - } - }; -} - -function themePlugin(opts): PluginOption { - const fullThemeOptions = {...themeOptions, devMode: opts.devMode }; - return { - name: 'vaadin:theme', - config() { - processThemeResources(fullThemeOptions, console); - }, - configureServer(server) { - function handleThemeFileCreateDelete(themeFile, stats) { - if (themeFile.startsWith(themeFolder)) { - const changed = path.relative(themeFolder, themeFile) - console.debug('Theme file ' + (!!stats ? 'created' : 'deleted'), changed); - processThemeResources(fullThemeOptions, console); - } - } - server.watcher.on('add', handleThemeFileCreateDelete); - server.watcher.on('unlink', handleThemeFileCreateDelete); - }, - handleHotUpdate(context) { - const contextPath = path.resolve(context.file); - const themePath = path.resolve(themeFolder); - if (contextPath.startsWith(themePath)) { - const changed = path.relative(themePath, contextPath); - - console.debug('Theme file changed', changed); - - if (changed.startsWith(settings.themeName)) { - processThemeResources(fullThemeOptions, console); - } - } - }, - async resolveId(id, importer) { - // force theme generation if generated theme sources does not yet exist - // this may happen for example during Java hot reload when updating - // @Theme annotation value - if (path.resolve(themeOptions.frontendGeneratedFolder, "theme.js") === importer && - !existsSync(path.resolve(themeOptions.frontendGeneratedFolder, id))) { - console.debug('Generate theme file ' + id + ' not existing. Processing theme resource'); - processThemeResources(fullThemeOptions, console); - return; - } - if (!id.startsWith(settings.themeFolder)) { - return; - } - - for (const location of [themeResourceFolder, frontendFolder]) { - const result = await this.resolve(path.resolve(location, id)); - if (result) { - return result; - } - } - }, - async transform(raw, id, options) { - // rewrite urls for the application theme css files - const [bareId, query] = id.split('?'); - if (!bareId?.startsWith(themeFolder) || !bareId?.endsWith('.css')) { - return; - } - const [themeName] = bareId.substring(themeFolder.length + 1).split('/'); - return rewriteCssUrls(raw, path.dirname(bareId), path.resolve(themeFolder, themeName), console, opts); - } - }; -} -function lenientLitImportPlugin(): PluginOption { - return { - name: 'vaadin:lenient-lit-import', - async transform(code, id) { - const decoratorImports = [ - /import (.*?) from (['"])(lit\/decorators)(['"])/, - /import (.*?) from (['"])(lit-element\/decorators)(['"])/ - ]; - const directiveImports = [ - /import (.*?) from (['"])(lit\/directives\/)([^\\.]*?)(['"])/, - /import (.*?) from (['"])(lit-html\/directives\/)([^\\.]*?)(['"])/ - ]; - - decoratorImports.forEach((decoratorImport) => { - let decoratorMatch; - while ((decoratorMatch = code.match(decoratorImport))) { - console.warn( - `Warning: the file ${id} imports from '${decoratorMatch[3]}' when it should import from '${decoratorMatch[3]}.js'` - ); - code = code.replace(decoratorImport, 'import $1 from $2$3.js$4'); - } - }); - - directiveImports.forEach((directiveImport) => { - let directiveMatch; - while ((directiveMatch = code.match(directiveImport))) { - console.warn( - `Warning: the file ${id} imports from '${directiveMatch[3]}${directiveMatch[4]}' when it should import from '${directiveMatch[3]}${directiveMatch[4]}.js'` - ); - code = code.replace(directiveImport, 'import $1 from $2$3$4.js$5'); - } - }); - - return code; - } - }; -} - -function runWatchDog(watchDogPort, watchDogHost) { - const client = net.Socket(); - client.setEncoding('utf8'); - client.on('error', function (err) { - console.log('Watchdog connection error. Terminating vite process...', err); - client.destroy(); - process.exit(0); - }); - client.on('close', function () { - client.destroy(); - runWatchDog(watchDogPort, watchDogHost); - }); - - client.connect(watchDogPort, watchDogHost || 'localhost'); -} - -let spaMiddlewareForceRemoved = false; - -const allowedFrontendFolders = [ - frontendFolder, - addonFrontendFolder, - path.resolve(addonFrontendFolder, '..', 'frontend'), // Contains only generated-flow-imports - path.resolve(__dirname, 'node_modules') -]; - -function setHmrPortToServerPort(): PluginOption { - return { - name: 'set-hmr-port-to-server-port', - configResolved(config) { - if (config.server.strictPort && config.server.hmr !== false) { - if (config.server.hmr === true) config.server.hmr = {}; - config.server.hmr = config.server.hmr || {}; - config.server.hmr.clientPort = config.server.port; - } - } - }; -} -function showRecompileReason(): PluginOption { - return { - name: 'vaadin:why-you-compile', - handleHotUpdate(context) { - console.log('Recompiling because', context.file, 'changed'); - } - }; -} - -export const vaadinConfig: UserConfigFn = (env) => { - const devMode = env.mode === 'development'; - - if (devMode && process.env.watchDogPort) { - // Open a connection with the Java dev-mode handler in order to finish - // vite when it exits or crashes. - runWatchDog(process.env.watchDogPort, process.env.watchDogHost); - } - - return { - root: frontendFolder, - base: '', - resolve: { - alias: { - Frontend: frontendFolder - }, - preserveSymlinks: true - }, - define: { - OFFLINE_PATH: settings.offlinePath, - VITE_ENABLED: 'true' - }, - server: { - host: '127.0.0.1', - strictPort: true, - fs: { - allow: allowedFrontendFolders - } - }, - build: { - outDir: frontendBundleFolder, - assetsDir: 'VAADIN/build', - rollupOptions: { - input: { - indexhtml: path.resolve(frontendFolder, 'index.html'), - - ...hasExportedWebComponents - ? { webcomponenthtml: path.resolve(frontendFolder, 'web-component.html') } - : {} - } - } - }, - optimizeDeps: { - entries: [ - // Pre-scan entrypoints in Vite to avoid reloading on first open - 'generated/vaadin.ts' - ], - exclude: [ - '@vaadin/router', - '@vaadin/vaadin-license-checker', - '@vaadin/vaadin-usage-statistics', - 'workbox-core', - 'workbox-precaching', - 'workbox-routing', - 'workbox-strategies' - ] - }, - plugins: [ - !devMode && brotli(), - devMode && vaadinBundlesPlugin(), - devMode && setHmrPortToServerPort(), - devMode && showRecompileReason(), - settings.offlineEnabled && buildSWPlugin({ devMode }), - !devMode && statsExtracterPlugin(), - themePlugin({devMode}), - lenientLitImportPlugin(), - postcssLit({ - include: ['**/*.css', '**/*.css\?*'], - exclude: [ - `${themeFolder}/**/*.css`, - `${themeFolder}/**/*.css\?*`, - `${themeResourceFolder}/**/*.css`, - `${themeResourceFolder}/**/*.css\?*`, - '**/*\?html-proxy*' - ] - }), - { - name: 'vaadin:force-remove-spa-middleware', - transformIndexHtml: { - enforce: 'pre', - transform(_html, { server }) { - if (server && !spaMiddlewareForceRemoved) { - server.middlewares.stack = server.middlewares.stack.filter((mw) => { - const handleName = '' + mw.handle; - return !handleName.includes('viteSpaFallbackMiddleware'); - }); - spaMiddlewareForceRemoved = true; - } - } - } - }, - hasExportedWebComponents && { - name: 'vaadin:inject-entrypoints-to-web-component-html', - transformIndexHtml: { - enforce: 'pre', - transform(_html, { path, server }) { - if (path !== '/web-component.html') { - return; - } - - return [ - { - tag: 'script', - attrs: { type: 'module', src: `/generated/vaadin-web-component.ts` }, - injectTo: 'head' - } - ] - } - } - }, - { - name: 'vaadin:inject-entrypoints-to-index-html', - transformIndexHtml: { - enforce: 'pre', - transform(_html, { path, server }) { - if (path !== '/index.html') { - return; - } - - const scripts = []; - - if (devMode) { - scripts.push({ - tag: 'script', - attrs: { type: 'module', src: `/generated/vite-devmode.ts` }, - injectTo: 'head' - }); - } - scripts.push({ - tag: 'script', - attrs: { type: 'module', src: '/generated/vaadin.ts' }, - injectTo: 'head' - }); - return scripts; - } - } - }, - checker({ - typescript: true - }) - ] - }; -}; - -export const overrideVaadinConfig = (customConfig: UserConfigFn) => { - return defineConfig((env) => mergeConfig(vaadinConfig(env), customConfig(env))); -}; diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production/vite.config.ts b/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production/vite.config.ts deleted file mode 100644 index 4d6a0222..00000000 --- a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production/vite.config.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { UserConfigFn } from 'vite'; -import { overrideVaadinConfig } from './vite.generated'; - -const customConfig: UserConfigFn = (env) => ({ - // Here you can add custom Vite parameters - // https://vitejs.dev/config/ -}); - -export default overrideVaadinConfig(customConfig); diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production/vite.generated.ts b/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production/vite.generated.ts deleted file mode 100644 index 54f4c94e..00000000 --- a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production/vite.generated.ts +++ /dev/null @@ -1,640 +0,0 @@ -/** - * NOTICE: this is an auto-generated file - * - * This file has been generated by the `flow:prepare-frontend` maven goal. - * This file will be overwritten on every run. Any custom changes should be made to vite.config.ts - */ -import path from 'path'; -import { readFileSync, existsSync, writeFileSync, mkdirSync } from 'fs'; -import * as net from 'net'; - -import { processThemeResources } from './target/plugins/application-theme-plugin/theme-handle.js'; -import { rewriteCssUrls } from './target/plugins/theme-loader/theme-loader-utils.js'; -import settings from './target/vaadin-dev-server-settings.json'; -import { defineConfig, mergeConfig, PluginOption, ResolvedConfig, UserConfigFn, OutputOptions, AssetInfo, ChunkInfo } from 'vite'; -import { getManifest } from 'workbox-build'; - -import * as rollup from 'rollup'; -import brotli from 'rollup-plugin-brotli'; -import replace from '@rollup/plugin-replace'; -import checker from 'vite-plugin-checker'; -import postcssLit from './target/plugins/rollup-plugin-postcss-lit-custom/rollup-plugin-postcss-lit.js'; - -const appShellUrl = '.'; - -const frontendFolder = path.resolve(__dirname, settings.frontendFolder); -const themeFolder = path.resolve(frontendFolder, settings.themeFolder); -const statsFolder = path.resolve(__dirname, settings.statsOutput); -const frontendBundleFolder = path.resolve(__dirname, settings.frontendBundleOutput); -const jarResourcesFolder = path.resolve(__dirname, settings.jarResourcesFolder); -const generatedFlowImportsFolder = path.resolve(__dirname, settings.generatedFlowImportsFolder); -const themeResourceFolder = path.resolve(__dirname, settings.themeResourceFolder); - -const statsFile = path.resolve(statsFolder, 'stats.json'); - -const projectStaticAssetsFolders = [ - path.resolve(__dirname, 'src', 'main', 'resources', 'META-INF', 'resources'), - path.resolve(__dirname, 'src', 'main', 'resources', 'static'), - frontendFolder -]; - -// Folders in the project which can contain application themes -const themeProjectFolders = projectStaticAssetsFolders.map((folder) => path.resolve(folder, settings.themeFolder)); - -const themeOptions = { - devMode: false, - // The following matches folder 'frontend/generated/themes/' - // (not 'frontend/themes') for theme in JAR that is copied there - themeResourceFolder: path.resolve(themeResourceFolder, settings.themeFolder), - themeProjectFolders: themeProjectFolders, - projectStaticAssetsOutputFolder: path.resolve(__dirname, settings.staticOutput), - frontendGeneratedFolder: path.resolve(frontendFolder, settings.generatedFolder) -}; - -const hasExportedWebComponents = existsSync(path.resolve(frontendFolder, 'web-component.html')); - -// Block debug and trace logs. -console.trace = () => {}; -console.debug = () => {}; - -function injectManifestToSWPlugin(): rollup.Plugin { - const rewriteManifestIndexHtmlUrl = (manifest) => { - const indexEntry = manifest.find((entry) => entry.url === 'index.html'); - if (indexEntry) { - indexEntry.url = appShellUrl; - } - - return { manifest, warnings: [] }; - }; - - return { - name: 'vaadin:inject-manifest-to-sw', - async transform(code, id) { - if (/sw\.(ts|js)$/.test(id)) { - const { manifestEntries } = await getManifest({ - globDirectory: frontendBundleFolder, - globPatterns: ['**/*'], - globIgnores: ['**/*.br'], - manifestTransforms: [rewriteManifestIndexHtmlUrl], - maximumFileSizeToCacheInBytes: 100 * 1024 * 1024, // 100mb, - }); - - return code.replace('self.__WB_MANIFEST', JSON.stringify(manifestEntries)); - } - } - } -} - -function buildSWPlugin(opts): PluginOption { - let config: ResolvedConfig; - const devMode = opts.devMode; - - const swObj = {} - - async function build(action: 'generate' | 'write', additionalPlugins: rollup.Plugin[] = []) { - const includedPluginNames = [ - 'alias', - 'vite:resolve', - 'vite:esbuild', - 'rollup-plugin-dynamic-import-variables', - 'vite:esbuild-transpile', - 'vite:terser', - ] - const plugins: rollup.Plugin[] = config.plugins.filter((p) => { - return includedPluginNames.includes(p.name) - }); - plugins.push( - replace({ - values: { - 'process.env.NODE_ENV': JSON.stringify(config.mode), - ...config.define, - }, - preventAssignment: true - }) - ); - if (additionalPlugins) { - plugins.push(...additionalPlugins); - } - const bundle = await rollup.rollup({ - input: path.resolve(settings.clientServiceWorkerSource), - plugins - }); - - try { - return await bundle[action]({ - file: path.resolve(frontendBundleFolder, 'sw.js'), - format: 'es', - exports: 'none', - sourcemap: config.command === 'serve' || config.build.sourcemap, - inlineDynamicImports: true, - }); - } finally { - await bundle.close(); - } - } - - return { - name: 'vaadin:build-sw', - enforce: 'post', - async configResolved(resolvedConfig) { - config = resolvedConfig; - }, - async buildStart() { - if (devMode) { - const { output } = await build('generate'); - swObj.code = output[0].code; - swObj.map = output[0].map; - } - }, - async load(id) { - if (id.endsWith('sw.js')) { - return ''; - } - }, - async transform(_code, id) { - if (id.endsWith('sw.js')) { - return swObj; - } - }, - async closeBundle() { - await build('write', [ - injectManifestToSWPlugin(), - brotli(), - ]); - } - } -} - -function statsExtracterPlugin(): PluginOption { - return { - name: 'vaadin:stats', - enforce: 'post', - async writeBundle(options: OutputOptions, bundle: { [fileName: string]: AssetInfo | ChunkInfo }) { - const modules = Object.values(bundle).flatMap((b) => (b.modules ? Object.keys(b.modules) : [])); - const nodeModulesFolders = modules.filter((id) => id.includes('node_modules')); - const npmModules = nodeModulesFolders - .map((id) => id.replace(/.*node_modules./, '')) - .map((id) => { - const parts = id.split('/'); - if (id.startsWith('@')) { - return parts[0] + '/' + parts[1]; - } else { - return parts[0]; - } - }) - .sort() - .filter((value, index, self) => self.indexOf(value) === index); - - mkdirSync(path.dirname(statsFile), { recursive: true }); - writeFileSync(statsFile, JSON.stringify({ npmModules }, null, 1)); - } - }; -} -function vaadinBundlesPlugin(): PluginOption { - type ExportInfo = - | string - | { - namespace?: string; - source: string; - }; - - type ExposeInfo = { - exports: ExportInfo[]; - }; - - type PackageInfo = { - version: string; - exposes: Record; - }; - - type BundleJson = { - packages: Record; - }; - - const disabledMessage = 'Vaadin component dependency bundles are disabled.'; - - const modulesDirectory = path.resolve(__dirname, 'node_modules').replace(/\\/g, '/'); - - let vaadinBundleJson: BundleJson; - - function parseModuleId(id: string): { packageName: string; modulePath: string } { - const [scope, scopedPackageName] = id.split('/', 3); - const packageName = scope.startsWith('@') ? `${scope}/${scopedPackageName}` : scope; - const modulePath = `.${id.substring(packageName.length)}`; - return { - packageName, - modulePath - }; - } - - function getExports(id: string): string[] | undefined { - const { packageName, modulePath } = parseModuleId(id); - const packageInfo = vaadinBundleJson.packages[packageName]; - - if (!packageInfo) return; - - const exposeInfo: ExposeInfo = packageInfo.exposes[modulePath]; - if (!exposeInfo) return; - - const exportsSet = new Set(); - for (const e of exposeInfo.exports) { - if (typeof e === 'string') { - exportsSet.add(e); - } else { - const { namespace, source } = e; - if (namespace) { - exportsSet.add(namespace); - } else { - const sourceExports = getExports(source); - if (sourceExports) { - sourceExports.forEach((e) => exportsSet.add(e)); - } - } - } - } - return Array.from(exportsSet); - } - - function getExportBinding(binding: string) { - return binding === 'default' ? '_default as default' : binding; - } - - function getImportAssigment(binding: string) { - return binding === 'default' ? 'default: _default' : binding; - } - - return { - name: 'vaadin:bundles', - enforce: 'pre', - apply(config, { command }) { - if (command !== 'serve') return false; - - try { - const vaadinBundleJsonPath = require.resolve('@vaadin/bundles/vaadin-bundle.json'); - vaadinBundleJson = JSON.parse(readFileSync(vaadinBundleJsonPath, { encoding: 'utf8' })); - } catch (e: unknown) { - if (typeof e === 'object' && (e as { code: string }).code === 'MODULE_NOT_FOUND') { - vaadinBundleJson = { packages: {} }; - console.info(`@vaadin/bundles npm package is not found, ${disabledMessage}`); - return false; - } else { - throw e; - } - } - - const versionMismatches: Array<{ name: string; bundledVersion: string; installedVersion: string }> = []; - for (const [name, packageInfo] of Object.entries(vaadinBundleJson.packages)) { - let installedVersion: string | undefined = undefined; - try { - const { version: bundledVersion } = packageInfo; - const installedPackageJsonFile = path.resolve(modulesDirectory, name, 'package.json'); - const packageJson = JSON.parse(readFileSync(installedPackageJsonFile, { encoding: 'utf8' })); - installedVersion = packageJson.version; - if (installedVersion && installedVersion !== bundledVersion) { - versionMismatches.push({ - name, - bundledVersion, - installedVersion - }); - } - } catch (_) { - // ignore package not found - } - } - if (versionMismatches.length) { - console.info(`@vaadin/bundles has version mismatches with installed packages, ${disabledMessage}`); - console.info(`Packages with version mismatches: ${JSON.stringify(versionMismatches, undefined, 2)}`); - vaadinBundleJson = { packages: {} }; - return false; - } - - return true; - }, - async config(config) { - return mergeConfig( - { - optimizeDeps: { - exclude: [ - // Vaadin bundle - '@vaadin/bundles', - ...Object.keys(vaadinBundleJson.packages), - '@vaadin/vaadin-material-styles' - ] - } - }, - config - ); - }, - load(rawId) { - const [path, params] = rawId.split('?'); - if (!path.startsWith(modulesDirectory)) return; - - const id = path.substring(modulesDirectory.length + 1); - const bindings = getExports(id); - if (bindings === undefined) return; - - const cacheSuffix = params ? `?${params}` : ''; - const bundlePath = `@vaadin/bundles/vaadin.js${cacheSuffix}`; - - return `import { init as VaadinBundleInit, get as VaadinBundleGet } from '${bundlePath}'; -await VaadinBundleInit('default'); -const { ${bindings.map(getImportAssigment).join(', ')} } = (await VaadinBundleGet('./node_modules/${id}'))(); -export { ${bindings.map(getExportBinding).join(', ')} };`; - } - }; -} - -function themePlugin(opts): PluginOption { - const fullThemeOptions = {...themeOptions, devMode: opts.devMode }; - return { - name: 'vaadin:theme', - config() { - processThemeResources(fullThemeOptions, console); - }, - configureServer(server) { - function handleThemeFileCreateDelete(themeFile, stats) { - if (themeFile.startsWith(themeFolder)) { - const changed = path.relative(themeFolder, themeFile) - console.debug('Theme file ' + (!!stats ? 'created' : 'deleted'), changed); - processThemeResources(fullThemeOptions, console); - } - } - server.watcher.on('add', handleThemeFileCreateDelete); - server.watcher.on('unlink', handleThemeFileCreateDelete); - }, - handleHotUpdate(context) { - const contextPath = path.resolve(context.file); - const themePath = path.resolve(themeFolder); - if (contextPath.startsWith(themePath)) { - const changed = path.relative(themePath, contextPath); - - console.debug('Theme file changed', changed); - - if (changed.startsWith(settings.themeName)) { - processThemeResources(fullThemeOptions, console); - } - } - }, - async resolveId(id, importer) { - // force theme generation if generated theme sources does not yet exist - // this may happen for example during Java hot reload when updating - // @Theme annotation value - if (path.resolve(themeOptions.frontendGeneratedFolder, "theme.js") === importer && - !existsSync(path.resolve(themeOptions.frontendGeneratedFolder, id))) { - console.debug('Generate theme file ' + id + ' not existing. Processing theme resource'); - processThemeResources(fullThemeOptions, console); - return; - } - if (!id.startsWith(settings.themeFolder)) { - return; - } - - for (const location of [themeResourceFolder, frontendFolder]) { - const result = await this.resolve(path.resolve(location, id)); - if (result) { - return result; - } - } - }, - async transform(raw, id, options) { - // rewrite urls for the application theme css files - const [bareId, query] = id.split('?'); - if (!bareId?.startsWith(themeFolder) || !bareId?.endsWith('.css')) { - return; - } - const [themeName] = bareId.substring(themeFolder.length + 1).split('/'); - return rewriteCssUrls(raw, path.dirname(bareId), path.resolve(themeFolder, themeName), console, opts); - } - }; -} -function lenientLitImportPlugin(): PluginOption { - return { - name: 'vaadin:lenient-lit-import', - async transform(code, id) { - const decoratorImports = [ - /import (.*?) from (['"])(lit\/decorators)(['"])/, - /import (.*?) from (['"])(lit-element\/decorators)(['"])/ - ]; - const directiveImports = [ - /import (.*?) from (['"])(lit\/directives\/)([^\\.]*?)(['"])/, - /import (.*?) from (['"])(lit-html\/directives\/)([^\\.]*?)(['"])/ - ]; - - decoratorImports.forEach((decoratorImport) => { - let decoratorMatch; - while ((decoratorMatch = code.match(decoratorImport))) { - console.warn( - `Warning: the file ${id} imports from '${decoratorMatch[3]}' when it should import from '${decoratorMatch[3]}.js'` - ); - code = code.replace(decoratorImport, 'import $1 from $2$3.js$4'); - } - }); - - directiveImports.forEach((directiveImport) => { - let directiveMatch; - while ((directiveMatch = code.match(directiveImport))) { - console.warn( - `Warning: the file ${id} imports from '${directiveMatch[3]}${directiveMatch[4]}' when it should import from '${directiveMatch[3]}${directiveMatch[4]}.js'` - ); - code = code.replace(directiveImport, 'import $1 from $2$3$4.js$5'); - } - }); - - return code; - } - }; -} - -function runWatchDog(watchDogPort, watchDogHost) { - const client = net.Socket(); - client.setEncoding('utf8'); - client.on('error', function (err) { - console.log('Watchdog connection error. Terminating vite process...', err); - client.destroy(); - process.exit(0); - }); - client.on('close', function () { - client.destroy(); - runWatchDog(watchDogPort, watchDogHost); - }); - - client.connect(watchDogPort, watchDogHost || 'localhost'); -} - -let spaMiddlewareForceRemoved = false; - -const allowedFrontendFolders = [ - frontendFolder, - path.resolve(generatedFlowImportsFolder), // Contains only generated-flow-imports - path.resolve(__dirname, 'node_modules') -]; - -function setHmrPortToServerPort(): PluginOption { - return { - name: 'set-hmr-port-to-server-port', - configResolved(config) { - if (config.server.strictPort && config.server.hmr !== false) { - if (config.server.hmr === true) config.server.hmr = {}; - config.server.hmr = config.server.hmr || {}; - config.server.hmr.clientPort = config.server.port; - } - } - }; -} -function showRecompileReason(): PluginOption { - return { - name: 'vaadin:why-you-compile', - handleHotUpdate(context) { - console.log('Recompiling because', context.file, 'changed'); - } - }; -} - -export const vaadinConfig: UserConfigFn = (env) => { - const devMode = env.mode === 'development'; - - if (devMode && process.env.watchDogPort) { - // Open a connection with the Java dev-mode handler in order to finish - // vite when it exits or crashes. - runWatchDog(process.env.watchDogPort, process.env.watchDogHost); - } - - return { - root: frontendFolder, - base: '', - resolve: { - alias: { - '@vaadin/flow-frontend': jarResourcesFolder, - Frontend: frontendFolder - }, - preserveSymlinks: true - }, - define: { - OFFLINE_PATH: settings.offlinePath, - VITE_ENABLED: 'true' - }, - server: { - host: '127.0.0.1', - strictPort: true, - fs: { - allow: allowedFrontendFolders - } - }, - build: { - outDir: frontendBundleFolder, - assetsDir: 'VAADIN/build', - rollupOptions: { - input: { - indexhtml: path.resolve(frontendFolder, 'index.html'), - - ...hasExportedWebComponents - ? { webcomponenthtml: path.resolve(frontendFolder, 'web-component.html') } - : {} - } - } - }, - optimizeDeps: { - entries: [ - // Pre-scan entrypoints in Vite to avoid reloading on first open - 'generated/vaadin.ts' - ], - exclude: [ - '@vaadin/router', - '@vaadin/vaadin-license-checker', - '@vaadin/vaadin-usage-statistics', - 'workbox-core', - 'workbox-precaching', - 'workbox-routing', - 'workbox-strategies' - ] - }, - plugins: [ - !devMode && brotli(), - devMode && vaadinBundlesPlugin(), - devMode && setHmrPortToServerPort(), - devMode && showRecompileReason(), - settings.offlineEnabled && buildSWPlugin({ devMode }), - !devMode && statsExtracterPlugin(), - themePlugin({devMode}), - lenientLitImportPlugin(), - postcssLit({ - include: ['**/*.css', '**/*.css\?*'], - exclude: [ - `${themeFolder}/**/*.css`, - `${themeFolder}/**/*.css\?*`, - `${themeResourceFolder}/**/*.css`, - `${themeResourceFolder}/**/*.css\?*`, - '**/*\?html-proxy*' - ] - }), - { - name: 'vaadin:force-remove-html-middleware', - transformIndexHtml: { - enforce: 'pre', - transform(_html, { server }) { - if (server && !spaMiddlewareForceRemoved) { - server.middlewares.stack = server.middlewares.stack.filter((mw) => { - const handleName = '' + mw.handle; - return !handleName.includes('viteHtmlFallbackMiddleware'); - }); - spaMiddlewareForceRemoved = true; - } - } - } - }, - hasExportedWebComponents && { - name: 'vaadin:inject-entrypoints-to-web-component-html', - transformIndexHtml: { - enforce: 'pre', - transform(_html, { path, server }) { - if (path !== '/web-component.html') { - return; - } - - return [ - { - tag: 'script', - attrs: { type: 'module', src: `/generated/vaadin-web-component.ts` }, - injectTo: 'head' - } - ] - } - } - }, - { - name: 'vaadin:inject-entrypoints-to-index-html', - transformIndexHtml: { - enforce: 'pre', - transform(_html, { path, server }) { - if (path !== '/index.html') { - return; - } - - const scripts = []; - - if (devMode) { - scripts.push({ - tag: 'script', - attrs: { type: 'module', src: `/generated/vite-devmode.ts` }, - injectTo: 'head' - }); - } - scripts.push({ - tag: 'script', - attrs: { type: 'module', src: '/generated/vaadin.ts' }, - injectTo: 'head' - }); - return scripts; - } - } - }, - checker({ - typescript: true - }) - ] - }; -}; - -export const overrideVaadinConfig = (customConfig: UserConfigFn) => { - return defineConfig((env) => mergeConfig(vaadinConfig(env), customConfig(env))); -}; diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/vite.config.ts b/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/vite.config.ts deleted file mode 100644 index 4d6a0222..00000000 --- a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/vite.config.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { UserConfigFn } from 'vite'; -import { overrideVaadinConfig } from './vite.generated'; - -const customConfig: UserConfigFn = (env) => ({ - // Here you can add custom Vite parameters - // https://vitejs.dev/config/ -}); - -export default overrideVaadinConfig(customConfig); diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/vite.generated.ts b/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/vite.generated.ts deleted file mode 100644 index e30d55d4..00000000 --- a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/vite.generated.ts +++ /dev/null @@ -1,635 +0,0 @@ -/** - * NOTICE: this is an auto-generated file - * - * This file has been generated by the `flow:prepare-frontend` maven goal. - * This file will be overwritten on every run. Any custom changes should be made to vite.config.ts - */ -import path from 'path'; -import { readFileSync, existsSync, writeFileSync } from 'fs'; -import * as net from 'net'; - -import { processThemeResources } from './target/plugins/application-theme-plugin/theme-handle'; -import { rewriteCssUrls } from './target/plugins/theme-loader/theme-loader-utils'; -import settings from './target/vaadin-dev-server-settings.json'; -import { defineConfig, mergeConfig, PluginOption, ResolvedConfig, UserConfigFn, OutputOptions, AssetInfo, ChunkInfo } from 'vite'; -import { getManifest } from 'workbox-build'; - -import * as rollup from 'rollup'; -import brotli from 'rollup-plugin-brotli'; -import replace from '@rollup/plugin-replace'; -import checker from 'vite-plugin-checker'; -import postcssLit from './target/plugins/rollup-plugin-postcss-lit-custom/rollup-plugin-postcss-lit.js'; - -const appShellUrl = '.'; - -const frontendFolder = path.resolve(__dirname, settings.frontendFolder); -const themeFolder = path.resolve(frontendFolder, settings.themeFolder); -const frontendBundleFolder = path.resolve(__dirname, settings.frontendBundleOutput); -const addonFrontendFolder = path.resolve(__dirname, settings.addonFrontendFolder); -const themeResourceFolder = path.resolve(__dirname, settings.themeResourceFolder); -const statsFile = path.resolve(frontendBundleFolder, '..', 'config', 'stats.json'); - -const projectStaticAssetsFolders = [ - path.resolve(__dirname, 'src', 'main', 'resources', 'META-INF', 'resources'), - path.resolve(__dirname, 'src', 'main', 'resources', 'static'), - frontendFolder -]; - -// Folders in the project which can contain application themes -const themeProjectFolders = projectStaticAssetsFolders.map((folder) => path.resolve(folder, settings.themeFolder)); - -const themeOptions = { - devMode: false, - // The following matches folder 'target/flow-frontend/themes/' - // (not 'frontend/themes') for theme in JAR that is copied there - themeResourceFolder: path.resolve(themeResourceFolder, settings.themeFolder), - themeProjectFolders: themeProjectFolders, - projectStaticAssetsOutputFolder: path.resolve(__dirname, settings.staticOutput), - frontendGeneratedFolder: path.resolve(frontendFolder, settings.generatedFolder) -}; - -const hasExportedWebComponents = existsSync(path.resolve(frontendFolder, 'web-component.html')); - -// Block debug and trace logs. -console.trace = () => {}; -console.debug = () => {}; - -function injectManifestToSWPlugin(): rollup.Plugin { - const rewriteManifestIndexHtmlUrl = (manifest) => { - const indexEntry = manifest.find((entry) => entry.url === 'index.html'); - if (indexEntry) { - indexEntry.url = appShellUrl; - } - - return { manifest, warnings: [] }; - }; - - return { - name: 'vaadin:inject-manifest-to-sw', - async transform(code, id) { - if (/sw\.(ts|js)$/.test(id)) { - const { manifestEntries } = await getManifest({ - globDirectory: frontendBundleFolder, - globPatterns: ['**/*'], - globIgnores: ['**/*.br'], - manifestTransforms: [rewriteManifestIndexHtmlUrl], - maximumFileSizeToCacheInBytes: 100 * 1024 * 1024, // 100mb, - }); - - return code.replace('self.__WB_MANIFEST', JSON.stringify(manifestEntries)); - } - } - } -} - -function buildSWPlugin(opts): PluginOption { - let config: ResolvedConfig; - const devMode = opts.devMode; - - const swObj = {} - - async function build(action: 'generate' | 'write', additionalPlugins: rollup.Plugin[] = []) { - const includedPluginNames = [ - 'alias', - 'vite:resolve', - 'vite:esbuild', - 'rollup-plugin-dynamic-import-variables', - 'vite:esbuild-transpile', - 'vite:terser', - ] - const plugins: rollup.Plugin[] = config.plugins.filter((p) => { - return includedPluginNames.includes(p.name) - }); - plugins.push( - replace({ - values: { - 'process.env.NODE_ENV': JSON.stringify(config.mode), - ...config.define, - }, - preventAssignment: true - }) - ); - if (additionalPlugins) { - plugins.push(...additionalPlugins); - } - const bundle = await rollup.rollup({ - input: path.resolve(settings.clientServiceWorkerSource), - plugins - }); - - try { - return await bundle[action]({ - file: path.resolve(frontendBundleFolder, 'sw.js'), - format: 'es', - exports: 'none', - sourcemap: config.command === 'serve' || config.build.sourcemap, - inlineDynamicImports: true, - }); - } finally { - await bundle.close(); - } - } - - return { - name: 'vaadin:build-sw', - enforce: 'post', - async configResolved(resolvedConfig) { - config = resolvedConfig; - }, - async buildStart() { - if (devMode) { - const { output } = await build('generate'); - swObj.code = output[0].code; - swObj.map = output[0].map; - } - }, - async load(id) { - if (id.endsWith('sw.js')) { - return ''; - } - }, - async transform(_code, id) { - if (id.endsWith('sw.js')) { - return swObj; - } - }, - async closeBundle() { - await build('write', [ - injectManifestToSWPlugin(), - brotli(), - ]); - } - } -} - -function statsExtracterPlugin(): PluginOption { - return { - name: 'vaadin:stats', - enforce: 'post', - async writeBundle(options: OutputOptions, bundle: { [fileName: string]: AssetInfo | ChunkInfo }) { - const modules = Object.values(bundle).flatMap((b) => (b.modules ? Object.keys(b.modules) : [])); - const nodeModulesFolders = modules.filter((id) => id.includes('node_modules')); - const npmModules = nodeModulesFolders - .map((id) => id.replace(/.*node_modules./, '')) - .map((id) => { - const parts = id.split('/'); - if (id.startsWith('@')) { - return parts[0] + '/' + parts[1]; - } else { - return parts[0]; - } - }) - .sort() - .filter((value, index, self) => self.indexOf(value) === index); - - writeFileSync(statsFile, JSON.stringify({ npmModules }, null, 1)); - } - }; -} -function vaadinBundlesPlugin(): PluginOption { - type ExportInfo = - | string - | { - namespace?: string; - source: string; - }; - - type ExposeInfo = { - exports: ExportInfo[]; - }; - - type PackageInfo = { - version: string; - exposes: Record; - }; - - type BundleJson = { - packages: Record; - }; - - const disabledMessage = 'Vaadin component dependency bundles are disabled.'; - - const modulesDirectory = path.resolve(__dirname, 'node_modules').replace(/\\/g, '/'); - - let vaadinBundleJson: BundleJson; - - function parseModuleId(id: string): { packageName: string; modulePath: string } { - const [scope, scopedPackageName] = id.split('/', 3); - const packageName = scope.startsWith('@') ? `${scope}/${scopedPackageName}` : scope; - const modulePath = `.${id.substring(packageName.length)}`; - return { - packageName, - modulePath - }; - } - - function getExports(id: string): string[] | undefined { - const { packageName, modulePath } = parseModuleId(id); - const packageInfo = vaadinBundleJson.packages[packageName]; - - if (!packageInfo) return; - - const exposeInfo: ExposeInfo = packageInfo.exposes[modulePath]; - if (!exposeInfo) return; - - const exportsSet = new Set(); - for (const e of exposeInfo.exports) { - if (typeof e === 'string') { - exportsSet.add(e); - } else { - const { namespace, source } = e; - if (namespace) { - exportsSet.add(namespace); - } else { - const sourceExports = getExports(source); - if (sourceExports) { - sourceExports.forEach((e) => exportsSet.add(e)); - } - } - } - } - return Array.from(exportsSet); - } - - function getExportBinding(binding: string) { - return binding === 'default' ? '_default as default' : binding; - } - - function getImportAssigment(binding: string) { - return binding === 'default' ? 'default: _default' : binding; - } - - return { - name: 'vaadin:bundles', - enforce: 'pre', - apply(config, { command }) { - if (command !== 'serve') return false; - - try { - const vaadinBundleJsonPath = require.resolve('@vaadin/bundles/vaadin-bundle.json'); - vaadinBundleJson = JSON.parse(readFileSync(vaadinBundleJsonPath, { encoding: 'utf8' })); - } catch (e: unknown) { - if (typeof e === 'object' && (e as { code: string }).code === 'MODULE_NOT_FOUND') { - vaadinBundleJson = { packages: {} }; - console.info(`@vaadin/bundles npm package is not found, ${disabledMessage}`); - return false; - } else { - throw e; - } - } - - const versionMismatches: Array<{ name: string; bundledVersion: string; installedVersion: string }> = []; - for (const [name, packageInfo] of Object.entries(vaadinBundleJson.packages)) { - let installedVersion: string | undefined = undefined; - try { - const { version: bundledVersion } = packageInfo; - const installedPackageJsonFile = path.resolve(modulesDirectory, name, 'package.json'); - const packageJson = JSON.parse(readFileSync(installedPackageJsonFile, { encoding: 'utf8' })); - installedVersion = packageJson.version; - if (installedVersion && installedVersion !== bundledVersion) { - versionMismatches.push({ - name, - bundledVersion, - installedVersion - }); - } - } catch (_) { - // ignore package not found - } - } - if (versionMismatches.length) { - console.info(`@vaadin/bundles has version mismatches with installed packages, ${disabledMessage}`); - console.info(`Packages with version mismatches: ${JSON.stringify(versionMismatches, undefined, 2)}`); - vaadinBundleJson = { packages: {} }; - return false; - } - - return true; - }, - async config(config) { - return mergeConfig( - { - optimizeDeps: { - exclude: [ - // Vaadin bundle - '@vaadin/bundles', - ...Object.keys(vaadinBundleJson.packages) - ] - } - }, - config - ); - }, - load(rawId) { - const [path, params] = rawId.split('?'); - if (!path.startsWith(modulesDirectory)) return; - - const id = path.substring(modulesDirectory.length + 1); - const bindings = getExports(id); - if (bindings === undefined) return; - - const cacheSuffix = params ? `?${params}` : ''; - const bundlePath = `@vaadin/bundles/vaadin.js${cacheSuffix}`; - - return `import { init as VaadinBundleInit, get as VaadinBundleGet } from '${bundlePath}'; -await VaadinBundleInit('default'); -const { ${bindings.map(getImportAssigment).join(', ')} } = (await VaadinBundleGet('./node_modules/${id}'))(); -export { ${bindings.map(getExportBinding).join(', ')} };`; - } - }; -} - -function themePlugin(opts): PluginOption { - const fullThemeOptions = {...themeOptions, devMode: opts.devMode }; - return { - name: 'vaadin:theme', - config() { - processThemeResources(fullThemeOptions, console); - }, - configureServer(server) { - function handleThemeFileCreateDelete(themeFile, stats) { - if (themeFile.startsWith(themeFolder)) { - const changed = path.relative(themeFolder, themeFile) - console.debug('Theme file ' + (!!stats ? 'created' : 'deleted'), changed); - processThemeResources(fullThemeOptions, console); - } - } - server.watcher.on('add', handleThemeFileCreateDelete); - server.watcher.on('unlink', handleThemeFileCreateDelete); - }, - handleHotUpdate(context) { - const contextPath = path.resolve(context.file); - const themePath = path.resolve(themeFolder); - if (contextPath.startsWith(themePath)) { - const changed = path.relative(themePath, contextPath); - - console.debug('Theme file changed', changed); - - if (changed.startsWith(settings.themeName)) { - processThemeResources(fullThemeOptions, console); - } - } - }, - async resolveId(id, importer) { - // force theme generation if generated theme sources does not yet exist - // this may happen for example during Java hot reload when updating - // @Theme annotation value - if (path.resolve(themeOptions.frontendGeneratedFolder, "theme.js") === importer && - !existsSync(path.resolve(themeOptions.frontendGeneratedFolder, id))) { - console.debug('Generate theme file ' + id + ' not existing. Processing theme resource'); - processThemeResources(fullThemeOptions, console); - return; - } - if (!id.startsWith(settings.themeFolder)) { - return; - } - - for (const location of [themeResourceFolder, frontendFolder]) { - const result = await this.resolve(path.resolve(location, id)); - if (result) { - return result; - } - } - }, - async transform(raw, id, options) { - // rewrite urls for the application theme css files - const [bareId, query] = id.split('?'); - if (!bareId?.startsWith(themeFolder) || !bareId?.endsWith('.css')) { - return; - } - const [themeName] = bareId.substring(themeFolder.length + 1).split('/'); - return rewriteCssUrls(raw, path.dirname(bareId), path.resolve(themeFolder, themeName), console, opts); - } - }; -} -function lenientLitImportPlugin(): PluginOption { - return { - name: 'vaadin:lenient-lit-import', - async transform(code, id) { - const decoratorImports = [ - /import (.*?) from (['"])(lit\/decorators)(['"])/, - /import (.*?) from (['"])(lit-element\/decorators)(['"])/ - ]; - const directiveImports = [ - /import (.*?) from (['"])(lit\/directives\/)([^\\.]*?)(['"])/, - /import (.*?) from (['"])(lit-html\/directives\/)([^\\.]*?)(['"])/ - ]; - - decoratorImports.forEach((decoratorImport) => { - let decoratorMatch; - while ((decoratorMatch = code.match(decoratorImport))) { - console.warn( - `Warning: the file ${id} imports from '${decoratorMatch[3]}' when it should import from '${decoratorMatch[3]}.js'` - ); - code = code.replace(decoratorImport, 'import $1 from $2$3.js$4'); - } - }); - - directiveImports.forEach((directiveImport) => { - let directiveMatch; - while ((directiveMatch = code.match(directiveImport))) { - console.warn( - `Warning: the file ${id} imports from '${directiveMatch[3]}${directiveMatch[4]}' when it should import from '${directiveMatch[3]}${directiveMatch[4]}.js'` - ); - code = code.replace(directiveImport, 'import $1 from $2$3$4.js$5'); - } - }); - - return code; - } - }; -} - -function runWatchDog(watchDogPort, watchDogHost) { - const client = net.Socket(); - client.setEncoding('utf8'); - client.on('error', function (err) { - console.log('Watchdog connection error. Terminating vite process...', err); - client.destroy(); - process.exit(0); - }); - client.on('close', function () { - client.destroy(); - runWatchDog(watchDogPort, watchDogHost); - }); - - client.connect(watchDogPort, watchDogHost || 'localhost'); -} - -let spaMiddlewareForceRemoved = false; - -const allowedFrontendFolders = [ - frontendFolder, - addonFrontendFolder, - path.resolve(addonFrontendFolder, '..', 'frontend'), // Contains only generated-flow-imports - path.resolve(__dirname, 'node_modules') -]; - -function setHmrPortToServerPort(): PluginOption { - return { - name: 'set-hmr-port-to-server-port', - configResolved(config) { - if (config.server.strictPort && config.server.hmr !== false) { - if (config.server.hmr === true) config.server.hmr = {}; - config.server.hmr = config.server.hmr || {}; - config.server.hmr.clientPort = config.server.port; - } - } - }; -} -function showRecompileReason(): PluginOption { - return { - name: 'vaadin:why-you-compile', - handleHotUpdate(context) { - console.log('Recompiling because', context.file, 'changed'); - } - }; -} - -export const vaadinConfig: UserConfigFn = (env) => { - const devMode = env.mode === 'development'; - - if (devMode && process.env.watchDogPort) { - // Open a connection with the Java dev-mode handler in order to finish - // vite when it exits or crashes. - runWatchDog(process.env.watchDogPort, process.env.watchDogHost); - } - - return { - root: frontendFolder, - base: '', - resolve: { - alias: { - Frontend: frontendFolder - }, - preserveSymlinks: true - }, - define: { - OFFLINE_PATH: settings.offlinePath, - VITE_ENABLED: 'true' - }, - server: { - host: '127.0.0.1', - strictPort: true, - fs: { - allow: allowedFrontendFolders - } - }, - build: { - outDir: frontendBundleFolder, - assetsDir: 'VAADIN/build', - rollupOptions: { - input: { - indexhtml: path.resolve(frontendFolder, 'index.html'), - - ...hasExportedWebComponents - ? { webcomponenthtml: path.resolve(frontendFolder, 'web-component.html') } - : {} - } - } - }, - optimizeDeps: { - entries: [ - // Pre-scan entrypoints in Vite to avoid reloading on first open - 'generated/vaadin.ts' - ], - exclude: [ - '@vaadin/router', - '@vaadin/vaadin-license-checker', - '@vaadin/vaadin-usage-statistics', - 'workbox-core', - 'workbox-precaching', - 'workbox-routing', - 'workbox-strategies' - ] - }, - plugins: [ - !devMode && brotli(), - devMode && vaadinBundlesPlugin(), - devMode && setHmrPortToServerPort(), - devMode && showRecompileReason(), - settings.offlineEnabled && buildSWPlugin({ devMode }), - !devMode && statsExtracterPlugin(), - themePlugin({devMode}), - lenientLitImportPlugin(), - postcssLit({ - include: ['**/*.css', '**/*.css\?*'], - exclude: [ - `${themeFolder}/**/*.css`, - `${themeFolder}/**/*.css\?*`, - `${themeResourceFolder}/**/*.css`, - `${themeResourceFolder}/**/*.css\?*`, - '**/*\?html-proxy*' - ] - }), - { - name: 'vaadin:force-remove-spa-middleware', - transformIndexHtml: { - enforce: 'pre', - transform(_html, { server }) { - if (server && !spaMiddlewareForceRemoved) { - server.middlewares.stack = server.middlewares.stack.filter((mw) => { - const handleName = '' + mw.handle; - return !handleName.includes('viteSpaFallbackMiddleware'); - }); - spaMiddlewareForceRemoved = true; - } - } - } - }, - hasExportedWebComponents && { - name: 'vaadin:inject-entrypoints-to-web-component-html', - transformIndexHtml: { - enforce: 'pre', - transform(_html, { path, server }) { - if (path !== '/web-component.html') { - return; - } - - return [ - { - tag: 'script', - attrs: { type: 'module', src: `/generated/vaadin-web-component.ts` }, - injectTo: 'head' - } - ] - } - } - }, - { - name: 'vaadin:inject-entrypoints-to-index-html', - transformIndexHtml: { - enforce: 'pre', - transform(_html, { path, server }) { - if (path !== '/index.html') { - return; - } - - const scripts = []; - - if (devMode) { - scripts.push({ - tag: 'script', - attrs: { type: 'module', src: `/generated/vite-devmode.ts` }, - injectTo: 'head' - }); - } - scripts.push({ - tag: 'script', - attrs: { type: 'module', src: '/generated/vaadin.ts' }, - injectTo: 'head' - }); - return scripts; - } - } - }, - checker({ - typescript: true - }) - ] - }; -}; - -export const overrideVaadinConfig = (customConfig: UserConfigFn) => { - return defineConfig((env) => mergeConfig(vaadinConfig(env), customConfig(env))); -}; diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/vite.config.ts b/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/vite.config.ts deleted file mode 100644 index 4d6a0222..00000000 --- a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/vite.config.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { UserConfigFn } from 'vite'; -import { overrideVaadinConfig } from './vite.generated'; - -const customConfig: UserConfigFn = (env) => ({ - // Here you can add custom Vite parameters - // https://vitejs.dev/config/ -}); - -export default overrideVaadinConfig(customConfig); diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/vite.generated.ts b/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/vite.generated.ts deleted file mode 100644 index e30d55d4..00000000 --- a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/vite.generated.ts +++ /dev/null @@ -1,635 +0,0 @@ -/** - * NOTICE: this is an auto-generated file - * - * This file has been generated by the `flow:prepare-frontend` maven goal. - * This file will be overwritten on every run. Any custom changes should be made to vite.config.ts - */ -import path from 'path'; -import { readFileSync, existsSync, writeFileSync } from 'fs'; -import * as net from 'net'; - -import { processThemeResources } from './target/plugins/application-theme-plugin/theme-handle'; -import { rewriteCssUrls } from './target/plugins/theme-loader/theme-loader-utils'; -import settings from './target/vaadin-dev-server-settings.json'; -import { defineConfig, mergeConfig, PluginOption, ResolvedConfig, UserConfigFn, OutputOptions, AssetInfo, ChunkInfo } from 'vite'; -import { getManifest } from 'workbox-build'; - -import * as rollup from 'rollup'; -import brotli from 'rollup-plugin-brotli'; -import replace from '@rollup/plugin-replace'; -import checker from 'vite-plugin-checker'; -import postcssLit from './target/plugins/rollup-plugin-postcss-lit-custom/rollup-plugin-postcss-lit.js'; - -const appShellUrl = '.'; - -const frontendFolder = path.resolve(__dirname, settings.frontendFolder); -const themeFolder = path.resolve(frontendFolder, settings.themeFolder); -const frontendBundleFolder = path.resolve(__dirname, settings.frontendBundleOutput); -const addonFrontendFolder = path.resolve(__dirname, settings.addonFrontendFolder); -const themeResourceFolder = path.resolve(__dirname, settings.themeResourceFolder); -const statsFile = path.resolve(frontendBundleFolder, '..', 'config', 'stats.json'); - -const projectStaticAssetsFolders = [ - path.resolve(__dirname, 'src', 'main', 'resources', 'META-INF', 'resources'), - path.resolve(__dirname, 'src', 'main', 'resources', 'static'), - frontendFolder -]; - -// Folders in the project which can contain application themes -const themeProjectFolders = projectStaticAssetsFolders.map((folder) => path.resolve(folder, settings.themeFolder)); - -const themeOptions = { - devMode: false, - // The following matches folder 'target/flow-frontend/themes/' - // (not 'frontend/themes') for theme in JAR that is copied there - themeResourceFolder: path.resolve(themeResourceFolder, settings.themeFolder), - themeProjectFolders: themeProjectFolders, - projectStaticAssetsOutputFolder: path.resolve(__dirname, settings.staticOutput), - frontendGeneratedFolder: path.resolve(frontendFolder, settings.generatedFolder) -}; - -const hasExportedWebComponents = existsSync(path.resolve(frontendFolder, 'web-component.html')); - -// Block debug and trace logs. -console.trace = () => {}; -console.debug = () => {}; - -function injectManifestToSWPlugin(): rollup.Plugin { - const rewriteManifestIndexHtmlUrl = (manifest) => { - const indexEntry = manifest.find((entry) => entry.url === 'index.html'); - if (indexEntry) { - indexEntry.url = appShellUrl; - } - - return { manifest, warnings: [] }; - }; - - return { - name: 'vaadin:inject-manifest-to-sw', - async transform(code, id) { - if (/sw\.(ts|js)$/.test(id)) { - const { manifestEntries } = await getManifest({ - globDirectory: frontendBundleFolder, - globPatterns: ['**/*'], - globIgnores: ['**/*.br'], - manifestTransforms: [rewriteManifestIndexHtmlUrl], - maximumFileSizeToCacheInBytes: 100 * 1024 * 1024, // 100mb, - }); - - return code.replace('self.__WB_MANIFEST', JSON.stringify(manifestEntries)); - } - } - } -} - -function buildSWPlugin(opts): PluginOption { - let config: ResolvedConfig; - const devMode = opts.devMode; - - const swObj = {} - - async function build(action: 'generate' | 'write', additionalPlugins: rollup.Plugin[] = []) { - const includedPluginNames = [ - 'alias', - 'vite:resolve', - 'vite:esbuild', - 'rollup-plugin-dynamic-import-variables', - 'vite:esbuild-transpile', - 'vite:terser', - ] - const plugins: rollup.Plugin[] = config.plugins.filter((p) => { - return includedPluginNames.includes(p.name) - }); - plugins.push( - replace({ - values: { - 'process.env.NODE_ENV': JSON.stringify(config.mode), - ...config.define, - }, - preventAssignment: true - }) - ); - if (additionalPlugins) { - plugins.push(...additionalPlugins); - } - const bundle = await rollup.rollup({ - input: path.resolve(settings.clientServiceWorkerSource), - plugins - }); - - try { - return await bundle[action]({ - file: path.resolve(frontendBundleFolder, 'sw.js'), - format: 'es', - exports: 'none', - sourcemap: config.command === 'serve' || config.build.sourcemap, - inlineDynamicImports: true, - }); - } finally { - await bundle.close(); - } - } - - return { - name: 'vaadin:build-sw', - enforce: 'post', - async configResolved(resolvedConfig) { - config = resolvedConfig; - }, - async buildStart() { - if (devMode) { - const { output } = await build('generate'); - swObj.code = output[0].code; - swObj.map = output[0].map; - } - }, - async load(id) { - if (id.endsWith('sw.js')) { - return ''; - } - }, - async transform(_code, id) { - if (id.endsWith('sw.js')) { - return swObj; - } - }, - async closeBundle() { - await build('write', [ - injectManifestToSWPlugin(), - brotli(), - ]); - } - } -} - -function statsExtracterPlugin(): PluginOption { - return { - name: 'vaadin:stats', - enforce: 'post', - async writeBundle(options: OutputOptions, bundle: { [fileName: string]: AssetInfo | ChunkInfo }) { - const modules = Object.values(bundle).flatMap((b) => (b.modules ? Object.keys(b.modules) : [])); - const nodeModulesFolders = modules.filter((id) => id.includes('node_modules')); - const npmModules = nodeModulesFolders - .map((id) => id.replace(/.*node_modules./, '')) - .map((id) => { - const parts = id.split('/'); - if (id.startsWith('@')) { - return parts[0] + '/' + parts[1]; - } else { - return parts[0]; - } - }) - .sort() - .filter((value, index, self) => self.indexOf(value) === index); - - writeFileSync(statsFile, JSON.stringify({ npmModules }, null, 1)); - } - }; -} -function vaadinBundlesPlugin(): PluginOption { - type ExportInfo = - | string - | { - namespace?: string; - source: string; - }; - - type ExposeInfo = { - exports: ExportInfo[]; - }; - - type PackageInfo = { - version: string; - exposes: Record; - }; - - type BundleJson = { - packages: Record; - }; - - const disabledMessage = 'Vaadin component dependency bundles are disabled.'; - - const modulesDirectory = path.resolve(__dirname, 'node_modules').replace(/\\/g, '/'); - - let vaadinBundleJson: BundleJson; - - function parseModuleId(id: string): { packageName: string; modulePath: string } { - const [scope, scopedPackageName] = id.split('/', 3); - const packageName = scope.startsWith('@') ? `${scope}/${scopedPackageName}` : scope; - const modulePath = `.${id.substring(packageName.length)}`; - return { - packageName, - modulePath - }; - } - - function getExports(id: string): string[] | undefined { - const { packageName, modulePath } = parseModuleId(id); - const packageInfo = vaadinBundleJson.packages[packageName]; - - if (!packageInfo) return; - - const exposeInfo: ExposeInfo = packageInfo.exposes[modulePath]; - if (!exposeInfo) return; - - const exportsSet = new Set(); - for (const e of exposeInfo.exports) { - if (typeof e === 'string') { - exportsSet.add(e); - } else { - const { namespace, source } = e; - if (namespace) { - exportsSet.add(namespace); - } else { - const sourceExports = getExports(source); - if (sourceExports) { - sourceExports.forEach((e) => exportsSet.add(e)); - } - } - } - } - return Array.from(exportsSet); - } - - function getExportBinding(binding: string) { - return binding === 'default' ? '_default as default' : binding; - } - - function getImportAssigment(binding: string) { - return binding === 'default' ? 'default: _default' : binding; - } - - return { - name: 'vaadin:bundles', - enforce: 'pre', - apply(config, { command }) { - if (command !== 'serve') return false; - - try { - const vaadinBundleJsonPath = require.resolve('@vaadin/bundles/vaadin-bundle.json'); - vaadinBundleJson = JSON.parse(readFileSync(vaadinBundleJsonPath, { encoding: 'utf8' })); - } catch (e: unknown) { - if (typeof e === 'object' && (e as { code: string }).code === 'MODULE_NOT_FOUND') { - vaadinBundleJson = { packages: {} }; - console.info(`@vaadin/bundles npm package is not found, ${disabledMessage}`); - return false; - } else { - throw e; - } - } - - const versionMismatches: Array<{ name: string; bundledVersion: string; installedVersion: string }> = []; - for (const [name, packageInfo] of Object.entries(vaadinBundleJson.packages)) { - let installedVersion: string | undefined = undefined; - try { - const { version: bundledVersion } = packageInfo; - const installedPackageJsonFile = path.resolve(modulesDirectory, name, 'package.json'); - const packageJson = JSON.parse(readFileSync(installedPackageJsonFile, { encoding: 'utf8' })); - installedVersion = packageJson.version; - if (installedVersion && installedVersion !== bundledVersion) { - versionMismatches.push({ - name, - bundledVersion, - installedVersion - }); - } - } catch (_) { - // ignore package not found - } - } - if (versionMismatches.length) { - console.info(`@vaadin/bundles has version mismatches with installed packages, ${disabledMessage}`); - console.info(`Packages with version mismatches: ${JSON.stringify(versionMismatches, undefined, 2)}`); - vaadinBundleJson = { packages: {} }; - return false; - } - - return true; - }, - async config(config) { - return mergeConfig( - { - optimizeDeps: { - exclude: [ - // Vaadin bundle - '@vaadin/bundles', - ...Object.keys(vaadinBundleJson.packages) - ] - } - }, - config - ); - }, - load(rawId) { - const [path, params] = rawId.split('?'); - if (!path.startsWith(modulesDirectory)) return; - - const id = path.substring(modulesDirectory.length + 1); - const bindings = getExports(id); - if (bindings === undefined) return; - - const cacheSuffix = params ? `?${params}` : ''; - const bundlePath = `@vaadin/bundles/vaadin.js${cacheSuffix}`; - - return `import { init as VaadinBundleInit, get as VaadinBundleGet } from '${bundlePath}'; -await VaadinBundleInit('default'); -const { ${bindings.map(getImportAssigment).join(', ')} } = (await VaadinBundleGet('./node_modules/${id}'))(); -export { ${bindings.map(getExportBinding).join(', ')} };`; - } - }; -} - -function themePlugin(opts): PluginOption { - const fullThemeOptions = {...themeOptions, devMode: opts.devMode }; - return { - name: 'vaadin:theme', - config() { - processThemeResources(fullThemeOptions, console); - }, - configureServer(server) { - function handleThemeFileCreateDelete(themeFile, stats) { - if (themeFile.startsWith(themeFolder)) { - const changed = path.relative(themeFolder, themeFile) - console.debug('Theme file ' + (!!stats ? 'created' : 'deleted'), changed); - processThemeResources(fullThemeOptions, console); - } - } - server.watcher.on('add', handleThemeFileCreateDelete); - server.watcher.on('unlink', handleThemeFileCreateDelete); - }, - handleHotUpdate(context) { - const contextPath = path.resolve(context.file); - const themePath = path.resolve(themeFolder); - if (contextPath.startsWith(themePath)) { - const changed = path.relative(themePath, contextPath); - - console.debug('Theme file changed', changed); - - if (changed.startsWith(settings.themeName)) { - processThemeResources(fullThemeOptions, console); - } - } - }, - async resolveId(id, importer) { - // force theme generation if generated theme sources does not yet exist - // this may happen for example during Java hot reload when updating - // @Theme annotation value - if (path.resolve(themeOptions.frontendGeneratedFolder, "theme.js") === importer && - !existsSync(path.resolve(themeOptions.frontendGeneratedFolder, id))) { - console.debug('Generate theme file ' + id + ' not existing. Processing theme resource'); - processThemeResources(fullThemeOptions, console); - return; - } - if (!id.startsWith(settings.themeFolder)) { - return; - } - - for (const location of [themeResourceFolder, frontendFolder]) { - const result = await this.resolve(path.resolve(location, id)); - if (result) { - return result; - } - } - }, - async transform(raw, id, options) { - // rewrite urls for the application theme css files - const [bareId, query] = id.split('?'); - if (!bareId?.startsWith(themeFolder) || !bareId?.endsWith('.css')) { - return; - } - const [themeName] = bareId.substring(themeFolder.length + 1).split('/'); - return rewriteCssUrls(raw, path.dirname(bareId), path.resolve(themeFolder, themeName), console, opts); - } - }; -} -function lenientLitImportPlugin(): PluginOption { - return { - name: 'vaadin:lenient-lit-import', - async transform(code, id) { - const decoratorImports = [ - /import (.*?) from (['"])(lit\/decorators)(['"])/, - /import (.*?) from (['"])(lit-element\/decorators)(['"])/ - ]; - const directiveImports = [ - /import (.*?) from (['"])(lit\/directives\/)([^\\.]*?)(['"])/, - /import (.*?) from (['"])(lit-html\/directives\/)([^\\.]*?)(['"])/ - ]; - - decoratorImports.forEach((decoratorImport) => { - let decoratorMatch; - while ((decoratorMatch = code.match(decoratorImport))) { - console.warn( - `Warning: the file ${id} imports from '${decoratorMatch[3]}' when it should import from '${decoratorMatch[3]}.js'` - ); - code = code.replace(decoratorImport, 'import $1 from $2$3.js$4'); - } - }); - - directiveImports.forEach((directiveImport) => { - let directiveMatch; - while ((directiveMatch = code.match(directiveImport))) { - console.warn( - `Warning: the file ${id} imports from '${directiveMatch[3]}${directiveMatch[4]}' when it should import from '${directiveMatch[3]}${directiveMatch[4]}.js'` - ); - code = code.replace(directiveImport, 'import $1 from $2$3$4.js$5'); - } - }); - - return code; - } - }; -} - -function runWatchDog(watchDogPort, watchDogHost) { - const client = net.Socket(); - client.setEncoding('utf8'); - client.on('error', function (err) { - console.log('Watchdog connection error. Terminating vite process...', err); - client.destroy(); - process.exit(0); - }); - client.on('close', function () { - client.destroy(); - runWatchDog(watchDogPort, watchDogHost); - }); - - client.connect(watchDogPort, watchDogHost || 'localhost'); -} - -let spaMiddlewareForceRemoved = false; - -const allowedFrontendFolders = [ - frontendFolder, - addonFrontendFolder, - path.resolve(addonFrontendFolder, '..', 'frontend'), // Contains only generated-flow-imports - path.resolve(__dirname, 'node_modules') -]; - -function setHmrPortToServerPort(): PluginOption { - return { - name: 'set-hmr-port-to-server-port', - configResolved(config) { - if (config.server.strictPort && config.server.hmr !== false) { - if (config.server.hmr === true) config.server.hmr = {}; - config.server.hmr = config.server.hmr || {}; - config.server.hmr.clientPort = config.server.port; - } - } - }; -} -function showRecompileReason(): PluginOption { - return { - name: 'vaadin:why-you-compile', - handleHotUpdate(context) { - console.log('Recompiling because', context.file, 'changed'); - } - }; -} - -export const vaadinConfig: UserConfigFn = (env) => { - const devMode = env.mode === 'development'; - - if (devMode && process.env.watchDogPort) { - // Open a connection with the Java dev-mode handler in order to finish - // vite when it exits or crashes. - runWatchDog(process.env.watchDogPort, process.env.watchDogHost); - } - - return { - root: frontendFolder, - base: '', - resolve: { - alias: { - Frontend: frontendFolder - }, - preserveSymlinks: true - }, - define: { - OFFLINE_PATH: settings.offlinePath, - VITE_ENABLED: 'true' - }, - server: { - host: '127.0.0.1', - strictPort: true, - fs: { - allow: allowedFrontendFolders - } - }, - build: { - outDir: frontendBundleFolder, - assetsDir: 'VAADIN/build', - rollupOptions: { - input: { - indexhtml: path.resolve(frontendFolder, 'index.html'), - - ...hasExportedWebComponents - ? { webcomponenthtml: path.resolve(frontendFolder, 'web-component.html') } - : {} - } - } - }, - optimizeDeps: { - entries: [ - // Pre-scan entrypoints in Vite to avoid reloading on first open - 'generated/vaadin.ts' - ], - exclude: [ - '@vaadin/router', - '@vaadin/vaadin-license-checker', - '@vaadin/vaadin-usage-statistics', - 'workbox-core', - 'workbox-precaching', - 'workbox-routing', - 'workbox-strategies' - ] - }, - plugins: [ - !devMode && brotli(), - devMode && vaadinBundlesPlugin(), - devMode && setHmrPortToServerPort(), - devMode && showRecompileReason(), - settings.offlineEnabled && buildSWPlugin({ devMode }), - !devMode && statsExtracterPlugin(), - themePlugin({devMode}), - lenientLitImportPlugin(), - postcssLit({ - include: ['**/*.css', '**/*.css\?*'], - exclude: [ - `${themeFolder}/**/*.css`, - `${themeFolder}/**/*.css\?*`, - `${themeResourceFolder}/**/*.css`, - `${themeResourceFolder}/**/*.css\?*`, - '**/*\?html-proxy*' - ] - }), - { - name: 'vaadin:force-remove-spa-middleware', - transformIndexHtml: { - enforce: 'pre', - transform(_html, { server }) { - if (server && !spaMiddlewareForceRemoved) { - server.middlewares.stack = server.middlewares.stack.filter((mw) => { - const handleName = '' + mw.handle; - return !handleName.includes('viteSpaFallbackMiddleware'); - }); - spaMiddlewareForceRemoved = true; - } - } - } - }, - hasExportedWebComponents && { - name: 'vaadin:inject-entrypoints-to-web-component-html', - transformIndexHtml: { - enforce: 'pre', - transform(_html, { path, server }) { - if (path !== '/web-component.html') { - return; - } - - return [ - { - tag: 'script', - attrs: { type: 'module', src: `/generated/vaadin-web-component.ts` }, - injectTo: 'head' - } - ] - } - } - }, - { - name: 'vaadin:inject-entrypoints-to-index-html', - transformIndexHtml: { - enforce: 'pre', - transform(_html, { path, server }) { - if (path !== '/index.html') { - return; - } - - const scripts = []; - - if (devMode) { - scripts.push({ - tag: 'script', - attrs: { type: 'module', src: `/generated/vite-devmode.ts` }, - injectTo: 'head' - }); - } - scripts.push({ - tag: 'script', - attrs: { type: 'module', src: '/generated/vaadin.ts' }, - injectTo: 'head' - }); - return scripts; - } - } - }, - checker({ - typescript: true - }) - ] - }; -}; - -export const overrideVaadinConfig = (customConfig: UserConfigFn) => { - return defineConfig((env) => mergeConfig(vaadinConfig(env), customConfig(env))); -}; diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-production/vite.config.ts b/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-production/vite.config.ts deleted file mode 100644 index 4d6a0222..00000000 --- a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-production/vite.config.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { UserConfigFn } from 'vite'; -import { overrideVaadinConfig } from './vite.generated'; - -const customConfig: UserConfigFn = (env) => ({ - // Here you can add custom Vite parameters - // https://vitejs.dev/config/ -}); - -export default overrideVaadinConfig(customConfig); diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-production/vite.generated.ts b/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-production/vite.generated.ts deleted file mode 100644 index e30d55d4..00000000 --- a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-production/vite.generated.ts +++ /dev/null @@ -1,635 +0,0 @@ -/** - * NOTICE: this is an auto-generated file - * - * This file has been generated by the `flow:prepare-frontend` maven goal. - * This file will be overwritten on every run. Any custom changes should be made to vite.config.ts - */ -import path from 'path'; -import { readFileSync, existsSync, writeFileSync } from 'fs'; -import * as net from 'net'; - -import { processThemeResources } from './target/plugins/application-theme-plugin/theme-handle'; -import { rewriteCssUrls } from './target/plugins/theme-loader/theme-loader-utils'; -import settings from './target/vaadin-dev-server-settings.json'; -import { defineConfig, mergeConfig, PluginOption, ResolvedConfig, UserConfigFn, OutputOptions, AssetInfo, ChunkInfo } from 'vite'; -import { getManifest } from 'workbox-build'; - -import * as rollup from 'rollup'; -import brotli from 'rollup-plugin-brotli'; -import replace from '@rollup/plugin-replace'; -import checker from 'vite-plugin-checker'; -import postcssLit from './target/plugins/rollup-plugin-postcss-lit-custom/rollup-plugin-postcss-lit.js'; - -const appShellUrl = '.'; - -const frontendFolder = path.resolve(__dirname, settings.frontendFolder); -const themeFolder = path.resolve(frontendFolder, settings.themeFolder); -const frontendBundleFolder = path.resolve(__dirname, settings.frontendBundleOutput); -const addonFrontendFolder = path.resolve(__dirname, settings.addonFrontendFolder); -const themeResourceFolder = path.resolve(__dirname, settings.themeResourceFolder); -const statsFile = path.resolve(frontendBundleFolder, '..', 'config', 'stats.json'); - -const projectStaticAssetsFolders = [ - path.resolve(__dirname, 'src', 'main', 'resources', 'META-INF', 'resources'), - path.resolve(__dirname, 'src', 'main', 'resources', 'static'), - frontendFolder -]; - -// Folders in the project which can contain application themes -const themeProjectFolders = projectStaticAssetsFolders.map((folder) => path.resolve(folder, settings.themeFolder)); - -const themeOptions = { - devMode: false, - // The following matches folder 'target/flow-frontend/themes/' - // (not 'frontend/themes') for theme in JAR that is copied there - themeResourceFolder: path.resolve(themeResourceFolder, settings.themeFolder), - themeProjectFolders: themeProjectFolders, - projectStaticAssetsOutputFolder: path.resolve(__dirname, settings.staticOutput), - frontendGeneratedFolder: path.resolve(frontendFolder, settings.generatedFolder) -}; - -const hasExportedWebComponents = existsSync(path.resolve(frontendFolder, 'web-component.html')); - -// Block debug and trace logs. -console.trace = () => {}; -console.debug = () => {}; - -function injectManifestToSWPlugin(): rollup.Plugin { - const rewriteManifestIndexHtmlUrl = (manifest) => { - const indexEntry = manifest.find((entry) => entry.url === 'index.html'); - if (indexEntry) { - indexEntry.url = appShellUrl; - } - - return { manifest, warnings: [] }; - }; - - return { - name: 'vaadin:inject-manifest-to-sw', - async transform(code, id) { - if (/sw\.(ts|js)$/.test(id)) { - const { manifestEntries } = await getManifest({ - globDirectory: frontendBundleFolder, - globPatterns: ['**/*'], - globIgnores: ['**/*.br'], - manifestTransforms: [rewriteManifestIndexHtmlUrl], - maximumFileSizeToCacheInBytes: 100 * 1024 * 1024, // 100mb, - }); - - return code.replace('self.__WB_MANIFEST', JSON.stringify(manifestEntries)); - } - } - } -} - -function buildSWPlugin(opts): PluginOption { - let config: ResolvedConfig; - const devMode = opts.devMode; - - const swObj = {} - - async function build(action: 'generate' | 'write', additionalPlugins: rollup.Plugin[] = []) { - const includedPluginNames = [ - 'alias', - 'vite:resolve', - 'vite:esbuild', - 'rollup-plugin-dynamic-import-variables', - 'vite:esbuild-transpile', - 'vite:terser', - ] - const plugins: rollup.Plugin[] = config.plugins.filter((p) => { - return includedPluginNames.includes(p.name) - }); - plugins.push( - replace({ - values: { - 'process.env.NODE_ENV': JSON.stringify(config.mode), - ...config.define, - }, - preventAssignment: true - }) - ); - if (additionalPlugins) { - plugins.push(...additionalPlugins); - } - const bundle = await rollup.rollup({ - input: path.resolve(settings.clientServiceWorkerSource), - plugins - }); - - try { - return await bundle[action]({ - file: path.resolve(frontendBundleFolder, 'sw.js'), - format: 'es', - exports: 'none', - sourcemap: config.command === 'serve' || config.build.sourcemap, - inlineDynamicImports: true, - }); - } finally { - await bundle.close(); - } - } - - return { - name: 'vaadin:build-sw', - enforce: 'post', - async configResolved(resolvedConfig) { - config = resolvedConfig; - }, - async buildStart() { - if (devMode) { - const { output } = await build('generate'); - swObj.code = output[0].code; - swObj.map = output[0].map; - } - }, - async load(id) { - if (id.endsWith('sw.js')) { - return ''; - } - }, - async transform(_code, id) { - if (id.endsWith('sw.js')) { - return swObj; - } - }, - async closeBundle() { - await build('write', [ - injectManifestToSWPlugin(), - brotli(), - ]); - } - } -} - -function statsExtracterPlugin(): PluginOption { - return { - name: 'vaadin:stats', - enforce: 'post', - async writeBundle(options: OutputOptions, bundle: { [fileName: string]: AssetInfo | ChunkInfo }) { - const modules = Object.values(bundle).flatMap((b) => (b.modules ? Object.keys(b.modules) : [])); - const nodeModulesFolders = modules.filter((id) => id.includes('node_modules')); - const npmModules = nodeModulesFolders - .map((id) => id.replace(/.*node_modules./, '')) - .map((id) => { - const parts = id.split('/'); - if (id.startsWith('@')) { - return parts[0] + '/' + parts[1]; - } else { - return parts[0]; - } - }) - .sort() - .filter((value, index, self) => self.indexOf(value) === index); - - writeFileSync(statsFile, JSON.stringify({ npmModules }, null, 1)); - } - }; -} -function vaadinBundlesPlugin(): PluginOption { - type ExportInfo = - | string - | { - namespace?: string; - source: string; - }; - - type ExposeInfo = { - exports: ExportInfo[]; - }; - - type PackageInfo = { - version: string; - exposes: Record; - }; - - type BundleJson = { - packages: Record; - }; - - const disabledMessage = 'Vaadin component dependency bundles are disabled.'; - - const modulesDirectory = path.resolve(__dirname, 'node_modules').replace(/\\/g, '/'); - - let vaadinBundleJson: BundleJson; - - function parseModuleId(id: string): { packageName: string; modulePath: string } { - const [scope, scopedPackageName] = id.split('/', 3); - const packageName = scope.startsWith('@') ? `${scope}/${scopedPackageName}` : scope; - const modulePath = `.${id.substring(packageName.length)}`; - return { - packageName, - modulePath - }; - } - - function getExports(id: string): string[] | undefined { - const { packageName, modulePath } = parseModuleId(id); - const packageInfo = vaadinBundleJson.packages[packageName]; - - if (!packageInfo) return; - - const exposeInfo: ExposeInfo = packageInfo.exposes[modulePath]; - if (!exposeInfo) return; - - const exportsSet = new Set(); - for (const e of exposeInfo.exports) { - if (typeof e === 'string') { - exportsSet.add(e); - } else { - const { namespace, source } = e; - if (namespace) { - exportsSet.add(namespace); - } else { - const sourceExports = getExports(source); - if (sourceExports) { - sourceExports.forEach((e) => exportsSet.add(e)); - } - } - } - } - return Array.from(exportsSet); - } - - function getExportBinding(binding: string) { - return binding === 'default' ? '_default as default' : binding; - } - - function getImportAssigment(binding: string) { - return binding === 'default' ? 'default: _default' : binding; - } - - return { - name: 'vaadin:bundles', - enforce: 'pre', - apply(config, { command }) { - if (command !== 'serve') return false; - - try { - const vaadinBundleJsonPath = require.resolve('@vaadin/bundles/vaadin-bundle.json'); - vaadinBundleJson = JSON.parse(readFileSync(vaadinBundleJsonPath, { encoding: 'utf8' })); - } catch (e: unknown) { - if (typeof e === 'object' && (e as { code: string }).code === 'MODULE_NOT_FOUND') { - vaadinBundleJson = { packages: {} }; - console.info(`@vaadin/bundles npm package is not found, ${disabledMessage}`); - return false; - } else { - throw e; - } - } - - const versionMismatches: Array<{ name: string; bundledVersion: string; installedVersion: string }> = []; - for (const [name, packageInfo] of Object.entries(vaadinBundleJson.packages)) { - let installedVersion: string | undefined = undefined; - try { - const { version: bundledVersion } = packageInfo; - const installedPackageJsonFile = path.resolve(modulesDirectory, name, 'package.json'); - const packageJson = JSON.parse(readFileSync(installedPackageJsonFile, { encoding: 'utf8' })); - installedVersion = packageJson.version; - if (installedVersion && installedVersion !== bundledVersion) { - versionMismatches.push({ - name, - bundledVersion, - installedVersion - }); - } - } catch (_) { - // ignore package not found - } - } - if (versionMismatches.length) { - console.info(`@vaadin/bundles has version mismatches with installed packages, ${disabledMessage}`); - console.info(`Packages with version mismatches: ${JSON.stringify(versionMismatches, undefined, 2)}`); - vaadinBundleJson = { packages: {} }; - return false; - } - - return true; - }, - async config(config) { - return mergeConfig( - { - optimizeDeps: { - exclude: [ - // Vaadin bundle - '@vaadin/bundles', - ...Object.keys(vaadinBundleJson.packages) - ] - } - }, - config - ); - }, - load(rawId) { - const [path, params] = rawId.split('?'); - if (!path.startsWith(modulesDirectory)) return; - - const id = path.substring(modulesDirectory.length + 1); - const bindings = getExports(id); - if (bindings === undefined) return; - - const cacheSuffix = params ? `?${params}` : ''; - const bundlePath = `@vaadin/bundles/vaadin.js${cacheSuffix}`; - - return `import { init as VaadinBundleInit, get as VaadinBundleGet } from '${bundlePath}'; -await VaadinBundleInit('default'); -const { ${bindings.map(getImportAssigment).join(', ')} } = (await VaadinBundleGet('./node_modules/${id}'))(); -export { ${bindings.map(getExportBinding).join(', ')} };`; - } - }; -} - -function themePlugin(opts): PluginOption { - const fullThemeOptions = {...themeOptions, devMode: opts.devMode }; - return { - name: 'vaadin:theme', - config() { - processThemeResources(fullThemeOptions, console); - }, - configureServer(server) { - function handleThemeFileCreateDelete(themeFile, stats) { - if (themeFile.startsWith(themeFolder)) { - const changed = path.relative(themeFolder, themeFile) - console.debug('Theme file ' + (!!stats ? 'created' : 'deleted'), changed); - processThemeResources(fullThemeOptions, console); - } - } - server.watcher.on('add', handleThemeFileCreateDelete); - server.watcher.on('unlink', handleThemeFileCreateDelete); - }, - handleHotUpdate(context) { - const contextPath = path.resolve(context.file); - const themePath = path.resolve(themeFolder); - if (contextPath.startsWith(themePath)) { - const changed = path.relative(themePath, contextPath); - - console.debug('Theme file changed', changed); - - if (changed.startsWith(settings.themeName)) { - processThemeResources(fullThemeOptions, console); - } - } - }, - async resolveId(id, importer) { - // force theme generation if generated theme sources does not yet exist - // this may happen for example during Java hot reload when updating - // @Theme annotation value - if (path.resolve(themeOptions.frontendGeneratedFolder, "theme.js") === importer && - !existsSync(path.resolve(themeOptions.frontendGeneratedFolder, id))) { - console.debug('Generate theme file ' + id + ' not existing. Processing theme resource'); - processThemeResources(fullThemeOptions, console); - return; - } - if (!id.startsWith(settings.themeFolder)) { - return; - } - - for (const location of [themeResourceFolder, frontendFolder]) { - const result = await this.resolve(path.resolve(location, id)); - if (result) { - return result; - } - } - }, - async transform(raw, id, options) { - // rewrite urls for the application theme css files - const [bareId, query] = id.split('?'); - if (!bareId?.startsWith(themeFolder) || !bareId?.endsWith('.css')) { - return; - } - const [themeName] = bareId.substring(themeFolder.length + 1).split('/'); - return rewriteCssUrls(raw, path.dirname(bareId), path.resolve(themeFolder, themeName), console, opts); - } - }; -} -function lenientLitImportPlugin(): PluginOption { - return { - name: 'vaadin:lenient-lit-import', - async transform(code, id) { - const decoratorImports = [ - /import (.*?) from (['"])(lit\/decorators)(['"])/, - /import (.*?) from (['"])(lit-element\/decorators)(['"])/ - ]; - const directiveImports = [ - /import (.*?) from (['"])(lit\/directives\/)([^\\.]*?)(['"])/, - /import (.*?) from (['"])(lit-html\/directives\/)([^\\.]*?)(['"])/ - ]; - - decoratorImports.forEach((decoratorImport) => { - let decoratorMatch; - while ((decoratorMatch = code.match(decoratorImport))) { - console.warn( - `Warning: the file ${id} imports from '${decoratorMatch[3]}' when it should import from '${decoratorMatch[3]}.js'` - ); - code = code.replace(decoratorImport, 'import $1 from $2$3.js$4'); - } - }); - - directiveImports.forEach((directiveImport) => { - let directiveMatch; - while ((directiveMatch = code.match(directiveImport))) { - console.warn( - `Warning: the file ${id} imports from '${directiveMatch[3]}${directiveMatch[4]}' when it should import from '${directiveMatch[3]}${directiveMatch[4]}.js'` - ); - code = code.replace(directiveImport, 'import $1 from $2$3$4.js$5'); - } - }); - - return code; - } - }; -} - -function runWatchDog(watchDogPort, watchDogHost) { - const client = net.Socket(); - client.setEncoding('utf8'); - client.on('error', function (err) { - console.log('Watchdog connection error. Terminating vite process...', err); - client.destroy(); - process.exit(0); - }); - client.on('close', function () { - client.destroy(); - runWatchDog(watchDogPort, watchDogHost); - }); - - client.connect(watchDogPort, watchDogHost || 'localhost'); -} - -let spaMiddlewareForceRemoved = false; - -const allowedFrontendFolders = [ - frontendFolder, - addonFrontendFolder, - path.resolve(addonFrontendFolder, '..', 'frontend'), // Contains only generated-flow-imports - path.resolve(__dirname, 'node_modules') -]; - -function setHmrPortToServerPort(): PluginOption { - return { - name: 'set-hmr-port-to-server-port', - configResolved(config) { - if (config.server.strictPort && config.server.hmr !== false) { - if (config.server.hmr === true) config.server.hmr = {}; - config.server.hmr = config.server.hmr || {}; - config.server.hmr.clientPort = config.server.port; - } - } - }; -} -function showRecompileReason(): PluginOption { - return { - name: 'vaadin:why-you-compile', - handleHotUpdate(context) { - console.log('Recompiling because', context.file, 'changed'); - } - }; -} - -export const vaadinConfig: UserConfigFn = (env) => { - const devMode = env.mode === 'development'; - - if (devMode && process.env.watchDogPort) { - // Open a connection with the Java dev-mode handler in order to finish - // vite when it exits or crashes. - runWatchDog(process.env.watchDogPort, process.env.watchDogHost); - } - - return { - root: frontendFolder, - base: '', - resolve: { - alias: { - Frontend: frontendFolder - }, - preserveSymlinks: true - }, - define: { - OFFLINE_PATH: settings.offlinePath, - VITE_ENABLED: 'true' - }, - server: { - host: '127.0.0.1', - strictPort: true, - fs: { - allow: allowedFrontendFolders - } - }, - build: { - outDir: frontendBundleFolder, - assetsDir: 'VAADIN/build', - rollupOptions: { - input: { - indexhtml: path.resolve(frontendFolder, 'index.html'), - - ...hasExportedWebComponents - ? { webcomponenthtml: path.resolve(frontendFolder, 'web-component.html') } - : {} - } - } - }, - optimizeDeps: { - entries: [ - // Pre-scan entrypoints in Vite to avoid reloading on first open - 'generated/vaadin.ts' - ], - exclude: [ - '@vaadin/router', - '@vaadin/vaadin-license-checker', - '@vaadin/vaadin-usage-statistics', - 'workbox-core', - 'workbox-precaching', - 'workbox-routing', - 'workbox-strategies' - ] - }, - plugins: [ - !devMode && brotli(), - devMode && vaadinBundlesPlugin(), - devMode && setHmrPortToServerPort(), - devMode && showRecompileReason(), - settings.offlineEnabled && buildSWPlugin({ devMode }), - !devMode && statsExtracterPlugin(), - themePlugin({devMode}), - lenientLitImportPlugin(), - postcssLit({ - include: ['**/*.css', '**/*.css\?*'], - exclude: [ - `${themeFolder}/**/*.css`, - `${themeFolder}/**/*.css\?*`, - `${themeResourceFolder}/**/*.css`, - `${themeResourceFolder}/**/*.css\?*`, - '**/*\?html-proxy*' - ] - }), - { - name: 'vaadin:force-remove-spa-middleware', - transformIndexHtml: { - enforce: 'pre', - transform(_html, { server }) { - if (server && !spaMiddlewareForceRemoved) { - server.middlewares.stack = server.middlewares.stack.filter((mw) => { - const handleName = '' + mw.handle; - return !handleName.includes('viteSpaFallbackMiddleware'); - }); - spaMiddlewareForceRemoved = true; - } - } - } - }, - hasExportedWebComponents && { - name: 'vaadin:inject-entrypoints-to-web-component-html', - transformIndexHtml: { - enforce: 'pre', - transform(_html, { path, server }) { - if (path !== '/web-component.html') { - return; - } - - return [ - { - tag: 'script', - attrs: { type: 'module', src: `/generated/vaadin-web-component.ts` }, - injectTo: 'head' - } - ] - } - } - }, - { - name: 'vaadin:inject-entrypoints-to-index-html', - transformIndexHtml: { - enforce: 'pre', - transform(_html, { path, server }) { - if (path !== '/index.html') { - return; - } - - const scripts = []; - - if (devMode) { - scripts.push({ - tag: 'script', - attrs: { type: 'module', src: `/generated/vite-devmode.ts` }, - injectTo: 'head' - }); - } - scripts.push({ - tag: 'script', - attrs: { type: 'module', src: '/generated/vaadin.ts' }, - injectTo: 'head' - }); - return scripts; - } - } - }, - checker({ - typescript: true - }) - ] - }; -}; - -export const overrideVaadinConfig = (customConfig: UserConfigFn) => { - return defineConfig((env) => mergeConfig(vaadinConfig(env), customConfig(env))); -}; diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa/.pnpmfile.cjs b/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa/.pnpmfile.cjs deleted file mode 100644 index 0181b839..00000000 --- a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa/.pnpmfile.cjs +++ /dev/null @@ -1,42 +0,0 @@ -/** - * NOTICE: this is an auto-generated file - * - * This file has been generated for `pnpm install` task. - * It is used to pin client side dependencies. - * This file will be overwritten on every run. - */ - -const fs = require('fs'); - -const versionsFile = require('path').resolve(__dirname, 'target/frontend/versions.json'); - -if (!fs.existsSync(versionsFile)) { - return; -} -const versions = JSON.parse(fs.readFileSync(versionsFile, 'utf-8')); - -module.exports = { - hooks: { - readPackage - } -}; - -function readPackage(pkg) { - const { dependencies } = pkg; - - if (dependencies) { - for (let k in versions) { - if (dependencies[k] && dependencies[k] !== versions[k]) { - pkg.dependencies[k] = versions[k]; - } - } - } - - // Forcing chokidar version for now until new babel version is available - // check out https://github.com/babel/babel/issues/11488 - if (pkg.dependencies.chokidar) { - pkg.dependencies.chokidar = '^3.4.0'; - } - - return pkg; -} diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa/tsconfig.json b/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa/tsconfig.json deleted file mode 100644 index 2f1e15a3..00000000 --- a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa/tsconfig.json +++ /dev/null @@ -1,35 +0,0 @@ -// This TypeScript configuration file is generated by vaadin-maven-plugin. -// This is needed for TypeScript compiler to compile your TypeScript code in the project. -// It is recommended to commit this file to the VCS. -// You might want to change the configurations to fit your preferences -// For more information about the configurations, please refer to http://www.typescriptlang.org/docs/handbook/tsconfig-json.html -{ - "compilerOptions": { - "sourceMap": true, - "inlineSources": true, - "module": "esNext", - "target": "es2019", - "moduleResolution": "node", - "strict": true, - "skipDefaultLibCheck": true, - "noFallthroughCasesInSwitch": true, - "noImplicitReturns": true, - "noImplicitAny": true, - "noImplicitThis": true, - "noUnusedLocals": false, - "noUnusedParameters": false, - "experimentalDecorators": true, - "baseUrl": "frontend", - "paths": { - "Frontend/*": [ - "*" - ] - } - }, - "include": [ - "frontend/**/*.ts", - "frontend/index.js", - "types.d.ts" - ], - "exclude": [] -} diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa/types.d.ts b/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa/types.d.ts deleted file mode 100644 index 250302bd..00000000 --- a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa/types.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -// This TypeScript modules definition file is generated by vaadin-maven-plugin. -// You can not directly import your different static files into TypeScript, -// This is needed for TypeScript compiler to declare and export as a TypeScript module. -// It is recommended to commit this file to the VCS. -// You might want to change the configurations to fit your preferences -declare module '*.css' { - import { CSSResultGroup } from 'lit'; - const content: CSSResultGroup; - export default content; -} diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa/vite.config.ts b/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa/vite.config.ts deleted file mode 100644 index 4d6a0222..00000000 --- a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa/vite.config.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { UserConfigFn } from 'vite'; -import { overrideVaadinConfig } from './vite.generated'; - -const customConfig: UserConfigFn = (env) => ({ - // Here you can add custom Vite parameters - // https://vitejs.dev/config/ -}); - -export default overrideVaadinConfig(customConfig); diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa/vite.generated.ts b/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa/vite.generated.ts deleted file mode 100644 index e30d55d4..00000000 --- a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa/vite.generated.ts +++ /dev/null @@ -1,635 +0,0 @@ -/** - * NOTICE: this is an auto-generated file - * - * This file has been generated by the `flow:prepare-frontend` maven goal. - * This file will be overwritten on every run. Any custom changes should be made to vite.config.ts - */ -import path from 'path'; -import { readFileSync, existsSync, writeFileSync } from 'fs'; -import * as net from 'net'; - -import { processThemeResources } from './target/plugins/application-theme-plugin/theme-handle'; -import { rewriteCssUrls } from './target/plugins/theme-loader/theme-loader-utils'; -import settings from './target/vaadin-dev-server-settings.json'; -import { defineConfig, mergeConfig, PluginOption, ResolvedConfig, UserConfigFn, OutputOptions, AssetInfo, ChunkInfo } from 'vite'; -import { getManifest } from 'workbox-build'; - -import * as rollup from 'rollup'; -import brotli from 'rollup-plugin-brotli'; -import replace from '@rollup/plugin-replace'; -import checker from 'vite-plugin-checker'; -import postcssLit from './target/plugins/rollup-plugin-postcss-lit-custom/rollup-plugin-postcss-lit.js'; - -const appShellUrl = '.'; - -const frontendFolder = path.resolve(__dirname, settings.frontendFolder); -const themeFolder = path.resolve(frontendFolder, settings.themeFolder); -const frontendBundleFolder = path.resolve(__dirname, settings.frontendBundleOutput); -const addonFrontendFolder = path.resolve(__dirname, settings.addonFrontendFolder); -const themeResourceFolder = path.resolve(__dirname, settings.themeResourceFolder); -const statsFile = path.resolve(frontendBundleFolder, '..', 'config', 'stats.json'); - -const projectStaticAssetsFolders = [ - path.resolve(__dirname, 'src', 'main', 'resources', 'META-INF', 'resources'), - path.resolve(__dirname, 'src', 'main', 'resources', 'static'), - frontendFolder -]; - -// Folders in the project which can contain application themes -const themeProjectFolders = projectStaticAssetsFolders.map((folder) => path.resolve(folder, settings.themeFolder)); - -const themeOptions = { - devMode: false, - // The following matches folder 'target/flow-frontend/themes/' - // (not 'frontend/themes') for theme in JAR that is copied there - themeResourceFolder: path.resolve(themeResourceFolder, settings.themeFolder), - themeProjectFolders: themeProjectFolders, - projectStaticAssetsOutputFolder: path.resolve(__dirname, settings.staticOutput), - frontendGeneratedFolder: path.resolve(frontendFolder, settings.generatedFolder) -}; - -const hasExportedWebComponents = existsSync(path.resolve(frontendFolder, 'web-component.html')); - -// Block debug and trace logs. -console.trace = () => {}; -console.debug = () => {}; - -function injectManifestToSWPlugin(): rollup.Plugin { - const rewriteManifestIndexHtmlUrl = (manifest) => { - const indexEntry = manifest.find((entry) => entry.url === 'index.html'); - if (indexEntry) { - indexEntry.url = appShellUrl; - } - - return { manifest, warnings: [] }; - }; - - return { - name: 'vaadin:inject-manifest-to-sw', - async transform(code, id) { - if (/sw\.(ts|js)$/.test(id)) { - const { manifestEntries } = await getManifest({ - globDirectory: frontendBundleFolder, - globPatterns: ['**/*'], - globIgnores: ['**/*.br'], - manifestTransforms: [rewriteManifestIndexHtmlUrl], - maximumFileSizeToCacheInBytes: 100 * 1024 * 1024, // 100mb, - }); - - return code.replace('self.__WB_MANIFEST', JSON.stringify(manifestEntries)); - } - } - } -} - -function buildSWPlugin(opts): PluginOption { - let config: ResolvedConfig; - const devMode = opts.devMode; - - const swObj = {} - - async function build(action: 'generate' | 'write', additionalPlugins: rollup.Plugin[] = []) { - const includedPluginNames = [ - 'alias', - 'vite:resolve', - 'vite:esbuild', - 'rollup-plugin-dynamic-import-variables', - 'vite:esbuild-transpile', - 'vite:terser', - ] - const plugins: rollup.Plugin[] = config.plugins.filter((p) => { - return includedPluginNames.includes(p.name) - }); - plugins.push( - replace({ - values: { - 'process.env.NODE_ENV': JSON.stringify(config.mode), - ...config.define, - }, - preventAssignment: true - }) - ); - if (additionalPlugins) { - plugins.push(...additionalPlugins); - } - const bundle = await rollup.rollup({ - input: path.resolve(settings.clientServiceWorkerSource), - plugins - }); - - try { - return await bundle[action]({ - file: path.resolve(frontendBundleFolder, 'sw.js'), - format: 'es', - exports: 'none', - sourcemap: config.command === 'serve' || config.build.sourcemap, - inlineDynamicImports: true, - }); - } finally { - await bundle.close(); - } - } - - return { - name: 'vaadin:build-sw', - enforce: 'post', - async configResolved(resolvedConfig) { - config = resolvedConfig; - }, - async buildStart() { - if (devMode) { - const { output } = await build('generate'); - swObj.code = output[0].code; - swObj.map = output[0].map; - } - }, - async load(id) { - if (id.endsWith('sw.js')) { - return ''; - } - }, - async transform(_code, id) { - if (id.endsWith('sw.js')) { - return swObj; - } - }, - async closeBundle() { - await build('write', [ - injectManifestToSWPlugin(), - brotli(), - ]); - } - } -} - -function statsExtracterPlugin(): PluginOption { - return { - name: 'vaadin:stats', - enforce: 'post', - async writeBundle(options: OutputOptions, bundle: { [fileName: string]: AssetInfo | ChunkInfo }) { - const modules = Object.values(bundle).flatMap((b) => (b.modules ? Object.keys(b.modules) : [])); - const nodeModulesFolders = modules.filter((id) => id.includes('node_modules')); - const npmModules = nodeModulesFolders - .map((id) => id.replace(/.*node_modules./, '')) - .map((id) => { - const parts = id.split('/'); - if (id.startsWith('@')) { - return parts[0] + '/' + parts[1]; - } else { - return parts[0]; - } - }) - .sort() - .filter((value, index, self) => self.indexOf(value) === index); - - writeFileSync(statsFile, JSON.stringify({ npmModules }, null, 1)); - } - }; -} -function vaadinBundlesPlugin(): PluginOption { - type ExportInfo = - | string - | { - namespace?: string; - source: string; - }; - - type ExposeInfo = { - exports: ExportInfo[]; - }; - - type PackageInfo = { - version: string; - exposes: Record; - }; - - type BundleJson = { - packages: Record; - }; - - const disabledMessage = 'Vaadin component dependency bundles are disabled.'; - - const modulesDirectory = path.resolve(__dirname, 'node_modules').replace(/\\/g, '/'); - - let vaadinBundleJson: BundleJson; - - function parseModuleId(id: string): { packageName: string; modulePath: string } { - const [scope, scopedPackageName] = id.split('/', 3); - const packageName = scope.startsWith('@') ? `${scope}/${scopedPackageName}` : scope; - const modulePath = `.${id.substring(packageName.length)}`; - return { - packageName, - modulePath - }; - } - - function getExports(id: string): string[] | undefined { - const { packageName, modulePath } = parseModuleId(id); - const packageInfo = vaadinBundleJson.packages[packageName]; - - if (!packageInfo) return; - - const exposeInfo: ExposeInfo = packageInfo.exposes[modulePath]; - if (!exposeInfo) return; - - const exportsSet = new Set(); - for (const e of exposeInfo.exports) { - if (typeof e === 'string') { - exportsSet.add(e); - } else { - const { namespace, source } = e; - if (namespace) { - exportsSet.add(namespace); - } else { - const sourceExports = getExports(source); - if (sourceExports) { - sourceExports.forEach((e) => exportsSet.add(e)); - } - } - } - } - return Array.from(exportsSet); - } - - function getExportBinding(binding: string) { - return binding === 'default' ? '_default as default' : binding; - } - - function getImportAssigment(binding: string) { - return binding === 'default' ? 'default: _default' : binding; - } - - return { - name: 'vaadin:bundles', - enforce: 'pre', - apply(config, { command }) { - if (command !== 'serve') return false; - - try { - const vaadinBundleJsonPath = require.resolve('@vaadin/bundles/vaadin-bundle.json'); - vaadinBundleJson = JSON.parse(readFileSync(vaadinBundleJsonPath, { encoding: 'utf8' })); - } catch (e: unknown) { - if (typeof e === 'object' && (e as { code: string }).code === 'MODULE_NOT_FOUND') { - vaadinBundleJson = { packages: {} }; - console.info(`@vaadin/bundles npm package is not found, ${disabledMessage}`); - return false; - } else { - throw e; - } - } - - const versionMismatches: Array<{ name: string; bundledVersion: string; installedVersion: string }> = []; - for (const [name, packageInfo] of Object.entries(vaadinBundleJson.packages)) { - let installedVersion: string | undefined = undefined; - try { - const { version: bundledVersion } = packageInfo; - const installedPackageJsonFile = path.resolve(modulesDirectory, name, 'package.json'); - const packageJson = JSON.parse(readFileSync(installedPackageJsonFile, { encoding: 'utf8' })); - installedVersion = packageJson.version; - if (installedVersion && installedVersion !== bundledVersion) { - versionMismatches.push({ - name, - bundledVersion, - installedVersion - }); - } - } catch (_) { - // ignore package not found - } - } - if (versionMismatches.length) { - console.info(`@vaadin/bundles has version mismatches with installed packages, ${disabledMessage}`); - console.info(`Packages with version mismatches: ${JSON.stringify(versionMismatches, undefined, 2)}`); - vaadinBundleJson = { packages: {} }; - return false; - } - - return true; - }, - async config(config) { - return mergeConfig( - { - optimizeDeps: { - exclude: [ - // Vaadin bundle - '@vaadin/bundles', - ...Object.keys(vaadinBundleJson.packages) - ] - } - }, - config - ); - }, - load(rawId) { - const [path, params] = rawId.split('?'); - if (!path.startsWith(modulesDirectory)) return; - - const id = path.substring(modulesDirectory.length + 1); - const bindings = getExports(id); - if (bindings === undefined) return; - - const cacheSuffix = params ? `?${params}` : ''; - const bundlePath = `@vaadin/bundles/vaadin.js${cacheSuffix}`; - - return `import { init as VaadinBundleInit, get as VaadinBundleGet } from '${bundlePath}'; -await VaadinBundleInit('default'); -const { ${bindings.map(getImportAssigment).join(', ')} } = (await VaadinBundleGet('./node_modules/${id}'))(); -export { ${bindings.map(getExportBinding).join(', ')} };`; - } - }; -} - -function themePlugin(opts): PluginOption { - const fullThemeOptions = {...themeOptions, devMode: opts.devMode }; - return { - name: 'vaadin:theme', - config() { - processThemeResources(fullThemeOptions, console); - }, - configureServer(server) { - function handleThemeFileCreateDelete(themeFile, stats) { - if (themeFile.startsWith(themeFolder)) { - const changed = path.relative(themeFolder, themeFile) - console.debug('Theme file ' + (!!stats ? 'created' : 'deleted'), changed); - processThemeResources(fullThemeOptions, console); - } - } - server.watcher.on('add', handleThemeFileCreateDelete); - server.watcher.on('unlink', handleThemeFileCreateDelete); - }, - handleHotUpdate(context) { - const contextPath = path.resolve(context.file); - const themePath = path.resolve(themeFolder); - if (contextPath.startsWith(themePath)) { - const changed = path.relative(themePath, contextPath); - - console.debug('Theme file changed', changed); - - if (changed.startsWith(settings.themeName)) { - processThemeResources(fullThemeOptions, console); - } - } - }, - async resolveId(id, importer) { - // force theme generation if generated theme sources does not yet exist - // this may happen for example during Java hot reload when updating - // @Theme annotation value - if (path.resolve(themeOptions.frontendGeneratedFolder, "theme.js") === importer && - !existsSync(path.resolve(themeOptions.frontendGeneratedFolder, id))) { - console.debug('Generate theme file ' + id + ' not existing. Processing theme resource'); - processThemeResources(fullThemeOptions, console); - return; - } - if (!id.startsWith(settings.themeFolder)) { - return; - } - - for (const location of [themeResourceFolder, frontendFolder]) { - const result = await this.resolve(path.resolve(location, id)); - if (result) { - return result; - } - } - }, - async transform(raw, id, options) { - // rewrite urls for the application theme css files - const [bareId, query] = id.split('?'); - if (!bareId?.startsWith(themeFolder) || !bareId?.endsWith('.css')) { - return; - } - const [themeName] = bareId.substring(themeFolder.length + 1).split('/'); - return rewriteCssUrls(raw, path.dirname(bareId), path.resolve(themeFolder, themeName), console, opts); - } - }; -} -function lenientLitImportPlugin(): PluginOption { - return { - name: 'vaadin:lenient-lit-import', - async transform(code, id) { - const decoratorImports = [ - /import (.*?) from (['"])(lit\/decorators)(['"])/, - /import (.*?) from (['"])(lit-element\/decorators)(['"])/ - ]; - const directiveImports = [ - /import (.*?) from (['"])(lit\/directives\/)([^\\.]*?)(['"])/, - /import (.*?) from (['"])(lit-html\/directives\/)([^\\.]*?)(['"])/ - ]; - - decoratorImports.forEach((decoratorImport) => { - let decoratorMatch; - while ((decoratorMatch = code.match(decoratorImport))) { - console.warn( - `Warning: the file ${id} imports from '${decoratorMatch[3]}' when it should import from '${decoratorMatch[3]}.js'` - ); - code = code.replace(decoratorImport, 'import $1 from $2$3.js$4'); - } - }); - - directiveImports.forEach((directiveImport) => { - let directiveMatch; - while ((directiveMatch = code.match(directiveImport))) { - console.warn( - `Warning: the file ${id} imports from '${directiveMatch[3]}${directiveMatch[4]}' when it should import from '${directiveMatch[3]}${directiveMatch[4]}.js'` - ); - code = code.replace(directiveImport, 'import $1 from $2$3$4.js$5'); - } - }); - - return code; - } - }; -} - -function runWatchDog(watchDogPort, watchDogHost) { - const client = net.Socket(); - client.setEncoding('utf8'); - client.on('error', function (err) { - console.log('Watchdog connection error. Terminating vite process...', err); - client.destroy(); - process.exit(0); - }); - client.on('close', function () { - client.destroy(); - runWatchDog(watchDogPort, watchDogHost); - }); - - client.connect(watchDogPort, watchDogHost || 'localhost'); -} - -let spaMiddlewareForceRemoved = false; - -const allowedFrontendFolders = [ - frontendFolder, - addonFrontendFolder, - path.resolve(addonFrontendFolder, '..', 'frontend'), // Contains only generated-flow-imports - path.resolve(__dirname, 'node_modules') -]; - -function setHmrPortToServerPort(): PluginOption { - return { - name: 'set-hmr-port-to-server-port', - configResolved(config) { - if (config.server.strictPort && config.server.hmr !== false) { - if (config.server.hmr === true) config.server.hmr = {}; - config.server.hmr = config.server.hmr || {}; - config.server.hmr.clientPort = config.server.port; - } - } - }; -} -function showRecompileReason(): PluginOption { - return { - name: 'vaadin:why-you-compile', - handleHotUpdate(context) { - console.log('Recompiling because', context.file, 'changed'); - } - }; -} - -export const vaadinConfig: UserConfigFn = (env) => { - const devMode = env.mode === 'development'; - - if (devMode && process.env.watchDogPort) { - // Open a connection with the Java dev-mode handler in order to finish - // vite when it exits or crashes. - runWatchDog(process.env.watchDogPort, process.env.watchDogHost); - } - - return { - root: frontendFolder, - base: '', - resolve: { - alias: { - Frontend: frontendFolder - }, - preserveSymlinks: true - }, - define: { - OFFLINE_PATH: settings.offlinePath, - VITE_ENABLED: 'true' - }, - server: { - host: '127.0.0.1', - strictPort: true, - fs: { - allow: allowedFrontendFolders - } - }, - build: { - outDir: frontendBundleFolder, - assetsDir: 'VAADIN/build', - rollupOptions: { - input: { - indexhtml: path.resolve(frontendFolder, 'index.html'), - - ...hasExportedWebComponents - ? { webcomponenthtml: path.resolve(frontendFolder, 'web-component.html') } - : {} - } - } - }, - optimizeDeps: { - entries: [ - // Pre-scan entrypoints in Vite to avoid reloading on first open - 'generated/vaadin.ts' - ], - exclude: [ - '@vaadin/router', - '@vaadin/vaadin-license-checker', - '@vaadin/vaadin-usage-statistics', - 'workbox-core', - 'workbox-precaching', - 'workbox-routing', - 'workbox-strategies' - ] - }, - plugins: [ - !devMode && brotli(), - devMode && vaadinBundlesPlugin(), - devMode && setHmrPortToServerPort(), - devMode && showRecompileReason(), - settings.offlineEnabled && buildSWPlugin({ devMode }), - !devMode && statsExtracterPlugin(), - themePlugin({devMode}), - lenientLitImportPlugin(), - postcssLit({ - include: ['**/*.css', '**/*.css\?*'], - exclude: [ - `${themeFolder}/**/*.css`, - `${themeFolder}/**/*.css\?*`, - `${themeResourceFolder}/**/*.css`, - `${themeResourceFolder}/**/*.css\?*`, - '**/*\?html-proxy*' - ] - }), - { - name: 'vaadin:force-remove-spa-middleware', - transformIndexHtml: { - enforce: 'pre', - transform(_html, { server }) { - if (server && !spaMiddlewareForceRemoved) { - server.middlewares.stack = server.middlewares.stack.filter((mw) => { - const handleName = '' + mw.handle; - return !handleName.includes('viteSpaFallbackMiddleware'); - }); - spaMiddlewareForceRemoved = true; - } - } - } - }, - hasExportedWebComponents && { - name: 'vaadin:inject-entrypoints-to-web-component-html', - transformIndexHtml: { - enforce: 'pre', - transform(_html, { path, server }) { - if (path !== '/web-component.html') { - return; - } - - return [ - { - tag: 'script', - attrs: { type: 'module', src: `/generated/vaadin-web-component.ts` }, - injectTo: 'head' - } - ] - } - } - }, - { - name: 'vaadin:inject-entrypoints-to-index-html', - transformIndexHtml: { - enforce: 'pre', - transform(_html, { path, server }) { - if (path !== '/index.html') { - return; - } - - const scripts = []; - - if (devMode) { - scripts.push({ - tag: 'script', - attrs: { type: 'module', src: `/generated/vite-devmode.ts` }, - injectTo: 'head' - }); - } - scripts.push({ - tag: 'script', - attrs: { type: 'module', src: '/generated/vaadin.ts' }, - injectTo: 'head' - }); - return scripts; - } - } - }, - checker({ - typescript: true - }) - ] - }; -}; - -export const overrideVaadinConfig = (customConfig: UserConfigFn) => { - return defineConfig((env) => mergeConfig(vaadinConfig(env), customConfig(env))); -}; diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/tsconfig.json b/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/tsconfig.json deleted file mode 100644 index 37f32e77..00000000 --- a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/tsconfig.json +++ /dev/null @@ -1,39 +0,0 @@ -// This TypeScript configuration file is generated by vaadin-maven-plugin. -// This is needed for TypeScript compiler to compile your TypeScript code in the project. -// It is recommended to commit this file to the VCS. -// You might want to change the configurations to fit your preferences -// For more information about the configurations, please refer to http://www.typescriptlang.org/docs/handbook/tsconfig-json.html -{ - "flow_version": "23.3.4", - "compilerOptions": { - "sourceMap": true, - "jsx": "react-jsx", - "inlineSources": true, - "module": "esNext", - "target": "es2020", - "moduleResolution": "node", - "strict": true, - "skipLibCheck": true, - "noFallthroughCasesInSwitch": true, - "noImplicitReturns": true, - "noImplicitAny": true, - "noImplicitThis": true, - "noUnusedLocals": false, - "noUnusedParameters": false, - "experimentalDecorators": true, - "useDefineForClassFields": false, - "baseUrl": "frontend", - "paths": { - "@vaadin/flow-frontend": ["generated/jar-resources"], - "@vaadin/flow-frontend/*": ["generated/jar-resources/*"], - "Frontend/*": ["*"] - } - }, - "include": [ - "frontend/**/*", - "types.d.ts" - ], - "exclude": [ - "frontend/generated/jar-resources/**" - ] -} diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/types.d.ts b/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/types.d.ts deleted file mode 100644 index 7c734273..00000000 --- a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/types.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -// This TypeScript modules definition file is generated by vaadin-maven-plugin. -// You can not directly import your different static files into TypeScript, -// This is needed for TypeScript compiler to declare and export as a TypeScript module. -// It is recommended to commit this file to the VCS. -// You might want to change the configurations to fit your preferences -declare module '*.css' { - import {CSSResult} from "lit-element"; - const content: CSSResult; - export default content; -} diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-scalability/frontend/generated/vaadin.ts b/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-scalability/frontend/generated/vaadin.ts deleted file mode 100644 index fa8c0b6c..00000000 --- a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-scalability/frontend/generated/vaadin.ts +++ /dev/null @@ -1,3 +0,0 @@ -import './vaadin-featureflags.ts'; - -import './index'; diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-scalability/tsconfig.json b/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-scalability/tsconfig.json deleted file mode 100644 index 37f32e77..00000000 --- a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-scalability/tsconfig.json +++ /dev/null @@ -1,39 +0,0 @@ -// This TypeScript configuration file is generated by vaadin-maven-plugin. -// This is needed for TypeScript compiler to compile your TypeScript code in the project. -// It is recommended to commit this file to the VCS. -// You might want to change the configurations to fit your preferences -// For more information about the configurations, please refer to http://www.typescriptlang.org/docs/handbook/tsconfig-json.html -{ - "flow_version": "23.3.4", - "compilerOptions": { - "sourceMap": true, - "jsx": "react-jsx", - "inlineSources": true, - "module": "esNext", - "target": "es2020", - "moduleResolution": "node", - "strict": true, - "skipLibCheck": true, - "noFallthroughCasesInSwitch": true, - "noImplicitReturns": true, - "noImplicitAny": true, - "noImplicitThis": true, - "noUnusedLocals": false, - "noUnusedParameters": false, - "experimentalDecorators": true, - "useDefineForClassFields": false, - "baseUrl": "frontend", - "paths": { - "@vaadin/flow-frontend": ["generated/jar-resources"], - "@vaadin/flow-frontend/*": ["generated/jar-resources/*"], - "Frontend/*": ["*"] - } - }, - "include": [ - "frontend/**/*", - "types.d.ts" - ], - "exclude": [ - "frontend/generated/jar-resources/**" - ] -} diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-scalability/types.d.ts b/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-scalability/types.d.ts deleted file mode 100644 index 7c734273..00000000 --- a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-scalability/types.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -// This TypeScript modules definition file is generated by vaadin-maven-plugin. -// You can not directly import your different static files into TypeScript, -// This is needed for TypeScript compiler to declare and export as a TypeScript module. -// It is recommended to commit this file to the VCS. -// You might want to change the configurations to fit your preferences -declare module '*.css' { - import {CSSResult} from "lit-element"; - const content: CSSResult; - export default content; -} diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/tsconfig.json b/vertx-vaadin-flow-parent/vertx-vaadin-tests/tsconfig.json deleted file mode 100644 index 45edf6f1..00000000 --- a/vertx-vaadin-flow-parent/vertx-vaadin-tests/tsconfig.json +++ /dev/null @@ -1,28 +0,0 @@ -// This TypeScript configuration file is generated by vaadin-maven-plugin. -// This is needed for TypeScript compiler to compile your TypeScript code in the project. -// It is recommended to commit this file to the VCS. -// You might want to change the configurations to fit your preferences -// For more information about the configurations, please refer to http://www.typescriptlang.org/docs/handbook/tsconfig-json.html -{ - "compilerOptions": { - "sourceMap": true, - "inlineSources": true, - "module": "esNext", - "target": "es2017", - "moduleResolution": "node", - "strict": true, - "noFallthroughCasesInSwitch": true, - "noImplicitReturns": true, - "noImplicitAny": true, - "noImplicitThis": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "experimentalDecorators": true - }, - "include": [ - "frontend/**/*.ts", - "frontend/index.js", - "types.d.ts" - ], - "exclude": [] -} diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/types.d.ts b/vertx-vaadin-flow-parent/vertx-vaadin-tests/types.d.ts deleted file mode 100644 index 0fb138a6..00000000 --- a/vertx-vaadin-flow-parent/vertx-vaadin-tests/types.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -// This TypeScript modules definition file is generated by vaadin-maven-plugin. -// You can not directly import your different static files into TypeScript, -// This is needed for TypeScript compiler to declare and export as a TypeScript module. -// It is recommended to commit this file to the VCS. -// You might want to change the configurations to fit your preferences -declare module '*.css' { - const content: string; - export default content; -} \ No newline at end of file diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/README.md b/vertx-vaadin-flow/README.md similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/README.md rename to vertx-vaadin-flow/README.md diff --git a/vertx-vaadin-flow/frontend/generated/index.ts b/vertx-vaadin-flow/frontend/generated/index.ts new file mode 100644 index 00000000..c20aa03f --- /dev/null +++ b/vertx-vaadin-flow/frontend/generated/index.ts @@ -0,0 +1,32 @@ +/****************************************************************************** + * This file is auto-generated by Vaadin. + * If you want to customize the entry point, you can copy this file or create + * your own `index.ts` in your frontend directory. + * By default, the `index.ts` file should be in `./frontend/` folder. + * + * NOTE: + * - You need to restart the dev-server after adding the new `index.ts` file. + * After that, all modifications to `index.ts` are recompiled automatically. + * - `index.js` is also supported if you don't want to use TypeScript. + ******************************************************************************/ + +// import Vaadin client-router to handle client-side and server-side navigation +import { Router } from '@vaadin/router'; + +// import Flow module to enable navigation to Vaadin server-side views +import { Flow } from 'Frontend/generated/jar-resources/Flow.js'; + +const { serverSideRoutes } = new Flow({ + imports: () => import('../../target/frontend/generated-flow-imports.js') +}); + +const routes = [ + // for client-side, place routes below (more info https://vaadin.com/docs/v15/flow/typescript/creating-routes.html) + + // for server-side, the next magic line sends all unmatched routes: + ...serverSideRoutes // IMPORTANT: this must be the last entry in the array +]; + +// Vaadin router needs an outlet in the index.html page to display views +const router = new Router(document.querySelector('#outlet')); +router.setRoutes(routes); diff --git a/vertx-vaadin-flow/frontend/generated/vaadin-featureflags.ts b/vertx-vaadin-flow/frontend/generated/vaadin-featureflags.ts new file mode 100644 index 00000000..d3399438 --- /dev/null +++ b/vertx-vaadin-flow/frontend/generated/vaadin-featureflags.ts @@ -0,0 +1,11 @@ +// @ts-nocheck +window.Vaadin = window.Vaadin || {}; +window.Vaadin.featureFlags = window.Vaadin.featureFlags || {}; +window.Vaadin.featureFlags.exampleFeatureFlag = false; +window.Vaadin.featureFlags.hillaPush = false; +window.Vaadin.featureFlags.hillaEngine = false; +window.Vaadin.featureFlags.oldLicenseChecker = false; +window.Vaadin.featureFlags.collaborationEngineBackend = false; +window.Vaadin.featureFlags.webpackForFrontendBuild = false; +window.Vaadin.featureFlags.enforceFieldValidation = false; +export {}; \ No newline at end of file diff --git a/vertx-vaadin-flow/frontend/generated/vaadin.ts b/vertx-vaadin-flow/frontend/generated/vaadin.ts new file mode 100644 index 00000000..3c8cdfca --- /dev/null +++ b/vertx-vaadin-flow/frontend/generated/vaadin.ts @@ -0,0 +1,5 @@ +import './vaadin-featureflags.ts'; + +import './index'; + +import 'Frontend/generated/jar-resources/vaadin-dev-tools.js'; diff --git a/vertx-vaadin-flow/frontend/generated/vite-devmode.ts b/vertx-vaadin-flow/frontend/generated/vite-devmode.ts new file mode 100644 index 00000000..f9f7a5fb --- /dev/null +++ b/vertx-vaadin-flow/frontend/generated/vite-devmode.ts @@ -0,0 +1,31 @@ +// @ts-ignore +if (import.meta.hot) { + // @ts-ignore + const hot = import.meta.hot; + + const isLiveReloadDisabled = () => { + // Checks if live reload is disabled in the debug window + return sessionStorage.getItem('vaadin.live-reload.active') === 'false'; + }; + + const preventViteReload = (payload: any) => { + // Changing the path prevents Vite from reloading + payload.path = '/_fake/path.html'; + }; + + let pendingNavigationTo: string | undefined = undefined; + + window.addEventListener('vaadin-router-go', (routerEvent: any) => { + pendingNavigationTo = routerEvent.detail.pathname + routerEvent.detail.search; + }); + hot.on('vite:beforeFullReload', (payload: any) => { + if (isLiveReloadDisabled()) { + preventViteReload(payload); + } + if (pendingNavigationTo) { + // Force reload with the new URL + location.href = pendingNavigationTo; + preventViteReload(payload); + } + }); +} diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/frontend/index.html b/vertx-vaadin-flow/frontend/index.html similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/frontend/index.html rename to vertx-vaadin-flow/frontend/index.html diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/pom.xml b/vertx-vaadin-flow/pom.xml similarity index 99% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/pom.xml rename to vertx-vaadin-flow/pom.xml index 663fcab7..80f5456f 100644 --- a/vertx-vaadin-flow-parent/vertx-vaadin-flow/pom.xml +++ b/vertx-vaadin-flow/pom.xml @@ -5,14 +5,13 @@ com.github.mcollovati.vertx vertx-vaadin-root - 1.0-dev - + 23.4.0-SNAPSHOT + ../pom.xml vertx-vaadin-flow jar vertx-vaadin-flow - 23.3.5-SNAPSHOT An adapter to run Vaadin Flow applications on Vertx https://github.com/mcollovati/vertx-vaadin diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/Sync.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/Sync.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/Sync.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/Sync.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/http/HttpReverseProxy.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/http/HttpReverseProxy.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/http/HttpReverseProxy.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/http/HttpReverseProxy.java diff --git a/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/http/HttpServerResponseWrapper.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/http/HttpServerResponseWrapper.java similarity index 100% rename from vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/http/HttpServerResponseWrapper.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/http/HttpServerResponseWrapper.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/support/BufferInputStreamAdapter.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/support/BufferInputStreamAdapter.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/support/BufferInputStreamAdapter.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/support/BufferInputStreamAdapter.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/support/HillaWorkAround.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/support/HillaWorkAround.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/support/HillaWorkAround.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/support/HillaWorkAround.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/support/StartupContext.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/support/StartupContext.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/support/StartupContext.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/support/StartupContext.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/support/VaadinPatches.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/support/VaadinPatches.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/support/VaadinPatches.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/support/VaadinPatches.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/CookieUtils.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/CookieUtils.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/CookieUtils.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/CookieUtils.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/DeploymentConfigurationFactory.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/DeploymentConfigurationFactory.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/DeploymentConfigurationFactory.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/DeploymentConfigurationFactory.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/HttpUtils.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/HttpUtils.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/HttpUtils.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/HttpUtils.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/UIProxy.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/UIProxy.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/UIProxy.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/UIProxy.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VaadinOptions.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VaadinOptions.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VaadinOptions.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VaadinOptions.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VaadinVerticle.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VaadinVerticle.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VaadinVerticle.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VaadinVerticle.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VaadinVerticleConfiguration.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VaadinVerticleConfiguration.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VaadinVerticleConfiguration.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VaadinVerticleConfiguration.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxBootstrapHandler.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxBootstrapHandler.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxBootstrapHandler.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxBootstrapHandler.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxLookupInitializer.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxLookupInitializer.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxLookupInitializer.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxLookupInitializer.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxStaticFileServer.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxStaticFileServer.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxStaticFileServer.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxStaticFileServer.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxUI.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxUI.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxUI.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxUI.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadin.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadin.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadin.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadin.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinBrowserLiveReload.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinBrowserLiveReload.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinBrowserLiveReload.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinBrowserLiveReload.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinConfig.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinConfig.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinConfig.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinConfig.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinContext.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinContext.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinContext.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinContext.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinInstantiator.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinInstantiator.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinInstantiator.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinInstantiator.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinRequest.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinRequest.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinRequest.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinRequest.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinResponse.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinResponse.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinResponse.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinResponse.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinService.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinService.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinService.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinService.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinSession.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinSession.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinSession.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxVaadinSession.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxWrappedSession.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxWrappedSession.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxWrappedSession.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/VertxWrappedSession.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/communication/RequestHandlerReplacements.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/communication/RequestHandlerReplacements.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/communication/RequestHandlerReplacements.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/communication/RequestHandlerReplacements.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/communication/StreamReceiverHandler.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/communication/StreamReceiverHandler.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/communication/StreamReceiverHandler.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/communication/StreamReceiverHandler.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/communication/StreamResourceHandler.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/communication/StreamResourceHandler.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/communication/StreamResourceHandler.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/communication/StreamResourceHandler.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/communication/VertxDebugWindowConnection.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/communication/VertxDebugWindowConnection.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/communication/VertxDebugWindowConnection.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/communication/VertxDebugWindowConnection.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/communication/VertxIndexHtmlRequestHandler.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/communication/VertxIndexHtmlRequestHandler.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/communication/VertxIndexHtmlRequestHandler.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/communication/VertxIndexHtmlRequestHandler.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/communication/VertxJavaScriptBootstrapHandler.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/communication/VertxJavaScriptBootstrapHandler.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/communication/VertxJavaScriptBootstrapHandler.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/communication/VertxJavaScriptBootstrapHandler.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/communication/VertxStreamRequestHandler.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/communication/VertxStreamRequestHandler.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/communication/VertxStreamRequestHandler.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/communication/VertxStreamRequestHandler.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/communication/VertxUidlRequestHandler.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/communication/VertxUidlRequestHandler.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/communication/VertxUidlRequestHandler.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/communication/VertxUidlRequestHandler.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/communication/VertxWebComponentBootstrapHandler.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/communication/VertxWebComponentBootstrapHandler.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/communication/VertxWebComponentBootstrapHandler.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/communication/VertxWebComponentBootstrapHandler.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/BaseVaadinConnectEndpointService.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/BaseVaadinConnectEndpointService.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/BaseVaadinConnectEndpointService.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/BaseVaadinConnectEndpointService.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/DefaultVaadinConnectResponse.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/DefaultVaadinConnectResponse.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/DefaultVaadinConnectResponse.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/DefaultVaadinConnectResponse.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/EndpointServiceContext.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/EndpointServiceContext.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/EndpointServiceContext.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/EndpointServiceContext.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/EndpointServiceContextSupport.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/EndpointServiceContextSupport.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/EndpointServiceContextSupport.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/EndpointServiceContextSupport.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/VaadinConnectEndpointService.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/VaadinConnectEndpointService.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/VaadinConnectEndpointService.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/VaadinConnectEndpointService.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/VaadinConnectHandler.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/VaadinConnectHandler.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/VaadinConnectHandler.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/VaadinConnectHandler.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/VaadinConnectResponse.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/VaadinConnectResponse.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/VaadinConnectResponse.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/VaadinConnectResponse.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/VaadinEndpointRegistry.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/VaadinEndpointRegistry.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/VaadinEndpointRegistry.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/VaadinEndpointRegistry.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/VertxConnectRequestContext.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/VertxConnectRequestContext.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/VertxConnectRequestContext.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/VertxConnectRequestContext.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/VertxEndpointRegistry.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/VertxEndpointRegistry.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/VertxEndpointRegistry.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/VertxEndpointRegistry.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/VertxEndpointRegistryInitializer.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/VertxEndpointRegistryInitializer.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/VertxEndpointRegistryInitializer.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/VertxEndpointRegistryInitializer.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/VertxVaadinConnectEndpointService.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/VertxVaadinConnectEndpointService.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/VertxVaadinConnectEndpointService.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/VertxVaadinConnectEndpointService.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/auth/AccessAnnotationChecker.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/auth/AccessAnnotationChecker.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/auth/AccessAnnotationChecker.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/auth/AccessAnnotationChecker.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/auth/CsrfChecker.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/auth/CsrfChecker.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/auth/CsrfChecker.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/auth/CsrfChecker.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/auth/UserAwareRequest.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/auth/UserAwareRequest.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/auth/UserAwareRequest.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/auth/UserAwareRequest.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/auth/VaadinConnectAccessChecker.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/auth/VaadinConnectAccessChecker.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/auth/VaadinConnectAccessChecker.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/auth/VaadinConnectAccessChecker.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/auth/VaadinConnectAccessCheckerSupport.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/auth/VaadinConnectAccessCheckerSupport.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/auth/VaadinConnectAccessCheckerSupport.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/auth/VaadinConnectAccessCheckerSupport.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/auth/VertxAccessAnnotationChecker.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/auth/VertxAccessAnnotationChecker.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/auth/VertxAccessAnnotationChecker.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/auth/VertxAccessAnnotationChecker.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/auth/VertxCsrfChecker.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/auth/VertxCsrfChecker.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/auth/VertxCsrfChecker.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/auth/VertxCsrfChecker.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/auth/VertxVaadinConnectAccessChecker.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/auth/VertxVaadinConnectAccessChecker.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/auth/VertxVaadinConnectAccessChecker.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/connect/auth/VertxVaadinConnectAccessChecker.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/devserver/VertxDevModeHandlerManager.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/devserver/VertxDevModeHandlerManager.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/devserver/VertxDevModeHandlerManager.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/devserver/VertxDevModeHandlerManager.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/ShareableSockJsSocket.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/ShareableSockJsSocket.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/ShareableSockJsSocket.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/ShareableSockJsSocket.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/SockJSPushHandler.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/SockJSPushHandler.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/SockJSPushHandler.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/SockJSPushHandler.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/VertxVaadinLiveReload.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/VertxVaadinLiveReload.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/VertxVaadinLiveReload.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/vaadin/sockjs/communication/VertxVaadinLiveReload.java diff --git a/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/web/ExtendedSession.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/ExtendedSession.java similarity index 100% rename from vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/web/ExtendedSession.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/ExtendedSession.java diff --git a/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/web/ExtendedSessionImpl.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/ExtendedSessionImpl.java similarity index 100% rename from vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/web/ExtendedSessionImpl.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/ExtendedSessionImpl.java diff --git a/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/web/serialization/SerializableHolder.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/serialization/SerializableHolder.java similarity index 100% rename from vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/web/serialization/SerializableHolder.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/serialization/SerializableHolder.java diff --git a/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/web/serialization/SerializationSupport.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/serialization/SerializationSupport.java similarity index 100% rename from vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/web/serialization/SerializationSupport.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/serialization/SerializationSupport.java diff --git a/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/web/sstore/ExtendedLocalSessionStore.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/sstore/ExtendedLocalSessionStore.java similarity index 100% rename from vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/web/sstore/ExtendedLocalSessionStore.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/sstore/ExtendedLocalSessionStore.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/sstore/ExtendedLocalSessionStoreImpl.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/sstore/ExtendedLocalSessionStoreImpl.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/sstore/ExtendedLocalSessionStoreImpl.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/sstore/ExtendedLocalSessionStoreImpl.java diff --git a/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/web/sstore/ExtendedSessionStore.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/sstore/ExtendedSessionStore.java similarity index 100% rename from vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/web/sstore/ExtendedSessionStore.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/sstore/ExtendedSessionStore.java diff --git a/vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/web/sstore/NearCacheSessionStore.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/sstore/NearCacheSessionStore.java similarity index 100% rename from vertx-vaadin-8-parent/vertx-vaadin8/src/main/java/com/github/mcollovati/vertx/web/sstore/NearCacheSessionStore.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/sstore/NearCacheSessionStore.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/sstore/NearCacheSessionStoreImpl.java b/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/sstore/NearCacheSessionStoreImpl.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/sstore/NearCacheSessionStoreImpl.java rename to vertx-vaadin-flow/src/main/java/com/github/mcollovati/vertx/web/sstore/NearCacheSessionStoreImpl.java diff --git a/vertx-vaadin-8-parent/vertx-vaadin8/src/main/resources/com/github/mcollovati/vertx/vaadin/version.properties b/vertx-vaadin-flow/src/main/resources/com/github/mcollovati/vertx/vaadin/version.properties similarity index 100% rename from vertx-vaadin-8-parent/vertx-vaadin8/src/main/resources/com/github/mcollovati/vertx/vaadin/version.properties rename to vertx-vaadin-flow/src/main/resources/com/github/mcollovati/vertx/vaadin/version.properties diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/failures/lookup/FakeLookupInitializer.java b/vertx-vaadin-flow/src/test/java/com/github/mcollovati/failures/lookup/FakeLookupInitializer.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/failures/lookup/FakeLookupInitializer.java rename to vertx-vaadin-flow/src/test/java/com/github/mcollovati/failures/lookup/FakeLookupInitializer.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/failures/lookup/FakeLookupInitializer2.java b/vertx-vaadin-flow/src/test/java/com/github/mcollovati/failures/lookup/FakeLookupInitializer2.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/failures/lookup/FakeLookupInitializer2.java rename to vertx-vaadin-flow/src/test/java/com/github/mcollovati/failures/lookup/FakeLookupInitializer2.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/support/HillaWorkAroundUT.java b/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/support/HillaWorkAroundUT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/support/HillaWorkAroundUT.java rename to vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/support/HillaWorkAroundUT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/support/VaadinPatchesTest.java b/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/support/VaadinPatchesTest.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/support/VaadinPatchesTest.java rename to vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/support/VaadinPatchesTest.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/utils/ClassGraphTest.java b/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/utils/ClassGraphTest.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/utils/ClassGraphTest.java rename to vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/utils/ClassGraphTest.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/utils/MockDeploymentConfiguration.java b/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/utils/MockDeploymentConfiguration.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/utils/MockDeploymentConfiguration.java rename to vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/utils/MockDeploymentConfiguration.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/utils/MockServiceSessionSetup.java b/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/utils/MockServiceSessionSetup.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/utils/MockServiceSessionSetup.java rename to vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/utils/MockServiceSessionSetup.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/utils/MockVaadinContext.java b/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/utils/MockVaadinContext.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/utils/MockVaadinContext.java rename to vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/utils/MockVaadinContext.java diff --git a/vertx-vaadin-8-parent/vertx-vaadin8/src/test/java/com/github/mcollovati/vertx/utils/RandomStringGenerator.java b/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/utils/RandomStringGenerator.java similarity index 100% rename from vertx-vaadin-8-parent/vertx-vaadin8/src/test/java/com/github/mcollovati/vertx/utils/RandomStringGenerator.java rename to vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/utils/RandomStringGenerator.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/SessionStoreAdapterIT.java b/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/SessionStoreAdapterIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/SessionStoreAdapterIT.java rename to vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/SessionStoreAdapterIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/StartupContextTest.java b/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/StartupContextTest.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/StartupContextTest.java rename to vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/StartupContextTest.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/VaadinVerticleUT.java b/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/VaadinVerticleUT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/VaadinVerticleUT.java rename to vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/VaadinVerticleUT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/VertxStaticFileServerTest.java b/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/VertxStaticFileServerTest.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/VertxStaticFileServerTest.java rename to vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/VertxStaticFileServerTest.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/VertxVaadinContextTest.java b/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/VertxVaadinContextTest.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/VertxVaadinContextTest.java rename to vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/VertxVaadinContextTest.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/VertxVaadinRequestUT.java b/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/VertxVaadinRequestUT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/VertxVaadinRequestUT.java rename to vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/VertxVaadinRequestUT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/VertxVaadinResponseUT.java b/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/VertxVaadinResponseUT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/VertxVaadinResponseUT.java rename to vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/VertxVaadinResponseUT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/VertxVaadinServiceUT.java b/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/VertxVaadinServiceUT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/VertxVaadinServiceUT.java rename to vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/VertxVaadinServiceUT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/VertxWrappedSessionUT.java b/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/VertxWrappedSessionUT.java similarity index 99% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/VertxWrappedSessionUT.java rename to vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/VertxWrappedSessionUT.java index 0afd9c6e..3267969e 100644 --- a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/VertxWrappedSessionUT.java +++ b/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/VertxWrappedSessionUT.java @@ -132,7 +132,7 @@ private void assertHttpSessionBindingEvent(String attrName, HttpSessionBindingEv private void assertHttpSessionBindingEvent(String attrName, Object value, HttpSessionBindingEvent sessionBindingEvent) { assertThat(sessionBindingEvent.getSession()) .isInstanceOf(VertxHttpSession.class) - .extracting("delegate").contains(vertxWrappedSession); + .extracting("delegate").isEqualTo(vertxWrappedSession); assertThat(sessionBindingEvent.getName()).isEqualTo(attrName); assertThat(sessionBindingEvent.getValue()).isEqualTo(value); } diff --git a/vertx-vaadin-8-parent/vertx-vaadin8/src/test/java/com/github/mcollovati/vertx/vaadin/VertxWrappedSessionWithClusteredSessionStoreUT.java b/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/VertxWrappedSessionWithClusteredSessionStoreUT.java similarity index 100% rename from vertx-vaadin-8-parent/vertx-vaadin8/src/test/java/com/github/mcollovati/vertx/vaadin/VertxWrappedSessionWithClusteredSessionStoreUT.java rename to vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/VertxWrappedSessionWithClusteredSessionStoreUT.java diff --git a/vertx-vaadin-8-parent/vertx-vaadin8/src/test/java/com/github/mcollovati/vertx/vaadin/VertxWrappedSessionWithLocalSessionStoreUT.java b/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/VertxWrappedSessionWithLocalSessionStoreUT.java similarity index 100% rename from vertx-vaadin-8-parent/vertx-vaadin8/src/test/java/com/github/mcollovati/vertx/vaadin/VertxWrappedSessionWithLocalSessionStoreUT.java rename to vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/VertxWrappedSessionWithLocalSessionStoreUT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/VertxVaadinConnectEndpointServiceTest.java b/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/VertxVaadinConnectEndpointServiceTest.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/VertxVaadinConnectEndpointServiceTest.java rename to vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/VertxVaadinConnectEndpointServiceTest.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/auth/VertxAccessAnnotationCheckerTest.java b/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/auth/VertxAccessAnnotationCheckerTest.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/auth/VertxAccessAnnotationCheckerTest.java rename to vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/auth/VertxAccessAnnotationCheckerTest.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/auth/VertxConnectAccessCheckerTest.java b/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/auth/VertxConnectAccessCheckerTest.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/auth/VertxConnectAccessCheckerTest.java rename to vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/auth/VertxConnectAccessCheckerTest.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/generator/endpoints/superclassmethods/CrudEndpoint.java b/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/generator/endpoints/superclassmethods/CrudEndpoint.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/generator/endpoints/superclassmethods/CrudEndpoint.java rename to vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/generator/endpoints/superclassmethods/CrudEndpoint.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/generator/endpoints/superclassmethods/NonEndpoint.java b/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/generator/endpoints/superclassmethods/NonEndpoint.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/generator/endpoints/superclassmethods/NonEndpoint.java rename to vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/generator/endpoints/superclassmethods/NonEndpoint.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/generator/endpoints/superclassmethods/NonEndpointImpl.java b/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/generator/endpoints/superclassmethods/NonEndpointImpl.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/generator/endpoints/superclassmethods/NonEndpointImpl.java rename to vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/generator/endpoints/superclassmethods/NonEndpointImpl.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/generator/endpoints/superclassmethods/PagedData.java b/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/generator/endpoints/superclassmethods/PagedData.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/generator/endpoints/superclassmethods/PagedData.java rename to vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/generator/endpoints/superclassmethods/PagedData.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/generator/endpoints/superclassmethods/PersonEndpoint.java b/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/generator/endpoints/superclassmethods/PersonEndpoint.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/generator/endpoints/superclassmethods/PersonEndpoint.java rename to vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/generator/endpoints/superclassmethods/PersonEndpoint.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/generator/endpoints/superclassmethods/ReadOnlyEndpoint.java b/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/generator/endpoints/superclassmethods/ReadOnlyEndpoint.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/generator/endpoints/superclassmethods/ReadOnlyEndpoint.java rename to vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/generator/endpoints/superclassmethods/ReadOnlyEndpoint.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/rest/BeanWithJacksonAnnotation.java b/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/rest/BeanWithJacksonAnnotation.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/rest/BeanWithJacksonAnnotation.java rename to vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/rest/BeanWithJacksonAnnotation.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/rest/BeanWithPrivateFields.java b/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/rest/BeanWithPrivateFields.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/rest/BeanWithPrivateFields.java rename to vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/rest/BeanWithPrivateFields.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/rest/EndpointWithVertxHandlerTest.java b/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/rest/EndpointWithVertxHandlerTest.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/rest/EndpointWithVertxHandlerTest.java rename to vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/rest/EndpointWithVertxHandlerTest.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/rest/VaadinConnectEndpoints.java b/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/rest/VaadinConnectEndpoints.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/rest/VaadinConnectEndpoints.java rename to vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/rest/VaadinConnectEndpoints.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/testendpoint/BridgeMethodTestEndpoint.java b/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/testendpoint/BridgeMethodTestEndpoint.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/testendpoint/BridgeMethodTestEndpoint.java rename to vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/connect/testendpoint/BridgeMethodTestEndpoint.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/startup/testdata/AnotherTestInstantiatorFactory.java b/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/startup/testdata/AnotherTestInstantiatorFactory.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/startup/testdata/AnotherTestInstantiatorFactory.java rename to vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/startup/testdata/AnotherTestInstantiatorFactory.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/startup/testdata/OneMoreTestInstantiatorFactory.java b/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/startup/testdata/OneMoreTestInstantiatorFactory.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/startup/testdata/OneMoreTestInstantiatorFactory.java rename to vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/startup/testdata/OneMoreTestInstantiatorFactory.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/startup/testdata/TestInstantiatorFactory.java b/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/startup/testdata/TestInstantiatorFactory.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/startup/testdata/TestInstantiatorFactory.java rename to vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/startup/testdata/TestInstantiatorFactory.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/startup/testdata/TestResourceProvider.java b/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/startup/testdata/TestResourceProvider.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/startup/testdata/TestResourceProvider.java rename to vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/vaadin/startup/testdata/TestResourceProvider.java diff --git a/vertx-vaadin-8-parent/vertx-vaadin8/src/test/java/com/github/mcollovati/vertx/web/sstore/ExtendedSessionUT.java b/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/web/sstore/ExtendedSessionUT.java similarity index 100% rename from vertx-vaadin-8-parent/vertx-vaadin8/src/test/java/com/github/mcollovati/vertx/web/sstore/ExtendedSessionUT.java rename to vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/web/sstore/ExtendedSessionUT.java diff --git a/vertx-vaadin-8-parent/vertx-vaadin8/src/test/java/com/github/mcollovati/vertx/web/sstore/NearCacheSessionStoreIT.java b/vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/web/sstore/NearCacheSessionStoreIT.java similarity index 100% rename from vertx-vaadin-8-parent/vertx-vaadin8/src/test/java/com/github/mcollovati/vertx/web/sstore/NearCacheSessionStoreIT.java rename to vertx-vaadin-flow/src/test/java/com/github/mcollovati/vertx/web/sstore/NearCacheSessionStoreIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/resources/META-INF/VAADIN/config/flow-build-info.json b/vertx-vaadin-flow/src/test/resources/META-INF/VAADIN/config/flow-build-info.json similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/resources/META-INF/VAADIN/config/flow-build-info.json rename to vertx-vaadin-flow/src/test/resources/META-INF/VAADIN/config/flow-build-info.json diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/resources/META-INF/VAADIN/config/stats.json b/vertx-vaadin-flow/src/test/resources/META-INF/VAADIN/config/stats.json similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/resources/META-INF/VAADIN/config/stats.json rename to vertx-vaadin-flow/src/test/resources/META-INF/VAADIN/config/stats.json diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/resources/META-INF/VAADIN/config/stats_no_export.json b/vertx-vaadin-flow/src/test/resources/META-INF/VAADIN/config/stats_no_export.json similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/resources/META-INF/VAADIN/config/stats_no_export.json rename to vertx-vaadin-flow/src/test/resources/META-INF/VAADIN/config/stats_no_export.json diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/resources/META-INF/VAADIN/webapp/index.html b/vertx-vaadin-flow/src/test/resources/META-INF/VAADIN/webapp/index.html similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/resources/META-INF/VAADIN/webapp/index.html rename to vertx-vaadin-flow/src/test/resources/META-INF/VAADIN/webapp/index.html diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/resources/META-INF/VAADIN/webapp/manifest.json b/vertx-vaadin-flow/src/test/resources/META-INF/VAADIN/webapp/manifest.json similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/resources/META-INF/VAADIN/webapp/manifest.json rename to vertx-vaadin-flow/src/test/resources/META-INF/VAADIN/webapp/manifest.json diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/resources/META-INF/VAADIN/webapp/sw.js b/vertx-vaadin-flow/src/test/resources/META-INF/VAADIN/webapp/sw.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/resources/META-INF/VAADIN/webapp/sw.js rename to vertx-vaadin-flow/src/test/resources/META-INF/VAADIN/webapp/sw.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/resources/META-INF/resources/VAADIN/static/client/compile.properties b/vertx-vaadin-flow/src/test/resources/META-INF/resources/VAADIN/static/client/compile.properties similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/resources/META-INF/resources/VAADIN/static/client/compile.properties rename to vertx-vaadin-flow/src/test/resources/META-INF/resources/VAADIN/static/client/compile.properties diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/resources/META-INF/resources/icons/icon.png b/vertx-vaadin-flow/src/test/resources/META-INF/resources/icons/icon.png similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/resources/META-INF/resources/icons/icon.png rename to vertx-vaadin-flow/src/test/resources/META-INF/resources/icons/icon.png diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/resources/META-INF/services/com.vaadin.flow.di.InstantiatorFactory b/vertx-vaadin-flow/src/test/resources/META-INF/services/com.vaadin.flow.di.InstantiatorFactory similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/resources/META-INF/services/com.vaadin.flow.di.InstantiatorFactory rename to vertx-vaadin-flow/src/test/resources/META-INF/services/com.vaadin.flow.di.InstantiatorFactory diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/resources/logback-test.xml b/vertx-vaadin-flow/src/test/resources/logback-test.xml similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-flow/src/test/resources/logback-test.xml rename to vertx-vaadin-flow/src/test/resources/logback-test.xml diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/deployment/pom.xml b/vertx-vaadin-quarkus-extension/deployment/pom.xml similarity index 98% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/deployment/pom.xml rename to vertx-vaadin-quarkus-extension/deployment/pom.xml index a1131ead..13170e98 100644 --- a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/deployment/pom.xml +++ b/vertx-vaadin-quarkus-extension/deployment/pom.xml @@ -6,7 +6,7 @@ com.github.mcollovati.vertx vertx-vaadin-quarkus-extension-parent - 23.3.5-SNAPSHOT + 23.4.0-SNAPSHOT vertx-vaadin-quarkus-extension-deployment Vertx Vaadin Extension - Deployment diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/deployment/src/main/java/com/github/mcollovati/vertx/vaadin/extension/deployment/VertxVaadinExtensionProcessor.java b/vertx-vaadin-quarkus-extension/deployment/src/main/java/com/github/mcollovati/vertx/vaadin/extension/deployment/VertxVaadinExtensionProcessor.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/deployment/src/main/java/com/github/mcollovati/vertx/vaadin/extension/deployment/VertxVaadinExtensionProcessor.java rename to vertx-vaadin-quarkus-extension/deployment/src/main/java/com/github/mcollovati/vertx/vaadin/extension/deployment/VertxVaadinExtensionProcessor.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/pom.xml b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/pom.xml similarity index 98% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/pom.xml rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/pom.xml index 137d6b0c..c4f547fb 100644 --- a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/pom.xml +++ b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/pom.xml @@ -6,7 +6,7 @@ com.github.mcollovati.vertx vertx-vaadin-quarkus-integration-tests - 23.3.5-SNAPSHOT + 23.4.0-SNAPSHOT vertx-vaadin-quarkus-extension-common-test-code Vertx Vaadin Extension - Common code for dev and prod diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/AppShellConfig.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/AppShellConfig.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/AppShellConfig.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/AppShellConfig.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/Counter.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/Counter.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/Counter.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/Counter.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/HelloProvider.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/HelloProvider.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/HelloProvider.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/HelloProvider.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/SmokeTestView.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/SmokeTestView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/SmokeTestView.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/SmokeTestView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/TestVerticle.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/TestVerticle.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/TestVerticle.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/TestVerticle.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/TestVerticleDeployer.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/TestVerticleDeployer.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/TestVerticleDeployer.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/TestVerticleDeployer.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/addons/AddonsView.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/addons/AddonsView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/addons/AddonsView.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/addons/AddonsView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/push/PushUpdateDivView.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/push/PushUpdateDivView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/push/PushUpdateDivView.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/push/PushUpdateDivView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/regression/RemoveOldContentView.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/regression/RemoveOldContentView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/regression/RemoveOldContentView.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/regression/RemoveOldContentView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/AbstractCountedBean.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/AbstractCountedBean.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/AbstractCountedBean.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/AbstractCountedBean.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/AbstractCountedView.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/AbstractCountedView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/AbstractCountedView.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/AbstractCountedView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/ApartBean.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/ApartBean.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/ApartBean.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/ApartBean.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/AssignedBean.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/AssignedBean.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/AssignedBean.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/AssignedBean.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/BeanNoOwner.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/BeanNoOwner.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/BeanNoOwner.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/BeanNoOwner.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/ChildNoOwnerView.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/ChildNoOwnerView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/ChildNoOwnerView.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/ChildNoOwnerView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/CountedPerUI.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/CountedPerUI.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/CountedPerUI.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/CountedPerUI.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/CustomException.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/CustomException.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/CustomException.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/CustomException.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/DetailApartView.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/DetailApartView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/DetailApartView.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/DetailApartView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/DetailAssignedView.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/DetailAssignedView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/DetailAssignedView.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/DetailAssignedView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/ErrorHandlerView.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/ErrorHandlerView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/ErrorHandlerView.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/ErrorHandlerView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/ErrorParentView.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/ErrorParentView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/ErrorParentView.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/ErrorParentView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/ErrorView.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/ErrorView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/ErrorView.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/ErrorView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/EventView.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/EventView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/EventView.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/EventView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/InvalidView.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/InvalidView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/InvalidView.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/InvalidView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/MainLayout.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/MainLayout.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/MainLayout.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/MainLayout.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/MasterView.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/MasterView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/MasterView.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/MasterView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/ParentNoOwnerView.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/ParentNoOwnerView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/ParentNoOwnerView.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/ParentNoOwnerView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/PostponeView.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/PostponeView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/PostponeView.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/PostponeView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/PreserveOnRefreshBean.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/PreserveOnRefreshBean.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/PreserveOnRefreshBean.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/PreserveOnRefreshBean.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/PreserveOnRefreshView.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/PreserveOnRefreshView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/PreserveOnRefreshView.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/PreserveOnRefreshView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/RerouteView.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/RerouteView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/RerouteView.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/RerouteView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/RootView.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/RootView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/RootView.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/routecontext/RootView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/service/BootstrapCustomizeView.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/service/BootstrapCustomizeView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/service/BootstrapCustomizeView.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/service/BootstrapCustomizeView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/service/BootstrapCustomizer.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/service/BootstrapCustomizer.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/service/BootstrapCustomizer.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/service/BootstrapCustomizer.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/service/EventObserver.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/service/EventObserver.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/service/EventObserver.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/service/EventObserver.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/service/ServiceBean.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/service/ServiceBean.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/service/ServiceBean.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/service/ServiceBean.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/service/ServiceView.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/service/ServiceView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/service/ServiceView.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/service/ServiceView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/service/TestErrorHandler.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/service/TestErrorHandler.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/service/TestErrorHandler.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/service/TestErrorHandler.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/service/TestSystemMessagesProvider.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/service/TestSystemMessagesProvider.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/service/TestSystemMessagesProvider.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/service/TestSystemMessagesProvider.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/sessioncontext/SessionContextView.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/sessioncontext/SessionContextView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/sessioncontext/SessionContextView.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/sessioncontext/SessionContextView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/uicontext/UIContextRootView.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/uicontext/UIContextRootView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/uicontext/UIContextRootView.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/uicontext/UIContextRootView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/uicontext/UINormalScopedBeanView.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/uicontext/UINormalScopedBeanView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/uicontext/UINormalScopedBeanView.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/uicontext/UINormalScopedBeanView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/uicontext/UIScopeInjecterView.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/uicontext/UIScopeInjecterView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/uicontext/UIScopeInjecterView.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/uicontext/UIScopeInjecterView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/uicontext/UIScopedBean.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/uicontext/UIScopedBean.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/uicontext/UIScopedBean.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/uicontext/UIScopedBean.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/uicontext/UIScopedLabel.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/uicontext/UIScopedLabel.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/uicontext/UIScopedLabel.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/uicontext/UIScopedLabel.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/uicontext/UIScopedView.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/uicontext/UIScopedView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/uicontext/UIScopedView.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/uicontext/UIScopedView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/uievents/NavigationObserver.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/uievents/NavigationObserver.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/uievents/NavigationObserver.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/uievents/NavigationObserver.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/uievents/UIEventsView.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/uievents/UIEventsView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/uievents/UIEventsView.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/java/com/github/mcollovati/vertx/vaadin/quarkus/it/uievents/UIEventsView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/resources/application.properties b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/resources/application.properties similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/resources/application.properties rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/main/resources/application.properties diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/AbstractCdiIT.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/AbstractCdiIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/AbstractCdiIT.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/AbstractCdiIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/AbstractChromeIT.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/AbstractChromeIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/AbstractChromeIT.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/AbstractChromeIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/AddonsIT.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/AddonsIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/AddonsIT.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/AddonsIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/PushSmokeIT.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/PushSmokeIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/PushSmokeIT.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/PushSmokeIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/RemoveOldContentIT.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/RemoveOldContentIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/RemoveOldContentIT.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/RemoveOldContentIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/RouteContextIT.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/RouteContextIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/RouteContextIT.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/RouteContextIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/ScreenshotsOnFailureExtension.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/ScreenshotsOnFailureExtension.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/ScreenshotsOnFailureExtension.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/ScreenshotsOnFailureExtension.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/ServiceIT.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/ServiceIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/ServiceIT.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/ServiceIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/SessionContextCloseIT.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/SessionContextCloseIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/SessionContextCloseIT.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/SessionContextCloseIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/SessionContextIT.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/SessionContextIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/SessionContextIT.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/SessionContextIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/SmokeTestIT.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/SmokeTestIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/SmokeTestIT.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/SmokeTestIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/UIContextIT.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/UIContextIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/UIContextIT.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/UIContextIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/UIEventsIT.java b/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/UIEventsIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/UIEventsIT.java rename to vertx-vaadin-quarkus-extension/integration-tests/common-test-code/src/test/java/com/github/mcollovati/vertx/vaadin/quarkus/it/UIEventsIT.java diff --git a/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/index.ts b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/index.ts new file mode 100644 index 00000000..c20aa03f --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/index.ts @@ -0,0 +1,32 @@ +/****************************************************************************** + * This file is auto-generated by Vaadin. + * If you want to customize the entry point, you can copy this file or create + * your own `index.ts` in your frontend directory. + * By default, the `index.ts` file should be in `./frontend/` folder. + * + * NOTE: + * - You need to restart the dev-server after adding the new `index.ts` file. + * After that, all modifications to `index.ts` are recompiled automatically. + * - `index.js` is also supported if you don't want to use TypeScript. + ******************************************************************************/ + +// import Vaadin client-router to handle client-side and server-side navigation +import { Router } from '@vaadin/router'; + +// import Flow module to enable navigation to Vaadin server-side views +import { Flow } from 'Frontend/generated/jar-resources/Flow.js'; + +const { serverSideRoutes } = new Flow({ + imports: () => import('../../target/frontend/generated-flow-imports.js') +}); + +const routes = [ + // for client-side, place routes below (more info https://vaadin.com/docs/v15/flow/typescript/creating-routes.html) + + // for server-side, the next magic line sends all unmatched routes: + ...serverSideRoutes // IMPORTANT: this must be the last entry in the array +]; + +// Vaadin router needs an outlet in the index.html page to display views +const router = new Router(document.querySelector('#outlet')); +router.setRoutes(routes); diff --git a/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/Flow.d.ts b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/Flow.d.ts new file mode 100644 index 00000000..efbbbe84 --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/Flow.d.ts @@ -0,0 +1,74 @@ +export interface FlowConfig { + imports?: () => void; +} +interface AppConfig { + productionMode: boolean; + appId: string; + uidl: any; + clientRouting: boolean; +} +interface AppInitResponse { + appConfig: AppConfig; + pushScript?: string; +} +interface Router { + render: (ctx: NavigationParameters, shouldUpdateHistory: boolean) => Promise; +} +interface HTMLRouterContainer extends HTMLElement { + onBeforeEnter?: (ctx: NavigationParameters, cmd: PreventAndRedirectCommands, router: Router) => void | Promise; + onBeforeLeave?: (ctx: NavigationParameters, cmd: PreventCommands, router: Router) => void | Promise; + serverConnected?: (cancel: boolean, url?: NavigationParameters) => void; +} +interface FlowRoute { + action: (params: NavigationParameters) => Promise; + path: string; +} +export interface NavigationParameters { + pathname: string; + search: string; +} +export interface PreventCommands { + prevent: () => any; +} +export interface PreventAndRedirectCommands extends PreventCommands { + redirect: (route: string) => any; +} +/** + * Client API for flow UI operations. + */ +export declare class Flow { + config: FlowConfig; + response?: AppInitResponse; + pathname: string; + container: HTMLRouterContainer; + private isActive; + private baseRegex; + private appShellTitle; + constructor(config?: FlowConfig); + /** + * Return a `route` object for vaadin-router in an one-element array. + * + * The `FlowRoute` object `path` property handles any route, + * and the `action` returns the flow container without updating the content, + * delaying the actual Flow server call to the `onBeforeEnter` phase. + * + * This is a specific API for its use with `vaadin-router`. + */ + get serverSideRoutes(): [FlowRoute]; + loadingStarted(): void; + loadingFinished(): void; + private get action(); + private flowLeave; + private flowNavigate; + private getFlowRoutePath; + private getFlowRouteQuery; + private flowInit; + private loadScript; + private injectAppIdScript; + private flowInitClient; + private flowInitUi; + private addConnectionIndicator; + private offlineStubAction; + private isFlowClientLoaded; +} +export {}; diff --git a/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/Flow.js b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/Flow.js new file mode 100644 index 00000000..66ab4ae1 --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/Flow.js @@ -0,0 +1,324 @@ +import { ConnectionIndicator, ConnectionState } from '@vaadin/common-frontend'; +class FlowUiInitializationError extends Error { +} +// flow uses body for keeping references +const flowRoot = window.document.body; +const $wnd = window; +/** + * Client API for flow UI operations. + */ +export class Flow { + constructor(config) { + this.response = undefined; + this.pathname = ''; + // flag used to inform Testbench whether a server route is in progress + this.isActive = false; + this.baseRegex = /^\//; + flowRoot.$ = flowRoot.$ || []; + this.config = config || {}; + // TB checks for the existence of window.Vaadin.Flow in order + // to consider that TB needs to wait for `initFlow()`. + $wnd.Vaadin = $wnd.Vaadin || {}; + $wnd.Vaadin.Flow = $wnd.Vaadin.Flow || {}; + $wnd.Vaadin.Flow.clients = { + TypeScript: { + isActive: () => this.isActive + } + }; + // Regular expression used to remove the app-context + const elm = document.head.querySelector('base'); + this.baseRegex = new RegExp(`^${ + // IE11 does not support document.baseURI + (document.baseURI || (elm && elm.href) || '/').replace(/^https?:\/\/[^/]+/i, '')}`); + this.appShellTitle = document.title; + // Put a vaadin-connection-indicator in the dom + this.addConnectionIndicator(); + } + /** + * Return a `route` object for vaadin-router in an one-element array. + * + * The `FlowRoute` object `path` property handles any route, + * and the `action` returns the flow container without updating the content, + * delaying the actual Flow server call to the `onBeforeEnter` phase. + * + * This is a specific API for its use with `vaadin-router`. + */ + get serverSideRoutes() { + return [ + { + path: '(.*)', + action: this.action + } + ]; + } + loadingStarted() { + // Make Testbench know that server request is in progress + this.isActive = true; + $wnd.Vaadin.connectionState.loadingStarted(); + } + loadingFinished() { + // Make Testbench know that server request has finished + this.isActive = false; + $wnd.Vaadin.connectionState.loadingFinished(); + } + get action() { + // Return a function which is bound to the flow instance, thus we can use + // the syntax `...serverSideRoutes` in vaadin-router. + return async (params) => { + // Store last action pathname so as we can check it in events + this.pathname = params.pathname; + if ($wnd.Vaadin.connectionState.online) { + try { + await this.flowInit(); + } + catch (error) { + if (error instanceof FlowUiInitializationError) { + // error initializing Flow: assume connection lost + $wnd.Vaadin.connectionState.state = ConnectionState.CONNECTION_LOST; + return this.offlineStubAction(); + } + else { + throw error; + } + } + } + else { + // insert an offline stub + return this.offlineStubAction(); + } + // When an action happens, navigation will be resolved `onBeforeEnter` + this.container.onBeforeEnter = (ctx, cmd) => this.flowNavigate(ctx, cmd); + // For covering the 'server -> client' use case + this.container.onBeforeLeave = (ctx, cmd) => this.flowLeave(ctx, cmd); + return this.container; + }; + } + // Send a remote call to `JavaScriptBootstrapUI` to check + // whether navigation has to be cancelled. + async flowLeave(ctx, cmd) { + // server -> server, viewing offline stub, or browser is offline + const { connectionState } = $wnd.Vaadin; + if (this.pathname === ctx.pathname || !this.isFlowClientLoaded() || connectionState.offline) { + return Promise.resolve({}); + } + // 'server -> client' + return new Promise((resolve) => { + this.loadingStarted(); + // The callback to run from server side to cancel navigation + this.container.serverConnected = (cancel) => { + resolve(cmd && cancel ? cmd.prevent() : {}); + this.loadingFinished(); + }; + // Call server side to check whether we can leave the view + flowRoot.$server.leaveNavigation(this.getFlowRoutePath(ctx), this.getFlowRouteQuery(ctx)); + }); + } + // Send the remote call to `JavaScriptBootstrapUI` to render the flow + // route specified by the context + async flowNavigate(ctx, cmd) { + if (this.response) { + return new Promise((resolve) => { + this.loadingStarted(); + // The callback to run from server side once the view is ready + this.container.serverConnected = (cancel, redirectContext) => { + if (cmd && cancel) { + resolve(cmd.prevent()); + } + else if (cmd && cmd.redirect && redirectContext) { + resolve(cmd.redirect(redirectContext.pathname)); + } + else { + this.container.style.display = ''; + resolve(this.container); + } + this.loadingFinished(); + }; + // Call server side to navigate to the given route + flowRoot.$server.connectClient(this.container.localName, this.container.id, this.getFlowRoutePath(ctx), this.getFlowRouteQuery(ctx), this.appShellTitle, history.state); + }); + } + else { + // No server response => offline or erroneous connection + return Promise.resolve(this.container); + } + } + getFlowRoutePath(context) { + return decodeURIComponent(context.pathname).replace(this.baseRegex, ''); + } + getFlowRouteQuery(context) { + return (context.search && context.search.substring(1)) || ''; + } + // import flow client modules and initialize UI in server side. + async flowInit(serverSideRouting = false) { + // Do not start flow twice + if (!this.isFlowClientLoaded()) { + // show flow progress indicator + this.loadingStarted(); + // Initialize server side UI + this.response = await this.flowInitUi(serverSideRouting); + // Enable or disable server side routing + this.response.appConfig.clientRouting = !serverSideRouting; + const { pushScript, appConfig } = this.response; + if (typeof pushScript === 'string') { + await this.loadScript(pushScript); + } + const { appId } = appConfig; + // Load bootstrap script with server side parameters + const bootstrapMod = await import('./FlowBootstrap'); + await bootstrapMod.init(this.response); + // Load custom modules defined by user + if (typeof this.config.imports === 'function') { + this.injectAppIdScript(appId); + await this.config.imports(); + } + // Load flow-client module + const clientMod = await import('./FlowClient'); + await this.flowInitClient(clientMod); + if (!serverSideRouting) { + // we use a custom tag for the flow app container + const tag = `flow-container-${appId.toLowerCase()}`; + this.container = document.createElement(tag); + flowRoot.$[appId] = this.container; + this.container.id = appId; + } + // hide flow progress indicator + this.loadingFinished(); + } + // It might be that components created from server expect that their content has been rendered. + // Appending eagerly the container we avoid these kind of errors. + // Note that the client router will move this container to the outlet if the navigation succeed + if (this.container && !this.container.isConnected) { + this.container.style.display = 'none'; + document.body.appendChild(this.container); + } + return this.response; + } + async loadScript(url) { + return new Promise((resolve, reject) => { + const script = document.createElement('script'); + script.onload = () => resolve(); + script.onerror = reject; + script.src = url; + document.body.appendChild(script); + }); + } + injectAppIdScript(appId) { + const appIdWithoutHashCode = appId.substring(0, appId.lastIndexOf('-')); + const scriptAppId = document.createElement('script'); + scriptAppId.type = 'module'; + scriptAppId.setAttribute('data-app-id', appIdWithoutHashCode); + document.body.append(scriptAppId); + } + // After the flow-client javascript module has been loaded, this initializes flow UI + // in the browser. + async flowInitClient(clientMod) { + clientMod.init(); + // client init is async, we need to loop until initialized + return new Promise((resolve) => { + const intervalId = setInterval(() => { + // client `isActive() == true` while initializing or processing + const initializing = Object.keys($wnd.Vaadin.Flow.clients) + .filter((key) => key !== 'TypeScript') + .reduce((prev, id) => prev || $wnd.Vaadin.Flow.clients[id].isActive(), false); + if (!initializing) { + clearInterval(intervalId); + resolve(); + } + }, 5); + }); + } + // Returns the `appConfig` object + async flowInitUi(serverSideRouting) { + // appConfig was sent in the index.html request + const initial = $wnd.Vaadin && $wnd.Vaadin.TypeScript && $wnd.Vaadin.TypeScript.initial; + if (initial) { + $wnd.Vaadin.TypeScript.initial = undefined; + return Promise.resolve(initial); + } + // send a request to the `JavaScriptBootstrapHandler` + return new Promise((resolve, reject) => { + const xhr = new XMLHttpRequest(); + const httpRequest = xhr; + const serverRoutingParam = serverSideRouting ? '&serverSideRouting' : ''; + const requestPath = `?v-r=init&location=${encodeURIComponent(this.getFlowRoutePath(location))}&query=${encodeURIComponent(this.getFlowRouteQuery(location))}${serverRoutingParam}`; + httpRequest.open('GET', requestPath); + httpRequest.onerror = () => reject(new FlowUiInitializationError(`Invalid server response when initializing Flow UI. + ${httpRequest.status} + ${httpRequest.responseText}`)); + httpRequest.onload = () => { + const contentType = httpRequest.getResponseHeader('content-type'); + if (contentType && contentType.indexOf('application/json') !== -1) { + resolve(JSON.parse(httpRequest.responseText)); + } + else { + httpRequest.onerror(); + } + }; + httpRequest.send(); + }); + } + // Create shared connection state store and connection indicator + addConnectionIndicator() { + // add connection indicator to DOM + ConnectionIndicator.create(); + // Listen to browser online/offline events and update the loading indicator accordingly. + // Note: if flow-client is loaded, it instead handles the state transitions. + $wnd.addEventListener('online', () => { + if (!this.isFlowClientLoaded()) { + // Send an HTTP HEAD request for sw.js to verify server reachability. + // We do not expect sw.js to be cached, so the request goes to the + // server rather than being served from local cache. + // Require network-level failure to revert the state to CONNECTION_LOST + // (HTTP error code is ok since it still verifies server's presence). + $wnd.Vaadin.connectionState.state = ConnectionState.RECONNECTING; + const http = new XMLHttpRequest(); + http.open('HEAD', 'sw.js'); + http.onload = () => { + $wnd.Vaadin.connectionState.state = ConnectionState.CONNECTED; + }; + http.onerror = () => { + $wnd.Vaadin.connectionState.state = ConnectionState.CONNECTION_LOST; + }; + // Postpone request to reduce potential net::ERR_INTERNET_DISCONNECTED + // errors that sometimes occurs even if browser says it is online + setTimeout(() => http.send(), 50); + } + }); + $wnd.addEventListener('offline', () => { + if (!this.isFlowClientLoaded()) { + $wnd.Vaadin.connectionState.state = ConnectionState.CONNECTION_LOST; + } + }); + } + async offlineStubAction() { + const offlineStub = document.createElement('iframe'); + const offlineStubPath = './offline-stub.html'; + offlineStub.setAttribute('src', offlineStubPath); + offlineStub.setAttribute('style', 'width: 100%; height: 100%; border: 0'); + this.response = undefined; + let onlineListener; + const removeOfflineStubAndOnlineListener = () => { + if (onlineListener !== undefined) { + $wnd.Vaadin.connectionState.removeStateChangeListener(onlineListener); + onlineListener = undefined; + } + }; + offlineStub.onBeforeEnter = (ctx, _cmds, router) => { + onlineListener = () => { + if ($wnd.Vaadin.connectionState.online) { + removeOfflineStubAndOnlineListener(); + router.render(ctx, false); + } + }; + $wnd.Vaadin.connectionState.addStateChangeListener(onlineListener); + }; + offlineStub.onBeforeLeave = (_ctx, _cmds, _router) => { + removeOfflineStubAndOnlineListener(); + }; + return offlineStub; + } + isFlowClientLoaded() { + return this.response !== undefined; + } +} +//# sourceMappingURL=Flow.js.map \ No newline at end of file diff --git a/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/Flow.js.map b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/Flow.js.map new file mode 100644 index 00000000..bbd8ef2a --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/Flow.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Flow.js","sourceRoot":"","sources":["../../../../src/main/frontend/Flow.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n ConnectionIndicator,\n ConnectionState,\n ConnectionStateChangeListener,\n ConnectionStateStore\n} from '@vaadin/common-frontend';\n\nexport interface FlowConfig {\n imports?: () => void;\n}\n\nclass FlowUiInitializationError extends Error {}\n\ninterface AppConfig {\n productionMode: boolean;\n appId: string;\n uidl: any;\n clientRouting: boolean;\n}\n\ninterface AppInitResponse {\n appConfig: AppConfig;\n pushScript?: string;\n}\n\ninterface Router {\n render: (ctx: NavigationParameters, shouldUpdateHistory: boolean) => Promise;\n}\n\ninterface HTMLRouterContainer extends HTMLElement {\n onBeforeEnter?: (ctx: NavigationParameters, cmd: PreventAndRedirectCommands, router: Router) => void | Promise;\n onBeforeLeave?: (ctx: NavigationParameters, cmd: PreventCommands, router: Router) => void | Promise;\n serverConnected?: (cancel: boolean, url?: NavigationParameters) => void;\n}\n\ninterface FlowRoute {\n action: (params: NavigationParameters) => Promise;\n path: string;\n}\n\ninterface FlowRoot {\n $: any;\n $server: any;\n}\n\nexport interface NavigationParameters {\n pathname: string;\n search: string;\n}\n\nexport interface PreventCommands {\n prevent: () => any;\n}\n\nexport interface PreventAndRedirectCommands extends PreventCommands {\n redirect: (route: string) => any;\n}\n\n// flow uses body for keeping references\nconst flowRoot: FlowRoot = window.document.body as any;\nconst $wnd = window as any as {\n Vaadin: {\n Flow: any;\n TypeScript: any;\n connectionState: ConnectionStateStore;\n };\n} & EventTarget;\n\n/**\n * Client API for flow UI operations.\n */\nexport class Flow {\n config: FlowConfig;\n response?: AppInitResponse = undefined;\n pathname = '';\n\n container!: HTMLRouterContainer;\n\n // flag used to inform Testbench whether a server route is in progress\n private isActive = false;\n\n private baseRegex = /^\\//;\n private appShellTitle: string;\n\n constructor(config?: FlowConfig) {\n flowRoot.$ = flowRoot.$ || [];\n this.config = config || {};\n\n // TB checks for the existence of window.Vaadin.Flow in order\n // to consider that TB needs to wait for `initFlow()`.\n $wnd.Vaadin = $wnd.Vaadin || {};\n $wnd.Vaadin.Flow = $wnd.Vaadin.Flow || {};\n $wnd.Vaadin.Flow.clients = {\n TypeScript: {\n isActive: () => this.isActive\n }\n };\n\n // Regular expression used to remove the app-context\n const elm = document.head.querySelector('base');\n this.baseRegex = new RegExp(\n `^${\n // IE11 does not support document.baseURI\n (document.baseURI || (elm && elm.href) || '/').replace(/^https?:\\/\\/[^/]+/i, '')\n }`\n );\n this.appShellTitle = document.title;\n // Put a vaadin-connection-indicator in the dom\n this.addConnectionIndicator();\n }\n\n /**\n * Return a `route` object for vaadin-router in an one-element array.\n *\n * The `FlowRoute` object `path` property handles any route,\n * and the `action` returns the flow container without updating the content,\n * delaying the actual Flow server call to the `onBeforeEnter` phase.\n *\n * This is a specific API for its use with `vaadin-router`.\n */\n get serverSideRoutes(): [FlowRoute] {\n return [\n {\n path: '(.*)',\n action: this.action\n }\n ];\n }\n\n loadingStarted() {\n // Make Testbench know that server request is in progress\n this.isActive = true;\n $wnd.Vaadin.connectionState.loadingStarted();\n }\n\n loadingFinished() {\n // Make Testbench know that server request has finished\n this.isActive = false;\n $wnd.Vaadin.connectionState.loadingFinished();\n }\n\n private get action(): (params: NavigationParameters) => Promise {\n // Return a function which is bound to the flow instance, thus we can use\n // the syntax `...serverSideRoutes` in vaadin-router.\n return async (params: NavigationParameters) => {\n // Store last action pathname so as we can check it in events\n this.pathname = params.pathname;\n\n if ($wnd.Vaadin.connectionState.online) {\n try {\n await this.flowInit();\n } catch (error) {\n if (error instanceof FlowUiInitializationError) {\n // error initializing Flow: assume connection lost\n $wnd.Vaadin.connectionState.state = ConnectionState.CONNECTION_LOST;\n return this.offlineStubAction();\n } else {\n throw error;\n }\n }\n } else {\n // insert an offline stub\n return this.offlineStubAction();\n }\n\n // When an action happens, navigation will be resolved `onBeforeEnter`\n this.container.onBeforeEnter = (ctx, cmd) => this.flowNavigate(ctx, cmd);\n // For covering the 'server -> client' use case\n this.container.onBeforeLeave = (ctx, cmd) => this.flowLeave(ctx, cmd);\n return this.container;\n };\n }\n\n // Send a remote call to `JavaScriptBootstrapUI` to check\n // whether navigation has to be cancelled.\n private async flowLeave(ctx: NavigationParameters, cmd?: PreventCommands): Promise {\n // server -> server, viewing offline stub, or browser is offline\n const { connectionState } = $wnd.Vaadin;\n if (this.pathname === ctx.pathname || !this.isFlowClientLoaded() || connectionState.offline) {\n return Promise.resolve({});\n }\n // 'server -> client'\n return new Promise((resolve) => {\n this.loadingStarted();\n // The callback to run from server side to cancel navigation\n this.container.serverConnected = (cancel) => {\n resolve(cmd && cancel ? cmd.prevent() : {});\n this.loadingFinished();\n };\n\n // Call server side to check whether we can leave the view\n flowRoot.$server.leaveNavigation(this.getFlowRoutePath(ctx), this.getFlowRouteQuery(ctx));\n });\n }\n\n // Send the remote call to `JavaScriptBootstrapUI` to render the flow\n // route specified by the context\n private async flowNavigate(ctx: NavigationParameters, cmd?: PreventAndRedirectCommands): Promise {\n if (this.response) {\n return new Promise((resolve) => {\n this.loadingStarted();\n // The callback to run from server side once the view is ready\n this.container.serverConnected = (cancel, redirectContext?: NavigationParameters) => {\n if (cmd && cancel) {\n resolve(cmd.prevent());\n } else if (cmd && cmd.redirect && redirectContext) {\n resolve(cmd.redirect(redirectContext.pathname));\n } else {\n this.container.style.display = '';\n resolve(this.container);\n }\n this.loadingFinished();\n };\n\n // Call server side to navigate to the given route\n flowRoot.$server.connectClient(\n this.container.localName,\n this.container.id,\n this.getFlowRoutePath(ctx),\n this.getFlowRouteQuery(ctx),\n this.appShellTitle,\n history.state\n );\n });\n } else {\n // No server response => offline or erroneous connection\n return Promise.resolve(this.container);\n }\n }\n\n private getFlowRoutePath(context: NavigationParameters | Location): string {\n return decodeURIComponent(context.pathname).replace(this.baseRegex, '');\n }\n private getFlowRouteQuery(context: NavigationParameters | Location): string {\n return (context.search && context.search.substring(1)) || '';\n }\n\n // import flow client modules and initialize UI in server side.\n private async flowInit(serverSideRouting = false): Promise {\n // Do not start flow twice\n if (!this.isFlowClientLoaded()) {\n // show flow progress indicator\n this.loadingStarted();\n\n // Initialize server side UI\n this.response = await this.flowInitUi(serverSideRouting);\n\n // Enable or disable server side routing\n this.response.appConfig.clientRouting = !serverSideRouting;\n\n const { pushScript, appConfig } = this.response;\n\n if (typeof pushScript === 'string') {\n await this.loadScript(pushScript);\n }\n const { appId } = appConfig;\n\n // Load bootstrap script with server side parameters\n const bootstrapMod = await import('./FlowBootstrap');\n await bootstrapMod.init(this.response);\n\n // Load custom modules defined by user\n if (typeof this.config.imports === 'function') {\n this.injectAppIdScript(appId);\n await this.config.imports();\n }\n\n // Load flow-client module\n const clientMod = await import('./FlowClient');\n await this.flowInitClient(clientMod);\n\n if (!serverSideRouting) {\n // we use a custom tag for the flow app container\n const tag = `flow-container-${appId.toLowerCase()}`;\n this.container = document.createElement(tag);\n flowRoot.$[appId] = this.container;\n this.container.id = appId;\n }\n\n // hide flow progress indicator\n this.loadingFinished();\n }\n\n // It might be that components created from server expect that their content has been rendered.\n // Appending eagerly the container we avoid these kind of errors.\n // Note that the client router will move this container to the outlet if the navigation succeed\n if (this.container && !this.container.isConnected) {\n this.container.style.display = 'none';\n document.body.appendChild(this.container);\n }\n return this.response!;\n }\n\n private async loadScript(url: string): Promise {\n return new Promise((resolve, reject) => {\n const script = document.createElement('script');\n script.onload = () => resolve();\n script.onerror = reject;\n script.src = url;\n document.body.appendChild(script);\n });\n }\n\n private injectAppIdScript(appId: string) {\n const appIdWithoutHashCode = appId.substring(0, appId.lastIndexOf('-'));\n const scriptAppId = document.createElement('script');\n scriptAppId.type = 'module';\n scriptAppId.setAttribute('data-app-id', appIdWithoutHashCode);\n document.body.append(scriptAppId);\n }\n\n // After the flow-client javascript module has been loaded, this initializes flow UI\n // in the browser.\n private async flowInitClient(clientMod: any): Promise {\n clientMod.init();\n // client init is async, we need to loop until initialized\n return new Promise((resolve) => {\n const intervalId = setInterval(() => {\n // client `isActive() == true` while initializing or processing\n const initializing = Object.keys($wnd.Vaadin.Flow.clients)\n .filter((key) => key !== 'TypeScript')\n .reduce((prev, id) => prev || $wnd.Vaadin.Flow.clients[id].isActive(), false);\n if (!initializing) {\n clearInterval(intervalId);\n resolve();\n }\n }, 5);\n });\n }\n\n // Returns the `appConfig` object\n private async flowInitUi(serverSideRouting: boolean): Promise {\n // appConfig was sent in the index.html request\n const initial = $wnd.Vaadin && $wnd.Vaadin.TypeScript && $wnd.Vaadin.TypeScript.initial;\n if (initial) {\n $wnd.Vaadin.TypeScript.initial = undefined;\n return Promise.resolve(initial);\n }\n\n // send a request to the `JavaScriptBootstrapHandler`\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest();\n const httpRequest = xhr as any;\n const serverRoutingParam = serverSideRouting ? '&serverSideRouting' : '';\n const requestPath = `?v-r=init&location=${encodeURIComponent(\n this.getFlowRoutePath(location)\n )}&query=${encodeURIComponent(this.getFlowRouteQuery(location))}${serverRoutingParam}`;\n\n httpRequest.open('GET', requestPath);\n\n httpRequest.onerror = () =>\n reject(\n new FlowUiInitializationError(\n `Invalid server response when initializing Flow UI.\n ${httpRequest.status}\n ${httpRequest.responseText}`\n )\n );\n\n httpRequest.onload = () => {\n const contentType = httpRequest.getResponseHeader('content-type');\n if (contentType && contentType.indexOf('application/json') !== -1) {\n resolve(JSON.parse(httpRequest.responseText));\n } else {\n httpRequest.onerror();\n }\n };\n httpRequest.send();\n });\n }\n\n // Create shared connection state store and connection indicator\n private addConnectionIndicator() {\n // add connection indicator to DOM\n ConnectionIndicator.create();\n\n // Listen to browser online/offline events and update the loading indicator accordingly.\n // Note: if flow-client is loaded, it instead handles the state transitions.\n $wnd.addEventListener('online', () => {\n if (!this.isFlowClientLoaded()) {\n // Send an HTTP HEAD request for sw.js to verify server reachability.\n // We do not expect sw.js to be cached, so the request goes to the\n // server rather than being served from local cache.\n // Require network-level failure to revert the state to CONNECTION_LOST\n // (HTTP error code is ok since it still verifies server's presence).\n $wnd.Vaadin.connectionState.state = ConnectionState.RECONNECTING;\n const http = new XMLHttpRequest();\n http.open('HEAD', 'sw.js');\n http.onload = () => {\n $wnd.Vaadin.connectionState.state = ConnectionState.CONNECTED;\n };\n http.onerror = () => {\n $wnd.Vaadin.connectionState.state = ConnectionState.CONNECTION_LOST;\n };\n // Postpone request to reduce potential net::ERR_INTERNET_DISCONNECTED\n // errors that sometimes occurs even if browser says it is online\n setTimeout(() => http.send(), 50);\n }\n });\n $wnd.addEventListener('offline', () => {\n if (!this.isFlowClientLoaded()) {\n $wnd.Vaadin.connectionState.state = ConnectionState.CONNECTION_LOST;\n }\n });\n }\n\n private async offlineStubAction() {\n const offlineStub = document.createElement('iframe') as HTMLRouterContainer;\n const offlineStubPath = './offline-stub.html';\n offlineStub.setAttribute('src', offlineStubPath);\n offlineStub.setAttribute('style', 'width: 100%; height: 100%; border: 0');\n this.response = undefined;\n\n let onlineListener: ConnectionStateChangeListener | undefined;\n const removeOfflineStubAndOnlineListener = () => {\n if (onlineListener !== undefined) {\n $wnd.Vaadin.connectionState.removeStateChangeListener(onlineListener);\n onlineListener = undefined;\n }\n };\n\n offlineStub.onBeforeEnter = (ctx, _cmds, router) => {\n onlineListener = () => {\n if ($wnd.Vaadin.connectionState.online) {\n removeOfflineStubAndOnlineListener();\n router.render(ctx, false);\n }\n };\n $wnd.Vaadin.connectionState.addStateChangeListener(onlineListener);\n };\n offlineStub.onBeforeLeave = (_ctx, _cmds, _router) => {\n removeOfflineStubAndOnlineListener();\n };\n return offlineStub;\n }\n\n private isFlowClientLoaded(): boolean {\n return this.response !== undefined;\n }\n}\n"]} \ No newline at end of file diff --git a/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/FlowBootstrap.d.ts b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/FlowBootstrap.d.ts new file mode 100644 index 00000000..0398d576 --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/FlowBootstrap.d.ts @@ -0,0 +1 @@ +export const init: (appInitResponse: any) => void; diff --git a/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/FlowBootstrap.js b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/FlowBootstrap.js new file mode 100644 index 00000000..a8d94854 --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/FlowBootstrap.js @@ -0,0 +1,262 @@ +/* This is a copy of the regular `BootstrapHandler.js` in the flow-server + module, but with the following modifications: + - The main function is exported as an ES module for lazy initialization. + - Application configuration is passed as a parameter instead of using + replacement placeholders as in the regular bootstrapping. + - It reuses `Vaadin.Flow.clients` if exists. + - Fixed lint errors. + */ +const init = function (appInitResponse) { + window.Vaadin = window.Vaadin || {}; + window.Vaadin.Flow = window.Vaadin.Flow || {}; + + var apps = {}; + var widgetsets = {}; + + var log; + if (typeof window.console === undefined || !window.location.search.match(/[&?]debug(&|$)/)) { + /* If no console.log present, just use a no-op */ + log = function () {}; + } else if (typeof window.console.log === 'function') { + /* If it's a function, use it with apply */ + log = function () { + window.console.log.apply(window.console, arguments); + }; + } else { + /* In IE, its a native function for which apply is not defined, but it works + without a proper 'this' reference */ + log = window.console.log; + } + + var isInitializedInDom = function (appId) { + var appDiv = document.getElementById(appId); + if (!appDiv) { + return false; + } + for (var i = 0; i < appDiv.childElementCount; i++) { + var className = appDiv.childNodes[i].className; + /* If the app div contains a child with the class + 'v-app-loading' we have only received the HTML + but not yet started the widget set + (UIConnector removes the v-app-loading div). */ + if (className && className.indexOf('v-app-loading') != -1) { + return false; + } + } + return true; + }; + + /* + * Needed for Testbench compatibility, but prevents any Vaadin 7 app from + * bootstrapping unless the legacy vaadinBootstrap.js file is loaded before + * this script. + */ + window.Vaadin = window.Vaadin || {}; + window.Vaadin.Flow = window.Vaadin.Flow || {}; + + /* + * Needed for wrapping custom javascript functionality in the components (i.e. connectors) + */ + window.Vaadin.Flow.tryCatchWrapper = function (originalFunction, component) { + return function () { + try { + // eslint-disable-next-line + const result = originalFunction.apply(this, arguments); + return result; + } catch (error) { + console.error( + `There seems to be an error in ${component}: +${error.message} +Please submit an issue to https://github.com/vaadin/flow-components/issues/new/choose` + ); + } + }; + }; + + if (!window.Vaadin.Flow.initApplication) { + window.Vaadin.Flow.clients = window.Vaadin.Flow.clients || {}; + + window.Vaadin.Flow.initApplication = function (appId, config) { + var testbenchId = appId.replace(/-\d+$/, ''); + + if (apps[appId]) { + if ( + window.Vaadin && + window.Vaadin.Flow && + window.Vaadin.Flow.clients && + window.Vaadin.Flow.clients[testbenchId] && + window.Vaadin.Flow.clients[testbenchId].initializing + ) { + throw new Error('Application ' + appId + ' is already being initialized'); + } + if (isInitializedInDom(appId)) { + throw new Error('Application ' + appId + ' already initialized'); + } + } + + log('init application', appId, config); + + window.Vaadin.Flow.clients[testbenchId] = { + isActive: function () { + return true; + }, + initializing: true, + productionMode: mode + }; + + var getConfig = function (name) { + var value = config[name]; + return value; + }; + + /* Export public data */ + var app = { + getConfig: getConfig + }; + apps[appId] = app; + + if (!window.name) { + window.name = appId + '-' + Math.random(); + } + + var widgetset = 'client'; + widgetsets[widgetset] = { + pendingApps: [] + }; + if (widgetsets[widgetset].callback) { + log('Starting from bootstrap', appId); + widgetsets[widgetset].callback(appId); + } else { + log('Setting pending startup', appId); + widgetsets[widgetset].pendingApps.push(appId); + } + + return app; + }; + window.Vaadin.Flow.getAppIds = function () { + var ids = []; + for (var id in apps) { + if (Object.prototype.hasOwnProperty.call(apps, id)) { + ids.push(id); + } + } + return ids; + }; + window.Vaadin.Flow.getApp = function (appId) { + return apps[appId]; + }; + window.Vaadin.Flow.registerWidgetset = function (widgetset, callback) { + log('Widgetset registered', widgetset); + var ws = widgetsets[widgetset]; + if (ws && ws.pendingApps) { + ws.callback = callback; + for (var i = 0; i < ws.pendingApps.length; i++) { + var appId = ws.pendingApps[i]; + log('Starting from register widgetset', appId); + callback(appId); + } + ws.pendingApps = null; + } + }; + window.Vaadin.Flow.getBrowserDetailsParameters = function () { + var params = {}; + + /* Screen height and width */ + params['v-sh'] = window.screen.height; + params['v-sw'] = window.screen.width; + /* Browser window dimensions */ + params['v-wh'] = window.innerHeight; + params['v-ww'] = window.innerWidth; + /* Body element dimensions */ + params['v-bh'] = document.body.clientHeight; + params['v-bw'] = document.body.clientWidth; + + /* Current time */ + var date = new Date(); + params['v-curdate'] = date.getTime(); + + /* Current timezone offset (including DST shift) */ + var tzo1 = date.getTimezoneOffset(); + + /* Compare the current tz offset with the first offset from the end + of the year that differs --- if less that, we are in DST, otherwise + we are in normal time */ + var dstDiff = 0; + var rawTzo = tzo1; + for (var m = 12; m > 0; m--) { + date.setUTCMonth(m); + var tzo2 = date.getTimezoneOffset(); + if (tzo1 != tzo2) { + dstDiff = tzo1 > tzo2 ? tzo1 - tzo2 : tzo2 - tzo1; + rawTzo = tzo1 > tzo2 ? tzo1 : tzo2; + break; + } + } + + /* Time zone offset */ + params['v-tzo'] = tzo1; + + /* DST difference */ + params['v-dstd'] = dstDiff; + + /* Time zone offset without DST */ + params['v-rtzo'] = rawTzo; + + /* DST in effect? */ + params['v-dston'] = tzo1 != rawTzo; + + /* Time zone id (if available) */ + try { + params['v-tzid'] = Intl.DateTimeFormat().resolvedOptions().timeZone; + } catch (err) { + params['v-tzid'] = ''; + } + + /* Window name */ + if (window.name) { + params['v-wn'] = window.name; + } + + /* Detect touch device support */ + var supportsTouch = false; + try { + document.createEvent('TouchEvent'); + supportsTouch = true; + } catch (e) { + /* Chrome and IE10 touch detection */ + supportsTouch = 'ontouchstart' in window || typeof navigator.msMaxTouchPoints !== 'undefined'; + } + params['v-td'] = supportsTouch; + + /* Device Pixel Ratio */ + params['v-pr'] = window.devicePixelRatio; + + if (navigator.platform) { + params['v-np'] = navigator.platform; + } + + /* Stringify each value (they are parsed on the server side) */ + Object.keys(params).forEach(function (key) { + var value = params[key]; + if (typeof value !== 'undefined') { + params[key] = value.toString(); + } + }); + return params; + }; + } + + log('Flow bootstrap loaded'); + if (appInitResponse.appConfig.productionMode && typeof window.__gwtStatsEvent != 'function') { + window.Vaadin.Flow.gwtStatsEvents = []; + window.__gwtStatsEvent = function (event) { + window.Vaadin.Flow.gwtStatsEvents.push(event); + return true; + }; + } + var config = appInitResponse.appConfig; + var mode = appInitResponse.appConfig.productionMode; + window.Vaadin.Flow.initApplication(config.appId, config); +}; + +export { init }; diff --git a/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/FlowClient.d.ts b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/FlowClient.d.ts new file mode 100644 index 00000000..7b21f908 --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/FlowClient.d.ts @@ -0,0 +1 @@ +export const init: () => void; diff --git a/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/FlowClient.js b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/FlowClient.js new file mode 100644 index 00000000..cc3ead94 --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/FlowClient.js @@ -0,0 +1,1132 @@ +// Vertx-Vaadin FLowClient +const init = function(){ +function client(){var Jb='',Kb=0,Lb='gwt.codesvr=',Mb='gwt.hosted=',Nb='gwt.hybrid',Ob='client',Pb='#',Qb='?',Rb='/',Sb=1,Tb='img',Ub='clear.cache.gif',Vb='baseUrl',Wb='script',Xb='client.nocache.js',Yb='base',Zb='//',$b='meta',_b='name',ac='gwt:property',bc='content',cc='=',dc='gwt:onPropertyErrorFn',ec='Bad handler "',fc='" for "gwt:onPropertyErrorFn"',gc='gwt:onLoadErrorFn',hc='" for "gwt:onLoadErrorFn"',ic='user.agent',jc='webkit',kc='safari',lc='msie',mc=10,nc=11,oc='ie10',pc=9,qc='ie9',rc=8,sc='ie8',tc='gecko',uc='gecko1_8',vc=2,wc=3,xc=4,yc='Single-script hosted mode not yet implemented. See issue ',zc='http://code.google.com/p/google-web-toolkit/issues/detail?id=2079',Ac='9AD1E3DE66C168E6E989BC7BD2DA078C',Bc=':1',Cc=':',Dc='DOMContentLoaded',Ec=50;var l=Jb,m=Kb,n=Lb,o=Mb,p=Nb,q=Ob,r=Pb,s=Qb,t=Rb,u=Sb,v=Tb,w=Ub,A=Vb,B=Wb,C=Xb,D=Yb,F=Zb,G=$b,H=_b,I=ac,J=bc,K=cc,L=dc,M=ec,N=fc,O=gc,P=hc,Q=ic,R=jc,S=kc,T=lc,U=mc,V=nc,W=oc,X=pc,Y=qc,Z=rc,$=sc,_=tc,ab=uc,bb=vc,cb=wc,db=xc,eb=yc,fb=zc,gb=Ac,hb=Bc,ib=Cc,jb=Dc,kb=Ec;var lb=window,mb=document,nb,ob,pb=l,qb={},rb=[],sb=[],tb=[],ub=m,vb,wb;if(!lb.__gwt_stylesLoaded){lb.__gwt_stylesLoaded={}}if(!lb.__gwt_scriptsLoaded){lb.__gwt_scriptsLoaded={}}function xb(){var b=false;try{var c=lb.location.search;return (c.indexOf(n)!=-1||(c.indexOf(o)!=-1||lb.external&&lb.external.gwtOnLoad))&&c.indexOf(p)==-1}catch(a){}xb=function(){return b};return b} +function yb(){if(nb&&ob){nb(vb,q,pb,ub)}} +function zb(){function e(a){var b=a.lastIndexOf(r);if(b==-1){b=a.length}var c=a.indexOf(s);if(c==-1){c=a.length}var d=a.lastIndexOf(t,Math.min(c,b));return d>=m?a.substring(m,d+u):l} +function f(a){if(a.match(/^\w+:\/\//)){}else{var b=mb.createElement(v);b.src=a+w;a=e(b.src)}return a} +function g(){var a=Cb(A);if(a!=null){return a}return l} +function h(){var a=mb.getElementsByTagName(B);for(var b=m;bm){return a[a.length-u].href}return l} +function j(){var a=mb.location;return a.href==a.protocol+F+a.host+a.pathname+a.search+a.hash} +var k=g();if(k==l){k=h()}if(k==l){k=i()}if(k==l&&j()){k=e(mb.location.href)}k=f(k);return k} +function Ab(){var b=document.getElementsByTagName(G);for(var c=m,d=b.length;c=m){f=g.substring(m,i);h=g.substring(i+u)}else{f=g;h=l}qb[f]=h}}else if(f==L){g=e.getAttribute(J);if(g){try{wb=eval(g)}catch(a){alert(M+g+N)}}}else if(f==O){g=e.getAttribute(J);if(g){try{vb=eval(g)}catch(a){alert(M+g+P)}}}}}} +var Bb=function(a,b){return b in rb[a]};var Cb=function(a){var b=qb[a];return b==null?null:b};function Db(a,b){var c=tb;for(var d=m,e=a.length-u;d=U&&b=X&&b=Z&&b=V}())return ab;return S};rb[Q]={'gecko1_8':m,'ie10':u,'ie8':bb,'ie9':cb,'safari':db};client.onScriptLoad=function(a){client=null;nb=a;yb()};if(xb()){alert(eb+fb);return}zb();Ab();try{var Fb;Db([ab],gb);Db([S],gb+hb);Fb=tb[Eb(Q)];var Gb=Fb.indexOf(ib);if(Gb!=-1){ub=Number(Fb.substring(Gb+u))}}catch(a){return}var Hb;function Ib(){if(!ob){ob=true;yb();if(mb.removeEventListener){mb.removeEventListener(jb,Ib,false)}if(Hb){clearInterval(Hb)}}} +if(mb.addEventListener){mb.addEventListener(jb,function(){Ib()},false)}var Hb=setInterval(function(){if(/loaded|complete/.test(mb.readyState)){Ib()}},kb)} +client();(function () {var $gwt_version = "2.8.2";var $wnd = window;var $doc = $wnd.document;var $moduleName, $moduleBase;var $stats = $wnd.__gwtStatsEvent ? function(a) {$wnd.__gwtStatsEvent(a)} : null;var $strongName = '9AD1E3DE66C168E6E989BC7BD2DA078C';function G(){} +function kk(){} +function gk(){} +function qk(){} +function Uk(){} +function Kb(){} +function cd(){} +function kd(){} +function bl(){} +function Jl(){} +function Ll(){} +function Nl(){} +function zm(){} +function Em(){} +function Jm(){} +function Lm(){} +function Zm(){} +function Zr(){} +function Vr(){} +function Xr(){} +function _r(){} +function eo(){} +function go(){} +function io(){} +function Ro(){} +function To(){} +function Tt(){} +function Mt(){} +function Qt(){} +function Wp(){} +function dq(){} +function zs(){} +function Ds(){} +function nu(){} +function nz(){} +function rz(){} +function cv(){} +function hw(){} +function lw(){} +function Aw(){} +function AE(){} +function jy(){} +function Jy(){} +function Ly(){} +function IA(){} +function qB(){} +function wC(){} +function cI(){} +function BI(){} +function HI(){} +function nA(){kA()} +function Ek(a,b){a.b=b} +function Gk(a,b){a.d=b} +function Hk(a,b){a.e=b} +function Ik(a,b){a.f=b} +function Jk(a,b){a.g=b} +function Kk(a,b){a.i=b} +function Lk(a,b){a.j=b} +function Nk(a,b){a.n=b} +function Ok(a,b){a.o=b} +function Pk(a,b){a.p=b} +function Qk(a,b){a.q=b} +function Rk(a,b){a.r=b} +function Sk(a,b){a.s=b} +function Tk(a,b){a.t=b} +function ts(a,b){a.g=b} +function wu(a,b){a.b=b} +function wl(a){this.a=a} +function ul(a){this.a=a} +function hb(a){this.a=a} +function Eb(a){this.a=a} +function Gb(a){this.a=a} +function Ib(a){this.a=a} +function Tc(a){this.a=a} +function Vc(a){this.a=a} +function Vm(a){this.a=a} +function xm(a){this.a=a} +function Cm(a){this.a=a} +function Hm(a){this.a=a} +function Pm(a){this.a=a} +function Rm(a){this.a=a} +function Tm(a){this.a=a} +function Xm(a){this.a=a} +function Dn(a){this.a=a} +function ko(a){this.a=a} +function mo(a){this.a=a} +function uo(a){this.a=a} +function Ho(a){this.a=a} +function Jo(a){this.a=a} +function Lo(a){this.a=a} +function Vo(a){this.a=a} +function Go(a){this.c=a} +function Gp(a){this.a=a} +function qp(a){this.a=a} +function tp(a){this.a=a} +function up(a){this.a=a} +function Ap(a){this.a=a} +function Qp(a){this.a=a} +function Sp(a){this.a=a} +function Yp(a){this.a=a} +function $p(a){this.a=a} +function aq(a){this.a=a} +function eq(a){this.a=a} +function kq(a){this.a=a} +function xq(a){this.a=a} +function Pq(a){this.a=a} +function Ar(a){this.a=a} +function Cr(a){this.a=a} +function Er(a){this.a=a} +function Nr(a){this.a=a} +function Qr(a){this.a=a} +function Fs(a){this.a=a} +function Ks(a){this.a=a} +function Os(a){this.a=a} +function $s(a){this.a=a} +function Zs(a){this.c=a} +function ct(a){this.a=a} +function lt(a){this.a=a} +function tt(a){this.a=a} +function vt(a){this.a=a} +function xt(a){this.a=a} +function zt(a){this.a=a} +function Bt(a){this.a=a} +function Ct(a){this.a=a} +function Kt(a){this.a=a} +function cu(a){this.a=a} +function lu(a){this.a=a} +function pu(a){this.a=a} +function Au(a){this.a=a} +function Cu(a){this.a=a} +function Qu(a){this.a=a} +function Uu(a){this.a=a} +function xu(a){this.c=a} +function av(a){this.a=a} +function lv(a){this.a=a} +function nv(a){this.a=a} +function Hv(a){this.a=a} +function Lv(a){this.a=a} +function Lw(a){this.a=a} +function jw(a){this.a=a} +function Mw(a){this.a=a} +function Ow(a){this.a=a} +function Sw(a){this.a=a} +function Uw(a){this.a=a} +function Zw(a){this.a=a} +function Zy(a){this.a=a} +function Py(a){this.a=a} +function Ry(a){this.a=a} +function _y(a){this.a=a} +function Oy(a){this.b=a} +function lz(a){this.a=a} +function pz(a){this.a=a} +function tz(a){this.a=a} +function vz(a){this.a=a} +function zz(a){this.a=a} +function Iz(a){this.a=a} +function Kz(a){this.a=a} +function Mz(a){this.a=a} +function Oz(a){this.a=a} +function Sz(a){this.a=a} +function Yz(a){this.a=a} +function bA(a){this.a=a} +function zA(a){this.a=a} +function CA(a){this.a=a} +function KA(a){this.a=a} +function MA(a){this.e=a} +function oB(a){this.a=a} +function sB(a){this.a=a} +function uB(a){this.a=a} +function QB(a){this.a=a} +function dC(a){this.a=a} +function fC(a){this.a=a} +function hC(a){this.a=a} +function sC(a){this.a=a} +function uC(a){this.a=a} +function KC(a){this.a=a} +function jD(a){this.a=a} +function wE(a){this.a=a} +function yE(a){this.a=a} +function BE(a){this.a=a} +function rF(a){this.a=a} +function tG(a){this.a=a} +function EG(a){this.b=a} +function ZG(a){this.c=a} +function NH(a){this.a=a} +function pl(a){throw a} +function Vp(a){Pp(Md(a))} +function lk(){Gq();Kq()} +function Pb(a){Ob=a;zc()} +function Nb(){this.a=nc()} +function Bk(){this.a=++Ak} +function bm(){this.d=null} +function Gq(){Gq=gk;Fq=[]} +function Xj(a){return a.e} +function HC(a){hB(a.a,a.b)} +function Gt(a,b){TC(a.a,b)} +function Ox(a,b){fy(b,a)} +function Tx(a,b){ey(b,a)} +function Xx(a,b){Kx(b,a)} +function $A(a,b){aw(b,a)} +function Ev(a,b){b.rb(a)} +function bE(b,a){b.log(a)} +function cE(b,a){b.warn(a)} +function XD(b,a){b.data=a} +function _D(b,a){b.debug(a)} +function aE(b,a){b.error(a)} +function R(a,b){a.send(b)} +function ds(a){a.j||es(a.a)} +function Ts(a){Ss(a)&&Ws(a)} +function Zc(a){Yc();Xc.T(a)} +function Oc(a){return a.S()} +function co(a){return Jn(a)} +function bc(){Wb.call(this)} +function HE(){Wb.call(this)} +function FE(){bc.call(this)} +function yF(){bc.call(this)} +function hH(){bc.call(this)} +function HH(){bc.call(this)} +function qH(){qH=gk;pH=sH()} +function kA(){kA=gk;jA=xA()} +function gc(){gc=gk;fc=new G} +function Gc(){Gc=gk;Fc=new dq} +function gu(){gu=gk;fu=new nu} +function hI(){this.a=new iH} +function RA(){RA=gk;QA=new qB} +function rl(a){Ob=a;!!a&&zc()} +function tm(a){km();this.a=a} +function SD(b,a){b.display=a} +function fE(b,a){b.replace(a)} +function xy(a,b){b.forEach(a)} +function vn(a,b){a.a.add(b.d)} +function ao(a,b,c){a.set(b,c)} +function iB(a,b,c){a.Rb(c,b)} +function un(a,b,c){pn(a,c,b)} +function UH(a,b,c){Vp(a.a[c])} +function Mk(a,b){a.k=b;ll=!b} +function tE(b,a){return a in b} +function ME(a){return MI(a),a} +function mF(a){return MI(a),a} +function Mb(a){return nc()-a.a} +function $z(a){$x(a.b,a.a,a.c)} +function lB(a){kB.call(this,a)} +function NB(a){kB.call(this,a)} +function aC(a){kB.call(this,a)} +function vE(a){cc.call(this,a)} +function DE(a){cc.call(this,a)} +function pF(a){cc.call(this,a)} +function qF(a){cc.call(this,a)} +function AF(a){cc.call(this,a)} +function zF(a){ec.call(this,a)} +function CF(a){pF.call(this,a)} +function EE(a){DE.call(this,a)} +function bG(a){DE.call(this,a)} +function $F(){BE.call(this,'')} +function _F(){BE.call(this,'')} +function EI(a){new VG;this.a=a} +function RE(a){QE(a);return a.j} +function xr(a,b){return a.a>b.a} +function Td(a,b){return Xd(a,b)} +function nd(a,b){return $E(a,b)} +function sE(a){return Object(a)} +function dp(a,b){a.d?fp(b):um()} +function rv(a,b){a.c.forEach(b)} +function oC(a,b){a.e||a.c.add(b)} +function rm(a,b){++jm;b.M(a,gm)} +function Xn(a,b){CC(new so(b,a))} +function Rx(a,b){CC(new Uz(b,a))} +function Sx(a,b){CC(new Wz(b,a))} +function Cy(a,b,c){qC(ly(a,c,b))} +function tc(){tc=gk;!!(Yc(),Xc)} +function _H(){_H=gk;ZH=new cI} +function dG(){dG=gk;cG=new AE} +function uH(){qH();return new pH} +function VA(a){jB(a.a);return a.g} +function ZA(a){jB(a.a);return a.c} +function SA(a,b){return eB(a.a,b)} +function SB(a,b){return eB(a.a,b)} +function EB(a,b){return eB(a.a,b)} +function wy(a,b){return _m(a.b,b)} +function Vx(a,b){return wx(b.a,a)} +function mk(b,a){return b.exec(a)} +function pG(a){return a.a.c+a.b.c} +function Kc(a){return !!a.b||!!a.g} +function dl(a,b){this.b=a;this.a=b} +function rb(a,b){this.b=a;this.c=b} +function Nm(a,b){this.a=a;this.b=b} +function hn(a,b){this.a=a;this.b=b} +function kn(a,b){this.a=a;this.b=b} +function zn(a,b){this.a=a;this.b=b} +function Bn(a,b){this.a=a;this.b=b} +function oo(a,b){this.a=a;this.b=b} +function qo(a,b){this.a=a;this.b=b} +function so(a,b){this.a=a;this.b=b} +function wo(a,b){this.b=a;this.a=b} +function yo(a,b){this.a=a;this.b=b} +function Ao(a,b){this.a=a;this.b=b} +function xp(a,b){this.a=a;this.b=b} +function Cp(a,b){this.b=a;this.a=b} +function Ep(a,b){this.b=a;this.a=b} +function Cb(a,b){rb.call(this,a,b)} +function rq(a,b){rb.call(this,a,b)} +function iF(){cc.call(this,null)} +function ak(){$j==null&&($j=[])} +function Ec(){oc!=0&&(oc=0);sc=-1} +function Iu(){this.a=new $wnd.Map} +function $C(){this.c=new $wnd.Map} +function bs(a,b){this.b=a;this.a=b} +function Eu(a,b){this.b=a;this.a=b} +function Su(a,b){this.a=a;this.b=b} +function Wu(a,b){this.a=a;this.b=b} +function Is(a,b){this.a=a;this.b=b} +function Ms(a,b){this.a=a;this.b=b} +function Fv(a,b){this.a=a;this.b=b} +function Jv(a,b){this.a=a;this.b=b} +function Nv(a,b){this.a=a;this.b=b} +function hz(a,b){this.a=a;this.b=b} +function jz(a,b){this.a=a;this.b=b} +function Bz(a,b){this.a=a;this.b=b} +function Qz(a,b){this.a=a;this.b=b} +function Uz(a,b){this.b=a;this.a=b} +function Wz(a,b){this.b=a;this.a=b} +function Vy(a,b){this.b=a;this.a=b} +function dA(a,b){this.b=a;this.a=b} +function fA(a,b){this.b=a;this.a=b} +function tA(a,b){this.b=a;this.a=b} +function rA(a,b){this.a=a;this.b=b} +function wB(a,b){this.a=a;this.b=b} +function jC(a,b){this.a=a;this.b=b} +function IC(a,b){this.a=a;this.b=b} +function LC(a,b){this.a=a;this.b=b} +function DB(a,b){this.d=a;this.e=b} +function BD(a,b){rb.call(this,a,b)} +function JD(a,b){rb.call(this,a,b)} +function hE(c,a,b){c.setItem(a,b)} +function mn(a,b){return Kd(a.b[b])} +function wH(a,b){return a.a.get(b)} +function fr(a,b){Zq(a,(wr(),ur),b)} +function Xt(a,b,c,d){Wt(a,b.d,c,d)} +function Qx(a,b,c){cy(a,b);Fx(c.e)} +function jx(b,a){cx();delete b[a]} +function jE(b,a){b.clearTimeout(a)} +function Dc(a){$wnd.clearTimeout(a)} +function sk(a){$wnd.clearTimeout(a)} +function iE(b,a){b.clearInterval(a)} +function mA(a,b){rC(b);jA.delete(a)} +function wq(a,b){return uq(b,vq(a))} +function RF(a,b){return a.substr(b)} +function IF(a,b){return MI(a),a===b} +function NE(a,b){return MI(a),a===b} +function nF(a){return Zd((MI(a),a))} +function Vd(a){return typeof a===cJ} +function vA(a){a.length=0;return a} +function XF(a,b){a.a+=''+b;return a} +function YF(a,b){a.a+=''+b;return a} +function ZF(a,b){a.a+=''+b;return a} +function $d(a){OI(a==null);return a} +function NG(a){this.a=null;this.b=a} +function lH(a){this.a=uH();this.b=a} +function yH(a){this.a=uH();this.b=a} +function _C(a){UC(a.a,a.d,a.c,a.b)} +function mr(a,b){Zq(a,(wr(),vr),b.a)} +function tn(a,b){return a.a.has(b.d)} +function KF(a,b){return a.indexOf(b)} +function gE(b,a){return b.getItem(a)} +function pE(a){return a&&a.valueOf()} +function rE(a){return a&&a.valueOf()} +function kG(a){return !a?null:a.fc()} +function Yd(a){return a==null?null:a} +function JH(a){return a!=null?M(a):0} +function rk(a){$wnd.clearInterval(a)} +function W(a){cq((Gc(),Fc),new hb(a))} +function LH(){LH=gk;KH=new NH(null)} +function Cw(){Cw=gk;Bw=new $wnd.Map} +function cx(){cx=gk;bx=new $wnd.Map} +function LE(){LE=gk;JE=false;KE=true} +function br(a){!!a.b&&kr(a,(wr(),tr))} +function gr(a){!!a.b&&kr(a,(wr(),ur))} +function pr(a){!!a.b&&kr(a,(wr(),vr))} +function Qb(a){a.i=pd(hj,sJ,30,0,0,1)} +function ml(a){ll&&_D($wnd.console,a)} +function ol(a){ll&&aE($wnd.console,a)} +function sl(a){ll&&bE($wnd.console,a)} +function tl(a){ll&&cE($wnd.console,a)} +function Kp(a){ll&&aE($wnd.console,a)} +function Lr(a){this.a=a;qk.call(this)} +function Bs(a){this.a=a;qk.call(this)} +function jt(a){this.a=a;qk.call(this)} +function Jt(a){this.a=new $C;this.c=a} +function xA(){return new $wnd.WeakMap} +function wv(a,b){return a.i.delete(b)} +function yv(a,b){return a.b.delete(b)} +function hB(a,b){return a.a.delete(b)} +function fB(a,b){return eB(a,a.Sb(b))} +function Dy(a,b,c){return ly(a,c.a,b)} +function vy(a,b){return Pn(a.b.root,b)} +function gs(a){return sK in a?a[sK]:-1} +function ns(a){cq((Gc(),Fc),new Os(a))} +function By(a){cq((Gc(),Fc),new Oz(a))} +function om(a){cq((Gc(),Fc),new Xm(a))} +function Do(a){cq((Gc(),Fc),new Lo(a))} +function Oq(a){cq((Gc(),Fc),new Pq(a))} +function gn(a,b){Fd(yl(a,Df),27).kb(b)} +function Dz(a,b){yy(a.a,a.c,a.d,a.b,b)} +function GB(a,b){jB(a.a);a.c.forEach(b)} +function TB(a,b){jB(a.a);a.b.forEach(b)} +function wI(a,b){if(mI){return}a.b=b} +function UD(a,b,c,d){return MD(a,b,c,d)} +function vd(a,b,c){return {l:a,m:b,h:c}} +function MH(a,b){return a.a!=null?a.a:b} +function WF(a){return a==null?yJ:jk(a)} +function Pd(a,b){return a!=null&&Ed(a,b)} +function TI(a){return a.$H||(a.$H=++SI)} +function Po(a){return ''+Qo(No.wb()-a,3)} +function aG(a){BE.call(this,(MI(a),a))} +function VG(){this.a=pd(ej,sJ,1,0,5,1)} +function Wb(){Qb(this);Rb(this);this.Q()} +function gt(a){if(a.a){nk(a.a);a.a=null}} +function JI(a){if(!a){throw Xj(new FE)}} +function KI(a){if(!a){throw Xj(new HH)}} +function OI(a){if(!a){throw Xj(new iF)}} +function XI(){XI=gk;UI=new G;WI=new G} +function Ux(a,b){var c;c=wx(b,a);qC(c)} +function et(a,b){b.a.b==(qq(),pq)&>(a)} +function VD(a,b){return a.appendChild(b)} +function WD(b,a){return b.appendChild(a)} +function MF(a,b){return a.lastIndexOf(b)} +function LF(a,b,c){return a.indexOf(b,c)} +function vm(a,b,c){km();return a.set(c,b)} +function rI(a,b){if(mI){return}RG(a.a,b)} +function pC(a){if(a.d||a.e){return}nC(a)} +function QE(a){if(a.j!=null){return}cF(a)} +function kc(a){return a==null?null:a.name} +function Rd(a){return typeof a==='number'} +function Ud(a){return typeof a==='string'} +function SF(a,b,c){return a.substr(b,c-b)} +function dE(d,a,b,c){d.pushState(a,b,c)} +function TD(d,a,b,c){d.setProperty(a,b,c)} +function DI(a,b){CI(a);a.b=true;TH(a.a,b)} +function yB(a,b){MA.call(this,a);this.a=b} +function dv(a,b){MD(b,lK,new lv(a),false)} +function Ub(a,b){a.e=b;b!=null&&RI(b,wJ,a)} +function jB(a){var b;b=yC;!!b&&lC(b,a.b)} +function qb(a){return a.b!=null?a.b:''+a.c} +function Qd(a){return typeof a==='boolean'} +function YD(b,a){return b.createElement(a)} +function ad(a){Yc();return parseInt(a)||-1} +function wm(a){km();jm==0?a.I():im.push(a)} +function Gd(a){OI(a==null||Qd(a));return a} +function Hd(a){OI(a==null||Rd(a));return a} +function Id(a){OI(a==null||Vd(a));return a} +function Md(a){OI(a==null||Ud(a));return a} +function CC(a){zC==null&&(zC=[]);zC.push(a)} +function DC(a){BC==null&&(BC=[]);BC.push(a)} +function Ul(a){a.f=[];a.g=[];a.a=0;a.b=nc()} +function jI(a){this.a=a;dG();Zj(Date.now())} +function kB(a){this.a=new $wnd.Set;this.b=a} +function on(){this.a=new $wnd.Map;this.b=[]} +function VH(a,b){this.b=0;this.c=b;this.a=a} +function xI(a,b){if(mI){return}!!b&&(a.d=b)} +function Gr(a,b){b.a.b==(qq(),pq)&&Jr(a,-1)} +function Nc(a,b){a.b=Pc(a.b,[b,false]);Lc(a)} +function Mp(a,b){Np(a,b,Fd(yl(a.a,xe),9).q)} +function wk(a,b){return $wnd.setTimeout(a,b)} +function NF(a,b,c){return a.lastIndexOf(b,c)} +function uc(a,b,c){return a.apply(b,c);var d} +function Xd(a,b){return a&&b&&a instanceof b} +function vk(a,b){return $wnd.setInterval(a,b)} +function cH(a){return new EI(bH(a,a.length))} +function jc(a){return a==null?null:a.message} +function Hw(a){a.b?iE($wnd,a.c):jE($wnd,a.c)} +function eE(d,a,b,c){d.replaceState(a,b,c)} +function st(a,b,c){a.set(c,(jB(b.a),Md(b.g)))} +function Tr(a,b,c){a.pb(vF(WA(Fd(c.e,28),b)))} +function yr(a,b,c){rb.call(this,a,b);this.a=c} +function jb(a,b,c){this.a=a;this.c=b;this.b=c} +function Fw(a,b,c){this.a=a;this.c=b;this.g=c} +function Ip(a,b,c){this.a=a;this.b=b;this.c=c} +function Xy(a,b,c){this.a=a;this.b=b;this.c=c} +function bz(a,b,c){this.a=a;this.b=b;this.c=c} +function dz(a,b,c){this.a=a;this.b=b;this.c=c} +function fz(a,b,c){this.a=a;this.b=b;this.c=c} +function xz(a,b,c){this.b=a;this.a=b;this.c=c} +function _z(a,b,c){this.b=a;this.a=b;this.c=c} +function _w(a,b,c){this.b=a;this.a=b;this.c=c} +function Ty(a,b,c){this.b=a;this.c=b;this.a=c} +function Gz(a,b,c){this.c=a;this.b=b;this.a=c} +function hA(a,b,c){this.c=a;this.b=b;this.a=c} +function DH(a,b,c){this.a=a;this.b=b;this.c=c} +function iq(){this.b=(qq(),nq);this.a=new $C} +function km(){km=gk;im=[];gm=new zm;hm=new Em} +function xF(){xF=gk;wF=pd(_i,sJ,33,256,0,1)} +function pv(a,b){a.b.add(b);return new Nv(a,b)} +function qv(a,b){a.i.add(b);return new Jv(a,b)} +function uI(a,b){if(!lI){return}vI(a,(_H(),b))} +function mE(a){if(a==null){return 0}return +a} +function Fd(a,b){OI(a==null||Ed(a,b));return a} +function Ld(a,b){OI(a==null||Xd(a,b));return a} +function XE(a,b){var c;c=UE(a,b);c.e=2;return c} +function RG(a,b){a.a[a.a.length]=b;return true} +function SG(a,b){LI(b,a.a.length);return a.a[b]} +function Cl(a,b,c){Bl(a,b,c.jb());a.b.set(b,c)} +function yn(a,b,c){return a.set(c,(jB(b.a),b.g))} +function RD(b,a){return b.getPropertyValue(a)} +function tk(a,b){return _I(function(){a.W(b)})} +function Ww(a,b){return Xw(new Zw(a),b,19,true)} +function Jq(a){return $wnd.Vaadin.Flow.getApp(a)} +function rC(a){a.e=true;nC(a);a.c.clear();mC(a)} +function aB(a,b){a.d=true;TA(a,b);DC(new sB(a))} +function QC(a,b){a.a==null&&(a.a=[]);a.a.push(b)} +function SC(a,b,c,d){var e;e=WC(a,b,c);e.push(d)} +function at(a,b){var c;c=Zd(mF(Hd(b.a)));ft(a,c)} +function rr(a,b){this.a=a;this.b=b;qk.call(this)} +function uu(a,b){this.a=a;this.b=b;qk.call(this)} +function ku(a){gu();this.c=[];this.a=fu;this.d=a} +function xk(a){a.onreadystatechange=function(){}} +function RI(b,c,d){try{b[c]=d}catch(a){}} +function PD(a,b,c,d){a.removeEventListener(b,c,d)} +function QH(a){LH();return !a?KH:new NH(MI(a))} +function QD(b,a){return b.getPropertyPriority(a)} +function vH(a,b){return !(a.a.get(b)===undefined)} +function Sd(a){return a!=null&&Wd(a)&&!(a.jc===kk)} +function rd(a){return Array.isArray(a)&&a.jc===kk} +function Od(a){return !Array.isArray(a)&&a.jc===kk} +function Wd(a){return typeof a===aJ||typeof a===cJ} +function bH(a,b){return SH(b,a.length),new VH(a,b)} +function Yu(a){a.a=Et(Fd(yl(a.d,Bg),13),new av(a))} +function sm(a){++jm;dp(Fd(yl(a.a,Af),57),new Lm)} +function os(a,b){Ju(Fd(yl(a.k,Ug),87),b['execute'])} +function Pc(a,b){!a&&(a=[]);a[a.length]=b;return a} +function UE(a,b){var c;c=new SE;c.f=a;c.d=b;return c} +function VE(a,b,c){var d;d=UE(a,b);gF(c,d);return d} +function Rv(a,b){var c;c=b;return Fd(a.a.get(c),6)} +function sG(a,b){if(b){return gG(a.a,b)}return false} +function zc(){tc();if(pc){return}pc=true;Ac(false)} +function cc(a){Qb(this);this.g=a;Rb(this);this.Q()} +function AB(a,b,c){MA.call(this,a);this.b=b;this.a=c} +function zl(a,b,c){a.a.delete(c);a.a.set(c,b.jb())} +function Zn(a,b,c){return a.push(SA(c,new Ao(c,b)))} +function sd(a,b,c){JI(c==null||md(a,c));return a[b]=c} +function Jd(a){OI(a==null||Array.isArray(a));return a} +function MI(a){if(a==null){throw Xj(new yF)}return a} +function $I(){if(VI==256){UI=WI;WI=new G;VI=0}++VI} +function TH(a,b){MI(b);while(a.b=0){a.a=new jt(a);pk(a.a,b)}} +function Rl(a,b,c){am(td(nd(_d,1),sJ,95,15,[b,c]));_C(a.e)} +function KD(){ID();return td(nd(Di,1),sJ,51,0,[GD,FD,HD])} +function sq(){qq();return td(nd(Nf,1),sJ,60,0,[nq,oq,pq])} +function zr(){wr();return td(nd(Tf,1),sJ,63,0,[tr,ur,vr])} +function HA(a){if(!FA){return a}return $wnd.Polymer.dom(a)} +function lE(c,a,b){return c.setTimeout(_I(a.Vb).bind(a),b)} +function Nd(a){return a.hc||Array.isArray(a)&&nd(je,1)||je} +function Np(a,b,c){Op(a,c.caption,c.message,b,c.url,null)} +function Zv(a,b,c,d){Uv(a,b)&&Xt(Fd(yl(a.c,Fg),26),b,c,d)} +function bo(a,b,c,d,e){a.splice.apply(a,[b,c,d].concat(e))} +function mp(a,b,c){this.a=a;this.c=b;this.b=c;qk.call(this)} +function op(a,b,c){this.a=a;this.c=b;this.b=c;qk.call(this)} +function kp(a,b,c){this.b=a;this.d=b;this.c=c;this.a=new Nb} +function xv(a,b){Yd(b.db(a))===Yd((LE(),KE))&&a.b.delete(b)} +function OD(a,b){Od(a)?a.ub(b):(a.handleEvent(b),undefined)} +function Qw(a,b){BA(b).forEach(hk(Uw.prototype.pb,Uw,[a]))} +function iG(a,b){return b===a?'(this Map)':b==null?yJ:jk(b)} +function Vb(a,b){var c;c=RE(a.hc);return b==null?c:c+': '+b} +function gH(a){var b,c;c=a;b=c.$modCount|0;c.$modCount=b+1} +function Qn(a){var b;b=a.f;while(!!b&&!b.a){b=b.f}return b} +function aF(a){if(a._b()){return null}var b=a.i;return dk[b]} +function iu(a){a.a=fu;if(!a.b){return}Ws(Fd(yl(a.d,pg),17))} +function Ur(a){jl('applyDefaultTheme',(LE(),a?true:false))} +function es(a){a&&a.afterServerUpdate&&a.afterServerUpdate()} +function kE(c,a,b){return c.setInterval(_I(a.Vb).bind(a),b)} +function EA(a,b,c,d){return a.splice.apply(a,[b,c].concat(d))} +function Yx(a,b,c){return a.push(UA(UB(uv(b.e,1),c),b.b[c]))} +function Db(){Bb();return td(nd(ce,1),sJ,50,0,[zb,Ab,yb,xb])} +function CD(){AD();return td(nd(Ci,1),sJ,41,0,[zD,xD,yD,wD])} +function ab(){return $wnd.vaadinPush&&$wnd.vaadinPush.SockJS} +function Bq(a){a?($wnd.location=a):$wnd.location.reload(false)} +function GC(a){this.a=a;this.b=[];this.c=new $wnd.Set;nC(this)} +function GE(a,b){Qb(this);this.f=b;this.g=a;Rb(this);this.Q()} +function iH(){this.a=new lH(this);this.b=new yH(this);gH(this)} +function Yc(){Yc=gk;var a,b;b=!bd();a=new kd;Xc=b?new cd:a} +function WE(a,b,c,d){var e;e=UE(a,b);gF(c,e);e.e=d?8:0;return e} +function Ql(a){var b;b={};b[LJ]=sE(a.a);b[MJ]=sE(a.b);return b} +function ik(a){function b(){} +;b.prototype=a||{};return new b} +function Nw(a,b){BA(b).forEach(hk(Sw.prototype.pb,Sw,[a.a]))} +function TA(a,b){if(!a.b&&a.c&&IH(b,a.g)){return}bB(a,b,true)} +function Vs(a,b){!!a.b&&T(a.b)?Y(a.b,b):ru(Fd(yl(a.c,Pg),73),b)} +function UC(a,b,c,d){a.b>0?QC(a,new dD(a,b,c,d)):VC(a,b,c,d)} +function gD(a,b,c,d){return iD(new $wnd.XMLHttpRequest,a,b,c,d)} +function Gn(a,b){a.updateComplete.then(_I(function(){b.X()}))} +function fp(a){$wnd.HTMLImports.whenReady(_I(function(){a.X()}))} +function _A(a){if(a.c){a.d=true;bB(a,null,false);DC(new uB(a))}} +function nD(a){if(a.length>2){rD(a[0],'OS major');rD(a[1],cL)}} +function fH(a,b){if(b.$modCount!=a.$modCount){throw Xj(new hH)}} +function fn(a,b){var c;if(b.length!=0){c=new JA(b);a.e.set(Vh,c)}} +function Ju(a,b){var c,d;for(c=0;c-1} +function Zd(a){return Math.max(Math.min(a,2147483647),-2147483648)|0} +function ED(){ED=gk;DD=sb((AD(),td(nd(Ci,1),sJ,41,0,[zD,xD,yD,wD])))} +function Px(a,b){var c;c=b.f;Iy(Fd(yl(b.e.e.g.c,xe),9),a,c,(jB(b.a),b.g))} +function bt(a,b){var c,d;c=uv(a,8);d=UB(c,'pollInterval');SA(d,new ct(b))} +function XB(a,b){DB.call(this,a,b);this.b=new $wnd.Map;this.a=new aC(this)} +function XH(a,b){this.b=', ';this.d=a;this.e=b;this.c=this.d+(''+this.e)} +function us(a){this.n=new $wnd.Set;this.i=[];this.c=new Bs(this);this.k=a} +function Kw(a){!!a.a.e&&Hw(a.a.e);a.a.b&&Dz(a.a.f,'trailing');Ew(a.a)} +function Rw(a,b){Dz(b.f,null);RG(a,b.f);if(b.d){Hw(b.d);Iw(b.d,Zd(b.g))}} +function IB(a,b,c,d){var e;e=EA(a.c,b,c,d);gB(a.a,new OA(a,b,e,d,false))} +function _q(a,b){ol('Heartbeat exception: '+b.P());Zq(a,(wr(),tr),null)} +function VB(a,b){if(!a.b.has(b)){return false}return ZA(Fd(a.b.get(b),28))} +function LI(a,b){if(a<0||a>=b){throw Xj(new DE('Index: '+a+', Size: '+b))}} +function NI(a,b){if(a<0||a>=b){throw Xj(new bG('Index: '+a+', Size: '+b))}} +function Pu(a){Fd(yl(a.a,Of),10).b==(qq(),pq)||hq(Fd(yl(a.a,Of),10),pq)} +function dr(a){Jr(Fd(yl(a.c,_f),56),Fd(yl(a.c,xe),9).f);Zq(a,(wr(),tr),null)} +function xG(a){var b;fH(a.d,a);KI(a.b);b=Fd(a.a.dc(),43);a.b=wG(a);return b} +function pd(a,b,c,d,e,f){var g;g=qd(e,d);e!=10&&td(nd(a,f),b,c,e,g);return g} +function VC(a,b,c,d){var e,f;e=XC(a,b,c);f=wA(e,d);f&&e.length==0&&ZC(a,b,c)} +function Dq(a,b,c){c==null?HA(a).removeAttribute(b):HA(a).setAttribute(b,c)} +function Un(a,b){$wnd.customElements.whenDefined(a).then(function(){b.X()})} +function Lq(a){Gq();!$wnd.WebComponents||$wnd.WebComponents.ready?Iq(a):Hq(a)} +function FI(a,b){return od(b)!=10&&td(K(b),b.ic,b.__elementTypeId$,od(b),a),a} +function K(a){return Ud(a)?kj:Rd(a)?Ui:Qd(a)?Ri:Od(a)?a.hc:rd(a)?a.hc:Nd(a)} +function Ys(a,b){b&&!a.b?(a.b=new $(a.c)):!b&&!!a.b&&S(a.b)&&P(a.b,new $s(a))} +function JA(a){this.a=new $wnd.Set;a.forEach(hk(KA.prototype.pb,KA,[this.a]))} +function ay(a){var b;b=HA(a);while(b.firstChild){b.removeChild(b.firstChild)}} +function rt(a){var b;if(a==null){return false}b=Md(a);return !IF('DISABLED',b)} +function ud(a){var b,c,d;b=a&EJ;c=a>>22&EJ;d=a<0?1048575:0;return vd(b,c,d)} +function nw(a,b){var c,d,e;e=Zd(rE(a[NK]));d=uv(b,e);c=a['key'];return UB(d,c)} +function wb(a,b){var c;MI(b);c=a[':'+b];II(!!c,td(nd(ej,1),sJ,1,5,[b]));return c} +function yq(a,b){if(IF(b.substr(0,a.length),a)){return RF(b,a.length)}return b} +function TG(a,b,c){for(;ca||a>b){throw Xj(new EE('fromIndex: 0, toIndex: '+a+', length: '+b))}} +function DF(a,b,c){if(a==null){debugger;throw Xj(new HE)}this.a=DJ;this.d=a;this.b=b;this.c=c} +function _v(a,b,c,d,e){if(!Pv(a,b)){debugger;throw Xj(new HE)}Zt(Fd(yl(a.c,Fg),26),b,c,d,e)} +function $v(a,b,c,d,e,f){if(!Pv(a,b)){debugger;throw Xj(new HE)}Yt(Fd(yl(a.c,Fg),26),b,c,d,e,f)} +function Nx(a,b,c,d){var e,f,g;g=c[GK];e="path='"+mb(g)+"'";f=new hz(a,g);Ex(a,b,d,f,null,e)} +function xx(a,b,c,d){var e;e=uv(d,a);TB(e,hk(dA.prototype.M,dA,[b,c]));return SB(e,new fA(b,c))} +function Uq(c,a){var b=c.getConfig(a);if(b===null||b===undefined){return null}else{return b+''}} +function Tq(c,a){var b=c.getConfig(a);if(b===null||b===undefined){return null}else{return vF(b)}} +function tu(b){if(b.readyState!=1){return false}try{b.send();return true}catch(a){return false}} +function ju(a){if(fu!=a.a||a.c.length==0){return}a.b=true;a.a=new lu(a);cq((Gc(),Fc),new pu(a))} +function Xk(a,b){if(!b){Ts(Fd(yl(a.a,pg),17))}else{It(Fd(yl(a.a,Bg),13));js(Fd(yl(a.a,ng),19),b)}} +function er(a,b,c){T(b)&&Ft(Fd(yl(a.c,Bg),13));jr(c)||$q(a,'Invalid JSON from server: '+c,null)} +function Jr(a,b){ll&&bE($wnd.console,'Setting heartbeat interval to '+b+'sec.');a.a=b;Hr(a)} +function NC(b,c,d){return _I(function(){var a=Array.prototype.slice.call(arguments);d.Cb(b,c,a)})} +function Rc(b,c){Gc();function d(){var a=_I(Oc)(b);a&&$wnd.setTimeout(d,c)} +$wnd.setTimeout(d,c)} +function CI(a){if(a.b){throw Xj(new qF("Stream already terminated, can't be modified or used"))}} +function Lc(a){if(!a.j){a.j=true;!a.f&&(a.f=new Tc(a));Rc(a.f,1);!a.i&&(a.i=new Vc(a));Rc(a.i,50)}} +function wr(){wr=gk;tr=new yr('HEARTBEAT',0,0);ur=new yr('PUSH',1,1);vr=new yr('XHR',2,2)} +function qq(){qq=gk;nq=new rq('INITIALIZING',0);oq=new rq('RUNNING',1);pq=new rq('TERMINATED',2)} +function ap(a,b){var c,d;c=new tp(a);d=new $wnd.Function(a);jp(a,new Ap(d),new Cp(b,c),new Ep(b,c))} +function by(a,b){var c;c=Fd(b.d.get(a),42);b.d.delete(a);if(!c){debugger;throw Xj(new HE)}c.Gb()} +function AI(a){var b,c;b=IF(typeof(b),pJ)?null:new HI;if(!b){return}_H();c=(null,'info');GI(c,a.a)} +function _b(a){var b;if(a!=null){b=a[wJ];if(b){return b}}return Td(a,TypeError)?new zF(a):new ec(a)} +function uq(a,b){var c;if(a==null){return null}c=tq('context://',b,a);c=tq('base://','',c);return c} +function Yj(a){var b;b=a.h;if(b==0){return a.l+a.m*GJ}if(b==1048575){return a.l+a.m*GJ-FJ}return a} +function ls(a,b){if(b==-1){return true}if(b==a.f+1){return true}if(a.f==-1){return true}return false} +function wG(a){if(a.a.cc()){return true}if(a.a!=a.c){return false}a.a=new mH(a.d.a);return a.a.cc()} +function tI(a){if(mI){return pd(Lj,pL,80,0,0,1)}return Fd(UG(a.a,pd(Lj,pL,80,a.a.a.length,0,1)),323)} +function fw(a,b){var c;if(Pd(a,29)){c=Fd(a,29);Zd((MI(b),b))==2?HB(c,(jB(c.a),c.c.length)):FB(c)}} +function Wv(a,b){var c;if(b!=a.e){c=b.a;!!c&&(cx(),!!c[MK])&&ix((cx(),c[MK]));cw(a,b);b.f=null}} +function jH(a){var b,c,d;for(c=0,d=a.length;ca.length?(d=a.length):(d=c);return a.substr(e,d-e)} +function Wt(a,b,c,d){var e;e={};e[VJ]=AK;e[BK]=Object(b);e[AK]=c;!!d&&(e['data']=d,undefined);$t(a,e)} +function td(a,b,c,d,e){e.hc=a;e.ic=b;e.jc=kk;e.__elementTypeId$=c;e.__elementTypeCategory$=d;return e} +function ND(b){var c=b.handler;if(!c){c=_I(function(a){OD(b,a)});c.listener=b;b.handler=c}return c} +function oE(c){return $wnd.JSON.stringify(c,function(a,b){if(a=='$H'){return undefined}return b},0)} +function Sc(b,c){Gc();var d=$wnd.setInterval(function(){var a=_I(Oc)(b);!a&&$wnd.clearInterval(d)},c)} +function qm(a,b){var c;c=new $wnd.Map;b.forEach(hk(Nm.prototype.M,Nm,[a,c]));c.size==0||wm(new Pm(c))} +function Fk(a,b){var c;c='/'.length;if(!IF(b.substr(b.length-c,c),'/')){debugger;throw Xj(new HE)}a.c=b} +function Nu(a,b){var c;c=!!b.a&&!NE((LE(),JE),VA(UB(uv(b,0),FK)));if(!c||!b.f){return c}return Nu(a,b.f)} +function px(a,b){var c;if(b.d.has(a)){debugger;throw Xj(new HE)}c=UD(b.b,a,new zz(b),false);b.d.set(a,c)} +function aH(a){var b,c,d,e;e=1;for(c=0,d=a.length;c-129&&a<128){b=a+128;c=(xF(),wF)[b];!c&&(c=wF[b]=new rF(a));return c}return new rF(a)} +function zw(a){var b,c;c=yw(a);b=a.a;if(!a.a){b=c.Kb(a);if(!b){debugger;throw Xj(new HE)}zv(a,b)}xw(a,b);return b} +function gB(a,b){var c;if(b.Pb()!=a.b){debugger;throw Xj(new HE)}c=yA(a.a);c.forEach(hk(LC.prototype.pb,LC,[a,b]))} +function vI(a,b){var c;(kI?(sI(a),true):lI?(_H(),true):oI?(_H(),false):nI&&(_H(),false))&&(c=new jI(b),qI(a,c))} +function In(a,b){var c;Hn==null&&(Hn=xA());c=Ld(Hn.get(a),$wnd.Set);if(c==null){c=new $wnd.Set;Hn.set(a,c)}c.add(b)} +function Bv(a,b){this.c=new $wnd.Map;this.i=new $wnd.Set;this.b=new $wnd.Set;this.e=new $wnd.Map;this.d=a;this.g=b} +function am(a){$wnd.Vaadin.Flow.setScrollPosition?$wnd.Vaadin.Flow.setScrollPosition(a):$wnd.scrollTo(a[0],a[1])} +function Xq(a){a.b=null;Fd(yl(a.c,Bg),13).b&&Ft(Fd(yl(a.c,Bg),13));kl('connection-lost');Jr(Fd(yl(a.c,_f),56),0)} +function ot(a){if(VB(uv(Fd(yl(a.a,bh),11).e,5),zK)){return Md(VA(UB(uv(Fd(yl(a.a,bh),11).e,5),zK)))}return null} +function XA(a){var b;jB(a.a);if(a.c){b=(jB(a.a),a.g);if(b==null){return null}return jB(a.a),Md(a.g)}else{return null}} +function lx(a){var b;b=Id(bx.get(a));if(b==null){b=Id(new $wnd.Function(AK,SK,'return ('+a+')'));bx.set(a,b)}return b} +function gp(a,b,c){var d;d=Jd(c.get(a));if(d==null){d=[];d.push(b);c.set(a,d);return true}else{d.push(b);return false}} +function uE(c){var a=[];for(var b in c){Object.prototype.hasOwnProperty.call(c,b)&&b!='$H'&&a.push(b)}return a} +function wx(a,b){var c,d;d=a.f;if(b.c.has(d)){debugger;throw Xj(new HE)}c=new GC(new xz(a,b,d));b.c.set(d,c);return c} +function Sv(a,b){var c,d,e;e=BA(a.a);for(c=0;c0){c=Fd(a.b.splice(0,1)[0],28);wn(c,b)||aw(Fd(yl(a.c,bh),11),c);EC()}} +function Cc(a,b){tc();var c;c=Ob;if(c){if(c==qc){return}c.N(a);return}if(b){Bc(Pd(a,23)?Fd(a,23).R():a)}else{dG();Sb(a,cG,'')}} +function jk(a){var b;if(Array.isArray(a)&&a.jc===kk){return RE(K(a))+'@'+(b=M(a)>>>0,b.toString(16))}return a.toString()} +function vq(a){var b,c;b=Fd(yl(a.a,xe),9).c;c='/'.length;if(!IF(b.substr(b.length-c,c),'/')){debugger;throw Xj(new HE)}return b} +function um(){km();var a,b;--jm;if(jm==0&&im.length!=0){try{for(b=0;b1} +function hl(){this.a=new tD($wnd.navigator.userAgent);this.a.b?'ontouchstart' in window:this.a.f?!!navigator.msMaxTouchPoints:gl()} +function ep(a){this.b=new $wnd.Set;this.a=new $wnd.Map;this.d=!!($wnd.HTMLImports&&$wnd.HTMLImports.whenReady);this.c=a;Zo(this)} +function qr(a){this.c=a;gq(Fd(yl(a,Of),10),new Ar(this));MD($wnd,'offline',new Cr(this),false);MD($wnd,'online',new Er(this),false)} +function AD(){AD=gk;zD=new BD('STYLESHEET',0);xD=new BD('JAVASCRIPT',1);yD=new BD('JS_MODULE',2);wD=new BD('DYNAMIC_IMPORT',3)} +function Nn(a){var b;if(Hn==null){return}b=Ld(Hn.get(a),$wnd.Set);if(b!=null){Hn.delete(a);b.forEach(hk(io.prototype.pb,io,[]))}} +function nC(a){var b;a.d=true;mC(a);a.e||CC(new sC(a));if(a.c.size!=0){b=a.c;a.c=new $wnd.Set;b.forEach(hk(wC.prototype.pb,wC,[]))}} +function zx(a){var b;if(!a.b){debugger;throw Xj(new IE('Cannot bind shadow root to a Node'))}b=uv(a.e,20);rx(a);return SB(b,new bA(a))} +function Cx(a){var b;b=Md(VA(UB(uv(a,0),'tag')));if(b==null){debugger;throw Xj(new IE('New child must have a tag'))}return YD($doc,b)} +function au(a,b,c,d,e){var f;f={};f[VJ]='mSync';f[BK]=sE(b.d);f['feature']=Object(c);f['property']=d;f[$J]=e==null?null:e;$t(a,f)} +function al(a,b,c){var d;if(a==c.d){d=new $wnd.Function('callback','callback();');d.call(null,b);return LE(),true}return LE(),false} +function bd(){if(Error.stackTraceLimit>0){$wnd.Error.stackTraceLimit=Error.stackTraceLimit=64;return true}return 'stack' in new Error} +function Fn(a){return typeof a.update==cJ&&a.updateComplete instanceof Promise&&typeof a.shouldUpdate==cJ&&typeof a.firstUpdated==cJ} +function oF(a){var b;b=kF(a);if(b>3.4028234663852886E38){return Infinity}else if(b<-3.4028234663852886E38){return -Infinity}return b} +function OE(a){if(a>=48&&a<48+$wnd.Math.min(10,10)){return a-48}if(a>=97&&a<97){return a-97+10}if(a>=65&&a<65){return a-65+10}return -1} +function fF(a,b){var c=0;while(!b[c]||b[c]==''){c++}var d=b[c++];for(;cd&&sd(b,d,null);return b} +function tv(a,b){var c,d;d=b;c=Fd(a.c.get(d),39);if(!c){c=new JB(b,a);a.c.set(d,c)}if(!Pd(c,29)){debugger;throw Xj(new HE)}return Fd(c,29)} +function uv(a,b){var c,d;d=b;c=Fd(a.c.get(d),39);if(!c){c=new XB(b,a);a.c.set(d,c)}if(!Pd(c,40)){debugger;throw Xj(new HE)}return Fd(c,40)} +function JF(a,b){MI(a);if(b==null){return false}if(IF(a,b)){return true}return a.length==b.length&&IF(a.toLowerCase(),b.toLowerCase())} +function Xv(a){GB(tv(a.e,24),hk(hw.prototype.pb,hw,[]));rv(a.e,hk(lw.prototype.M,lw,[]));a.a.forEach(hk(jw.prototype.M,jw,[a]));a.d=true} +function pm(a){ll&&($wnd.console.log('Finished loading eager dependencies, loading lazy.'),undefined);a.forEach(hk(Zm.prototype.M,Zm,[]))} +function Ir(a){nk(a.c);ll&&($wnd.console.debug('Sending heartbeat request...'),undefined);gD(a.d,null,'text/plain; charset=utf-8',new Nr(a))} +function qE(b){var c;try{return c=$wnd.JSON.parse(b),c}catch(a){a=Wj(a);if(Pd(a,7)){throw Xj(new vE("Can't parse "+b))}else throw Xj(a)}} +function Wl(a){this.d=a;'scrollRestoration' in history&&(history.scrollRestoration='manual');MD($wnd,SJ,new Gp(this),false);Tl(this,true)} +function kr(a,b){if(a.b!=b){return}a.b=null;a.a=0;kl('connected');ll&&($wnd.console.log('Re-established connection to server'),undefined)} +function Zt(a,b,c,d,e){var f;f={};f[VJ]='attachExistingElementById';f[BK]=sE(b.d);f[CK]=Object(c);f[DK]=Object(d);f['attachId']=e;$t(a,f)} +function ZI(a){XI();var b,c,d;c=':'+a;d=WI[c];if(d!=null){return Zd((MI(d),d))}d=UI[c];b=d==null?YI(a):Zd((MI(d),d));$I();WI[c]=b;return b} +function M(a){return Ud(a)?ZI(a):Rd(a)?Zd((MI(a),a)):Qd(a)?(MI(a),a)?1231:1237:Od(a)?a.w():rd(a)?TI(a):!!a&&!!a.hashCode?a.hashCode():TI(a)} +function I(a,b){return Ud(a)?IF(a,b):Rd(a)?(MI(a),a===b):Qd(a)?(MI(a),a===b):Od(a)?a.u(b):rd(a)?a===b:!!a&&!!a.equals?a.equals(b):Yd(a)===Yd(b)} +function Bl(a,b,c){if(a.a.has(b)){debugger;throw Xj(new IE((QE(b),'Registry already has a class of type '+b.j+' registered')))}a.a.set(b,c)} +function xw(a,b){ww();var c;if(a.g.f){debugger;throw Xj(new IE('Binding state node while processing state tree changes'))}c=yw(a);c.Jb(a,b,uw)} +function OA(a,b,c,d,e){this.e=a;if(c==null){debugger;throw Xj(new HE)}if(d==null){debugger;throw Xj(new HE)}this.c=b;this.d=c;this.a=d;this.b=e} +function dy(a,b){var c,d;d=UB(b,WK);jB(d.a);d.c||aB(d,a.getAttribute(WK));c=UB(b,XK);Vn(a)&&(jB(c.a),!c.c)&&!!a.style&&aB(c,a.style.display)} +function bn(a,b,c,d){var e,f;if(!d){f=Fd(yl(a.g.c,Ye),59);e=Fd(f.a.get(c),33);if(!e){f.b[b]=c;f.a.set(c,vF(b));return vF(b)}return e}return d} +function qy(a,b){var c,d;while(b!=null){for(c=a.length-1;c>-1;c--){d=Fd(a[c],6);if(b.isSameNode(d.a)){return d.d}}b=HA(b.parentNode)}return -1} +function en(a,b,c){var d;if(cn(a.a,c)){d=Fd(a.e.get(Vh),77);if(!d||!d.a.has(c)){return}UA(UB(b,c),a.a[c]).X()}else{VB(b,c)||aB(UB(b,c),null)}} +function pn(a,b,c){var d,e;e=Rv(Fd(yl(a.c,bh),11),Zd((MI(b),b)));if(e.c.has(1)){d=new $wnd.Map;TB(uv(e,1),hk(Dn.prototype.M,Dn,[d]));c.set(b,d)}} +function WC(a,b,c){var d,e;e=Ld(a.c.get(b),$wnd.Map);if(e==null){e=new $wnd.Map;a.c.set(b,e)}d=Jd(e.get(c));if(d==null){d=[];e.set(c,d)}return d} +function py(a){var b;nx==null&&(nx=new $wnd.Map);b=Id(nx.get(a));if(b==null){b=Id(new $wnd.Function(AK,SK,'return ('+a+')'));nx.set(a,b)}return b} +function vs(){if($wnd.performance&&$wnd.performance.timing){return (new Date).getTime()-$wnd.performance.timing.responseStart}else{return -1}} +function Yw(a,b,c,d){var e,f,g,h,i;i=Kd(a.jb());h=d.d;for(g=0;g=1&&rD(a[0],'OS major');if(a.length>=2){b=KF(a[1],UF(45));if(b>-1){c=a[1].substr(0,b-0);rD(c,cL)}else{rD(a[1],cL)}}} +function rD(b,c){var d;try{return lF(b)}catch(a){a=Wj(a);if(Pd(a,7)){d=a;dG();c+' version parsing failed for: '+b+' '+d.P()}else throw Xj(a)}return -1} +function Sb(a,b,c){var d,e,f,g,h;Tb(a);for(e=(a.j==null&&(a.j=pd(lj,sJ,5,0,0,1)),a.j),f=0,g=e.length;f0){ml('Scheduling heartbeat in '+a.a+' seconds');ok(a.c,a.a*1000)}else{ll&&($wnd.console.debug('Disabling heartbeat'),undefined);nk(a.c)}} +function nt(a){var b,c,d,e;b=UB(uv(Fd(yl(a.a,bh),11).e,5),'parameters');e=(jB(b.a),Fd(b.g,6));d=uv(e,6);c=new $wnd.Map;TB(d,hk(zt.prototype.M,zt,[c]));return c} +function Ex(a,b,c,d,e,f){var g,h;if(!hy(a.e,b,e,f)){return}g=Kd(d.jb());if(iy(g,b,e,f,a)){if(!c){h=Fd(yl(b.g.c,$e),48);h.a.add(b.d);rn(h)}zv(b,g);zw(b)}c||EC()} +function aw(a,b){var c,d;if(!b){debugger;throw Xj(new HE)}d=b.e;c=d.e;if(sn(Fd(yl(a.c,$e),48),b)||!Uv(a,c)){return}au(Fd(yl(a.c,Fg),26),c,d.d,b.f,(jB(b.a),b.g))} +function jv(a,b){var c;c=$wnd.location.pathname;if(c==null){debugger;throw Xj(new IE('window.location.path should never be null'))}if(c!=a){return false}return b} +function RC(a,b,c){var d;if(!b){throw Xj(new AF('Cannot add a handler with a null type'))}a.b>0?QC(a,new bD(a,b,c)):(d=WC(a,b,null),d.push(c));return new aD(a,b,c)} +function cy(a,b){var c,d,e;dy(a,b);e=UB(b,WK);jB(e.a);e.c&&Iy(Fd(yl(b.e.g.c,xe),9),a,WK,(jB(e.a),e.g));c=UB(b,XK);jB(c.a);if(c.c){d=(jB(c.a),jk(c.g));SD(a.style,d)}} +function hq(a,b){if(b.c!=a.b.c+1){throw Xj(new pF('Tried to move from state '+qb(a.b)+' to '+(b.b!=null?b.b:''+b.c)+' which is not allowed'))}a.b=b;TC(a.a,new kq(a))} +function ys(a){var b;if(a==null){return null}if(!IF(a.substr(0,9),'for(;;);[')||(b=']'.length,!IF(a.substr(a.length-b,b),']'))){return null}return SF(a,9,a.length-1)} +function bk(b,c,d,e){ak();var f=$j;$moduleName=c;$moduleBase=d;Vj=e;function g(){for(var a=0;a=0;d--){if(IF(a[d].d,b)||IF(a[d].d,c)){a.length>=d+1&&a.splice(0,d+1);break}}return a} +function Yt(a,b,c,d,e,f){var g;g={};g[VJ]='attachExistingElement';g[BK]=sE(b.d);g[CK]=Object(c);g[DK]=Object(d);g['attachTagName']=e;g['attachIndex']=Object(f);$t(a,g)} +function Wn(a){var b=typeof $wnd.Polymer===cJ&&$wnd.Polymer.Element&&a instanceof $wnd.Polymer.Element;var c=a.constructor.polymerElementVersion!==undefined;return b||c} +function Xw(a,b,c,d){var e,f,g,h;h=tv(b,c);jB(h.a);if(h.c.length>0){f=Kd(a.jb());for(e=0;e<(jB(h.a),h.c.length);e++){g=Md(h.c[e]);dx(f,g,b,d)}}return EB(h,new _w(a,b,d))} +function oy(a,b){var c,d,e,f,g;c=HA(b).childNodes;for(e=0;ed&&(NI(b-1,a.length),a.charCodeAt(b-1)<=32)){--b}return d>0||b=65536){b=55296+(a-65536>>10&1023)&65535;c=56320+(a-65536&1023)&65535;return String.fromCharCode(b)+(''+String.fromCharCode(c))}else{return String.fromCharCode(a&65535)}} +function yc(a){a&&Ic((Gc(),Fc));--oc;if(oc<0){debugger;throw Xj(new IE('Negative entryDepth value at exit '+oc))}if(a){if(oc!=0){debugger;throw Xj(new IE('Depth not 0'+oc))}if(sc!=-1){Dc(sc);sc=-1}}} +function Fy(a,b,c,d){var e,f,g,h,i,j,k;e=false;for(h=0;h2000){rc=a;sc=$wnd.setTimeout(Ec,10)}}if(oc++==0){Hc((Gc(),Fc));return true}return false} +function Vk(f,b,c){var d=f;var e=$wnd.Vaadin.Flow.clients[b];e.isActive=_I(function(){return d.cb()});e.getVersionInfo=_I(function(a){return {'flow':c}});e.debug=_I(function(){var a=d.a;return a.hb().Hb().Eb()})} +function ks(a){var b,c,d,e;if(a.i.length==0){return false}e=-1;for(b=0;b=f&&(NI(b,a.length),a.charCodeAt(b)!=32)){--b}if(b==f){return}d=a.substr(b+1,c-(b+1));e=QF(d,'\\.',0);nD(e)} +function Hu(a,b){var c,d,e,f,g,h;if(!b){debugger;throw Xj(new HE)}for(d=(g=uE(b),g),e=0,f=d.length;e=0;d--){ZF((g.a+=i,g),Md(c[d]));i='.'}return g.a} +function Z(a,b){var c,d,e,f,g;if(ab()){W(b.a)}else{f=(Fd(yl(a.c,xe),9).k?(e='vaadinPushSockJS-min.js'):(e='vaadinPushSockJS.js'),'VAADIN/static/push/'+e);ll&&bE($wnd.console,'Loading sockJS '+f);d=Fd(yl(a.c,Af),57);g=Fd(yl(a.c,xe),9).c+f;c=new jb(a,f,b);bp(d,g,c,false,gJ)}} +function sw(a,b){var c,d,e,f;f=nw(a,b);if($J in a){e=a[$J];aB(f,e)}else if('nodeValue' in a){d=Zd(rE(a['nodeValue']));c=Rv(b.g,d);if(!c){debugger;throw Xj(new HE)}c.f=b;aB(f,c)}else{debugger;throw Xj(new IE('Change should have either value or nodeValue property: '+Cq(a)))}} +function PC(a,b){var c,d,e,f,g,h;if(nE(b)==1){c=b;h=Zd(rE(c[0]));switch(h){case 0:{g=Zd(rE(c[1]));d=(f=g,Fd(a.a.get(f),6)).a;return d}case 1:return e=Jd(c[1]),e;case 2:return NC(Zd(rE(c[1])),Zd(rE(c[2])),Fd(yl(a.c,Fg),26));default:throw Xj(new pF(aL+oE(c)));}}else{return b}} +function hs(a,b){var c,d,e,f,g;ll&&($wnd.console.log('Handling dependencies'),undefined);c=new $wnd.Map;for(e=(ID(),td(nd(Di,1),sJ,51,0,[GD,FD,HD])),f=0,g=e.length;fa.a){a.a==0?ll&&bE($wnd.console,'Updating client-to-server id to '+b+' based on server'):tl('Server expects next client-to-server id to be '+b+' but we were going to use '+a.a+'. Will use '+b+'.');a.a=b}} +function P(a,b){if(!b){debugger;throw Xj(new HE)}switch(a.e.c){case 0:a.e=(Bb(),yb);a.b=b;break;case 1:ll&&($wnd.console.log('Closing push connection'),undefined);a.d.close();a.e=(Bb(),xb);b.I();break;case 2:case 3:throw Xj(new qF('Can not disconnect more than once'));default:throw Xj(new qF('Invalid state'));}} +function fy(a,b){var c,d,e,f,g,h;c=a.f;d=b.style;jB(a.a);if(a.c){h=(jB(a.a),Md(a.g));e=false;if(h.indexOf('!important')!=-1){f=YD($doc,b.tagName);g=f.style;g.cssText=c+': '+h+';';if(IF('important',QD(f.style,c))){TD(d,c,RD(f.style,c),'important');e=true}}e||(d.setProperty(c,h),undefined)}else{d.removeProperty(c)}} +function Vq(a){var b,c,d,e;XA((c=uv(Fd(yl(Fd(yl(a.c,zg),35).a,bh),11).e,9),UB(c,qK)))!=null&&jl('reconnectingText',XA((d=uv(Fd(yl(Fd(yl(a.c,zg),35).a,bh),11).e,9),UB(d,qK))));XA((e=uv(Fd(yl(Fd(yl(a.c,zg),35).a,bh),11).e,9),UB(e,rK)))!=null&&jl('offlineText',XA((b=uv(Fd(yl(Fd(yl(a.c,zg),35).a,bh),11).e,9),UB(b,rK))))} +function cp(a,b,c){var d,e,f;f=Aq(b);d=new tp(f);if(a.b.has(f)){!!c&&c.K(d);return}if(gp(f,c,a.a)){e=$doc.createElement('link');e.rel=kK;e.type='text/css';e.href=f;if((!fl&&(fl=new hl),fl).a.k||il()){Sc((Gc(),new kp(a,f,d)),10)}else{hp(e,new xp(a,f),d);(!fl&&(fl=new hl),fl).a.j&&ok(new mp(a,f,d),5000)}WD($doc.head,e)}} +function Op(a,b,c,d,e,f){var g,h,i;if(b==null&&c==null&&d==null){Fd(yl(a.a,xe),9).t?(h=Fd(yl(a.a,xe),9).o+'web-component/web-component-bootstrap.js',i=LD(h,'v-r=webcomponent-resync'),fD(i,new Sp(a)),undefined):Bq(e);return}g=Lp(b,c,d,f);if(!Fd(yl(a.a,xe),9).t){MD(g,lK,new $p(e),false);MD($doc,'keydown',new aq(e),false)}} +function rH(){if(!Object.create||!Object.getOwnPropertyNames){return false}var a='__proto__';var b=Object.create(null);if(b[a]!==undefined){return false}var c=Object.getOwnPropertyNames(b);if(c.length!=0){return false}b[a]=42;if(b[a]!==42){return false}if(Object.getOwnPropertyNames(b).length==0){return false}return true} +function On(a,b){var c,d,e,f,g;c=HA(a).children;e=-1;for(f=0;f0){k=Ix(a,b);d=!k?null:HA(k.a).nextSibling}else{d=null}for(g=0;g=a.f.length||a.a>=a.g.length){tl('No matching scroll position found (entries X:'+a.f.length+', Y:'+a.g.length+') for opened history index ('+a.a+'). '+RJ);Ul(a);return}c=nF(Hd(a.f[a.a]));d=nF(Hd(a.g[a.a]));b?(a.e=Et(Fd(yl(a.d,Bg),13),new Ip(a,c,d))):am(td(nd(_d,1),sJ,95,15,[c,d]))} +function Hx(b,c){var d,e,f,g,h;if(!c){return -1}try{h=HA(Kd(c));f=[];f.push(b);for(e=0;e=9223372036854775807){return Ad(),xd}e=false;if(a<0){e=true;a=-a}d=0;if(a>=FJ){d=Zd(a/FJ);a-=d*FJ}c=0;if(a>=GJ){c=Zd(a/GJ);a-=c*GJ}b=Zd(a);f=vd(b,c,d);e&&(g=~f.l+1&EJ,h=~f.m+(g==0?1:0)&EJ,i=~f.h+(g==0&&h==0?1:0)&1048575,f.l=g,f.m=h,f.h=i,undefined);return f} +function gv(a,b){var c,d,e,f;if(iv(b)||Fd(yl(a,Of),10).b!=(qq(),oq)){return}c=ev(b);if(!c){return}f=c.href;d=b.currentTarget.ownerDocument.baseURI;if(!IF(f.substr(0,d.length),d)){return}if(jv(c.pathname,c.href.indexOf('#')!=-1)){e=$doc.location.hash;IF(e,c.hash)||Fd(yl(a,Df),27).lb(f);Fd(yl(a,Df),27).nb(true);return}if(!c.hasAttribute('router-link')){return}hv(b,d,f,a)} +function Wq(a,b){if(Fd(yl(a.c,Of),10).b!=(qq(),oq)){ll&&($wnd.console.warn('Trying to reconnect after application has been stopped. Giving up'),undefined);return}if(b){ll&&($wnd.console.log('Re-sending last message to the server...'),undefined);Vs(Fd(yl(a.c,pg),17),b)}else{ll&&($wnd.console.log('Trying to re-establish server connection...'),undefined);Ir(Fd(yl(a.c,_f),56))}} +function lF(a){var b,c,d,e,f;if(a==null){throw Xj(new CF(yJ))}d=a.length;e=d>0&&(NI(0,a.length),a.charCodeAt(0)==45||(NI(0,a.length),a.charCodeAt(0)==43))?1:0;for(b=e;b2147483647){throw Xj(new CF(lL+a+'"'))}return f} +function QF(a,b,c){var d,e,f,g,h,i,j,k;d=new RegExp(b,'g');j=pd(kj,sJ,2,0,6,1);e=0;k=a;g=null;while(true){i=d.exec(k);if(i==null||k==''||e==c-1&&c>0){j[e]=k;break}else{h=i.index;j[e]=k.substr(0,h);k=SF(k,h+i[0].length,k.length);d.lastIndex=0;if(g==k){j[e]=k.substr(0,1);k=k.substr(1)}g=k;++e}}if(c==0&&a.length>0){f=j.length;while(f>0&&j[f-1]==''){--f}f=14&&c<=16));case 11:return b!=null&&Vd(b);case 12:return b!=null&&(typeof b===aJ||typeof b==cJ);case 0:return Ed(b,a.__elementTypeId$);case 2:return Wd(b)&&!(b.jc===kk);case 1:return Wd(b)&&!(b.jc===kk)||Ed(b,a.__elementTypeId$);default:return true;}} +function _m(b,c){if(document.body.$&&document.body.$.hasOwnProperty&&document.body.$.hasOwnProperty(c)){return document.body.$[c]}else if(b.shadowRoot){return b.shadowRoot.getElementById(c)}else if(b.getElementById){return b.getElementById(c)}else if(c&&c.match('^[a-zA-Z0-9-_]*$')){return b.querySelector('#'+c)}else{return Array.from(b.querySelectorAll('[id]')).find(function(a){return a.id==c})}} +function Fo(a,b){var c,d,e,f,g,h,i,j;if(Fd(yl(a.c,Of),10).b!=(qq(),oq)){Bq(null);return}d=$wnd.location.pathname;e=$wnd.location.search;if(a.a==null){debugger;throw Xj(new IE('Initial response has not ended before pop state event was triggered'))}f=!(d==a.a&&e==a.b);Fd(yl(a.c,Df),27).mb(b,f);if(!f){return}c=yq($doc.baseURI,$doc.location.href);c.indexOf('#')!=-1&&(c=QF(c,'#',2)[0]);g=b['state'];kv(a.c,c,g,false)} +function Zq(a,b,c){var d;if(Fd(yl(a.c,Of),10).b!=(qq(),oq)){return}kl('reconnecting');if(a.b){if(xr(b,a.b)){ll&&cE($wnd.console,'Now reconnecting because of '+b+' failure');a.b=b}}else{a.b=b;ll&&cE($wnd.console,'Reconnecting because of '+b+' failure')}if(a.b!=b){return}++a.a;sl('Reconnect attempt '+a.a+' for '+b);a.a>=WA((d=uv(Fd(yl(Fd(yl(a.c,zg),35).a,bh),11).e,9),UB(d,'reconnectAttempts')),10000)?Xq(a):lr(a,c)} +function an(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r;j=null;g=HA(a.a).childNodes;o=new $wnd.Map;e=!b;i=-1;for(m=0;m. User has navigated out of site in an unrecognized way.');Ul(b)}}else{Ul(b)}} +function Iy(a,b,c,d){var e,f,g,h,i;if(d==null||Ud(d)){Dq(b,c,Md(d))}else{f=d;if(0==nE(f)){g=f;if(!('uri' in g)){debugger;throw Xj(new IE("Implementation error: JsonObject is recieved as an attribute value for '"+c+"' but it has no "+'uri'+' key'))}i=g['uri'];if(a.t&&!i.match(/^(?:[a-zA-Z]+:)?\/\//)){e=a.o;e=(h='/'.length,IF(e.substr(e.length-h,h),'/')?e:e+'/');HA(b).setAttribute(c,e+(''+i))}else{i==null?HA(b).removeAttribute(c):HA(b).setAttribute(c,i)}}else{Dq(b,c,jk(d))}}} +function Mx(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;o=Fd(c.e.get(Vh),77);if(!o||!o.a.has(a)){return}k=QF(a,'\\.',0);g=c;f=null;e=0;j=k.length;for(m=0,n=k.length;m=f){debugger;throw Xj(new HE)}return g.length==0?null:g}else{return a}} +function ry(a,b,c,d,e){var f,g,h;h=Rv(e,Zd(a));if(!h.c.has(1)){return}if(!my(h,b)){debugger;throw Xj(new IE('Host element is not a parent of the node whose property has changed. This is an implementation error. Most likely it means that there are several StateTrees on the same page (might be possible with portlets) and the target StateTree should not be passed into the method as an argument but somehow detected from the host element. Another option is that host element is calculated incorrectly.'))}f=uv(h,1);g=UB(f,c);UA(g,d).X()} +function Lp(a,b,c,d){var e,f,g,h,i,j;h=$doc;j=h.createElement('div');j.className='v-system-error';if(a!=null){f=h.createElement('div');f.className='caption';f.textContent=a;j.appendChild(f);ll&&aE($wnd.console,a)}if(b!=null){i=h.createElement('div');i.className='message';i.textContent=b;j.appendChild(i);ll&&aE($wnd.console,b)}if(c!=null){g=h.createElement('div');g.className='details';g.textContent=c;j.appendChild(g);ll&&aE($wnd.console,c)}if(d!=null){e=h.querySelector(d);!!e&&VD(Kd(MH(QH(e.shadowRoot),e)),j)}else{WD(h.body,j)}return j} +function Ku(h,e,f){var g={};g.getNode=_I(function(a){var b=e.get(a);if(b==null){throw new ReferenceError('There is no a StateNode for the given argument.')}return b});g.$appId=h.Db().replace(/-\d+$/,'');g.registry=h.a;g.attachExistingElement=_I(function(a,b,c,d){an(g.getNode(a),b,c,d)});g.populateModelProperties=_I(function(a,b){dn(g.getNode(a),b)});g.registerUpdatableModelProperties=_I(function(a,b){fn(g.getNode(a),b)});g.stopApplication=_I(function(){f.X()});g.scrollPositionHandlerAfterServerNavigation=_I(function(a){gn(g.registry,a)});return g} +function fd(a,b){var c,d,e,f,g,h,i,j,k;if(b.length==0){return a.V(DJ,BJ,-1,-1)}k=TF(b);IF(k.substr(0,3),'at ')&&(k=k.substr(3));k=k.replace(/\[.*?\]/g,'');g=k.indexOf('(');if(g==-1){g=k.indexOf('@');if(g==-1){j=k;k=''}else{j=TF(k.substr(g+1));k=TF(k.substr(0,g))}}else{c=k.indexOf(')',g);j=k.substr(g+1,c-(g+1));k=TF(k.substr(0,g))}g=KF(k,UF(46));g!=-1&&(k=k.substr(g+1));(k.length==0||IF(k,'Anonymous function'))&&(k=BJ);h=MF(j,UF(58));e=NF(j,UF(58),h-1);i=-1;d=-1;f=DJ;if(h!=-1&&e!=-1){f=j.substr(0,e);i=ad(j.substr(e+1,h-(e+1)));d=ad(j.substr(h+1))}return a.V(f,k,i,d)} +function Mq(a,b){var c,d,e;c=Uq(b,'serviceUrl');Tk(a,Sq(b,'webComponentMode'));Ek(a,Sq(b,'clientRouting'));if(c==null){Ok(a,Aq('.'));Fk(a,Aq(Uq(b,nK)))}else{a.o=c;Fk(a,Aq(c+(''+Uq(b,nK))))}Sk(a,Tq(b,'v-uiId').a);Ik(a,Tq(b,'heartbeatInterval').a);Lk(a,Tq(b,'maxMessageSuspendTimeout').a);Pk(a,(d=b.getConfig(oK),d?d.vaadinVersion:null));e=b.getConfig(oK);Rq();Qk(a,b.getConfig('sessExpMsg'));Mk(a,!Sq(b,'debug'));Nk(a,Sq(b,'requestTiming'));Hk(a,b.getConfig('webcomponents'));Gk(a,Sq(b,'devToolsEnabled'));Kk(a,Uq(b,'liveReloadUrl'));Jk(a,Uq(b,'liveReloadBackend'));Rk(a,Uq(b,'springBootLiveReloadPort'))} +function mb(b){var c=function(a){return typeof a!=pJ};var d=function(a){return a.replace(/\r\n/g,'')};if(c(b.outerHTML))return d(b.outerHTML);c(b.innerHTML)&&b.cloneNode&&$doc.createElement('div').appendChild(b.cloneNode(true)).innerHTML;if(c(b.nodeType)&&b.nodeType==3){return "'"+b.data.replace(/ /g,'\u25AB').replace(/\u00A0/,'\u25AA')+"'"}if(typeof c(b.htmlText)&&b.collapse){var e=b.htmlText;if(e){return 'IETextRange ['+d(e)+']'}else{var f=b.duplicate();f.pasteHTML('|');var g='IETextRange '+d(b.parentElement().outerHTML);f.moveStart('character',-1);f.pasteHTML('');return g}}return b.toString?b.toString():'[JavaScriptObject]'} +function $(a){var b,c,d,e;this.e=(Bb(),zb);this.c=a;gq(Fd(yl(a,Of),10),new Eb(this));this.a={transport:fJ,fallbackTransport:hJ,transports:[fJ,hJ,iJ],reconnectInterval:5000,maxReconnectAttempts:10,timeout:5000};this.a['logLevel']='debug';nt(Fd(yl(this.c,xg),46)).forEach(hk(Gb.prototype.M,Gb,[this]));pb(this.a);c=ot(Fd(yl(this.c,xg),46));if(c==null||TF(c).length==0||IF('/',c)){this.g=jJ;d=Fd(yl(a,xe),9).o;IF('.',d)||(e='/'.length,IF(d.substr(d.length-e,e),'/')||(d+='/'));this.g=d+(''+this.g)}else{b=Fd(yl(a,xe),9).c;e='/'.length;IF(b.substr(b.length-e,e),'/')&&IF(c.substr(0,1),'/')&&(c=c.substr(1));this.g=b+(''+c)+jJ}Z(this,new Ib(this))} +function _n(a,b,c){var d,e,f;f=[];if(a.c.has(1)){if(!Pd(b,40)){debugger;throw Xj(new IE('Received an inconsistent NodeFeature for a node that has a ELEMENT_PROPERTIES feature. It should be NodeMap, but it is: '+b))}e=Fd(b,40);TB(e,hk(qo.prototype.M,qo,[f,c]));f.push(SB(e,new oo(f,c)))}else if(a.c.has(16)){if(!Pd(b,29)){debugger;throw Xj(new IE('Received an inconsistent NodeFeature for a node that has a TEMPLATE_MODELLIST feature. It should be NodeList, but it is: '+b))}d=Fd(b,29);f.push(EB(d,new ko(c)))}if(f.length==0){debugger;throw Xj(new IE('Node should have ELEMENT_PROPERTIES or TEMPLATE_MODELLIST feature'))}f.push(qv(a,new mo(f)))} +function Il(a,b){this.a=new $wnd.Map;this.b=new $wnd.Map;Bl(this,Ae,a);Bl(this,xe,b);Bl(this,Af,new ep(this));Bl(this,Pf,new xq(this));Bl(this,Ve,new tm(this));Bl(this,Jf,new Qp(this));Cl(this,Of,new Jl);Bl(this,bh,new dw(this));Bl(this,Bg,new Jt(this));Bl(this,ng,new us(this));Bl(this,pg,new Zs(this));Bl(this,Jg,new ku(this));Bl(this,Fg,new cu(this));Bl(this,Ug,new Qu(this));Cl(this,Qg,new Ll);Cl(this,Ye,new Nl);Bl(this,$e,new xn(this));Bl(this,_f,new Kr(this));Bl(this,Rf,new qr(this));Bl(this,Pg,new su(this));Bl(this,xg,new qt(this));Bl(this,zg,new Bt(this));b.b||(b.t?Bl(this,Df,new bm):Bl(this,Df,new Wl(this)));Bl(this,tg,new ht(this))} +function iy(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o;l=e.e;o=Md(VA(UB(uv(b,0),'tag')));h=false;if(!a){h=true;ll&&cE($wnd.console,YK+d+" is not found. The requested tag name is '"+o+"'")}else if(!(!!a&&JF(o,a.tagName))){h=true;tl(YK+d+" has the wrong tag name '"+a.tagName+"', the requested tag name is '"+o+"'")}if(h){_v(l.g,l,b.d,-1,c);return false}if(!l.c.has(20)){return true}k=uv(l,20);m=Fd(VA(UB(k,TK)),6);if(!m){return true}j=tv(m,2);g=null;for(i=0;i<(jB(j.a),j.c.length);i++){n=Fd(j.c[i],6);f=n.a;if(I(f,a)){g=vF(n.d);break}}if(g){ll&&cE($wnd.console,YK+d+" has been already attached previously via the node id='"+g+"'");_v(l.g,l,b.d,g.a,c);return false}return true} +function Mu(b,c,d,e){var f,g,h,i,j,k,l,m;if(c.length!=d.length+1){debugger;throw Xj(new HE)}try{j=new ($wnd.Function.bind.apply($wnd.Function,[null].concat(c)));j.apply(Ku(b,e,new Uu(b)),d)}catch(a){a=Wj(a);if(Pd(a,7)){i=a;ll&&nl(new ul(i));ll&&($wnd.console.error('Exception is thrown during JavaScript execution. Stacktrace will be dumped separately.'),undefined);if(!Fd(yl(b.a,xe),9).k){g=new aG('[');h='';for(l=0,m=c.length;l=b.length)return {done:true};var a=b[d++];return {value:[a,c.get(a)],done:false}}}};if(!rH()){e.prototype.createObject=function(){return {}};e.prototype.get=function(a){return this.obj[':'+a]};e.prototype.set=function(a,b){this.obj[':'+a]=b};e.prototype['delete']=function(a){delete this.obj[':'+a]};e.prototype.keys=function(){var a=[];for(var b in this.obj){b.charCodeAt(0)==58&&a.push(b.substring(1))}return a}}return e} +function Kx(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F;if(!b){debugger;throw Xj(new HE)}f=b.b;s=b.e;if(!f){debugger;throw Xj(new IE('Cannot handle DOM event for a Node'))}C=a.type;r=uv(s,4);e=Fd(yl(s.g.c,Qg),58);i=Md(VA(UB(r,C)));if(i==null){debugger;throw Xj(new HE)}if(!Gu(e,i)){debugger;throw Xj(new HE)}j=Kd(Fu(e,i));o=(w=uE(j),w);A=new $wnd.Set;o.length==0?(g=null):(g={});for(l=0,m=o.length;l=0){g=b.substr(f+3);g=PF(g,hL,'$1');this.a=oF(g)}}else if(this.o){g=RF(b,b.indexOf('webkit/')+7);g=PF(g,iL,'$1');this.a=oF(g)}else if(this.n){g=RF(b,b.indexOf(eL)+8);g=PF(g,iL,'$1');this.a=oF(g);this.a>7&&(this.a=7)}else this.c&&(this.a=0)}catch(a){a=Wj(a);if(Pd(a,7)){c=a;dG();'Browser engine version parsing failed for: '+b+' '+c.P()}else throw Xj(a)}try{if(this.f){if(b.indexOf('msie')!=-1){if(this.n);else{e=RF(b,b.indexOf('msie ')+5);e=vD(e,0,KF(e,UF(59)));sD(e)}}else{f=b.indexOf('rv:');if(f>=0){g=b.substr(f+3);g=PF(g,hL,'$1');sD(g)}}}else if(this.d){d=b.indexOf(' firefox/')+9;sD(vD(b,d,d+5))}else if(this.b){oD(b)}else if(this.k){d=b.indexOf(' version/');if(d>=0){d+=9;sD(vD(b,d,d+5))}}else if(this.j){d=b.indexOf(' version/');d!=-1?(d+=9):(d=b.indexOf('opera/')+6);sD(vD(b,d,d+5))}else if(this.c){d=b.indexOf(' edge/')+6;b.indexOf(' edg/')!=-1?(d=b.indexOf(' edg/')+5):b.indexOf(fL)!=-1?(d=b.indexOf(fL)+6):b.indexOf(gL)!=-1&&(d=b.indexOf(gL)+8);sD(vD(b,d,d+8))}}catch(a){a=Wj(a);if(Pd(a,7)){c=a;dG();'Browser version parsing failed for: '+b+' '+c.P()}else throw Xj(a)}if(b.indexOf('windows ')!=-1){b.indexOf('windows phone')!=-1}else if(b.indexOf('android')!=-1){lD(b)}else if(b.indexOf('linux')!=-1);else if(b.indexOf('macintosh')!=-1||b.indexOf('mac osx')!=-1||b.indexOf('mac os x')!=-1){this.g=b.indexOf('ipad')!=-1;this.i=b.indexOf('iphone')!=-1;(this.g||this.i)&&pD(b)}else b.indexOf('; cros ')!=-1&&mD(b)} +var aJ='object',bJ='[object Array]',cJ='function',dJ='java.lang',eJ='v-uiId=',fJ='websocket',gJ='text/javascript',hJ='xhr-polling',iJ='xhr-streaming',jJ='VAADIN/push',kJ='transport',lJ='Received push (',mJ='com.github.mcollovati.vertx.vaadin.sockjs.client',nJ='com.vaadin.client',oJ={22:1},pJ='undefined',qJ='com.google.gwt.core.client',rJ='fallbackTransport',sJ={4:1},tJ={97:1},uJ={21:1},vJ='__noinit__',wJ='__java$exception',xJ={4:1,7:1,8:1,5:1},yJ='null',zJ='com.google.gwt.core.client.impl',AJ='Working array length changed ',BJ='anonymous',CJ='fnStack',DJ='Unknown',EJ=4194303,FJ=17592186044416,GJ=4194304,HJ='must be non-negative',IJ='must be positive',JJ='com.google.web.bindery.event.shared',KJ='url',LJ='historyIndex',MJ='historyResetToken',NJ='xPositions',OJ='yPositions',PJ='scrollPos-',QJ='Failed to get session storage: ',RJ='Unable to restore scroll positions. History.state has been manipulated or user has navigated away from site in an unrecognized way.',SJ='beforeunload',TJ='scrollPositionX',UJ='scrollPositionY',VJ='type',WJ={68:1},XJ={18:1},YJ='constructor',ZJ='properties',$J='value',_J='com.vaadin.client.flow.reactive',aK={14:1},bK='nodeId',cK='Root node for node ',dK=' could not be found',eK=' is not an Element',fK={69:1},gK={82:1},hK={44:1},iK={96:1},jK='script',kK='stylesheet',lK='click',mK='com.vaadin.flow.shared',nK='contextRootUrl',oK='versionInfo',pK='com.vaadin.client.communication',qK='dialogText',rK='dialogTextGaveUp',sK='syncId',tK='resynchronize',uK='Received message with server id ',vK='clientId',wK='Vaadin-Security-Key',xK='Vaadin-Push-ID',yK='sessionExpired',zK='pushServletMapping',AK='event',BK='node',CK='attachReqId',DK='attachAssignedId',EK='com.vaadin.client.flow',FK='bound',GK='payload',HK='subTemplate',IK={42:1},JK='Node is null',KK='Node is not created for this tree',LK='Node id is not registered with this tree',MK='$server',NK='feat',OK='remove',PK='com.vaadin.client.flow.binding',QK='intermediate',RK='elemental.util',SK='element',TK='shadowRoot',UK='The HTML node for the StateNode with id=',VK='An error occurred when Flow tried to find a state node matching the element ',WK='hidden',XK='styleDisplay',YK='Element addressed by the ',ZK='dom-repeat',$K='dom-change',_K='com.vaadin.client.flow.nodefeature',aL='Unsupported complex type in ',bL='com.vaadin.client.gwt.com.google.web.bindery.event.shared',cL='OS minor',dL=' headlesschrome/',eL='trident/',fL=' edga/',gL=' edgios/',hL='(\\.[0-9]+).+',iL='([0-9]+\\.[0-9]+).*',jL='com.vaadin.flow.shared.ui',kL='java.io',lL='For input string: "',mL='java.util',nL={43:1},oL='java.util.logging',pL={4:1,323:1},qL='java.util.stream',rL='user.agent';var _,dk,$j,Vj=-1;ek();fk(1,null,{},G);_.u=function H(a){return this===a};_.v=function J(){return this.hc};_.w=function L(){return TI(this)};_.A=function N(){var a;return RE(K(this))+'@'+(a=M(this)>>>0,a.toString(16))};_.equals=function(a){return this.u(a)};_.hashCode=function(){return this.w()};_.toString=function(){return this.A()};var Bd,Cd,Dd;fk(99,1,{},SE);_.Wb=function TE(a){var b;b=new SE;b.e=4;a>1?(b.c=$E(this,a-1)):(b.c=this);return b};_.Xb=function ZE(){QE(this);return this.b};_.Yb=function _E(){return RE(this)};_.Zb=function bF(){QE(this);return this.g};_.$b=function dF(){return (this.e&4)!=0};_._b=function eF(){return (this.e&1)!=0};_.A=function hF(){return ((this.e&2)!=0?'interface ':(this.e&1)!=0?'':'class ')+(QE(this),this.j)};_.e=0;var PE=1;var ej=VE(dJ,'Object',1);var Ti=VE(dJ,'Class',99);fk(105,1,{},$);_.B=function bb(a){this.e=(Bb(),zb);Fd(yl(this.c,Rf),16);ll&&($wnd.console.log('Push connection closed'),undefined)};_.C=function cb(a){this.e=(Bb(),xb);Yq(Fd(Fd(yl(this.c,Rf),16),88),'Push connection using '+a[kJ]+' failed!')};_.D=function db(a){var b,c;c=a['data'];b=xs(ys(c));if(!b){er(Fd(yl(this.c,Rf),16),this,c)}else{sl(lJ+this.f+') message: '+c);Fd(yl(this.c,Of),10).b==(qq(),pq)?tl(lJ+this.f+') message, but ui is already terminated: '+c):js(Fd(yl(this.c,ng),19),b)}};_.F=function eb(a){uI(zI((QE(ge),ge.j)),'Push connection established using '+this.d.getTransport());X(this,this.d)};_.G=function fb(a){this.e==(Bb(),Ab)&&(this.e=zb);hr(Fd(yl(this.c,Rf),16),this)};_.H=function gb(a){uI(zI((QE(ge),ge.j)),'Push connection re-established using '+this.d.getTransport());X(this,this.d)};var ge=VE(mJ,'SockJSPushConnection',105);fk(239,1,{},hb);_.I=function ib(){O(this.a)};var ae=VE(mJ,'SockJSPushConnection/0methodref$connect$Type',239);var uf=XE(nJ,'ResourceLoader/ResourceLoadListener');fk(241,1,oJ,jb);_.J=function kb(a){ir(Fd(yl(this.a.c,Rf),16),a.a)};_.K=function lb(a){if(ab()){sl(this.c+' loaded');W(this.b.a)}else{ll&&($wnd.console.log('SockJS not loaded???????'),undefined);ir(Fd(yl(this.a.c,Rf),16),a.a)}};var be=VE(mJ,'SockJSPushConnection/1',241);var je=VE(qJ,'JavaScriptObject$',0);var nb;fk(25,1,{4:1,32:1,25:1});_.u=function tb(a){return this===a};_.w=function ub(){return TI(this)};_.A=function vb(){return this.b!=null?this.b:''+this.c};_.c=0;var Vi=VE(dJ,'Enum',25);fk(50,25,{50:1,4:1,32:1,25:1},Cb);var xb,yb,zb,Ab;var ce=WE(mJ,'SockJSPushConnection/State',50,Db);fk(238,1,tJ,Eb);_.L=function Fb(a){U(this.a,a)};var de=VE(mJ,'SockJSPushConnection/lambda$0$Type',238);fk(371,$wnd.Function,{},Gb);_.M=function Hb(a,b){V(this.a,a,b)};var Ce=XE(nJ,'Command');fk(240,1,uJ,Ib);_.I=function Jb(){W(this.a)};var ee=VE(mJ,'SockJSPushConnection/lambda$2$Type',240);fk(237,1,uJ,Kb);_.I=function Lb(){};var fe=VE(mJ,'SockJSPushConnection/lambda$3$Type',237);fk(101,1,{},Nb);_.a=0;var he=VE(qJ,'Duration',101);var Ob=null;fk(5,1,{4:1,5:1});_.O=function Xb(a){return new Error(a)};_.P=function Zb(){return this.g};_.Q=function $b(){var a,b,c;c=this.g==null?null:this.g.replace(new RegExp('\n','g'),' ');b=(a=RE(this.hc),c==null?a:a+': '+c);Ub(this,Yb(this.O(b)));Zc(this)};_.A=function ac(){return Vb(this,this.P())};_.e=vJ;_.k=true;var lj=VE(dJ,'Throwable',5);fk(7,5,{4:1,7:1,5:1});var Xi=VE(dJ,'Exception',7);fk(8,7,xJ,dc);var gj=VE(dJ,'RuntimeException',8);fk(54,8,xJ,ec);var aj=VE(dJ,'JsException',54);fk(120,54,xJ);var le=VE(zJ,'JavaScriptExceptionBase',120);fk(23,120,{23:1,4:1,7:1,8:1,5:1},ic);_.P=function lc(){return hc(this),this.c};_.R=function mc(){return Yd(this.b)===Yd(fc)?null:this.b};var fc;var ie=VE(qJ,'JavaScriptException',23);fk(324,1,{});var ke=VE(qJ,'Scheduler',324);var oc=0,pc=false,qc,rc=0,sc=-1;fk(129,324,{});_.e=false;_.j=false;var Fc;var oe=VE(zJ,'SchedulerImpl',129);fk(130,1,{},Tc);_.S=function Uc(){this.a.e=true;Jc(this.a);this.a.e=false;return this.a.j=Kc(this.a)};var me=VE(zJ,'SchedulerImpl/Flusher',130);fk(131,1,{},Vc);_.S=function Wc(){this.a.e&&Rc(this.a.f,1);return this.a.j};var ne=VE(zJ,'SchedulerImpl/Rescuer',131);var Xc;fk(334,1,{});var se=VE(zJ,'StackTraceCreator/Collector',334);fk(121,334,{},cd);_.T=function dd(a){var b={},j;var c=[];a[CJ]=c;var d=arguments.callee.caller;while(d){var e=(Yc(),d.name||(d.name=_c(d.toString())));c.push(e);var f=':'+e;var g=b[f];if(g){var h,i;for(h=0,i=g.length;h0){Yo(this.b,this.c);return false}else if(a==0){Xo(this.b,this.c);return true}else if(Mb(this.a)>60000){Xo(this.b,this.c);return false}else{return true}};var pf=VE(nJ,'ResourceLoader/1',185);fk(186,38,{},mp);_.X=function np(){this.a.b.has(this.c)||Xo(this.a,this.b)};var qf=VE(nJ,'ResourceLoader/2',186);fk(190,38,{},op);_.X=function pp(){this.a.b.has(this.c)?Yo(this.a,this.b):Xo(this.a,this.b)};var rf=VE(nJ,'ResourceLoader/3',190);fk(191,1,oJ,qp);_.J=function rp(a){Xo(this.a,a)};_.K=function sp(a){Yo(this.a,a)};var sf=VE(nJ,'ResourceLoader/4',191);fk(62,1,{},tp);var tf=VE(nJ,'ResourceLoader/ResourceLoadEvent',62);fk(104,1,oJ,up);_.J=function vp(a){Xo(this.a,a)};_.K=function wp(a){Yo(this.a,a)};var vf=VE(nJ,'ResourceLoader/SimpleLoadListener',104);fk(184,1,oJ,xp);_.J=function yp(a){Xo(this.a,a)};_.K=function zp(a){var b;if((!fl&&(fl=new hl),fl).a.b||(!fl&&(fl=new hl),fl).a.f||(!fl&&(fl=new hl),fl).a.c){b=ip(this.b);if(b==0){Xo(this.a,a);return}}Yo(this.a,a)};var wf=VE(nJ,'ResourceLoader/StyleSheetLoadListener',184);fk(187,1,{},Ap);_.jb=function Bp(){return this.a.call(null)};var xf=VE(nJ,'ResourceLoader/lambda$0$Type',187);fk(188,1,XJ,Cp);_.X=function Dp(){this.b.K(this.a)};var yf=VE(nJ,'ResourceLoader/lambda$1$Type',188);fk(189,1,XJ,Ep);_.X=function Fp(){this.b.J(this.a)};var zf=VE(nJ,'ResourceLoader/lambda$2$Type',189);fk(150,1,{},Gp);_.ub=function Hp(a){Sl(this.a)};var Bf=VE(nJ,'ScrollPositionHandler/0methodref$onBeforeUnload$Type',150);fk(151,1,iK,Ip);_.vb=function Jp(a){Rl(this.a,this.b,this.c)};_.b=0;_.c=0;var Cf=VE(nJ,'ScrollPositionHandler/lambda$0$Type',151);fk(24,1,{24:1},Qp);var Jf=VE(nJ,'SystemErrorHandler',24);fk(155,1,{},Sp);_.xb=function Tp(a,b){Kp(b.P())};_.yb=function Up(a){var b;sl('Received xhr HTTP session resynchronization message: '+a.responseText);Al(this.a.a);hq(Fd(yl(this.a.a,Of),10),(qq(),oq));b=xs(ys(a.responseText));js(Fd(yl(this.a.a,ng),19),b);Sk(Fd(yl(this.a.a,xe),9),b['uiId']);cq((Gc(),Fc),new Yp(this))};var Gf=VE(nJ,'SystemErrorHandler/1',155);fk(156,1,{},Wp);_.pb=function Xp(a){Vp(a)};var Ef=VE(nJ,'SystemErrorHandler/1/0methodref$recreateNodes$Type',156);fk(157,1,{},Yp);_.I=function Zp(){DI(cH(Fd(yl(this.a.a.a,xe),9).e),new Wp)};var Ff=VE(nJ,'SystemErrorHandler/1/lambda$0$Type',157);fk(153,1,{},$p);_.ub=function _p(a){Bq(this.a)};var Hf=VE(nJ,'SystemErrorHandler/lambda$0$Type',153);fk(154,1,{},aq);_.ub=function bq(a){Rp(this.a,a)};var If=VE(nJ,'SystemErrorHandler/lambda$1$Type',154);fk(133,129,{},dq);_.a=0;var Lf=VE(nJ,'TrackingScheduler',133);fk(134,1,{},eq);_.I=function fq(){this.a.a--};var Kf=VE(nJ,'TrackingScheduler/lambda$0$Type',134);fk(10,1,{10:1},iq);var Of=VE(nJ,'UILifecycle',10);fk(161,343,{},kq);_.Z=function lq(a){Fd(a,97).L(this)};_._=function mq(){return jq};var jq=null;var Mf=VE(nJ,'UILifecycle/StateChangeEvent',161);fk(60,25,{60:1,4:1,32:1,25:1},rq);var nq,oq,pq;var Nf=WE(nJ,'UILifecycle/UIState',60,sq);fk(342,1,sJ);var Bi=VE(mK,'VaadinUriResolver',342);fk(47,342,{47:1,4:1},xq);_.zb=function zq(a){return wq(this,a)};var Pf=VE(nJ,'URIResolver',47);var Eq=false,Fq;fk(114,1,{},Pq);_.I=function Qq(){Lq(this.a)};var Qf=VE('com.vaadin.client.bootstrap','Bootstrapper/lambda$0$Type',114);var Rf=XE(pK,'ConnectionStateHandler');fk(88,1,{16:1,88:1},qr);_.a=0;_.b=null;var Xf=VE(pK,'DefaultConnectionStateHandler',88);fk(214,38,{},rr);_.X=function sr(){this.a.d=null;Wq(this.a,this.b)};var Sf=VE(pK,'DefaultConnectionStateHandler/1',214);fk(63,25,{63:1,4:1,32:1,25:1},yr);_.a=0;var tr,ur,vr;var Tf=WE(pK,'DefaultConnectionStateHandler/Type',63,zr);fk(213,1,tJ,Ar);_.L=function Br(a){cr(this.a,a)};var Uf=VE(pK,'DefaultConnectionStateHandler/lambda$0$Type',213);fk(215,1,{},Cr);_.ub=function Dr(a){Xq(this.a)};var Vf=VE(pK,'DefaultConnectionStateHandler/lambda$1$Type',215);fk(216,1,{},Er);_.ub=function Fr(a){dr(this.a)};var Wf=VE(pK,'DefaultConnectionStateHandler/lambda$2$Type',216);fk(56,1,{56:1},Kr);_.a=-1;var _f=VE(pK,'Heartbeat',56);fk(210,38,{},Lr);_.X=function Mr(){Ir(this.a)};var Yf=VE(pK,'Heartbeat/1',210);fk(212,1,{},Nr);_.xb=function Or(a,b){!b?ar(Fd(yl(this.a.b,Rf),16),a):_q(Fd(yl(this.a.b,Rf),16),b);Hr(this.a)};_.yb=function Pr(a){br(Fd(yl(this.a.b,Rf),16));Hr(this.a)};var Zf=VE(pK,'Heartbeat/2',212);fk(211,1,tJ,Qr);_.L=function Rr(a){Gr(this.a,a)};var $f=VE(pK,'Heartbeat/lambda$0$Type',211);fk(163,1,{},Vr);_.pb=function Wr(a){jl('firstDelay',vF(a.a))};var ag=VE(pK,'LoadingIndicatorConfigurator/0methodref$setFirstDelay$Type',163);fk(164,1,{},Xr);_.pb=function Yr(a){jl('secondDelay',vF(a.a))};var bg=VE(pK,'LoadingIndicatorConfigurator/1methodref$setSecondDelay$Type',164);fk(165,1,{},Zr);_.pb=function $r(a){jl('thirdDelay',vF(a.a))};var cg=VE(pK,'LoadingIndicatorConfigurator/2methodref$setThirdDelay$Type',165);fk(166,1,hK,_r);_.tb=function as(a){Ur(YA(Fd(a.e,28)))};var dg=VE(pK,'LoadingIndicatorConfigurator/lambda$0$Type',166);fk(167,1,hK,bs);_.tb=function cs(a){Tr(this.b,this.a,a)};_.a=0;var eg=VE(pK,'LoadingIndicatorConfigurator/lambda$1$Type',167);fk(19,1,{19:1},us);_.a=0;_.b='init';_.d=false;_.e=0;_.f=-1;_.j=null;_.p=0;var ng=VE(pK,'MessageHandler',19);fk(178,1,uJ,zs);_.I=function As(){!GA&&$wnd.Polymer!=null&&IF($wnd.Polymer.version.substr(0,'1.'.length),'1.')&&(GA=true,ll&&($wnd.console.log('Polymer micro is now loaded, using Polymer DOM API'),undefined),FA=new IA,undefined)};var fg=VE(pK,'MessageHandler/0methodref$updateApiImplementation$Type',178);fk(177,38,{},Bs);_.X=function Cs(){fs(this.a)};var gg=VE(pK,'MessageHandler/1',177);fk(359,$wnd.Function,{},Ds);_.pb=function Es(a){ds(Fd(a,6))};fk(61,1,{61:1},Fs);var hg=VE(pK,'MessageHandler/PendingUIDLMessage',61);fk(179,1,uJ,Gs);_.I=function Hs(){qs(this.a,this.d,this.b,this.c)};_.c=0;var ig=VE(pK,'MessageHandler/lambda$0$Type',179);fk(181,1,aK,Is);_.ob=function Js(){DC(new Ms(this.a,this.b))};var jg=VE(pK,'MessageHandler/lambda$1$Type',181);fk(183,1,aK,Ks);_.ob=function Ls(){ns(this.a)};var kg=VE(pK,'MessageHandler/lambda$3$Type',183);fk(180,1,aK,Ms);_.ob=function Ns(){os(this.a,this.b)};var lg=VE(pK,'MessageHandler/lambda$4$Type',180);fk(182,1,{},Os);_.I=function Ps(){this.a.forEach(hk(Ds.prototype.pb,Ds,[]))};var mg=VE(pK,'MessageHandler/lambda$5$Type',182);fk(17,1,{17:1},Zs);_.a=0;_.d=0;var pg=VE(pK,'MessageSender',17);fk(175,1,uJ,$s);_.I=function _s(){Rs(this.a)};var og=VE(pK,'MessageSender/lambda$0$Type',175);fk(158,1,hK,ct);_.tb=function dt(a){at(this.a,a)};var qg=VE(pK,'PollConfigurator/lambda$0$Type',158);fk(75,1,{75:1},ht);_.Ab=function it(){var a;a=Fd(yl(this.b,bh),11);Zv(a,a.e,'ui-poll',null)};_.a=null;var tg=VE(pK,'Poller',75);fk(160,38,{},jt);_.X=function kt(){var a;a=Fd(yl(this.a.b,bh),11);Zv(a,a.e,'ui-poll',null)};var rg=VE(pK,'Poller/1',160);fk(159,1,tJ,lt);_.L=function mt(a){et(this.a,a)};var sg=VE(pK,'Poller/lambda$0$Type',159);fk(46,1,{46:1},qt);var xg=VE(pK,'PushConfiguration',46);fk(221,1,hK,tt);_.tb=function ut(a){pt(this.a,a)};var ug=VE(pK,'PushConfiguration/0methodref$onPushModeChange$Type',221);fk(222,1,aK,vt);_.ob=function wt(){Ys(Fd(yl(this.a.a,pg),17),true)};var vg=VE(pK,'PushConfiguration/lambda$0$Type',222);fk(223,1,aK,xt);_.ob=function yt(){Ys(Fd(yl(this.a.a,pg),17),false)};var wg=VE(pK,'PushConfiguration/lambda$1$Type',223);fk(365,$wnd.Function,{},zt);_.M=function At(a,b){st(this.a,a,b)};fk(35,1,{35:1},Bt);var zg=VE(pK,'ReconnectConfiguration',35);fk(162,1,uJ,Ct);_.I=function Dt(){Vq(this.a)};var yg=VE(pK,'ReconnectConfiguration/lambda$0$Type',162);fk(13,1,{13:1},Jt);_.b=false;var Bg=VE(pK,'RequestResponseTracker',13);fk(176,1,{},Kt);_.I=function Lt(){Ht(this.a)};var Ag=VE(pK,'RequestResponseTracker/lambda$0$Type',176);fk(236,343,{},Mt);_.Z=function Nt(a){$d(a);null.kc()};_._=function Ot(){return null};var Cg=VE(pK,'RequestStartingEvent',236);fk(152,343,{},Qt);_.Z=function Rt(a){Fd(a,96).vb(this)};_._=function St(){return Pt};var Pt;var Dg=VE(pK,'ResponseHandlingEndedEvent',152);fk(276,343,{},Tt);_.Z=function Ut(a){$d(a);null.kc()};_._=function Vt(){return null};var Eg=VE(pK,'ResponseHandlingStartedEvent',276);fk(26,1,{26:1},cu);_.Bb=function du(a,b,c){Wt(this,a,b,c)};_.Cb=function eu(a,b,c){var d;d={};d[VJ]='channel';d[BK]=Object(a);d['channel']=Object(b);d['args']=c;$t(this,d)};var Fg=VE(pK,'ServerConnector',26);fk(34,1,{34:1},ku);_.b=false;var fu;var Jg=VE(pK,'ServerRpcQueue',34);fk(204,1,XJ,lu);_.X=function mu(){iu(this.a)};var Gg=VE(pK,'ServerRpcQueue/0methodref$doFlush$Type',204);fk(203,1,XJ,nu);_.X=function ou(){gu()};var Hg=VE(pK,'ServerRpcQueue/lambda$0$Type',203);fk(205,1,{},pu);_.I=function qu(){this.a.a.X()};var Ig=VE(pK,'ServerRpcQueue/lambda$1$Type',205);fk(73,1,{73:1},su);_.b=false;var Pg=VE(pK,'XhrConnection',73);fk(220,38,{},uu);_.X=function vu(){tu(this.b)&&this.a.b&&ok(this,250)};var Kg=VE(pK,'XhrConnection/1',220);fk(217,1,{},xu);_.xb=function yu(a,b){var c;c=new Eu(a,this.a);if(!b){or(Fd(yl(this.c.a,Rf),16),c);return}else{mr(Fd(yl(this.c.a,Rf),16),c)}};_.yb=function zu(a){var b,c;sl('Server visit took '+Po(this.b)+'ms');c=a.responseText;b=xs(ys(c));if(!b){nr(Fd(yl(this.c.a,Rf),16),new Eu(a,this.a));return}pr(Fd(yl(this.c.a,Rf),16));ll&&bE($wnd.console,'Received xhr message: '+c);js(Fd(yl(this.c.a,ng),19),b)};_.b=0;var Lg=VE(pK,'XhrConnection/XhrResponseHandler',217);fk(218,1,{},Au);_.ub=function Bu(a){this.a.b=true};var Mg=VE(pK,'XhrConnection/lambda$0$Type',218);fk(219,1,iK,Cu);_.vb=function Du(a){this.a.b=false};var Ng=VE(pK,'XhrConnection/lambda$1$Type',219);fk(108,1,{},Eu);var Og=VE(pK,'XhrConnectionError',108);fk(58,1,{58:1},Iu);var Qg=VE(EK,'ConstantPool',58);fk(87,1,{87:1},Qu);_.Db=function Ru(){return Fd(yl(this.a,xe),9).a};var Ug=VE(EK,'ExecuteJavaScriptProcessor',87);fk(207,1,{},Su);_.db=function Tu(a){return DC(new Wu(this.a,this.b)),LE(),true};var Rg=VE(EK,'ExecuteJavaScriptProcessor/lambda$0$Type',207);fk(208,1,XJ,Uu);_.X=function Vu(){Pu(this.a)};var Sg=VE(EK,'ExecuteJavaScriptProcessor/lambda$1$Type',208);fk(206,1,aK,Wu);_.ob=function Xu(){Lu(this.a,this.b)};var Tg=VE(EK,'ExecuteJavaScriptProcessor/lambda$3$Type',206);fk(302,1,{},$u);var Wg=VE(EK,'FragmentHandler',302);fk(303,1,iK,av);_.vb=function bv(a){Zu(this.a)};var Vg=VE(EK,'FragmentHandler/0methodref$onResponseHandlingEnded$Type',303);fk(300,1,{},cv);var Xg=VE(EK,'NodeUnregisterEvent',300);fk(173,1,{},lv);_.ub=function mv(a){gv(this.a,a)};var Yg=VE(EK,'RouterLinkHandler/lambda$0$Type',173);fk(174,1,uJ,nv);_.I=function ov(){Bq(this.a)};var Zg=VE(EK,'RouterLinkHandler/lambda$1$Type',174);fk(6,1,{6:1},Bv);_.Eb=function Cv(){return sv(this)};_.Fb=function Dv(){return this.g};_.d=0;_.j=false;var ah=VE(EK,'StateNode',6);fk(352,$wnd.Function,{},Fv);_.M=function Gv(a,b){vv(this.a,this.b,a,b)};fk(353,$wnd.Function,{},Hv);_.pb=function Iv(a){Ev(this.a,a)};var Ei=XE('elemental.events','EventRemover');fk(142,1,IK,Jv);_.Gb=function Kv(){wv(this.a,this.b)};var $g=VE(EK,'StateNode/lambda$2$Type',142);fk(354,$wnd.Function,{},Lv);_.pb=function Mv(a){xv(this.a,a)};fk(143,1,IK,Nv);_.Gb=function Ov(){yv(this.a,this.b)};var _g=VE(EK,'StateNode/lambda$4$Type',143);fk(11,1,{11:1},dw);_.Hb=function ew(){return this.e};_.Ib=function gw(a,b,c,d){var e;if(Uv(this,a)){e=Kd(c);bu(Fd(yl(this.c,Fg),26),a,b,e,d)}};_.d=false;_.f=false;var bh=VE(EK,'StateTree',11);fk(357,$wnd.Function,{},hw);_.pb=function iw(a){rv(Fd(a,6),hk(lw.prototype.M,lw,[]))};fk(358,$wnd.Function,{},jw);_.M=function kw(a,b){Wv(this.a,a)};fk(348,$wnd.Function,{},lw);_.M=function mw(a,b){fw(a,b)};var uw,vw;fk(168,1,{},Aw);var dh=VE(PK,'Binder/BinderContextImpl',168);var eh=XE(PK,'BindingStrategy');fk(94,1,{94:1},Fw);_.b=false;_.g=0;var Bw;var hh=VE(PK,'Debouncer',94);fk(347,1,{});_.b=false;_.c=0;var Ji=VE(RK,'Timer',347);fk(311,347,{},Lw);var fh=VE(PK,'Debouncer/1',311);fk(312,347,{},Mw);var gh=VE(PK,'Debouncer/2',312);fk(386,$wnd.Function,{},Ow);_.M=function Pw(a,b){var c;Nw(this,(c=Ld(a,$wnd.Map),Kd(b),c))};fk(387,$wnd.Function,{},Sw);_.pb=function Tw(a){Qw(this.a,a)};fk(388,$wnd.Function,{},Uw);_.pb=function Vw(a){Rw(this.a,a)};fk(297,1,{},Zw);_.jb=function $w(){return kx(this.a)};var ih=VE(PK,'ServerEventHandlerBinder/lambda$0$Type',297);fk(298,1,fK,_w);_.qb=function ax(a){Yw(this.b,this.a,this.c,a)};_.c=false;var jh=VE(PK,'ServerEventHandlerBinder/lambda$1$Type',298);var bx;fk(242,1,{320:1},jy);_.Jb=function ky(a,b,c){sx(this,a,b,c)};_.Kb=function ny(a){return Cx(a)};_.Mb=function sy(a,b){var c,d,e;d=Object.keys(a);e=new _z(d,a,b);c=Fd(b.e.get(lh),76);!c?$x(e.b,e.a,e.c):(c.a=e)};_.Nb=function ty(r,s){var t=this;var u=s._propertiesChanged;u&&(s._propertiesChanged=function(a,b,c){_I(function(){t.Mb(b,r)})();u.apply(this,arguments)});var v=r.Fb();var w=s.ready;s.ready=function(){w.apply(this,arguments);Nn(s);var q=function(){var o=s.root.querySelector(ZK);if(o){s.removeEventListener($K,q)}else{return}if(!o.constructor.prototype.$propChangedModified){o.constructor.prototype.$propChangedModified=true;var p=o.constructor.prototype._propertiesChanged;o.constructor.prototype._propertiesChanged=function(a,b,c){p.apply(this,arguments);var d=Object.getOwnPropertyNames(b);var e='items.';var f;for(f=0;f0){var i=h.substr(0,g);var j=h.substr(g+1);var k=a.items[i];if(k&&k.nodeId){var l=k.nodeId;var m=k[j];var n=this.__dataHost;while(!n.localName||n.__dataHost){n=n.__dataHost}_I(function(){ry(l,n,j,m,v)})()}}}}}}};s.root&&s.root.querySelector(ZK)?q():s.addEventListener($K,q)}};_.Lb=function uy(a){if(a.c.has(0)){return true}return !!a.g&&I(a,a.g.e)};var mx,nx;var Qh=VE(PK,'SimpleElementBindingStrategy',242);fk(376,$wnd.Function,{},Jy);_.pb=function Ky(a){Fd(a,42).Gb()};fk(380,$wnd.Function,{},Ly);_.pb=function My(a){Fd(a,18).X()};fk(106,1,{},Ny);var kh=VE(PK,'SimpleElementBindingStrategy/BindingContext',106);fk(76,1,{76:1},Oy);var lh=VE(PK,'SimpleElementBindingStrategy/InitialPropertyUpdate',76);fk(243,1,{},Py);_.Ob=function Qy(a){Ox(this.a,a)};var mh=VE(PK,'SimpleElementBindingStrategy/lambda$0$Type',243);fk(244,1,{},Ry);_.Ob=function Sy(a){Px(this.a,a)};var nh=VE(PK,'SimpleElementBindingStrategy/lambda$1$Type',244);fk(255,1,aK,Ty);_.ob=function Uy(){Qx(this.b,this.c,this.a)};var oh=VE(PK,'SimpleElementBindingStrategy/lambda$10$Type',255);fk(256,1,uJ,Vy);_.I=function Wy(){this.b.Ob(this.a)};var ph=VE(PK,'SimpleElementBindingStrategy/lambda$11$Type',256);fk(257,1,uJ,Xy);_.I=function Yy(){this.a[this.b]=Jn(this.c)};var qh=VE(PK,'SimpleElementBindingStrategy/lambda$12$Type',257);fk(259,1,fK,Zy);_.qb=function $y(a){Rx(this.a,a)};var rh=VE(PK,'SimpleElementBindingStrategy/lambda$13$Type',259);fk(261,1,fK,_y);_.qb=function az(a){Sx(this.a,a)};var sh=VE(PK,'SimpleElementBindingStrategy/lambda$14$Type',261);fk(262,1,XJ,bz);_.X=function cz(){Lx(this.a,this.b,this.c,false)};var th=VE(PK,'SimpleElementBindingStrategy/lambda$15$Type',262);fk(263,1,XJ,dz);_.X=function ez(){Lx(this.a,this.b,this.c,false)};var uh=VE(PK,'SimpleElementBindingStrategy/lambda$16$Type',263);fk(264,1,XJ,fz);_.X=function gz(){Nx(this.a,this.b,this.c,false)};var vh=VE(PK,'SimpleElementBindingStrategy/lambda$17$Type',264);fk(265,1,{},hz);_.jb=function iz(){return vy(this.a,this.b)};var wh=VE(PK,'SimpleElementBindingStrategy/lambda$18$Type',265);fk(266,1,{},jz);_.jb=function kz(){return wy(this.a,this.b)};var xh=VE(PK,'SimpleElementBindingStrategy/lambda$19$Type',266);fk(245,1,{},lz);_.Ob=function mz(a){Tx(this.a,a)};var yh=VE(PK,'SimpleElementBindingStrategy/lambda$2$Type',245);fk(373,$wnd.Function,{},nz);_.M=function oz(a,b){rC(Fd(a,49))};fk(374,$wnd.Function,{},pz);_.pb=function qz(a){xy(this.a,a)};fk(375,$wnd.Function,{},rz);_.M=function sz(a,b){Fd(a,42).Gb()};fk(377,$wnd.Function,{},tz);_.M=function uz(a,b){Ux(this.a,a)};fk(267,1,gK,vz);_.sb=function wz(a){Vx(this.a,a)};var zh=VE(PK,'SimpleElementBindingStrategy/lambda$25$Type',267);fk(268,1,uJ,xz);_.I=function yz(){Wx(this.b,this.a,this.c)};var Ah=VE(PK,'SimpleElementBindingStrategy/lambda$26$Type',268);fk(269,1,{},zz);_.ub=function Az(a){Xx(this.a,a)};var Bh=VE(PK,'SimpleElementBindingStrategy/lambda$27$Type',269);fk(378,$wnd.Function,{},Bz);_.pb=function Cz(a){Yx(this.a,this.b,a)};fk(270,1,{},Ez);_.pb=function Fz(a){Dz(this,a)};var Ch=VE(PK,'SimpleElementBindingStrategy/lambda$29$Type',270);fk(246,1,{},Gz);_.rb=function Hz(a){_x(this.c,this.b,this.a)};var Dh=VE(PK,'SimpleElementBindingStrategy/lambda$3$Type',246);fk(271,1,fK,Iz);_.qb=function Jz(a){zy(this.a,a)};var Eh=VE(PK,'SimpleElementBindingStrategy/lambda$30$Type',271);fk(272,1,{},Kz);_.jb=function Lz(){return this.a.b};var Fh=VE(PK,'SimpleElementBindingStrategy/lambda$31$Type',272);fk(379,$wnd.Function,{},Mz);_.pb=function Nz(a){this.a.push(Fd(a,6))};fk(247,1,{},Oz);_.I=function Pz(){Ay(this.a)};var Gh=VE(PK,'SimpleElementBindingStrategy/lambda$33$Type',247);fk(249,1,{},Qz);_.jb=function Rz(){return this.a[this.b]};var Hh=VE(PK,'SimpleElementBindingStrategy/lambda$34$Type',249);fk(251,1,aK,Sz);_.ob=function Tz(){rx(this.a)};var Ih=VE(PK,'SimpleElementBindingStrategy/lambda$35$Type',251);fk(258,1,aK,Uz);_.ob=function Vz(){Jx(this.b,this.a)};var Jh=VE(PK,'SimpleElementBindingStrategy/lambda$36$Type',258);fk(260,1,aK,Wz);_.ob=function Xz(){Zx(this.b,this.a)};var Kh=VE(PK,'SimpleElementBindingStrategy/lambda$37$Type',260);fk(248,1,aK,Yz);_.ob=function Zz(){By(this.a)};var Lh=VE(PK,'SimpleElementBindingStrategy/lambda$4$Type',248);fk(250,1,XJ,_z);_.X=function aA(){$z(this)};var Mh=VE(PK,'SimpleElementBindingStrategy/lambda$5$Type',250);fk(252,1,gK,bA);_.sb=function cA(a){CC(new Sz(this.a))};var Nh=VE(PK,'SimpleElementBindingStrategy/lambda$6$Type',252);fk(372,$wnd.Function,{},dA);_.M=function eA(a,b){Cy(this.b,this.a,a)};fk(253,1,gK,fA);_.sb=function gA(a){Dy(this.b,this.a,a)};var Oh=VE(PK,'SimpleElementBindingStrategy/lambda$8$Type',253);fk(254,1,hK,hA);_.tb=function iA(a){gy(this.c,this.b,this.a)};var Ph=VE(PK,'SimpleElementBindingStrategy/lambda$9$Type',254);fk(273,1,{320:1},nA);_.Jb=function oA(a,b,c){lA(a,b)};_.Kb=function pA(a){return $doc.createTextNode('')};_.Lb=function qA(a){return a.c.has(7)};var jA;var Th=VE(PK,'TextBindingStrategy',273);fk(274,1,uJ,rA);_.I=function sA(){kA();XD(this.a,Md(VA(this.b)))};var Rh=VE(PK,'TextBindingStrategy/lambda$0$Type',274);fk(275,1,{},tA);_.rb=function uA(a){mA(this.b,this.a)};var Sh=VE(PK,'TextBindingStrategy/lambda$1$Type',275);fk(351,$wnd.Function,{},zA);_.pb=function AA(a){this.a.add(a)};fk(355,$wnd.Function,{},CA);_.M=function DA(a,b){this.a.push(a)};var FA,GA=false;fk(289,1,{},IA);var Uh=VE('com.vaadin.client.flow.dom','PolymerDomApiImpl',289);fk(77,1,{77:1},JA);var Vh=VE('com.vaadin.client.flow.model','UpdatableModelProperties',77);fk(385,$wnd.Function,{},KA);_.pb=function LA(a){this.a.add(Md(a))};fk(91,1,{});_.Pb=function NA(){return this.e};var ti=VE(_J,'ReactiveValueChangeEvent',91);fk(52,91,{52:1},OA);_.Pb=function PA(){return Fd(this.e,29)};_.b=false;_.c=0;var Wh=VE(_K,'ListSpliceEvent',52);fk(28,1,{28:1,321:1},cB);_.Qb=function dB(a){return fB(this.a,a)};_.b=false;_.c=false;_.d=false;var QA;var di=VE(_K,'MapProperty',28);fk(89,1,{});var si=VE(_J,'ReactiveEventRouter',89);fk(228,89,{},lB);_.Rb=function mB(a,b){Fd(a,44).tb(Fd(b,79))};_.Sb=function nB(a){return new oB(a)};var Yh=VE(_K,'MapProperty/1',228);fk(229,1,hK,oB);_.tb=function pB(a){pC(this.a)};var Xh=VE(_K,'MapProperty/1/0methodref$onValueChange$Type',229);fk(227,1,XJ,qB);_.X=function rB(){RA()};var Zh=VE(_K,'MapProperty/lambda$0$Type',227);fk(230,1,aK,sB);_.ob=function tB(){this.a.d=false};var $h=VE(_K,'MapProperty/lambda$1$Type',230);fk(231,1,aK,uB);_.ob=function vB(){this.a.d=false};var _h=VE(_K,'MapProperty/lambda$2$Type',231);fk(232,1,XJ,wB);_.X=function xB(){$A(this.a,this.b)};var ai=VE(_K,'MapProperty/lambda$3$Type',232);fk(92,91,{92:1},yB);_.Pb=function zB(){return Fd(this.e,40)};var bi=VE(_K,'MapPropertyAddEvent',92);fk(79,91,{79:1},AB);_.Pb=function BB(){return Fd(this.e,28)};var ci=VE(_K,'MapPropertyChangeEvent',79);fk(39,1,{39:1});_.d=0;var ei=VE(_K,'NodeFeature',39);fk(29,39,{39:1,29:1,321:1},JB);_.Qb=function KB(a){return fB(this.a,a)};_.Tb=function LB(a){var b,c,d;c=[];for(b=0;b=0?':'+this.c:'')+')'};_.c=0;var hj=VE(dJ,'StackTraceElement',30);Dd={4:1,111:1,32:1,2:1};var kj=VE(dJ,'String',2);fk(71,85,{111:1},$F,_F,aG);var ij=VE(dJ,'StringBuilder',71);fk(123,86,xJ,bG);var jj=VE(dJ,'StringIndexOutOfBoundsException',123);fk(500,1,{});var cG;fk(338,1,{});_.A=function fG(){var a,b,c;c=new XH('[',']');for(b=this.ac();b.cc();){a=b.dc();WH(c,a===this?'(this Collection)':a==null?yJ:jk(a))}return !c.a?c.c:c.e.length==0?c.a.a:c.a.a+(''+c.e)};var mj=VE(mL,'AbstractCollection',338);fk(341,1,{110:1});_.u=function jG(a){var b,c,d;if(a===this){return true}if(!Pd(a,78)){return false}d=Fd(a,110);if(this.a.c+this.b.c!=d.a.c+d.b.c){return false}for(c=new yG((new tG(d)).a);c.b;){b=xG(c);if(!gG(this,b)){return false}}return true};_.w=function lG(){return dH(new tG(this))};_.A=function mG(){var a,b,c;c=new XH('{','}');for(b=new yG((new tG(this)).a);b.b;){a=xG(b);WH(c,iG(this,a.ec())+'='+iG(this,a.fc()))}return !c.a?c.c:c.e.length==0?c.a.a:c.a.a+(''+c.e)};var vj=VE(mL,'AbstractMap',341);fk(280,341,{110:1});var pj=VE(mL,'AbstractHashMap',280);fk(340,338,{319:1});_.u=function qG(a){var b;if(a===this){return true}if(!Pd(a,64)){return false}b=Fd(a,319);if(pG(b.a)!=this.bc()){return false}return eG(this,b)};_.w=function rG(){return dH(this)};var wj=VE(mL,'AbstractSet',340);fk(64,340,{64:1,319:1},tG);_.ac=function uG(){return new yG(this.a)};_.bc=function vG(){return pG(this.a)};var oj=VE(mL,'AbstractHashMap/EntrySet',64);fk(65,1,{},yG);_.dc=function AG(){return xG(this)};_.cc=function zG(){return this.b};_.b=false;var nj=VE(mL,'AbstractHashMap/EntrySetIterator',65);fk(339,338,{318:1});_.u=function BG(a){var b,c,d,e,f;if(a===this){return true}if(!Pd(a,45)){return false}f=Fd(a,318);if(this.bc()!=f.a.length){return false}e=new ZG(f);for(c=new ZG(this);c.a Element[]; +export declare const licenseCheckOk: (data: Product) => void; +export declare const licenseCheckFailed: (data: ProductAndMessage) => void; +export declare const licenseCheckNoKey: (data: ProductAndMessage) => void; +export declare const licenseInit: () => void; diff --git a/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/License.js b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/License.js new file mode 100644 index 00000000..5f0f6178 --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/License.js @@ -0,0 +1,110 @@ +const noLicenseFallbackTimeout = 1000; +export const findAll = (element, tags) => { + const lightDom = Array.from(element.querySelectorAll(tags.join(', '))); + const shadowDom = Array.from(element.querySelectorAll('*')) + .filter((e) => e.shadowRoot) + .flatMap((e) => findAll(e.shadowRoot, tags)); + return [...lightDom, ...shadowDom]; +}; +let licenseCheckListener = false; +const showNoLicenseFallback = (element, productAndMessage) => { + if (!licenseCheckListener) { + // When a license check has succeeded, refresh so that all elements are properly shown again + window.addEventListener('message', (e) => { + if (e.data === 'validate-license') { + window.location.reload(); + } + }, false); + licenseCheckListener = true; + } + const overlay = element._overlayElement; + if (overlay) { + if (overlay.shadowRoot) { + const defaultSlot = overlay.shadowRoot.querySelector('slot:not([name])'); + if (defaultSlot && defaultSlot.assignedElements().length > 0) { + showNoLicenseFallback(defaultSlot.assignedElements()[0], productAndMessage); + return; + } + } + showNoLicenseFallback(overlay, productAndMessage); + return; + } + const htmlMessage = productAndMessage.messageHtml + ? productAndMessage.messageHtml + : `${productAndMessage.message}

Component: ${productAndMessage.product.name} ${productAndMessage.product.version}

`.replace(/https:([^ ]*)/g, "https:$1"); + if (element.isConnected) { + element.outerHTML = `
${htmlMessage}
`; + } +}; +const productTagNames = {}; +const productChecking = {}; +const productMissingLicense = {}; +const productCheckOk = {}; +const key = (product) => { + return `${product.name}_${product.version}`; +}; +const checkLicenseIfNeeded = (cvdlElement) => { + var _a; + const { cvdlName, version } = cvdlElement.constructor; + const product = { name: cvdlName, version }; + const tagName = cvdlElement.tagName.toLowerCase(); + productTagNames[cvdlName] = (_a = productTagNames[cvdlName]) !== null && _a !== void 0 ? _a : []; + productTagNames[cvdlName].push(tagName); + const failedLicenseCheck = productMissingLicense[key(product)]; + if (failedLicenseCheck) { + // Has been checked and the check failed + setTimeout(() => showNoLicenseFallback(cvdlElement, failedLicenseCheck), noLicenseFallbackTimeout); + } + if (productMissingLicense[key(product)] || productCheckOk[key(product)]) { + // Already checked + } + else if (!productChecking[key(product)]) { + // Has not been checked + productChecking[key(product)] = true; + window.Vaadin.devTools.checkLicense(product); + } +}; +export const licenseCheckOk = (data) => { + productCheckOk[key(data)] = true; + // eslint-disable-next-line no-console + console.debug('License check ok for', data); +}; +export const licenseCheckFailed = (data) => { + const productName = data.product.name; + productMissingLicense[key(data.product)] = data; + // eslint-disable-next-line no-console + console.error('License check failed for', productName); + const tags = productTagNames[productName]; + if ((tags === null || tags === void 0 ? void 0 : tags.length) > 0) { + findAll(document, tags).forEach((element) => { + setTimeout(() => showNoLicenseFallback(element, productMissingLicense[key(data.product)]), noLicenseFallbackTimeout); + }); + } +}; +export const licenseCheckNoKey = (data) => { + const keyUrl = data.message; + const productName = data.product.name; + data.messageHtml = `No license found. Go here to start a trial or retrieve your license.`; + productMissingLicense[key(data.product)] = data; + // eslint-disable-next-line no-console + console.error('No license found when checking', productName); + const tags = productTagNames[productName]; + if ((tags === null || tags === void 0 ? void 0 : tags.length) > 0) { + findAll(document, tags).forEach((element) => { + setTimeout(() => showNoLicenseFallback(element, productMissingLicense[key(data.product)]), noLicenseFallbackTimeout); + }); + } +}; +export const licenseInit = () => { + // Process already registered elements + window.Vaadin.devTools.createdCvdlElements.forEach((element) => { + checkLicenseIfNeeded(element); + }); + // Handle new elements directly + window.Vaadin.devTools.createdCvdlElements = { + push: (element) => { + checkLicenseIfNeeded(element); + } + }; +}; +//# sourceMappingURL=License.js.map \ No newline at end of file diff --git a/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/License.js.map b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/License.js.map new file mode 100644 index 00000000..49a8674c --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/License.js.map @@ -0,0 +1 @@ +{"version":3,"file":"License.js","sourceRoot":"","sources":["../../../../src/main/frontend/License.ts"],"names":[],"mappings":"AAAA,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAatC,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,OAAwC,EAAE,IAAc,EAAa,EAAE;IAC7F,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACvE,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;SACxD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;SAC3B,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,UAAW,EAAE,IAAI,CAAC,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,QAAQ,EAAE,GAAG,SAAS,CAAC,CAAC;AACrC,CAAC,CAAC;AAEF,IAAI,oBAAoB,GAAG,KAAK,CAAC;AAEjC,MAAM,qBAAqB,GAAG,CAAC,OAAgB,EAAE,iBAAoC,EAAE,EAAE;IACvF,IAAI,CAAC,oBAAoB,EAAE;QACzB,4FAA4F;QAC5F,MAAM,CAAC,gBAAgB,CACrB,SAAS,EACT,CAAC,CAAC,EAAE,EAAE;YACJ,IAAI,CAAC,CAAC,IAAI,KAAK,kBAAkB,EAAE;gBACjC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;aAC1B;QACH,CAAC,EACD,KAAK,CACN,CAAC;QACF,oBAAoB,GAAG,IAAI,CAAC;KAC7B;IACD,MAAM,OAAO,GAAI,OAAe,CAAC,eAAe,CAAC;IACjD,IAAI,OAAO,EAAE;QACX,IAAI,OAAO,CAAC,UAAU,EAAE;YACtB,MAAM,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;YACzE,IAAI,WAAW,IAAI,WAAW,CAAC,gBAAgB,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC5D,qBAAqB,CAAC,WAAW,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;gBAC5E,OAAO;aACR;SACF;QACD,qBAAqB,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;QAClD,OAAO;KACR;IAED,MAAM,WAAW,GAAG,iBAAiB,CAAC,WAAW;QAC/C,CAAC,CAAC,iBAAiB,CAAC,WAAW;QAC/B,CAAC,CAAC,GAAG,iBAAiB,CAAC,OAAO,kBAAkB,iBAAiB,CAAC,OAAO,CAAC,IAAI,IAAI,iBAAiB,CAAC,OAAO,CAAC,OAAO,MAAM,CAAC,OAAO,CAC7H,gBAAgB,EAChB,iCAAiC,CAClC,CAAC;IAEN,IAAI,OAAO,CAAC,WAAW,EAAE;QACvB,OAAO,CAAC,SAAS,GAAG,sGAAsG,WAAW,qBAAqB,CAAC;KAC5J;AACH,CAAC,CAAC;AAEF,MAAM,eAAe,GAA6B,EAAE,CAAC;AACrD,MAAM,eAAe,GAA4B,EAAE,CAAC;AACpD,MAAM,qBAAqB,GAAsC,EAAE,CAAC;AACpE,MAAM,cAAc,GAA4B,EAAE,CAAC;AAEnD,MAAM,GAAG,GAAG,CAAC,OAAgB,EAAU,EAAE;IACvC,OAAO,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;AAC9C,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,WAAoB,EAAE,EAAE;;IACpD,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,WAAW,CAAC,WAGzC,CAAC;IACF,MAAM,OAAO,GAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IACrD,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;IAClD,eAAe,CAAC,QAAQ,CAAC,GAAG,MAAA,eAAe,CAAC,QAAQ,CAAC,mCAAI,EAAE,CAAC;IAC5D,eAAe,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAExC,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/D,IAAI,kBAAkB,EAAE;QACtB,wCAAwC;QACxC,UAAU,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,WAAW,EAAE,kBAAkB,CAAC,EAAE,wBAAwB,CAAC,CAAC;KACpG;IAED,IAAI,qBAAqB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE;QACvE,kBAAkB;KACnB;SAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE;QACzC,uBAAuB;QACvB,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;QACpC,MAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;KACvD;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,IAAa,EAAE,EAAE;IAC9C,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAEjC,sCAAsC;IACtC,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC;AAC9C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,IAAuB,EAAE,EAAE;IAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IACtC,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAChD,sCAAsC;IACtC,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,WAAW,CAAC,CAAC;IAEvD,MAAM,IAAI,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAC1C,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,IAAG,CAAC,EAAE;QACpB,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC1C,UAAU,CACR,GAAG,EAAE,CAAC,qBAAqB,CAAC,OAAO,EAAE,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAC9E,wBAAwB,CACzB,CAAC;QACJ,CAAC,CAAC,CAAC;KACJ;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,IAAuB,EAAE,EAAE;IAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;IAE5B,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IACtC,IAAI,CAAC,WAAW,GAAG,sGAAsG,MAAM,0DAA0D,CAAC;IAC1L,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAChD,sCAAsC;IACtC,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,WAAW,CAAC,CAAC;IAE7D,MAAM,IAAI,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAC1C,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,IAAG,CAAC,EAAE;QACpB,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC1C,UAAU,CACR,GAAG,EAAE,CAAC,qBAAqB,CAAC,OAAO,EAAE,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAC9E,wBAAwB,CACzB,CAAC;QACJ,CAAC,CAAC,CAAC;KACJ;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,EAAE;IAC9B,sCAAsC;IACrC,MAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,OAAgB,EAAE,EAAE;QAC/E,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,+BAA+B;IAC9B,MAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,GAAG;QACpD,IAAI,EAAE,CAAC,OAAgB,EAAE,EAAE;YACzB,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC;KACF,CAAC;AACJ,CAAC,CAAC","sourcesContent":["const noLicenseFallbackTimeout = 1000;\n\nexport interface Product {\n name: string;\n version: string;\n}\n\nexport interface ProductAndMessage {\n message: string;\n messageHtml?: string;\n product: Product;\n}\n\nexport const findAll = (element: Element | ShadowRoot | Document, tags: string[]): Element[] => {\n const lightDom = Array.from(element.querySelectorAll(tags.join(', ')));\n const shadowDom = Array.from(element.querySelectorAll('*'))\n .filter((e) => e.shadowRoot)\n .flatMap((e) => findAll(e.shadowRoot!, tags));\n return [...lightDom, ...shadowDom];\n};\n\nlet licenseCheckListener = false;\n\nconst showNoLicenseFallback = (element: Element, productAndMessage: ProductAndMessage) => {\n if (!licenseCheckListener) {\n // When a license check has succeeded, refresh so that all elements are properly shown again\n window.addEventListener(\n 'message',\n (e) => {\n if (e.data === 'validate-license') {\n window.location.reload();\n }\n },\n false\n );\n licenseCheckListener = true;\n }\n const overlay = (element as any)._overlayElement;\n if (overlay) {\n if (overlay.shadowRoot) {\n const defaultSlot = overlay.shadowRoot.querySelector('slot:not([name])');\n if (defaultSlot && defaultSlot.assignedElements().length > 0) {\n showNoLicenseFallback(defaultSlot.assignedElements()[0], productAndMessage);\n return;\n }\n }\n showNoLicenseFallback(overlay, productAndMessage);\n return;\n }\n\n const htmlMessage = productAndMessage.messageHtml\n ? productAndMessage.messageHtml\n : `${productAndMessage.message}

Component: ${productAndMessage.product.name} ${productAndMessage.product.version}

`.replace(\n /https:([^ ]*)/g,\n \"https:$1\"\n );\n\n if (element.isConnected) {\n element.outerHTML = `
${htmlMessage}
`;\n }\n};\n\nconst productTagNames: Record = {};\nconst productChecking: Record = {};\nconst productMissingLicense: Record = {};\nconst productCheckOk: Record = {};\n\nconst key = (product: Product): string => {\n return `${product.name}_${product.version}`;\n};\n\nconst checkLicenseIfNeeded = (cvdlElement: Element) => {\n const { cvdlName, version } = cvdlElement.constructor as CustomElementConstructor & {\n cvdlName: string;\n version: string;\n };\n const product: Product = { name: cvdlName, version };\n const tagName = cvdlElement.tagName.toLowerCase();\n productTagNames[cvdlName] = productTagNames[cvdlName] ?? [];\n productTagNames[cvdlName].push(tagName);\n\n const failedLicenseCheck = productMissingLicense[key(product)];\n if (failedLicenseCheck) {\n // Has been checked and the check failed\n setTimeout(() => showNoLicenseFallback(cvdlElement, failedLicenseCheck), noLicenseFallbackTimeout);\n }\n\n if (productMissingLicense[key(product)] || productCheckOk[key(product)]) {\n // Already checked\n } else if (!productChecking[key(product)]) {\n // Has not been checked\n productChecking[key(product)] = true;\n (window as any).Vaadin.devTools.checkLicense(product);\n }\n};\n\nexport const licenseCheckOk = (data: Product) => {\n productCheckOk[key(data)] = true;\n\n // eslint-disable-next-line no-console\n console.debug('License check ok for', data);\n};\n\nexport const licenseCheckFailed = (data: ProductAndMessage) => {\n const productName = data.product.name;\n productMissingLicense[key(data.product)] = data;\n // eslint-disable-next-line no-console\n console.error('License check failed for', productName);\n\n const tags = productTagNames[productName];\n if (tags?.length > 0) {\n findAll(document, tags).forEach((element) => {\n setTimeout(\n () => showNoLicenseFallback(element, productMissingLicense[key(data.product)]),\n noLicenseFallbackTimeout\n );\n });\n }\n};\n\nexport const licenseCheckNoKey = (data: ProductAndMessage) => {\n const keyUrl = data.message;\n\n const productName = data.product.name;\n data.messageHtml = `No license found. Go here to start a trial or retrieve your license.`;\n productMissingLicense[key(data.product)] = data;\n // eslint-disable-next-line no-console\n console.error('No license found when checking', productName);\n\n const tags = productTagNames[productName];\n if (tags?.length > 0) {\n findAll(document, tags).forEach((element) => {\n setTimeout(\n () => showNoLicenseFallback(element, productMissingLicense[key(data.product)]),\n noLicenseFallbackTimeout\n );\n });\n }\n};\n\nexport const licenseInit = () => {\n // Process already registered elements\n (window as any).Vaadin.devTools.createdCvdlElements.forEach((element: Element) => {\n checkLicenseIfNeeded(element);\n });\n\n // Handle new elements directly\n (window as any).Vaadin.devTools.createdCvdlElements = {\n push: (element: Element) => {\n checkLicenseIfNeeded(element);\n }\n };\n};\n"]} \ No newline at end of file diff --git a/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/copy-to-clipboard.js b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/copy-to-clipboard.js new file mode 100755 index 00000000..475842a8 --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/copy-to-clipboard.js @@ -0,0 +1,150 @@ +"use strict"; + +var deselectCurrent = function () { + var selection = document.getSelection(); + if (!selection.rangeCount) { + return function () {}; + } + var active = document.activeElement; + + var ranges = []; + for (var i = 0; i < selection.rangeCount; i++) { + ranges.push(selection.getRangeAt(i)); + } + + switch (active.tagName.toUpperCase()) { // .toUpperCase handles XHTML + case 'INPUT': + case 'TEXTAREA': + active.blur(); + break; + + default: + active = null; + break; + } + + selection.removeAllRanges(); + return function () { + selection.type === 'Caret' && + selection.removeAllRanges(); + + if (!selection.rangeCount) { + ranges.forEach(function(range) { + selection.addRange(range); + }); + } + + active && + active.focus(); + }; +}; + + +var clipboardToIE11Formatting = { + "text/plain": "Text", + "text/html": "Url", + "default": "Text" +} + +var defaultMessage = "Copy to clipboard: #{key}, Enter"; + +function format(message) { + var copyKey = (/mac os x/i.test(navigator.userAgent) ? "⌘" : "Ctrl") + "+C"; + return message.replace(/#{\s*key\s*}/g, copyKey); +} + +export function copy(text, options) { + var debug, + message, + reselectPrevious, + range, + selection, + mark, + success = false; + if (!options) { + options = {}; + } + debug = options.debug || false; + try { + reselectPrevious = deselectCurrent(); + + range = document.createRange(); + selection = document.getSelection(); + + mark = document.createElement("span"); + mark.textContent = text; + // reset user styles for span element + mark.style.all = "unset"; + // prevents scrolling to the end of the page + mark.style.position = "fixed"; + mark.style.top = 0; + mark.style.clip = "rect(0, 0, 0, 0)"; + // used to preserve spaces and line breaks + mark.style.whiteSpace = "pre"; + // do not inherit user-select (it may be `none`) + mark.style.webkitUserSelect = "text"; + mark.style.MozUserSelect = "text"; + mark.style.msUserSelect = "text"; + mark.style.userSelect = "text"; + mark.addEventListener("copy", function(e) { + e.stopPropagation(); + if (options.format) { + e.preventDefault(); + if (typeof e.clipboardData === "undefined") { // IE 11 + debug && console.warn("unable to use e.clipboardData"); + debug && console.warn("trying IE specific stuff"); + window.clipboardData.clearData(); + var format = clipboardToIE11Formatting[options.format] || clipboardToIE11Formatting["default"] + window.clipboardData.setData(format, text); + } else { // all other browsers + e.clipboardData.clearData(); + e.clipboardData.setData(options.format, text); + } + } + if (options.onCopy) { + e.preventDefault(); + options.onCopy(e.clipboardData); + } + }); + + document.body.appendChild(mark); + + range.selectNodeContents(mark); + selection.addRange(range); + + var successful = document.execCommand("copy"); + if (!successful) { + throw new Error("copy command was unsuccessful"); + } + success = true; + } catch (err) { + debug && console.error("unable to copy using execCommand: ", err); + debug && console.warn("trying IE specific stuff"); + try { + window.clipboardData.setData(options.format || "text", text); + options.onCopy && options.onCopy(window.clipboardData); + success = true; + } catch (err) { + debug && console.error("unable to copy using clipboardData: ", err); + debug && console.error("falling back to prompt"); + message = format("message" in options ? options.message : defaultMessage); + window.prompt(message, text); + } + } finally { + if (selection) { + if (typeof selection.removeRange == "function") { + selection.removeRange(range); + } else { + selection.removeAllRanges(); + } + } + + if (mark) { + document.body.removeChild(mark); + } + reselectPrevious(); + } + + return success; +} + diff --git a/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/dndConnector-es6.js b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/dndConnector-es6.js new file mode 100644 index 00000000..699684da --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/dndConnector-es6.js @@ -0,0 +1 @@ +import './dndConnector.js'; diff --git a/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/dndConnector.js b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/dndConnector.js new file mode 100644 index 00000000..13170ec2 --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/dndConnector.js @@ -0,0 +1,110 @@ +window.Vaadin = window.Vaadin || {}; +window.Vaadin.Flow = window.Vaadin.Flow || {}; +window.Vaadin.Flow.dndConnector = { + __ondragenterListener: function (event) { + // TODO filter by data type + // TODO prevent dropping on itself (by default) + const effect = event.currentTarget['__dropEffect']; + if (!event.currentTarget.hasAttribute('disabled')) { + if (effect) { + event.dataTransfer.dropEffect = effect; + } + + if (effect && effect !== 'none') { + /* #7108: if drag moves on top of drop target's children, first another ondragenter event + * is fired and then a ondragleave event. This happens again once the drag + * moves on top of another children, or back on top of the drop target element. + * Thus need to "cancel" the following ondragleave, to not remove class name. + * Drop event will happen even when dropped to a child element. */ + if (event.currentTarget.classList.contains('v-drag-over-target')) { + event.currentTarget['__skip-leave'] = true; + } else { + event.currentTarget.classList.add('v-drag-over-target'); + } + // enables browser specific pseudo classes (at least FF) + event.preventDefault(); + event.stopPropagation(); // don't let parents know + } + } + }, + + __ondragoverListener: function (event) { + // TODO filter by data type + // TODO filter by effectAllowed != dropEffect due to Safari & IE11 ? + if (!event.currentTarget.hasAttribute('disabled')) { + const effect = event.currentTarget['__dropEffect']; + if (effect) { + event.dataTransfer.dropEffect = effect; + } + // allows the drop && don't let parents know + event.preventDefault(); + event.stopPropagation(); + } + }, + + __ondragleaveListener: function (event) { + if (event.currentTarget['__skip-leave']) { + event.currentTarget['__skip-leave'] = false; + } else { + event.currentTarget.classList.remove('v-drag-over-target'); + } + // #7109 need to stop or any parent drop target might not get highlighted, + // as ondragenter for it is fired before the child gets dragleave. + event.stopPropagation(); + }, + + __ondropListener: function (event) { + const effect = event.currentTarget['__dropEffect']; + if (effect) { + event.dataTransfer.dropEffect = effect; + } + event.currentTarget.classList.remove('v-drag-over-target'); + // prevent browser handling && don't let parents know + event.preventDefault(); + event.stopPropagation(); + }, + + updateDropTarget: function (element) { + if (element['__active']) { + element.addEventListener('dragenter', this.__ondragenterListener, false); + element.addEventListener('dragover', this.__ondragoverListener, false); + element.addEventListener('dragleave', this.__ondragleaveListener, false); + element.addEventListener('drop', this.__ondropListener, false); + } else { + element.removeEventListener('dragenter', this.__ondragenterListener, false); + element.removeEventListener('dragover', this.__ondragoverListener, false); + element.removeEventListener('dragleave', this.__ondragleaveListener, false); + element.removeEventListener('drop', this.__ondropListener, false); + element.classList.remove('v-drag-over-target'); + } + }, + + /** DRAG SOURCE METHODS: */ + + __dragstartListener: function (event) { + event.stopPropagation(); + event.dataTransfer.setData('text/plain', ''); + if (event.currentTarget.hasAttribute('disabled')) { + event.preventDefault(); + } else { + if (event.currentTarget['__effectAllowed']) { + event.dataTransfer.effectAllowed = event.currentTarget['__effectAllowed']; + } + event.currentTarget.classList.add('v-dragged'); + } + }, + + __dragendListener: function (event) { + event.currentTarget.classList.remove('v-dragged'); + }, + + updateDragSource: function (element) { + if (element['draggable']) { + element.addEventListener('dragstart', this.__dragstartListener, false); + element.addEventListener('dragend', this.__dragendListener, false); + } else { + element.removeEventListener('dragstart', this.__dragstartListener, false); + element.removeEventListener('dragend', this.__dragendListener, false); + } + } +}; diff --git a/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/index.d.ts b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/index.d.ts new file mode 100644 index 00000000..d4e6e0db --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/index.d.ts @@ -0,0 +1 @@ +export * from './Flow'; diff --git a/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/index.js b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/index.js new file mode 100644 index 00000000..6c148278 --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/index.js @@ -0,0 +1,2 @@ +export * from './Flow'; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/index.js.map b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/index.js.map new file mode 100644 index 00000000..c662ab4b --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/main/frontend/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC","sourcesContent":["export * from './Flow';\n"]} \ No newline at end of file diff --git a/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/lumo-includes.ts b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/lumo-includes.ts new file mode 100644 index 00000000..bd4834fe --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/lumo-includes.ts @@ -0,0 +1,9 @@ +import { color } from '@vaadin/vaadin-lumo-styles/color.js'; +import { typography } from '@vaadin/vaadin-lumo-styles/typography.js'; + +const tpl = document.createElement('template'); +tpl.innerHTML = ``; +document.head.appendChild(tpl.content); diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/test-addons/addon-with-jandex/src/main/resources/META-INF/frontend/src/hello-world-jandex.ts b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/src/hello-world-jandex.ts similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/test-addons/addon-with-jandex/src/main/resources/META-INF/frontend/src/hello-world-jandex.ts rename to vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/src/hello-world-jandex.ts diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/test-addons/addon-without-jandex/src/main/resources/META-INF/frontend/src/hello-world.ts b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/src/hello-world.ts similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/test-addons/addon-without-jandex/src/main/resources/META-INF/frontend/src/hello-world.ts rename to vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/src/hello-world.ts diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/reusable-theme/src/main/resources/META-INF/resources/themes/reusable-theme/styles.css b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/themes/reusable-theme/styles.css similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/reusable-theme/src/main/resources/META-INF/resources/themes/reusable-theme/styles.css rename to vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/themes/reusable-theme/styles.css diff --git a/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/tooltip.ts b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/tooltip.ts new file mode 100644 index 00000000..e5849ac6 --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/tooltip.ts @@ -0,0 +1,11 @@ +import { Tooltip } from '@vaadin/tooltip/src/vaadin-tooltip.js'; + +const _window = window as any; +_window.Vaadin = _window.Vaadin || {}; +_window.Vaadin.Flow = _window.Vaadin.Flow || {}; + +_window.Vaadin.Flow.tooltip = { + setDefaultHideDelay: (hideDelay: number) => Tooltip.setDefaultHideDelay(hideDelay), + setDefaultFocusDelay: (focusDelay: number) => Tooltip.setDefaultFocusDelay(focusDelay), + setDefaultHoverDelay: (hoverDelay: number) => Tooltip.setDefaultHoverDelay(hoverDelay), +} diff --git a/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/vaadin-dev-tools.d.ts b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/vaadin-dev-tools.d.ts new file mode 100644 index 00000000..a7583c0c --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/vaadin-dev-tools.d.ts @@ -0,0 +1,119 @@ +import { LitElement } from 'lit'; +import { Product } from './License'; +interface Feature { + id: string; + title: string; + moreInfoLink: string; + requiresServerRestart: boolean; + enabled: boolean; +} +declare enum ConnectionStatus { + ACTIVE = "active", + INACTIVE = "inactive", + UNAVAILABLE = "unavailable", + ERROR = "error" +} +export declare class Connection extends Object { + static HEARTBEAT_INTERVAL: number; + status: ConnectionStatus; + webSocket?: WebSocket; + constructor(url?: string); + onHandshake(): void; + onReload(): void; + onConnectionError(_: string): void; + onStatusChange(_: ConnectionStatus): void; + onMessage(message: any): void; + handleMessage(msg: any): void; + handleError(msg: any): void; + setActive(yes: boolean): void; + setStatus(status: ConnectionStatus): void; + private send; + setFeature(featureId: string, enabled: boolean): void; + sendTelemetry(browserData: any): void; + sendLicenseCheck(product: Product): void; +} +declare enum MessageType { + LOG = "log", + INFORMATION = "information", + WARNING = "warning", + ERROR = "error" +} +interface Message { + id: number; + type: MessageType; + message: string; + details?: string; + link?: string; + persistentId?: string; + dontShowAgain: boolean; + deleted: boolean; +} +export declare class VaadinDevTools extends LitElement { + static BLUE_HSL: import("lit").CSSResult; + static GREEN_HSL: import("lit").CSSResult; + static GREY_HSL: import("lit").CSSResult; + static YELLOW_HSL: import("lit").CSSResult; + static RED_HSL: import("lit").CSSResult; + static MAX_LOG_ROWS: number; + static get styles(): import("lit").CSSResult; + static DISMISSED_NOTIFICATIONS_IN_LOCAL_STORAGE: string; + static ACTIVE_KEY_IN_SESSION_STORAGE: string; + static TRIGGERED_KEY_IN_SESSION_STORAGE: string; + static TRIGGERED_COUNT_KEY_IN_SESSION_STORAGE: string; + static AUTO_DEMOTE_NOTIFICATION_DELAY: number; + static HOTSWAP_AGENT: string; + static JREBEL: string; + static SPRING_BOOT_DEVTOOLS: string; + static BACKEND_DISPLAY_NAME: Record; + static get isActive(): boolean; + static notificationDismissed(persistentId: string): boolean; + url?: string; + liveReloadDisabled?: boolean; + backend?: string; + springBootLiveReloadPort?: number; + expanded: boolean; + messages: Message[]; + splashMessage?: string; + notifications: Message[]; + frontendStatus: ConnectionStatus; + javaStatus: ConnectionStatus; + private tabs; + private activeTab; + private serverInfo; + private features; + private unreadErrors; + private root; + private javaConnection?; + private frontendConnection?; + private nextMessageId; + private disableEventListener?; + private transitionDuration; + elementTelemetry(): void; + openWebSocketConnection(): void; + getDedicatedWebSocketUrl(): string | undefined; + getSpringBootWebSocketUrl(location: any): string; + connectedCallback(): void; + format(o: any): string; + catchErrors(): void; + disconnectedCallback(): void; + toggleExpanded(): void; + showSplashMessage(msg: string | undefined): void; + demoteSplashMessage(): void; + checkLicense(productInfo: Product): void; + log(type: MessageType, message: string, details?: string, link?: string): void; + showNotification(type: MessageType, message: string, details?: string, link?: string, persistentId?: string): void; + dismissNotification(id: number): void; + findNotificationIndex(id: number): number; + toggleDontShowAgain(id: number): void; + setActive(yes: boolean): void; + getStatusColor(status: ConnectionStatus | undefined): import("lit").CSSResult; + renderMessage(messageObject: Message): import("lit-html").TemplateResult<1>; + render(): import("lit-html").TemplateResult<1>; + renderLog(): import("lit-html").TemplateResult<1>; + activateLog(): void; + renderInfo(): import("lit-html").TemplateResult<1>; + private renderFeatures; + copyInfoToClipboard(): void; + toggleFeatureFlag(e: Event, feature: Feature): void; +} +export {}; diff --git a/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/vaadin-dev-tools.js b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/vaadin-dev-tools.js new file mode 100644 index 00000000..547fd0da --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/vaadin-dev-tools.js @@ -0,0 +1,1477 @@ +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +import { css, html, LitElement, nothing } from 'lit'; +import { property, query, state } from 'lit/decorators.js'; +import { classMap } from 'lit/directives/class-map.js'; +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-ignore +import { copy } from './copy-to-clipboard.js'; +import { licenseCheckFailed, licenseCheckNoKey, licenseCheckOk, licenseInit } from './License'; +var ConnectionStatus; +(function (ConnectionStatus) { + ConnectionStatus["ACTIVE"] = "active"; + ConnectionStatus["INACTIVE"] = "inactive"; + ConnectionStatus["UNAVAILABLE"] = "unavailable"; + ConnectionStatus["ERROR"] = "error"; +})(ConnectionStatus || (ConnectionStatus = {})); +export class Connection extends Object { + constructor(url) { + super(); + this.status = ConnectionStatus.UNAVAILABLE; + if (url) { + this.webSocket = new WebSocket(url); + this.webSocket.onmessage = (msg) => this.handleMessage(msg); + this.webSocket.onerror = (err) => this.handleError(err); + this.webSocket.onclose = (_) => { + if (this.status !== ConnectionStatus.ERROR) { + this.setStatus(ConnectionStatus.UNAVAILABLE); + } + this.webSocket = undefined; + }; + } + setInterval(() => { + if (this.webSocket && self.status !== ConnectionStatus.ERROR && this.status !== ConnectionStatus.UNAVAILABLE) { + this.webSocket.send(''); + } + }, Connection.HEARTBEAT_INTERVAL); + } + onHandshake() { + // Intentionally empty + } + onReload() { + // Intentionally empty + } + onConnectionError(_) { + // Intentionally empty + } + onStatusChange(_) { + // Intentionally empty + } + onMessage(message) { + // eslint-disable-next-line no-console + console.error('Unknown message received from the live reload server:', message); + } + handleMessage(msg) { + let json; + try { + json = JSON.parse(msg.data); + } + catch (e) { + this.handleError(`[${e.name}: ${e.message}`); + return; + } + if (json.command === 'hello') { + this.setStatus(ConnectionStatus.ACTIVE); + this.onHandshake(); + } + else if (json.command === 'reload') { + if (this.status === ConnectionStatus.ACTIVE) { + this.onReload(); + } + } + else if (json.command === 'license-check-ok') { + licenseCheckOk(json.data); + } + else if (json.command === 'license-check-failed') { + licenseCheckFailed(json.data); + } + else if (json.command === 'license-check-nokey') { + licenseCheckNoKey(json.data); + } + else { + this.onMessage(json); + } + } + handleError(msg) { + // eslint-disable-next-line no-console + console.error(msg); + this.setStatus(ConnectionStatus.ERROR); + if (msg instanceof Event && this.webSocket) { + this.onConnectionError(`Error in WebSocket connection to ${this.webSocket.url}`); + } + else { + this.onConnectionError(msg); + } + } + setActive(yes) { + if (!yes && this.status === ConnectionStatus.ACTIVE) { + this.setStatus(ConnectionStatus.INACTIVE); + } + else if (yes && this.status === ConnectionStatus.INACTIVE) { + this.setStatus(ConnectionStatus.ACTIVE); + } + } + setStatus(status) { + if (this.status !== status) { + this.status = status; + this.onStatusChange(status); + } + } + send(command, data) { + const message = JSON.stringify({ command, data }); + if (!this.webSocket) { + // eslint-disable-next-line no-console + console.error(`Unable to send message ${command}. No websocket is available`); + } + else if (this.webSocket.readyState !== WebSocket.OPEN) { + this.webSocket.addEventListener('open', () => this.webSocket.send(message)); + } + else { + this.webSocket.send(message); + } + } + setFeature(featureId, enabled) { + this.send('setFeature', { featureId, enabled }); + } + sendTelemetry(browserData) { + this.send('reportTelemetry', { browserData }); + } + sendLicenseCheck(product) { + this.send('checkLicense', product); + } +} +Connection.HEARTBEAT_INTERVAL = 180000; +var MessageType; +(function (MessageType) { + MessageType["LOG"] = "log"; + MessageType["INFORMATION"] = "information"; + MessageType["WARNING"] = "warning"; + MessageType["ERROR"] = "error"; +})(MessageType || (MessageType = {})); +export class VaadinDevTools extends LitElement { + constructor() { + super(...arguments); + this.expanded = false; + this.messages = []; + this.notifications = []; + this.frontendStatus = ConnectionStatus.UNAVAILABLE; + this.javaStatus = ConnectionStatus.UNAVAILABLE; + this.tabs = [ + { id: 'log', title: 'Log', render: this.renderLog, activate: this.activateLog }, + { id: 'info', title: 'Info', render: this.renderInfo }, + { id: 'features', title: 'Feature Flags', render: this.renderFeatures } + ]; + this.activeTab = 'log'; + this.serverInfo = { + flowVersion: '', + vaadinVersion: '', + javaVersion: '', + osVersion: '', + productName: '' + }; + this.features = []; + this.unreadErrors = false; + this.nextMessageId = 1; + this.transitionDuration = 0; + } + static get styles() { + return css ` + :host { + --dev-tools-font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, + 'Helvetica Neue', sans-serif; + --dev-tools-font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', + monospace; + + --dev-tools-font-size: 0.8125rem; + --dev-tools-font-size-small: 0.75rem; + + --dev-tools-text-color: rgba(255, 255, 255, 0.8); + --dev-tools-text-color-secondary: rgba(255, 255, 255, 0.65); + --dev-tools-text-color-emphasis: rgba(255, 255, 255, 0.95); + --dev-tools-text-color-active: rgba(255, 255, 255, 1); + + --dev-tools-background-color-inactive: rgba(45, 45, 45, 0.25); + --dev-tools-background-color-active: rgba(45, 45, 45, 0.98); + --dev-tools-background-color-active-blurred: rgba(45, 45, 45, 0.85); + + --dev-tools-border-radius: 0.5rem; + --dev-tools-box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.05), 0 4px 12px -2px rgba(0, 0, 0, 0.4); + + --dev-tools-blue-hsl: ${this.BLUE_HSL}; + --dev-tools-blue-color: hsl(var(--dev-tools-blue-hsl)); + --dev-tools-green-hsl: ${this.GREEN_HSL}; + --dev-tools-green-color: hsl(var(--dev-tools-green-hsl)); + --dev-tools-grey-hsl: ${this.GREY_HSL}; + --dev-tools-grey-color: hsl(var(--dev-tools-grey-hsl)); + --dev-tools-yellow-hsl: ${this.YELLOW_HSL}; + --dev-tools-yellow-color: hsl(var(--dev-tools-yellow-hsl)); + --dev-tools-red-hsl: ${this.RED_HSL}; + --dev-tools-red-color: hsl(var(--dev-tools-red-hsl)); + + /* Needs to be in ms, used in JavaScript as well */ + --dev-tools-transition-duration: 180ms; + + all: initial; + + direction: ltr; + cursor: default; + font: normal 400 var(--dev-tools-font-size) / 1.125rem var(--dev-tools-font-family); + color: var(--dev-tools-text-color); + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + + position: fixed; + z-index: 20000; + pointer-events: none; + bottom: 0; + right: 0; + width: 100%; + height: 100%; + display: flex; + flex-direction: column-reverse; + align-items: flex-end; + } + + .dev-tools { + pointer-events: auto; + display: flex; + align-items: center; + position: fixed; + z-index: inherit; + right: 0.5rem; + bottom: 0.5rem; + min-width: 1.75rem; + height: 1.75rem; + max-width: 1.75rem; + border-radius: 0.5rem; + padding: 0.375rem; + box-sizing: border-box; + background-color: var(--dev-tools-background-color-inactive); + box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.05); + color: var(--dev-tools-text-color); + transition: var(--dev-tools-transition-duration); + white-space: nowrap; + line-height: 1rem; + } + + .dev-tools:hover, + .dev-tools.active { + background-color: var(--dev-tools-background-color-active); + box-shadow: var(--dev-tools-box-shadow); + } + + .dev-tools.active { + max-width: calc(100% - 1rem); + } + + .dev-tools .dev-tools-icon { + flex: none; + pointer-events: none; + display: inline-block; + width: 1rem; + height: 1rem; + fill: #fff; + transition: var(--dev-tools-transition-duration); + margin: 0; + } + + .dev-tools.active .dev-tools-icon { + opacity: 0; + position: absolute; + transform: scale(0.5); + } + + .dev-tools .status-blip { + flex: none; + display: block; + width: 6px; + height: 6px; + border-radius: 50%; + z-index: 20001; + background: var(--dev-tools-grey-color); + position: absolute; + top: -1px; + right: -1px; + } + + .dev-tools .status-description { + overflow: hidden; + text-overflow: ellipsis; + padding: 0 0.25rem; + } + + .dev-tools.error { + background-color: hsla(var(--dev-tools-red-hsl), 0.15); + animation: bounce 0.5s; + animation-iteration-count: 2; + } + + .switch { + display: inline-flex; + align-items: center; + } + + .switch input { + opacity: 0; + width: 0; + height: 0; + position: absolute; + } + + .switch .slider { + display: block; + flex: none; + width: 28px; + height: 18px; + border-radius: 9px; + background-color: rgba(255, 255, 255, 0.3); + transition: var(--dev-tools-transition-duration); + margin-right: 0.5rem; + } + + .switch:focus-within .slider, + .switch .slider:hover { + background-color: rgba(255, 255, 255, 0.35); + transition: none; + } + + .switch input:focus-visible ~ .slider { + box-shadow: 0 0 0 2px var(--dev-tools-background-color-active), 0 0 0 4px var(--dev-tools-blue-color); + } + + .switch .slider::before { + content: ''; + display: block; + margin: 2px; + width: 14px; + height: 14px; + background-color: #fff; + transition: var(--dev-tools-transition-duration); + border-radius: 50%; + } + + .switch input:checked + .slider { + background-color: var(--dev-tools-green-color); + } + + .switch input:checked + .slider::before { + transform: translateX(10px); + } + + .switch input:disabled + .slider::before { + background-color: var(--dev-tools-grey-color); + } + + .window.hidden { + opacity: 0; + transform: scale(0); + position: absolute; + } + + .window.visible { + transform: none; + opacity: 1; + pointer-events: auto; + } + + .window.visible ~ .dev-tools { + opacity: 0; + pointer-events: none; + } + + .window.visible ~ .dev-tools .dev-tools-icon, + .window.visible ~ .dev-tools .status-blip { + transition: none; + opacity: 0; + } + + .window { + border-radius: var(--dev-tools-border-radius); + overflow: hidden; + margin: 0.5rem; + width: 30rem; + max-width: calc(100% - 1rem); + max-height: calc(100vh - 1rem); + flex-shrink: 1; + background-color: var(--dev-tools-background-color-active); + color: var(--dev-tools-text-color); + transition: var(--dev-tools-transition-duration); + transform-origin: bottom right; + display: flex; + flex-direction: column; + box-shadow: var(--dev-tools-box-shadow); + outline: none; + } + + .window-toolbar { + display: flex; + flex: none; + align-items: center; + padding: 0.375rem; + white-space: nowrap; + order: 1; + background-color: rgba(0, 0, 0, 0.2); + gap: 0.5rem; + } + + .tab { + color: var(--dev-tools-text-color-secondary); + font: inherit; + font-size: var(--dev-tools-font-size-small); + font-weight: 500; + line-height: 1; + padding: 0.25rem 0.375rem; + background: none; + border: none; + margin: 0; + border-radius: 0.25rem; + transition: var(--dev-tools-transition-duration); + } + + .tab:hover, + .tab.active { + color: var(--dev-tools-text-color-active); + } + + .tab.active { + background-color: rgba(255, 255, 255, 0.12); + } + + .tab.unreadErrors::after { + content: '•'; + color: hsl(var(--dev-tools-red-hsl)); + font-size: 1.5rem; + position: absolute; + transform: translate(0, -50%); + } + + .ahreflike { + font-weight: 500; + color: var(--dev-tools-text-color-secondary); + text-decoration: underline; + cursor: pointer; + } + + .ahreflike:hover { + color: var(--dev-tools-text-color-emphasis); + } + + .button { + all: initial; + font-family: inherit; + font-size: var(--dev-tools-font-size-small); + line-height: 1; + white-space: nowrap; + background-color: rgba(0, 0, 0, 0.2); + color: inherit; + font-weight: 600; + padding: 0.25rem 0.375rem; + border-radius: 0.25rem; + } + + .button:focus, + .button:hover { + color: var(--dev-tools-text-color-emphasis); + } + + .minimize-button { + flex: none; + width: 1rem; + height: 1rem; + color: inherit; + background-color: transparent; + border: 0; + padding: 0; + margin: 0 0 0 auto; + opacity: 0.8; + } + + .minimize-button:hover { + opacity: 1; + } + + .minimize-button svg { + max-width: 100%; + } + + .message.information { + --dev-tools-notification-color: var(--dev-tools-blue-color); + } + + .message.warning { + --dev-tools-notification-color: var(--dev-tools-yellow-color); + } + + .message.error { + --dev-tools-notification-color: var(--dev-tools-red-color); + } + + .message { + display: flex; + padding: 0.1875rem 0.75rem 0.1875rem 2rem; + background-clip: padding-box; + } + + .message.log { + padding-left: 0.75rem; + } + + .message-content { + margin-right: 0.5rem; + -webkit-user-select: text; + -moz-user-select: text; + user-select: text; + } + + .message-heading { + position: relative; + display: flex; + align-items: center; + margin: 0.125rem 0; + } + + .message.log { + color: var(--dev-tools-text-color-secondary); + } + + .message:not(.log) .message-heading { + font-weight: 500; + } + + .message.has-details .message-heading { + color: var(--dev-tools-text-color-emphasis); + font-weight: 600; + } + + .message-heading::before { + position: absolute; + margin-left: -1.5rem; + display: inline-block; + text-align: center; + font-size: 0.875em; + font-weight: 600; + line-height: calc(1.25em - 2px); + width: 14px; + height: 14px; + box-sizing: border-box; + border: 1px solid transparent; + border-radius: 50%; + } + + .message.information .message-heading::before { + content: 'i'; + border-color: currentColor; + color: var(--dev-tools-notification-color); + } + + .message.warning .message-heading::before, + .message.error .message-heading::before { + content: '!'; + color: var(--dev-tools-background-color-active); + background-color: var(--dev-tools-notification-color); + } + + .features-tray { + padding: 0.75rem; + flex: auto; + overflow: auto; + animation: fade-in var(--dev-tools-transition-duration) ease-in; + user-select: text; + } + + .features-tray p { + margin-top: 0; + color: var(--dev-tools-text-color-secondary); + } + + .features-tray .feature { + display: flex; + align-items: center; + gap: 1rem; + padding-bottom: 0.5em; + } + + .message .message-details { + font-weight: 400; + color: var(--dev-tools-text-color-secondary); + margin: 0.25rem 0; + } + + .message .message-details[hidden] { + display: none; + } + + .message .message-details p { + display: inline; + margin: 0; + margin-right: 0.375em; + word-break: break-word; + } + + .message .persist { + color: var(--dev-tools-text-color-secondary); + white-space: nowrap; + margin: 0.375rem 0; + display: flex; + align-items: center; + position: relative; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + } + + .message .persist::before { + content: ''; + width: 1em; + height: 1em; + border-radius: 0.2em; + margin-right: 0.375em; + background-color: rgba(255, 255, 255, 0.3); + } + + .message .persist:hover::before { + background-color: rgba(255, 255, 255, 0.4); + } + + .message .persist.on::before { + background-color: rgba(255, 255, 255, 0.9); + } + + .message .persist.on::after { + content: ''; + order: -1; + position: absolute; + width: 0.75em; + height: 0.25em; + border: 2px solid var(--dev-tools-background-color-active); + border-width: 0 0 2px 2px; + transform: translate(0.05em, -0.05em) rotate(-45deg) scale(0.8, 0.9); + } + + .message .dismiss-message { + font-weight: 600; + align-self: stretch; + display: flex; + align-items: center; + padding: 0 0.25rem; + margin-left: 0.5rem; + color: var(--dev-tools-text-color-secondary); + } + + .message .dismiss-message:hover { + color: var(--dev-tools-text-color); + } + + .notification-tray { + display: flex; + flex-direction: column-reverse; + align-items: flex-end; + margin: 0.5rem; + flex: none; + } + + .window.hidden + .notification-tray { + margin-bottom: 3rem; + } + + .notification-tray .message { + pointer-events: auto; + background-color: var(--dev-tools-background-color-active); + color: var(--dev-tools-text-color); + max-width: 30rem; + box-sizing: border-box; + border-radius: var(--dev-tools-border-radius); + margin-top: 0.5rem; + transition: var(--dev-tools-transition-duration); + transform-origin: bottom right; + animation: slideIn var(--dev-tools-transition-duration); + box-shadow: var(--dev-tools-box-shadow); + padding-top: 0.25rem; + padding-bottom: 0.25rem; + } + + .notification-tray .message.animate-out { + animation: slideOut forwards var(--dev-tools-transition-duration); + } + + .notification-tray .message .message-details { + max-height: 10em; + overflow: hidden; + } + + .message-tray { + flex: auto; + overflow: auto; + max-height: 20rem; + user-select: text; + } + + .message-tray .message { + animation: fade-in var(--dev-tools-transition-duration) ease-in; + padding-left: 2.25rem; + } + + .message-tray .message.warning { + background-color: hsla(var(--dev-tools-yellow-hsl), 0.09); + } + + .message-tray .message.error { + background-color: hsla(var(--dev-tools-red-hsl), 0.09); + } + + .message-tray .message.error .message-heading { + color: hsl(var(--dev-tools-red-hsl)); + } + + .message-tray .message.warning .message-heading { + color: hsl(var(--dev-tools-yellow-hsl)); + } + + .message-tray .message + .message { + border-top: 1px solid rgba(255, 255, 255, 0.07); + } + + .message-tray .dismiss-message, + .message-tray .persist { + display: none; + } + + .info-tray { + padding: 0.75rem; + position: relative; + flex: auto; + overflow: auto; + animation: fade-in var(--dev-tools-transition-duration) ease-in; + user-select: text; + } + + .info-tray dl { + margin: 0; + display: grid; + grid-template-columns: max-content 1fr; + column-gap: 0.75rem; + position: relative; + } + + .info-tray dt { + grid-column: 1; + color: var(--dev-tools-text-color-emphasis); + } + + .info-tray dt:not(:first-child)::before { + content: ''; + width: 100%; + position: absolute; + height: 1px; + background-color: rgba(255, 255, 255, 0.1); + margin-top: -0.375rem; + } + + .info-tray dd { + grid-column: 2; + margin: 0; + } + + .info-tray :is(dt, dd):not(:last-child) { + margin-bottom: 0.75rem; + } + + .info-tray dd + dd { + margin-top: -0.5rem; + } + + .info-tray .live-reload-status::before { + content: '•'; + color: var(--status-color); + width: 0.75rem; + display: inline-block; + font-size: 1rem; + line-height: 0.5rem; + } + + .info-tray .copy { + position: fixed; + z-index: 1; + top: 0.5rem; + right: 0.5rem; + } + + .info-tray .switch { + vertical-align: -4px; + } + + @keyframes slideIn { + from { + transform: translateX(100%); + opacity: 0; + } + to { + transform: translateX(0%); + opacity: 1; + } + } + + @keyframes slideOut { + from { + transform: translateX(0%); + opacity: 1; + } + to { + transform: translateX(100%); + opacity: 0; + } + } + + @keyframes fade-in { + 0% { + opacity: 0; + } + } + + @keyframes bounce { + 0% { + transform: scale(0.8); + } + 50% { + transform: scale(1.5); + background-color: hsla(var(--dev-tools-red-hsl), 1); + } + 100% { + transform: scale(1); + } + } + + @supports (backdrop-filter: blur(1px)) { + .dev-tools, + .window, + .notification-tray .message { + backdrop-filter: blur(8px); + } + .dev-tools:hover, + .dev-tools.active, + .window, + .notification-tray .message { + background-color: var(--dev-tools-background-color-active-blurred); + } + } + `; + } + static get isActive() { + const active = window.sessionStorage.getItem(VaadinDevTools.ACTIVE_KEY_IN_SESSION_STORAGE); + return active === null || active !== 'false'; + } + static notificationDismissed(persistentId) { + const shown = window.localStorage.getItem(VaadinDevTools.DISMISSED_NOTIFICATIONS_IN_LOCAL_STORAGE); + return shown !== null && shown.includes(persistentId); + } + elementTelemetry() { + let data = {}; + try { + // localstorage data is collected by vaadin-usage-statistics.js + const localStorageStatsString = localStorage.getItem('vaadin.statistics.basket'); + if (!localStorageStatsString) { + // Do not send empty data + return; + } + data = JSON.parse(localStorageStatsString); + } + catch (e) { + // In case of parse errors don't send anything + return; + } + if (this.frontendConnection) { + this.frontendConnection.sendTelemetry(data); + } + } + openWebSocketConnection() { + this.frontendStatus = ConnectionStatus.UNAVAILABLE; + this.javaStatus = ConnectionStatus.UNAVAILABLE; + const onConnectionError = (msg) => this.log(MessageType.ERROR, msg); + const onReload = () => { + if (this.liveReloadDisabled) { + return; + } + this.showSplashMessage('Reloading…'); + const lastReload = window.sessionStorage.getItem(VaadinDevTools.TRIGGERED_COUNT_KEY_IN_SESSION_STORAGE); + const nextReload = lastReload ? parseInt(lastReload, 10) + 1 : 1; + window.sessionStorage.setItem(VaadinDevTools.TRIGGERED_COUNT_KEY_IN_SESSION_STORAGE, nextReload.toString()); + window.sessionStorage.setItem(VaadinDevTools.TRIGGERED_KEY_IN_SESSION_STORAGE, 'true'); + window.location.reload(); + }; + const frontendConnection = new Connection(this.getDedicatedWebSocketUrl()); + frontendConnection.onHandshake = () => { + this.log(MessageType.LOG, 'Vaadin development mode initialized'); + if (!VaadinDevTools.isActive) { + frontendConnection.setActive(false); + } + this.elementTelemetry(); + }; + frontendConnection.onConnectionError = onConnectionError; + frontendConnection.onReload = onReload; + frontendConnection.onStatusChange = (status) => { + this.frontendStatus = status; + }; + frontendConnection.onMessage = (message) => { + if ((message === null || message === void 0 ? void 0 : message.command) === 'serverInfo') { + this.serverInfo = message.data; + } + else if ((message === null || message === void 0 ? void 0 : message.command) === 'featureFlags') { + this.features = message.data.features; + } + else { + // eslint-disable-next-line no-console + console.error('Unknown message from front-end connection:', JSON.stringify(message)); + } + }; + this.frontendConnection = frontendConnection; + let javaConnection; + if (this.backend === VaadinDevTools.SPRING_BOOT_DEVTOOLS && this.springBootLiveReloadPort) { + javaConnection = new Connection(this.getSpringBootWebSocketUrl(window.location)); + javaConnection.onHandshake = () => { + if (!VaadinDevTools.isActive) { + javaConnection.setActive(false); + } + }; + javaConnection.onReload = onReload; + javaConnection.onConnectionError = onConnectionError; + } + else if (this.backend === VaadinDevTools.JREBEL || this.backend === VaadinDevTools.HOTSWAP_AGENT) { + javaConnection = frontendConnection; + } + else { + javaConnection = new Connection(undefined); + } + const prevOnStatusChange = javaConnection.onStatusChange; + javaConnection.onStatusChange = (status) => { + prevOnStatusChange(status); + this.javaStatus = status; + }; + const prevOnHandshake = javaConnection.onHandshake; + javaConnection.onHandshake = () => { + prevOnHandshake(); + if (this.backend) { + this.log(MessageType.INFORMATION, `Java live reload available: ${VaadinDevTools.BACKEND_DISPLAY_NAME[this.backend]}`); + } + }; + this.javaConnection = javaConnection; + if (!this.backend) { + this.showNotification(MessageType.WARNING, 'Java live reload unavailable', 'Live reload for Java changes is currently not set up. Find out how to make use of this functionality to boost your workflow.', 'https://vaadin.com/docs/latest/flow/configuration/live-reload', 'liveReloadUnavailable'); + } + } + getDedicatedWebSocketUrl() { + function getAbsoluteUrl(relative) { + // Use innerHTML to obtain an absolute URL + const div = document.createElement('div'); + div.innerHTML = ``; + return div.firstChild.href; + } + if (this.url === undefined) { + return undefined; + } + const connectionBaseUrl = getAbsoluteUrl(this.url); + if (!connectionBaseUrl.startsWith('http://') && !connectionBaseUrl.startsWith('https://')) { + // eslint-disable-next-line no-console + console.error('The protocol of the url should be http or https for live reload to work.'); + return undefined; + } + return `${connectionBaseUrl.replace(/^http/, 'ws')}?v-r=push&debug_window`; + } + getSpringBootWebSocketUrl(location) { + const { hostname } = location; + const wsProtocol = location.protocol === 'https:' ? 'wss' : 'ws'; + if (hostname.endsWith('gitpod.io')) { + // Gitpod uses `port-url` instead of `url:port` + const hostnameWithoutPort = hostname.replace(/.*?-/, ''); + return `${wsProtocol}://${this.springBootLiveReloadPort}-${hostnameWithoutPort}`; + } + else { + return `${wsProtocol}://${hostname}:${this.springBootLiveReloadPort}`; + } + } + connectedCallback() { + super.connectedCallback(); + this.catchErrors(); + // when focus or clicking anywhere, move the splash message to the message tray + this.disableEventListener = (_) => this.demoteSplashMessage(); + document.body.addEventListener('focus', this.disableEventListener); + document.body.addEventListener('click', this.disableEventListener); + this.openWebSocketConnection(); + const lastReload = window.sessionStorage.getItem(VaadinDevTools.TRIGGERED_KEY_IN_SESSION_STORAGE); + if (lastReload) { + const now = new Date(); + const reloaded = `${`0${now.getHours()}`.slice(-2)}:${`0${now.getMinutes()}`.slice(-2)}:${`0${now.getSeconds()}`.slice(-2)}`; + this.showSplashMessage(`Page reloaded at ${reloaded}`); + window.sessionStorage.removeItem(VaadinDevTools.TRIGGERED_KEY_IN_SESSION_STORAGE); + } + this.transitionDuration = parseInt(window.getComputedStyle(this).getPropertyValue('--dev-tools-transition-duration'), 10); + const windowAny = window; + windowAny.Vaadin = windowAny.Vaadin || {}; + windowAny.Vaadin.devTools = Object.assign(this, windowAny.Vaadin.devTools); + licenseInit(); + } + format(o) { + return o.toString(); + } + catchErrors() { + // Process stored messages + const queue = window.Vaadin.ConsoleErrors; + if (queue) { + queue.forEach((args) => { + this.log(MessageType.ERROR, args.map((o) => this.format(o)).join(' ')); + }); + } + // Install new handler that immediately processes messages + window.Vaadin.ConsoleErrors = { + push: (args) => { + this.log(MessageType.ERROR, args.map((o) => this.format(o)).join(' ')); + } + }; + } + disconnectedCallback() { + if (this.disableEventListener) { + document.body.removeEventListener('focus', this.disableEventListener); + document.body.removeEventListener('click', this.disableEventListener); + } + super.disconnectedCallback(); + } + toggleExpanded() { + this.notifications.slice().forEach((notification) => this.dismissNotification(notification.id)); + this.expanded = !this.expanded; + if (this.expanded) { + this.root.focus(); + } + } + showSplashMessage(msg) { + this.splashMessage = msg; + if (this.splashMessage) { + if (this.expanded) { + this.demoteSplashMessage(); + } + else { + // automatically move notification to message tray after a certain amount of time + setTimeout(() => { + this.demoteSplashMessage(); + }, VaadinDevTools.AUTO_DEMOTE_NOTIFICATION_DELAY); + } + } + } + demoteSplashMessage() { + if (this.splashMessage) { + this.log(MessageType.LOG, this.splashMessage); + } + this.showSplashMessage(undefined); + } + checkLicense(productInfo) { + if (this.frontendConnection) { + this.frontendConnection.sendLicenseCheck(productInfo); + } + else { + licenseCheckFailed({ message: 'Internal error: no connection', product: productInfo }); + } + } + log(type, message, details, link) { + const id = this.nextMessageId; + this.nextMessageId += 1; + this.messages.push({ + id, + type, + message, + details, + link, + dontShowAgain: false, + deleted: false + }); + while (this.messages.length > VaadinDevTools.MAX_LOG_ROWS) { + this.messages.shift(); + } + this.requestUpdate(); + this.updateComplete.then(() => { + // Scroll into view + const lastMessage = this.renderRoot.querySelector('.message-tray .message:last-child'); + if (this.expanded && lastMessage) { + setTimeout(() => lastMessage.scrollIntoView({ behavior: 'smooth' }), this.transitionDuration); + this.unreadErrors = false; + } + else if (type === MessageType.ERROR) { + this.unreadErrors = true; + } + }); + } + showNotification(type, message, details, link, persistentId) { + if (persistentId === undefined || !VaadinDevTools.notificationDismissed(persistentId)) { + // Do not open persistent message if another is already visible with the same persistentId + const matchingVisibleNotifications = this.notifications + .filter((notification) => notification.persistentId === persistentId) + .filter((notification) => !notification.deleted); + if (matchingVisibleNotifications.length > 0) { + return; + } + const id = this.nextMessageId; + this.nextMessageId += 1; + this.notifications.push({ + id, + type, + message, + details, + link, + persistentId, + dontShowAgain: false, + deleted: false + }); + // automatically move notification to message tray after a certain amount of time unless it contains a link + if (link === undefined) { + setTimeout(() => { + this.dismissNotification(id); + }, VaadinDevTools.AUTO_DEMOTE_NOTIFICATION_DELAY); + } + this.requestUpdate(); + } + else { + this.log(type, message, details, link); + } + } + dismissNotification(id) { + const index = this.findNotificationIndex(id); + if (index !== -1 && !this.notifications[index].deleted) { + const notification = this.notifications[index]; + // user is explicitly dismissing a notification---after that we won't bug them with it + if (notification.dontShowAgain && + notification.persistentId && + !VaadinDevTools.notificationDismissed(notification.persistentId)) { + let dismissed = window.localStorage.getItem(VaadinDevTools.DISMISSED_NOTIFICATIONS_IN_LOCAL_STORAGE); + dismissed = dismissed === null ? notification.persistentId : `${dismissed},${notification.persistentId}`; + window.localStorage.setItem(VaadinDevTools.DISMISSED_NOTIFICATIONS_IN_LOCAL_STORAGE, dismissed); + } + notification.deleted = true; + this.log(notification.type, notification.message, notification.details, notification.link); + // give some time for the animation + setTimeout(() => { + const idx = this.findNotificationIndex(id); + if (idx !== -1) { + this.notifications.splice(idx, 1); + this.requestUpdate(); + } + }, this.transitionDuration); + } + } + findNotificationIndex(id) { + let index = -1; + this.notifications.some((notification, idx) => { + if (notification.id === id) { + index = idx; + return true; + } + else { + return false; + } + }); + return index; + } + toggleDontShowAgain(id) { + const index = this.findNotificationIndex(id); + if (index !== -1 && !this.notifications[index].deleted) { + const notification = this.notifications[index]; + notification.dontShowAgain = !notification.dontShowAgain; + this.requestUpdate(); + } + } + setActive(yes) { + var _a, _b; + (_a = this.frontendConnection) === null || _a === void 0 ? void 0 : _a.setActive(yes); + (_b = this.javaConnection) === null || _b === void 0 ? void 0 : _b.setActive(yes); + window.sessionStorage.setItem(VaadinDevTools.ACTIVE_KEY_IN_SESSION_STORAGE, yes ? 'true' : 'false'); + } + getStatusColor(status) { + if (status === ConnectionStatus.ACTIVE) { + return css `hsl(${VaadinDevTools.GREEN_HSL})`; + } + else if (status === ConnectionStatus.INACTIVE) { + return css `hsl(${VaadinDevTools.GREY_HSL})`; + } + else if (status === ConnectionStatus.UNAVAILABLE) { + return css `hsl(${VaadinDevTools.YELLOW_HSL})`; + } + else if (status === ConnectionStatus.ERROR) { + return css `hsl(${VaadinDevTools.RED_HSL})`; + } + else { + return css `none`; + } + } + /* eslint-disable lit/no-template-arrow */ + renderMessage(messageObject) { + return html ` + + `; + } + /* eslint-disable lit/no-template-map */ + render() { + return html `
e.key === 'Escape' && this.toggleExpanded()} + > +
+ ${this.tabs.map((tab) => html ` `)} + +
+ ${this.tabs.map((tab) => (this.activeTab === tab.id ? tab.render.call(this) : nothing))} +
+ +
${this.notifications.map((msg) => this.renderMessage(msg))}
+
this.toggleExpanded()} + > + ${this.unreadErrors + ? html ` + + + + + + ` + : html ``} + + + ${this.splashMessage ? html `${this.splashMessage}
` : nothing} + `; + } + renderLog() { + return html `
${this.messages.map((msg) => this.renderMessage(msg))}
`; + } + activateLog() { + this.unreadErrors = false; + this.updateComplete.then(() => { + const lastMessage = this.renderRoot.querySelector('.message-tray .message:last-child'); + if (lastMessage) { + lastMessage.scrollIntoView(); + } + }); + } + renderInfo() { + return html `
+ +
+
${this.serverInfo.productName}
+
${this.serverInfo.vaadinVersion}
+
Flow
+
${this.serverInfo.flowVersion}
+
Java
+
${this.serverInfo.javaVersion}
+
OS
+
${this.serverInfo.osVersion}
+
Browser
+
${navigator.userAgent}
+
+ Live reload + +
+
+ Java ${this.javaStatus} ${this.backend ? `(${VaadinDevTools.BACKEND_DISPLAY_NAME[this.backend]})` : ''} +
+
+ Front end ${this.frontendStatus} +
+
+
`; + } + renderFeatures() { + return html `
+ ${this.features.map((feature) => html `
+ + Learn more +
`)} +
`; + } + copyInfoToClipboard() { + const items = this.renderRoot.querySelectorAll('.info-tray dt, .info-tray dd'); + const text = Array.from(items) + .map((message) => (message.localName === 'dd' ? ': ' : '\n') + message.textContent.trim()) + .join('') + .replace(/^\n/, ''); + copy(text); + this.showNotification(MessageType.INFORMATION, 'Environment information copied to clipboard', undefined, undefined, 'versionInfoCopied'); + } + toggleFeatureFlag(e, feature) { + const enabled = e.target.checked; + if (this.frontendConnection) { + this.frontendConnection.setFeature(feature.id, enabled); + this.showNotification(MessageType.INFORMATION, `“${feature.title}” ${enabled ? 'enabled' : 'disabled'}`, feature.requiresServerRestart ? 'This feature requires a server restart' : undefined, undefined, `feature${feature.id}${enabled ? 'Enabled' : 'Disabled'}`); + } + else { + this.log(MessageType.ERROR, `Unable to toggle feature ${feature.title}: No server connection available`); + } + } +} +VaadinDevTools.BLUE_HSL = css `206, 100%, 70%`; +VaadinDevTools.GREEN_HSL = css `145, 80%, 42%`; +VaadinDevTools.GREY_HSL = css `0, 0%, 50%`; +VaadinDevTools.YELLOW_HSL = css `38, 98%, 64%`; +VaadinDevTools.RED_HSL = css `355, 100%, 68%`; +VaadinDevTools.MAX_LOG_ROWS = 1000; +VaadinDevTools.DISMISSED_NOTIFICATIONS_IN_LOCAL_STORAGE = 'vaadin.live-reload.dismissedNotifications'; +VaadinDevTools.ACTIVE_KEY_IN_SESSION_STORAGE = 'vaadin.live-reload.active'; +VaadinDevTools.TRIGGERED_KEY_IN_SESSION_STORAGE = 'vaadin.live-reload.triggered'; +VaadinDevTools.TRIGGERED_COUNT_KEY_IN_SESSION_STORAGE = 'vaadin.live-reload.triggeredCount'; +VaadinDevTools.AUTO_DEMOTE_NOTIFICATION_DELAY = 5000; +VaadinDevTools.HOTSWAP_AGENT = 'HOTSWAP_AGENT'; +VaadinDevTools.JREBEL = 'JREBEL'; +VaadinDevTools.SPRING_BOOT_DEVTOOLS = 'SPRING_BOOT_DEVTOOLS'; +VaadinDevTools.BACKEND_DISPLAY_NAME = { + HOTSWAP_AGENT: 'HotswapAgent', + JREBEL: 'JRebel', + SPRING_BOOT_DEVTOOLS: 'Spring Boot Devtools' +}; +__decorate([ + property({ type: String }) +], VaadinDevTools.prototype, "url", void 0); +__decorate([ + property({ type: Boolean, attribute: true }) +], VaadinDevTools.prototype, "liveReloadDisabled", void 0); +__decorate([ + property({ type: String }) +], VaadinDevTools.prototype, "backend", void 0); +__decorate([ + property({ type: Number }) +], VaadinDevTools.prototype, "springBootLiveReloadPort", void 0); +__decorate([ + property({ type: Boolean, attribute: false }) +], VaadinDevTools.prototype, "expanded", void 0); +__decorate([ + property({ type: Array, attribute: false }) +], VaadinDevTools.prototype, "messages", void 0); +__decorate([ + property({ type: String, attribute: false }) +], VaadinDevTools.prototype, "splashMessage", void 0); +__decorate([ + property({ type: Array, attribute: false }) +], VaadinDevTools.prototype, "notifications", void 0); +__decorate([ + property({ type: String, attribute: false }) +], VaadinDevTools.prototype, "frontendStatus", void 0); +__decorate([ + property({ type: String, attribute: false }) +], VaadinDevTools.prototype, "javaStatus", void 0); +__decorate([ + state() +], VaadinDevTools.prototype, "tabs", void 0); +__decorate([ + state() +], VaadinDevTools.prototype, "activeTab", void 0); +__decorate([ + state() +], VaadinDevTools.prototype, "serverInfo", void 0); +__decorate([ + state() +], VaadinDevTools.prototype, "features", void 0); +__decorate([ + state() +], VaadinDevTools.prototype, "unreadErrors", void 0); +__decorate([ + query('.window') +], VaadinDevTools.prototype, "root", void 0); +if (customElements.get('vaadin-dev-tools') === undefined) { + customElements.define('vaadin-dev-tools', VaadinDevTools); +} +//# sourceMappingURL=vaadin-dev-tools.js.map \ No newline at end of file diff --git a/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/vaadin-dev-tools.js.map b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/vaadin-dev-tools.js.map new file mode 100644 index 00000000..55ba4dd0 --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/jar-resources/vaadin-dev-tools.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vaadin-dev-tools.js","sourceRoot":"","sources":["../../../../src/main/frontend/vaadin-dev-tools.ts"],"names":[],"mappings":"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","sourcesContent":["import { css, html, LitElement, nothing } from 'lit';\nimport { property, query, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport { copy } from './copy-to-clipboard.js';\nimport { licenseCheckFailed, licenseCheckNoKey, licenseCheckOk, Product, licenseInit } from './License';\n\ninterface ServerInfo {\n vaadinVersion: string;\n flowVersion: string;\n javaVersion: string;\n osVersion: string;\n productName: string;\n}\n\ninterface Feature {\n id: string;\n title: string;\n moreInfoLink: string;\n requiresServerRestart: boolean;\n enabled: boolean;\n}\n\ninterface Tab {\n id: 'log' | 'info' | 'features';\n title: string;\n render: () => unknown;\n activate?: () => void;\n}\n\nenum ConnectionStatus {\n ACTIVE = 'active',\n INACTIVE = 'inactive',\n UNAVAILABLE = 'unavailable',\n ERROR = 'error'\n}\n\nexport class Connection extends Object {\n static HEARTBEAT_INTERVAL = 180000;\n\n status: ConnectionStatus = ConnectionStatus.UNAVAILABLE;\n webSocket?: WebSocket;\n\n constructor(url?: string) {\n super();\n\n if (url) {\n this.webSocket = new WebSocket(url);\n this.webSocket.onmessage = (msg) => this.handleMessage(msg);\n this.webSocket.onerror = (err) => this.handleError(err);\n this.webSocket.onclose = (_) => {\n if (this.status !== ConnectionStatus.ERROR) {\n this.setStatus(ConnectionStatus.UNAVAILABLE);\n }\n this.webSocket = undefined;\n };\n }\n\n setInterval(() => {\n if (this.webSocket && self.status !== ConnectionStatus.ERROR && this.status !== ConnectionStatus.UNAVAILABLE) {\n this.webSocket.send('');\n }\n }, Connection.HEARTBEAT_INTERVAL);\n }\n\n onHandshake() {\n // Intentionally empty\n }\n\n onReload() {\n // Intentionally empty\n }\n\n onConnectionError(_: string) {\n // Intentionally empty\n }\n\n onStatusChange(_: ConnectionStatus) {\n // Intentionally empty\n }\n\n onMessage(message: any) {\n // eslint-disable-next-line no-console\n console.error('Unknown message received from the live reload server:', message);\n }\n\n handleMessage(msg: any) {\n let json;\n try {\n json = JSON.parse(msg.data);\n } catch (e: any) {\n this.handleError(`[${e.name}: ${e.message}`);\n return;\n }\n if (json.command === 'hello') {\n this.setStatus(ConnectionStatus.ACTIVE);\n this.onHandshake();\n } else if (json.command === 'reload') {\n if (this.status === ConnectionStatus.ACTIVE) {\n this.onReload();\n }\n } else if (json.command === 'license-check-ok') {\n licenseCheckOk(json.data);\n } else if (json.command === 'license-check-failed') {\n licenseCheckFailed(json.data);\n } else if (json.command === 'license-check-nokey') {\n licenseCheckNoKey(json.data);\n } else {\n this.onMessage(json);\n }\n }\n\n handleError(msg: any) {\n // eslint-disable-next-line no-console\n console.error(msg);\n this.setStatus(ConnectionStatus.ERROR);\n if (msg instanceof Event && this.webSocket) {\n this.onConnectionError(`Error in WebSocket connection to ${this.webSocket.url}`);\n } else {\n this.onConnectionError(msg);\n }\n }\n\n setActive(yes: boolean) {\n if (!yes && this.status === ConnectionStatus.ACTIVE) {\n this.setStatus(ConnectionStatus.INACTIVE);\n } else if (yes && this.status === ConnectionStatus.INACTIVE) {\n this.setStatus(ConnectionStatus.ACTIVE);\n }\n }\n\n setStatus(status: ConnectionStatus) {\n if (this.status !== status) {\n this.status = status;\n this.onStatusChange(status);\n }\n }\n\n private send(command: string, data: any) {\n const message = JSON.stringify({ command, data });\n if (!this.webSocket) {\n // eslint-disable-next-line no-console\n console.error(`Unable to send message ${command}. No websocket is available`);\n } else if (this.webSocket.readyState !== WebSocket.OPEN) {\n this.webSocket.addEventListener('open', () => this.webSocket!.send(message));\n } else {\n this.webSocket.send(message);\n }\n }\n\n setFeature(featureId: string, enabled: boolean) {\n this.send('setFeature', { featureId, enabled });\n }\n sendTelemetry(browserData: any) {\n this.send('reportTelemetry', { browserData });\n }\n sendLicenseCheck(product: Product) {\n this.send('checkLicense', product);\n }\n}\n\nenum MessageType {\n LOG = 'log',\n INFORMATION = 'information',\n WARNING = 'warning',\n ERROR = 'error'\n}\n\ninterface Message {\n id: number;\n type: MessageType;\n message: string;\n details?: string;\n link?: string;\n persistentId?: string;\n dontShowAgain: boolean;\n deleted: boolean;\n}\n\nexport class VaadinDevTools extends LitElement {\n static BLUE_HSL = css`206, 100%, 70%`;\n static GREEN_HSL = css`145, 80%, 42%`;\n static GREY_HSL = css`0, 0%, 50%`;\n static YELLOW_HSL = css`38, 98%, 64%`;\n static RED_HSL = css`355, 100%, 68%`;\n static MAX_LOG_ROWS = 1000;\n\n static get styles() {\n return css`\n :host {\n --dev-tools-font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell,\n 'Helvetica Neue', sans-serif;\n --dev-tools-font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New',\n monospace;\n\n --dev-tools-font-size: 0.8125rem;\n --dev-tools-font-size-small: 0.75rem;\n\n --dev-tools-text-color: rgba(255, 255, 255, 0.8);\n --dev-tools-text-color-secondary: rgba(255, 255, 255, 0.65);\n --dev-tools-text-color-emphasis: rgba(255, 255, 255, 0.95);\n --dev-tools-text-color-active: rgba(255, 255, 255, 1);\n\n --dev-tools-background-color-inactive: rgba(45, 45, 45, 0.25);\n --dev-tools-background-color-active: rgba(45, 45, 45, 0.98);\n --dev-tools-background-color-active-blurred: rgba(45, 45, 45, 0.85);\n\n --dev-tools-border-radius: 0.5rem;\n --dev-tools-box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.05), 0 4px 12px -2px rgba(0, 0, 0, 0.4);\n\n --dev-tools-blue-hsl: ${this.BLUE_HSL};\n --dev-tools-blue-color: hsl(var(--dev-tools-blue-hsl));\n --dev-tools-green-hsl: ${this.GREEN_HSL};\n --dev-tools-green-color: hsl(var(--dev-tools-green-hsl));\n --dev-tools-grey-hsl: ${this.GREY_HSL};\n --dev-tools-grey-color: hsl(var(--dev-tools-grey-hsl));\n --dev-tools-yellow-hsl: ${this.YELLOW_HSL};\n --dev-tools-yellow-color: hsl(var(--dev-tools-yellow-hsl));\n --dev-tools-red-hsl: ${this.RED_HSL};\n --dev-tools-red-color: hsl(var(--dev-tools-red-hsl));\n\n /* Needs to be in ms, used in JavaScript as well */\n --dev-tools-transition-duration: 180ms;\n\n all: initial;\n\n direction: ltr;\n cursor: default;\n font: normal 400 var(--dev-tools-font-size) / 1.125rem var(--dev-tools-font-family);\n color: var(--dev-tools-text-color);\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n\n position: fixed;\n z-index: 20000;\n pointer-events: none;\n bottom: 0;\n right: 0;\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column-reverse;\n align-items: flex-end;\n }\n\n .dev-tools {\n pointer-events: auto;\n display: flex;\n align-items: center;\n position: fixed;\n z-index: inherit;\n right: 0.5rem;\n bottom: 0.5rem;\n min-width: 1.75rem;\n height: 1.75rem;\n max-width: 1.75rem;\n border-radius: 0.5rem;\n padding: 0.375rem;\n box-sizing: border-box;\n background-color: var(--dev-tools-background-color-inactive);\n box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.05);\n color: var(--dev-tools-text-color);\n transition: var(--dev-tools-transition-duration);\n white-space: nowrap;\n line-height: 1rem;\n }\n\n .dev-tools:hover,\n .dev-tools.active {\n background-color: var(--dev-tools-background-color-active);\n box-shadow: var(--dev-tools-box-shadow);\n }\n\n .dev-tools.active {\n max-width: calc(100% - 1rem);\n }\n\n .dev-tools .dev-tools-icon {\n flex: none;\n pointer-events: none;\n display: inline-block;\n width: 1rem;\n height: 1rem;\n fill: #fff;\n transition: var(--dev-tools-transition-duration);\n margin: 0;\n }\n\n .dev-tools.active .dev-tools-icon {\n opacity: 0;\n position: absolute;\n transform: scale(0.5);\n }\n\n .dev-tools .status-blip {\n flex: none;\n display: block;\n width: 6px;\n height: 6px;\n border-radius: 50%;\n z-index: 20001;\n background: var(--dev-tools-grey-color);\n position: absolute;\n top: -1px;\n right: -1px;\n }\n\n .dev-tools .status-description {\n overflow: hidden;\n text-overflow: ellipsis;\n padding: 0 0.25rem;\n }\n\n .dev-tools.error {\n background-color: hsla(var(--dev-tools-red-hsl), 0.15);\n animation: bounce 0.5s;\n animation-iteration-count: 2;\n }\n\n .switch {\n display: inline-flex;\n align-items: center;\n }\n\n .switch input {\n opacity: 0;\n width: 0;\n height: 0;\n position: absolute;\n }\n\n .switch .slider {\n display: block;\n flex: none;\n width: 28px;\n height: 18px;\n border-radius: 9px;\n background-color: rgba(255, 255, 255, 0.3);\n transition: var(--dev-tools-transition-duration);\n margin-right: 0.5rem;\n }\n\n .switch:focus-within .slider,\n .switch .slider:hover {\n background-color: rgba(255, 255, 255, 0.35);\n transition: none;\n }\n\n .switch input:focus-visible ~ .slider {\n box-shadow: 0 0 0 2px var(--dev-tools-background-color-active), 0 0 0 4px var(--dev-tools-blue-color);\n }\n\n .switch .slider::before {\n content: '';\n display: block;\n margin: 2px;\n width: 14px;\n height: 14px;\n background-color: #fff;\n transition: var(--dev-tools-transition-duration);\n border-radius: 50%;\n }\n\n .switch input:checked + .slider {\n background-color: var(--dev-tools-green-color);\n }\n\n .switch input:checked + .slider::before {\n transform: translateX(10px);\n }\n\n .switch input:disabled + .slider::before {\n background-color: var(--dev-tools-grey-color);\n }\n\n .window.hidden {\n opacity: 0;\n transform: scale(0);\n position: absolute;\n }\n\n .window.visible {\n transform: none;\n opacity: 1;\n pointer-events: auto;\n }\n\n .window.visible ~ .dev-tools {\n opacity: 0;\n pointer-events: none;\n }\n\n .window.visible ~ .dev-tools .dev-tools-icon,\n .window.visible ~ .dev-tools .status-blip {\n transition: none;\n opacity: 0;\n }\n\n .window {\n border-radius: var(--dev-tools-border-radius);\n overflow: hidden;\n margin: 0.5rem;\n width: 30rem;\n max-width: calc(100% - 1rem);\n max-height: calc(100vh - 1rem);\n flex-shrink: 1;\n background-color: var(--dev-tools-background-color-active);\n color: var(--dev-tools-text-color);\n transition: var(--dev-tools-transition-duration);\n transform-origin: bottom right;\n display: flex;\n flex-direction: column;\n box-shadow: var(--dev-tools-box-shadow);\n outline: none;\n }\n\n .window-toolbar {\n display: flex;\n flex: none;\n align-items: center;\n padding: 0.375rem;\n white-space: nowrap;\n order: 1;\n background-color: rgba(0, 0, 0, 0.2);\n gap: 0.5rem;\n }\n\n .tab {\n color: var(--dev-tools-text-color-secondary);\n font: inherit;\n font-size: var(--dev-tools-font-size-small);\n font-weight: 500;\n line-height: 1;\n padding: 0.25rem 0.375rem;\n background: none;\n border: none;\n margin: 0;\n border-radius: 0.25rem;\n transition: var(--dev-tools-transition-duration);\n }\n\n .tab:hover,\n .tab.active {\n color: var(--dev-tools-text-color-active);\n }\n\n .tab.active {\n background-color: rgba(255, 255, 255, 0.12);\n }\n\n .tab.unreadErrors::after {\n content: '•';\n color: hsl(var(--dev-tools-red-hsl));\n font-size: 1.5rem;\n position: absolute;\n transform: translate(0, -50%);\n }\n\n .ahreflike {\n font-weight: 500;\n color: var(--dev-tools-text-color-secondary);\n text-decoration: underline;\n cursor: pointer;\n }\n\n .ahreflike:hover {\n color: var(--dev-tools-text-color-emphasis);\n }\n\n .button {\n all: initial;\n font-family: inherit;\n font-size: var(--dev-tools-font-size-small);\n line-height: 1;\n white-space: nowrap;\n background-color: rgba(0, 0, 0, 0.2);\n color: inherit;\n font-weight: 600;\n padding: 0.25rem 0.375rem;\n border-radius: 0.25rem;\n }\n\n .button:focus,\n .button:hover {\n color: var(--dev-tools-text-color-emphasis);\n }\n\n .minimize-button {\n flex: none;\n width: 1rem;\n height: 1rem;\n color: inherit;\n background-color: transparent;\n border: 0;\n padding: 0;\n margin: 0 0 0 auto;\n opacity: 0.8;\n }\n\n .minimize-button:hover {\n opacity: 1;\n }\n\n .minimize-button svg {\n max-width: 100%;\n }\n\n .message.information {\n --dev-tools-notification-color: var(--dev-tools-blue-color);\n }\n\n .message.warning {\n --dev-tools-notification-color: var(--dev-tools-yellow-color);\n }\n\n .message.error {\n --dev-tools-notification-color: var(--dev-tools-red-color);\n }\n\n .message {\n display: flex;\n padding: 0.1875rem 0.75rem 0.1875rem 2rem;\n background-clip: padding-box;\n }\n\n .message.log {\n padding-left: 0.75rem;\n }\n\n .message-content {\n margin-right: 0.5rem;\n -webkit-user-select: text;\n -moz-user-select: text;\n user-select: text;\n }\n\n .message-heading {\n position: relative;\n display: flex;\n align-items: center;\n margin: 0.125rem 0;\n }\n\n .message.log {\n color: var(--dev-tools-text-color-secondary);\n }\n\n .message:not(.log) .message-heading {\n font-weight: 500;\n }\n\n .message.has-details .message-heading {\n color: var(--dev-tools-text-color-emphasis);\n font-weight: 600;\n }\n\n .message-heading::before {\n position: absolute;\n margin-left: -1.5rem;\n display: inline-block;\n text-align: center;\n font-size: 0.875em;\n font-weight: 600;\n line-height: calc(1.25em - 2px);\n width: 14px;\n height: 14px;\n box-sizing: border-box;\n border: 1px solid transparent;\n border-radius: 50%;\n }\n\n .message.information .message-heading::before {\n content: 'i';\n border-color: currentColor;\n color: var(--dev-tools-notification-color);\n }\n\n .message.warning .message-heading::before,\n .message.error .message-heading::before {\n content: '!';\n color: var(--dev-tools-background-color-active);\n background-color: var(--dev-tools-notification-color);\n }\n\n .features-tray {\n padding: 0.75rem;\n flex: auto;\n overflow: auto;\n animation: fade-in var(--dev-tools-transition-duration) ease-in;\n user-select: text;\n }\n\n .features-tray p {\n margin-top: 0;\n color: var(--dev-tools-text-color-secondary);\n }\n\n .features-tray .feature {\n display: flex;\n align-items: center;\n gap: 1rem;\n padding-bottom: 0.5em;\n }\n\n .message .message-details {\n font-weight: 400;\n color: var(--dev-tools-text-color-secondary);\n margin: 0.25rem 0;\n }\n\n .message .message-details[hidden] {\n display: none;\n }\n\n .message .message-details p {\n display: inline;\n margin: 0;\n margin-right: 0.375em;\n word-break: break-word;\n }\n\n .message .persist {\n color: var(--dev-tools-text-color-secondary);\n white-space: nowrap;\n margin: 0.375rem 0;\n display: flex;\n align-items: center;\n position: relative;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n }\n\n .message .persist::before {\n content: '';\n width: 1em;\n height: 1em;\n border-radius: 0.2em;\n margin-right: 0.375em;\n background-color: rgba(255, 255, 255, 0.3);\n }\n\n .message .persist:hover::before {\n background-color: rgba(255, 255, 255, 0.4);\n }\n\n .message .persist.on::before {\n background-color: rgba(255, 255, 255, 0.9);\n }\n\n .message .persist.on::after {\n content: '';\n order: -1;\n position: absolute;\n width: 0.75em;\n height: 0.25em;\n border: 2px solid var(--dev-tools-background-color-active);\n border-width: 0 0 2px 2px;\n transform: translate(0.05em, -0.05em) rotate(-45deg) scale(0.8, 0.9);\n }\n\n .message .dismiss-message {\n font-weight: 600;\n align-self: stretch;\n display: flex;\n align-items: center;\n padding: 0 0.25rem;\n margin-left: 0.5rem;\n color: var(--dev-tools-text-color-secondary);\n }\n\n .message .dismiss-message:hover {\n color: var(--dev-tools-text-color);\n }\n\n .notification-tray {\n display: flex;\n flex-direction: column-reverse;\n align-items: flex-end;\n margin: 0.5rem;\n flex: none;\n }\n\n .window.hidden + .notification-tray {\n margin-bottom: 3rem;\n }\n\n .notification-tray .message {\n pointer-events: auto;\n background-color: var(--dev-tools-background-color-active);\n color: var(--dev-tools-text-color);\n max-width: 30rem;\n box-sizing: border-box;\n border-radius: var(--dev-tools-border-radius);\n margin-top: 0.5rem;\n transition: var(--dev-tools-transition-duration);\n transform-origin: bottom right;\n animation: slideIn var(--dev-tools-transition-duration);\n box-shadow: var(--dev-tools-box-shadow);\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n }\n\n .notification-tray .message.animate-out {\n animation: slideOut forwards var(--dev-tools-transition-duration);\n }\n\n .notification-tray .message .message-details {\n max-height: 10em;\n overflow: hidden;\n }\n\n .message-tray {\n flex: auto;\n overflow: auto;\n max-height: 20rem;\n user-select: text;\n }\n\n .message-tray .message {\n animation: fade-in var(--dev-tools-transition-duration) ease-in;\n padding-left: 2.25rem;\n }\n\n .message-tray .message.warning {\n background-color: hsla(var(--dev-tools-yellow-hsl), 0.09);\n }\n\n .message-tray .message.error {\n background-color: hsla(var(--dev-tools-red-hsl), 0.09);\n }\n\n .message-tray .message.error .message-heading {\n color: hsl(var(--dev-tools-red-hsl));\n }\n\n .message-tray .message.warning .message-heading {\n color: hsl(var(--dev-tools-yellow-hsl));\n }\n\n .message-tray .message + .message {\n border-top: 1px solid rgba(255, 255, 255, 0.07);\n }\n\n .message-tray .dismiss-message,\n .message-tray .persist {\n display: none;\n }\n\n .info-tray {\n padding: 0.75rem;\n position: relative;\n flex: auto;\n overflow: auto;\n animation: fade-in var(--dev-tools-transition-duration) ease-in;\n user-select: text;\n }\n\n .info-tray dl {\n margin: 0;\n display: grid;\n grid-template-columns: max-content 1fr;\n column-gap: 0.75rem;\n position: relative;\n }\n\n .info-tray dt {\n grid-column: 1;\n color: var(--dev-tools-text-color-emphasis);\n }\n\n .info-tray dt:not(:first-child)::before {\n content: '';\n width: 100%;\n position: absolute;\n height: 1px;\n background-color: rgba(255, 255, 255, 0.1);\n margin-top: -0.375rem;\n }\n\n .info-tray dd {\n grid-column: 2;\n margin: 0;\n }\n\n .info-tray :is(dt, dd):not(:last-child) {\n margin-bottom: 0.75rem;\n }\n\n .info-tray dd + dd {\n margin-top: -0.5rem;\n }\n\n .info-tray .live-reload-status::before {\n content: '•';\n color: var(--status-color);\n width: 0.75rem;\n display: inline-block;\n font-size: 1rem;\n line-height: 0.5rem;\n }\n\n .info-tray .copy {\n position: fixed;\n z-index: 1;\n top: 0.5rem;\n right: 0.5rem;\n }\n\n .info-tray .switch {\n vertical-align: -4px;\n }\n\n @keyframes slideIn {\n from {\n transform: translateX(100%);\n opacity: 0;\n }\n to {\n transform: translateX(0%);\n opacity: 1;\n }\n }\n\n @keyframes slideOut {\n from {\n transform: translateX(0%);\n opacity: 1;\n }\n to {\n transform: translateX(100%);\n opacity: 0;\n }\n }\n\n @keyframes fade-in {\n 0% {\n opacity: 0;\n }\n }\n\n @keyframes bounce {\n 0% {\n transform: scale(0.8);\n }\n 50% {\n transform: scale(1.5);\n background-color: hsla(var(--dev-tools-red-hsl), 1);\n }\n 100% {\n transform: scale(1);\n }\n }\n\n @supports (backdrop-filter: blur(1px)) {\n .dev-tools,\n .window,\n .notification-tray .message {\n backdrop-filter: blur(8px);\n }\n .dev-tools:hover,\n .dev-tools.active,\n .window,\n .notification-tray .message {\n background-color: var(--dev-tools-background-color-active-blurred);\n }\n }\n `;\n }\n\n static DISMISSED_NOTIFICATIONS_IN_LOCAL_STORAGE = 'vaadin.live-reload.dismissedNotifications';\n static ACTIVE_KEY_IN_SESSION_STORAGE = 'vaadin.live-reload.active';\n static TRIGGERED_KEY_IN_SESSION_STORAGE = 'vaadin.live-reload.triggered';\n static TRIGGERED_COUNT_KEY_IN_SESSION_STORAGE = 'vaadin.live-reload.triggeredCount';\n\n static AUTO_DEMOTE_NOTIFICATION_DELAY = 5000;\n\n static HOTSWAP_AGENT = 'HOTSWAP_AGENT';\n static JREBEL = 'JREBEL';\n static SPRING_BOOT_DEVTOOLS = 'SPRING_BOOT_DEVTOOLS';\n static BACKEND_DISPLAY_NAME: Record = {\n HOTSWAP_AGENT: 'HotswapAgent',\n JREBEL: 'JRebel',\n SPRING_BOOT_DEVTOOLS: 'Spring Boot Devtools'\n };\n\n static get isActive() {\n const active = window.sessionStorage.getItem(VaadinDevTools.ACTIVE_KEY_IN_SESSION_STORAGE);\n return active === null || active !== 'false';\n }\n\n static notificationDismissed(persistentId: string) {\n const shown = window.localStorage.getItem(VaadinDevTools.DISMISSED_NOTIFICATIONS_IN_LOCAL_STORAGE);\n return shown !== null && shown.includes(persistentId);\n }\n\n @property({ type: String })\n url?: string;\n\n @property({ type: Boolean, attribute: true })\n liveReloadDisabled?: boolean;\n\n @property({ type: String })\n backend?: string;\n\n @property({ type: Number })\n springBootLiveReloadPort?: number;\n\n @property({ type: Boolean, attribute: false })\n expanded: boolean = false;\n\n @property({ type: Array, attribute: false })\n messages: Message[] = [];\n\n @property({ type: String, attribute: false })\n splashMessage?: string;\n\n @property({ type: Array, attribute: false })\n notifications: Message[] = [];\n\n @property({ type: String, attribute: false })\n frontendStatus: ConnectionStatus = ConnectionStatus.UNAVAILABLE;\n\n @property({ type: String, attribute: false })\n javaStatus: ConnectionStatus = ConnectionStatus.UNAVAILABLE;\n\n @state()\n private tabs: readonly Tab[] = [\n { id: 'log', title: 'Log', render: this.renderLog, activate: this.activateLog },\n { id: 'info', title: 'Info', render: this.renderInfo },\n { id: 'features', title: 'Feature Flags', render: this.renderFeatures }\n ];\n\n @state()\n private activeTab: string = 'log';\n\n @state()\n private serverInfo: ServerInfo = {\n flowVersion: '',\n vaadinVersion: '',\n javaVersion: '',\n osVersion: '',\n productName: ''\n };\n\n @state()\n private features: Feature[] = [];\n\n @state()\n private unreadErrors = false;\n\n @query('.window')\n private root!: HTMLElement;\n\n private javaConnection?: Connection;\n private frontendConnection?: Connection;\n\n private nextMessageId: number = 1;\n\n private disableEventListener?: EventListener;\n\n private transitionDuration: number = 0;\n\n elementTelemetry() {\n let data = {};\n try {\n // localstorage data is collected by vaadin-usage-statistics.js\n const localStorageStatsString = localStorage.getItem('vaadin.statistics.basket');\n if (!localStorageStatsString) {\n // Do not send empty data\n return;\n }\n data = JSON.parse(localStorageStatsString);\n } catch (e) {\n // In case of parse errors don't send anything\n return;\n }\n\n if (this.frontendConnection) {\n this.frontendConnection.sendTelemetry(data);\n }\n }\n\n openWebSocketConnection() {\n this.frontendStatus = ConnectionStatus.UNAVAILABLE;\n this.javaStatus = ConnectionStatus.UNAVAILABLE;\n\n const onConnectionError = (msg: string) => this.log(MessageType.ERROR, msg);\n const onReload = () => {\n if (this.liveReloadDisabled) {\n return;\n }\n this.showSplashMessage('Reloading…');\n const lastReload = window.sessionStorage.getItem(VaadinDevTools.TRIGGERED_COUNT_KEY_IN_SESSION_STORAGE);\n const nextReload = lastReload ? parseInt(lastReload, 10) + 1 : 1;\n window.sessionStorage.setItem(VaadinDevTools.TRIGGERED_COUNT_KEY_IN_SESSION_STORAGE, nextReload.toString());\n window.sessionStorage.setItem(VaadinDevTools.TRIGGERED_KEY_IN_SESSION_STORAGE, 'true');\n window.location.reload();\n };\n\n const frontendConnection = new Connection(this.getDedicatedWebSocketUrl());\n frontendConnection.onHandshake = () => {\n this.log(MessageType.LOG, 'Vaadin development mode initialized');\n if (!VaadinDevTools.isActive) {\n frontendConnection.setActive(false);\n }\n this.elementTelemetry();\n };\n frontendConnection.onConnectionError = onConnectionError;\n frontendConnection.onReload = onReload;\n frontendConnection.onStatusChange = (status: ConnectionStatus) => {\n this.frontendStatus = status;\n };\n frontendConnection.onMessage = (message: any) => {\n if (message?.command === 'serverInfo') {\n this.serverInfo = message.data as ServerInfo;\n } else if (message?.command === 'featureFlags') {\n this.features = message.data.features as Feature[];\n } else {\n // eslint-disable-next-line no-console\n console.error('Unknown message from front-end connection:', JSON.stringify(message));\n }\n };\n this.frontendConnection = frontendConnection;\n\n let javaConnection: Connection;\n if (this.backend === VaadinDevTools.SPRING_BOOT_DEVTOOLS && this.springBootLiveReloadPort) {\n javaConnection = new Connection(this.getSpringBootWebSocketUrl(window.location));\n javaConnection.onHandshake = () => {\n if (!VaadinDevTools.isActive) {\n javaConnection.setActive(false);\n }\n };\n javaConnection.onReload = onReload;\n javaConnection.onConnectionError = onConnectionError;\n } else if (this.backend === VaadinDevTools.JREBEL || this.backend === VaadinDevTools.HOTSWAP_AGENT) {\n javaConnection = frontendConnection;\n } else {\n javaConnection = new Connection(undefined);\n }\n const prevOnStatusChange = javaConnection.onStatusChange;\n javaConnection.onStatusChange = (status) => {\n prevOnStatusChange(status);\n this.javaStatus = status;\n };\n const prevOnHandshake = javaConnection.onHandshake;\n javaConnection.onHandshake = () => {\n prevOnHandshake();\n if (this.backend) {\n this.log(\n MessageType.INFORMATION,\n `Java live reload available: ${VaadinDevTools.BACKEND_DISPLAY_NAME[this.backend]}`\n );\n }\n };\n this.javaConnection = javaConnection;\n\n if (!this.backend) {\n this.showNotification(\n MessageType.WARNING,\n 'Java live reload unavailable',\n 'Live reload for Java changes is currently not set up. Find out how to make use of this functionality to boost your workflow.',\n 'https://vaadin.com/docs/latest/flow/configuration/live-reload',\n 'liveReloadUnavailable'\n );\n }\n }\n\n getDedicatedWebSocketUrl(): string | undefined {\n function getAbsoluteUrl(relative: string) {\n // Use innerHTML to obtain an absolute URL\n const div = document.createElement('div');\n div.innerHTML = ``;\n return (div.firstChild as HTMLLinkElement).href;\n }\n if (this.url === undefined) {\n return undefined;\n }\n const connectionBaseUrl = getAbsoluteUrl(this.url!);\n\n if (!connectionBaseUrl.startsWith('http://') && !connectionBaseUrl.startsWith('https://')) {\n // eslint-disable-next-line no-console\n console.error('The protocol of the url should be http or https for live reload to work.');\n return undefined;\n }\n return `${connectionBaseUrl.replace(/^http/, 'ws')}?v-r=push&debug_window`;\n }\n\n getSpringBootWebSocketUrl(location: any) {\n const { hostname } = location;\n const wsProtocol = location.protocol === 'https:' ? 'wss' : 'ws';\n if (hostname.endsWith('gitpod.io')) {\n // Gitpod uses `port-url` instead of `url:port`\n const hostnameWithoutPort = hostname.replace(/.*?-/, '');\n return `${wsProtocol}://${this.springBootLiveReloadPort}-${hostnameWithoutPort}`;\n } else {\n return `${wsProtocol}://${hostname}:${this.springBootLiveReloadPort}`;\n }\n }\n\n connectedCallback() {\n super.connectedCallback();\n this.catchErrors();\n\n // when focus or clicking anywhere, move the splash message to the message tray\n this.disableEventListener = (_: any) => this.demoteSplashMessage();\n document.body.addEventListener('focus', this.disableEventListener);\n document.body.addEventListener('click', this.disableEventListener);\n this.openWebSocketConnection();\n\n const lastReload = window.sessionStorage.getItem(VaadinDevTools.TRIGGERED_KEY_IN_SESSION_STORAGE);\n if (lastReload) {\n const now = new Date();\n const reloaded = `${`0${now.getHours()}`.slice(-2)}:${`0${now.getMinutes()}`.slice(\n -2\n )}:${`0${now.getSeconds()}`.slice(-2)}`;\n this.showSplashMessage(`Page reloaded at ${reloaded}`);\n window.sessionStorage.removeItem(VaadinDevTools.TRIGGERED_KEY_IN_SESSION_STORAGE);\n }\n\n this.transitionDuration = parseInt(\n window.getComputedStyle(this).getPropertyValue('--dev-tools-transition-duration'),\n 10\n );\n\n const windowAny = window as any;\n windowAny.Vaadin = windowAny.Vaadin || {};\n windowAny.Vaadin.devTools = Object.assign(this, windowAny.Vaadin.devTools);\n\n licenseInit();\n }\n format(o: any): string {\n return o.toString();\n }\n catchErrors() {\n // Process stored messages\n const queue = (window as any).Vaadin.ConsoleErrors as any[];\n if (queue) {\n queue.forEach((args: any[]) => {\n this.log(MessageType.ERROR, args.map((o) => this.format(o)).join(' '));\n });\n }\n // Install new handler that immediately processes messages\n (window as any).Vaadin.ConsoleErrors = {\n push: (args: any[]) => {\n this.log(MessageType.ERROR, args.map((o) => this.format(o)).join(' '));\n }\n };\n }\n\n disconnectedCallback() {\n if (this.disableEventListener) {\n document.body.removeEventListener('focus', this.disableEventListener!);\n document.body.removeEventListener('click', this.disableEventListener!);\n }\n super.disconnectedCallback();\n }\n\n toggleExpanded() {\n this.notifications.slice().forEach((notification) => this.dismissNotification(notification.id));\n this.expanded = !this.expanded;\n if (this.expanded) {\n this.root.focus();\n }\n }\n\n showSplashMessage(msg: string | undefined) {\n this.splashMessage = msg;\n if (this.splashMessage) {\n if (this.expanded) {\n this.demoteSplashMessage();\n } else {\n // automatically move notification to message tray after a certain amount of time\n setTimeout(() => {\n this.demoteSplashMessage();\n }, VaadinDevTools.AUTO_DEMOTE_NOTIFICATION_DELAY);\n }\n }\n }\n\n demoteSplashMessage() {\n if (this.splashMessage) {\n this.log(MessageType.LOG, this.splashMessage);\n }\n this.showSplashMessage(undefined);\n }\n\n checkLicense(productInfo: Product) {\n if (this.frontendConnection) {\n this.frontendConnection.sendLicenseCheck(productInfo);\n } else {\n licenseCheckFailed({ message: 'Internal error: no connection', product: productInfo });\n }\n }\n\n log(type: MessageType, message: string, details?: string, link?: string) {\n const id = this.nextMessageId;\n this.nextMessageId += 1;\n this.messages.push({\n id,\n type,\n message,\n details,\n link,\n dontShowAgain: false,\n deleted: false\n });\n while (this.messages.length > VaadinDevTools.MAX_LOG_ROWS) {\n this.messages.shift();\n }\n this.requestUpdate();\n this.updateComplete.then(() => {\n // Scroll into view\n const lastMessage = this.renderRoot.querySelector('.message-tray .message:last-child');\n if (this.expanded && lastMessage) {\n setTimeout(() => lastMessage.scrollIntoView({ behavior: 'smooth' }), this.transitionDuration);\n this.unreadErrors = false;\n } else if (type === MessageType.ERROR) {\n this.unreadErrors = true;\n }\n });\n }\n\n showNotification(type: MessageType, message: string, details?: string, link?: string, persistentId?: string) {\n if (persistentId === undefined || !VaadinDevTools.notificationDismissed(persistentId!)) {\n // Do not open persistent message if another is already visible with the same persistentId\n const matchingVisibleNotifications = this.notifications\n .filter((notification) => notification.persistentId === persistentId)\n .filter((notification) => !notification.deleted);\n if (matchingVisibleNotifications.length > 0) {\n return;\n }\n const id = this.nextMessageId;\n this.nextMessageId += 1;\n this.notifications.push({\n id,\n type,\n message,\n details,\n link,\n persistentId,\n dontShowAgain: false,\n deleted: false\n });\n // automatically move notification to message tray after a certain amount of time unless it contains a link\n if (link === undefined) {\n setTimeout(() => {\n this.dismissNotification(id);\n }, VaadinDevTools.AUTO_DEMOTE_NOTIFICATION_DELAY);\n }\n this.requestUpdate();\n } else {\n this.log(type, message, details, link);\n }\n }\n\n dismissNotification(id: number) {\n const index = this.findNotificationIndex(id);\n if (index !== -1 && !this.notifications[index].deleted) {\n const notification = this.notifications[index];\n\n // user is explicitly dismissing a notification---after that we won't bug them with it\n if (\n notification.dontShowAgain &&\n notification.persistentId &&\n !VaadinDevTools.notificationDismissed(notification.persistentId)\n ) {\n let dismissed = window.localStorage.getItem(VaadinDevTools.DISMISSED_NOTIFICATIONS_IN_LOCAL_STORAGE);\n dismissed = dismissed === null ? notification.persistentId : `${dismissed},${notification.persistentId}`;\n window.localStorage.setItem(VaadinDevTools.DISMISSED_NOTIFICATIONS_IN_LOCAL_STORAGE, dismissed);\n }\n\n notification.deleted = true;\n this.log(notification.type, notification.message, notification.details, notification.link);\n\n // give some time for the animation\n setTimeout(() => {\n const idx = this.findNotificationIndex(id);\n if (idx !== -1) {\n this.notifications.splice(idx, 1);\n this.requestUpdate();\n }\n }, this.transitionDuration);\n }\n }\n\n findNotificationIndex(id: number): number {\n let index = -1;\n this.notifications.some((notification, idx) => {\n if (notification.id === id) {\n index = idx;\n return true;\n } else {\n return false;\n }\n });\n return index;\n }\n\n toggleDontShowAgain(id: number) {\n const index = this.findNotificationIndex(id);\n if (index !== -1 && !this.notifications[index].deleted) {\n const notification = this.notifications[index];\n notification.dontShowAgain = !notification.dontShowAgain;\n this.requestUpdate();\n }\n }\n\n setActive(yes: boolean) {\n this.frontendConnection?.setActive(yes);\n this.javaConnection?.setActive(yes);\n window.sessionStorage.setItem(VaadinDevTools.ACTIVE_KEY_IN_SESSION_STORAGE, yes ? 'true' : 'false');\n }\n\n getStatusColor(status: ConnectionStatus | undefined) {\n if (status === ConnectionStatus.ACTIVE) {\n return css`hsl(${VaadinDevTools.GREEN_HSL})`;\n } else if (status === ConnectionStatus.INACTIVE) {\n return css`hsl(${VaadinDevTools.GREY_HSL})`;\n } else if (status === ConnectionStatus.UNAVAILABLE) {\n return css`hsl(${VaadinDevTools.YELLOW_HSL})`;\n } else if (status === ConnectionStatus.ERROR) {\n return css`hsl(${VaadinDevTools.RED_HSL})`;\n } else {\n return css`none`;\n }\n }\n\n /* eslint-disable lit/no-template-arrow */\n renderMessage(messageObject: Message) {\n return html`\n \n
\n
${messageObject.message}
\n
\n ${messageObject.persistentId\n ? html` this.toggleDontShowAgain(messageObject.id)}\n >\n Don’t show again\n
`\n : ''}\n \n
this.dismissNotification(messageObject.id)}>Dismiss
\n \n `;\n }\n\n /* eslint-disable lit/no-template-map */\n render() {\n return html` e.key === 'Escape' && this.toggleExpanded()}\n >\n
\n ${this.tabs.map(\n (tab) =>\n html` {\n this.activeTab = tab.id;\n if (tab.activate) tab.activate.call(this);\n }}\n >\n ${tab.title}\n `\n )}\n \n
\n ${this.tabs.map((tab) => (this.activeTab === tab.id ? tab.render.call(this) : nothing))}\n \n\n
${this.notifications.map((msg) => this.renderMessage(msg))}
\n this.toggleExpanded()}\n >\n ${this.unreadErrors\n ? html`\n \n \n \n \n \n `\n : html`\n \n \n \n \n `}\n\n \n ${this.splashMessage ? html`${this.splashMessage}` : nothing}\n `;\n }\n\n renderLog() {\n return html`
${this.messages.map((msg) => this.renderMessage(msg))}
`;\n }\n activateLog() {\n this.unreadErrors = false;\n this.updateComplete.then(() => {\n const lastMessage = this.renderRoot.querySelector('.message-tray .message:last-child');\n if (lastMessage) {\n lastMessage.scrollIntoView();\n }\n });\n }\n\n renderInfo() {\n return html`
\n \n
\n
${this.serverInfo.productName}
\n
${this.serverInfo.vaadinVersion}
\n
Flow
\n
${this.serverInfo.flowVersion}
\n
Java
\n
${this.serverInfo.javaVersion}
\n
OS
\n
${this.serverInfo.osVersion}
\n
Browser
\n
${navigator.userAgent}
\n
\n Live reload\n \n
\n
\n Java ${this.javaStatus} ${this.backend ? `(${VaadinDevTools.BACKEND_DISPLAY_NAME[this.backend]})` : ''}\n
\n
\n Front end ${this.frontendStatus}\n
\n
\n
`;\n }\n\n private renderFeatures() {\n return html`
\n ${this.features.map(\n (feature) => html`
\n \n Learn more\n
`\n )}\n
`;\n }\n\n copyInfoToClipboard() {\n const items = this.renderRoot.querySelectorAll('.info-tray dt, .info-tray dd');\n const text = Array.from(items)\n .map((message) => (message.localName === 'dd' ? ': ' : '\\n') + message.textContent!.trim())\n .join('')\n .replace(/^\\n/, '');\n copy(text);\n this.showNotification(\n MessageType.INFORMATION,\n 'Environment information copied to clipboard',\n undefined,\n undefined,\n 'versionInfoCopied'\n );\n }\n\n toggleFeatureFlag(e: Event, feature: Feature) {\n const enabled = (e.target! as HTMLInputElement).checked;\n if (this.frontendConnection) {\n this.frontendConnection.setFeature(feature.id, enabled);\n this.showNotification(\n MessageType.INFORMATION,\n `“${feature.title}” ${enabled ? 'enabled' : 'disabled'}`,\n feature.requiresServerRestart ? 'This feature requires a server restart' : undefined,\n undefined,\n `feature${feature.id}${enabled ? 'Enabled' : 'Disabled'}`\n );\n } else {\n this.log(MessageType.ERROR, `Unable to toggle feature ${feature.title}: No server connection available`);\n }\n }\n}\n\nif (customElements.get('vaadin-dev-tools') === undefined) {\n customElements.define('vaadin-dev-tools', VaadinDevTools);\n}\n"]} \ No newline at end of file diff --git a/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/theme-reusable-theme.generated.js b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/theme-reusable-theme.generated.js new file mode 100644 index 00000000..8455c8ec --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/theme-reusable-theme.generated.js @@ -0,0 +1,114 @@ +import 'construct-style-sheets-polyfill'; +import stripCssComments from 'strip-css-comments'; + +const createLinkReferences = (css, target) => { + // Unresolved urls are written as '@import url(text);' or '@import "text";' to the css + // media query can be present on @media tag or on @import directive after url + // Note that with Vite production build there is no space between @import and "text" + // [0] is the full match + // [1] matches the media query + // [2] matches the url + // [3] matches the quote char surrounding in '@import "..."' + // [4] matches the url in '@import "..."' + // [5] matches media query on @import statement + const importMatcher = /(?:@media\s(.+?))?(?:\s{)?\@import\s*(?:url\(\s*['"]?(.+?)['"]?\s*\)|(["'])((?:\\.|[^\\])*?)\3)([^;]*);(?:})?/g + + // Only cleanup if comment exist + if(/\/\*(.|[\r\n])*?\*\//gm.exec(css) != null) { + // clean up comments + css = stripCssComments(css); + } + + var match; + var styleCss = css; + + // For each external url import add a link reference + while((match = importMatcher.exec(css)) !== null) { + styleCss = styleCss.replace(match[0], ""); + const link = document.createElement('link'); + link.rel = 'stylesheet'; + link.href = match[2] || match[4]; + const media = match[1] || match[5]; + if (media) { + link.media = media; + } + // For target document append to head else append to target + if (target === document) { + document.head.appendChild(link); + } else { + target.appendChild(link); + } + }; + return styleCss; +}; + +// target: Document | ShadowRoot +export const injectGlobalCss = (css, target, first) => { + if(target === document) { + const hash = getHash(css); + if (window.Vaadin.theme.injectedGlobalCss.indexOf(hash) !== -1) { + return; + } + window.Vaadin.theme.injectedGlobalCss.push(hash); + } + const sheet = new CSSStyleSheet(); + sheet.replaceSync(createLinkReferences(css,target)); + if (first) { + target.adoptedStyleSheets = [sheet, ...target.adoptedStyleSheets]; + } else { + target.adoptedStyleSheets = [...target.adoptedStyleSheets, sheet]; + } +}; +import stylesCss from 'themes/reusable-theme/styles.css?inline'; +import { color } from '@vaadin/vaadin-lumo-styles/color.js'; +import { typography } from '@vaadin/vaadin-lumo-styles/typography.js'; + +window.Vaadin = window.Vaadin || {}; +window.Vaadin.theme = window.Vaadin.theme || {}; +window.Vaadin.theme.injectedGlobalCss = []; + +/** + * Calculate a 32 bit FNV-1a hash + * Found here: https://gist.github.com/vaiorabbit/5657561 + * Ref.: http://isthe.com/chongo/tech/comp/fnv/ + * + * @param {string} str the input value + * @returns {string} 32 bit (as 8 byte hex string) + */ +function hashFnv32a(str) { + /*jshint bitwise:false */ + let i, l, hval = 0x811c9dc5; + + for (i = 0, l = str.length; i < l; i++) { + hval ^= str.charCodeAt(i); + hval += (hval << 1) + (hval << 4) + (hval << 7) + (hval << 8) + (hval << 24); + } + + // Convert to 8 digit hex string + return ("0000000" + (hval >>> 0).toString(16)).substr(-8); +} + +/** + * Calculate a 64 bit hash for the given input. + * Double hash is used to significantly lower the collision probability. + * + * @param {string} input value to get hash for + * @returns {string} 64 bit (as 16 byte hex string) + */ +function getHash(input) { + let h1 = hashFnv32a(input); // returns 32 bit (as 8 byte hex string) + return h1 + hashFnv32a(h1 + input); +} +export const applyTheme = (target) => { + + injectGlobalCss(stylesCss.toString(), target); + + + if (!document['_vaadintheme_reusable-theme_componentCss']) { + + document['_vaadintheme_reusable-theme_componentCss'] = true; + } + injectGlobalCss(color.cssText, target, true); +injectGlobalCss(typography.cssText, target, true); + +} diff --git a/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/theme.d.ts b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/theme.d.ts new file mode 100644 index 00000000..94ce92d6 --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/theme.d.ts @@ -0,0 +1 @@ +export declare const applyTheme: (target: Node) => void; \ No newline at end of file diff --git a/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/theme.js b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/theme.js new file mode 100644 index 00000000..a39a3c4f --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/theme.js @@ -0,0 +1,2 @@ +import {applyTheme as _applyTheme} from './theme-reusable-theme.generated.js'; +export const applyTheme = _applyTheme; diff --git a/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/vaadin-featureflags.ts b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/vaadin-featureflags.ts new file mode 100644 index 00000000..d3399438 --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/vaadin-featureflags.ts @@ -0,0 +1,11 @@ +// @ts-nocheck +window.Vaadin = window.Vaadin || {}; +window.Vaadin.featureFlags = window.Vaadin.featureFlags || {}; +window.Vaadin.featureFlags.exampleFeatureFlag = false; +window.Vaadin.featureFlags.hillaPush = false; +window.Vaadin.featureFlags.hillaEngine = false; +window.Vaadin.featureFlags.oldLicenseChecker = false; +window.Vaadin.featureFlags.collaborationEngineBackend = false; +window.Vaadin.featureFlags.webpackForFrontendBuild = false; +window.Vaadin.featureFlags.enforceFieldValidation = false; +export {}; \ No newline at end of file diff --git a/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/vaadin.ts b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/vaadin.ts new file mode 100644 index 00000000..c3362dc4 --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/vaadin.ts @@ -0,0 +1,8 @@ +import './vaadin-featureflags.ts'; + +import './index'; + +import 'Frontend/generated/jar-resources/vaadin-dev-tools.js'; + +import { applyTheme } from './theme.js'; +applyTheme(document); diff --git a/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/vite-devmode.ts b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/vite-devmode.ts new file mode 100644 index 00000000..f9f7a5fb --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/generated/vite-devmode.ts @@ -0,0 +1,31 @@ +// @ts-ignore +if (import.meta.hot) { + // @ts-ignore + const hot = import.meta.hot; + + const isLiveReloadDisabled = () => { + // Checks if live reload is disabled in the debug window + return sessionStorage.getItem('vaadin.live-reload.active') === 'false'; + }; + + const preventViteReload = (payload: any) => { + // Changing the path prevents Vite from reloading + payload.path = '/_fake/path.html'; + }; + + let pendingNavigationTo: string | undefined = undefined; + + window.addEventListener('vaadin-router-go', (routerEvent: any) => { + pendingNavigationTo = routerEvent.detail.pathname + routerEvent.detail.search; + }); + hot.on('vite:beforeFullReload', (payload: any) => { + if (isLiveReloadDisabled()) { + preventViteReload(payload); + } + if (pendingNavigationTo) { + // Force reload with the new URL + location.href = pendingNavigationTo; + preventViteReload(payload); + } + }); +} diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/test-npm/frontend/index.html b/vertx-vaadin-quarkus-extension/integration-tests/development/frontend/index.html similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/test-npm/frontend/index.html rename to vertx-vaadin-quarkus-extension/integration-tests/development/frontend/index.html diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/development/pom.xml b/vertx-vaadin-quarkus-extension/integration-tests/development/pom.xml similarity index 99% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/development/pom.xml rename to vertx-vaadin-quarkus-extension/integration-tests/development/pom.xml index a949fd2e..c8bf2a1b 100644 --- a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/development/pom.xml +++ b/vertx-vaadin-quarkus-extension/integration-tests/development/pom.xml @@ -6,7 +6,7 @@ com.github.mcollovati.vertx vertx-vaadin-quarkus-integration-tests - 23.3.5-SNAPSHOT + 23.4.0-SNAPSHOT vertx-vaadin-quarkus-development-tests diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/pom.xml b/vertx-vaadin-quarkus-extension/integration-tests/pom.xml similarity index 98% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/pom.xml rename to vertx-vaadin-quarkus-extension/integration-tests/pom.xml index 70775023..c674ee60 100644 --- a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/pom.xml +++ b/vertx-vaadin-quarkus-extension/integration-tests/pom.xml @@ -6,7 +6,7 @@ com.github.mcollovati.vertx vertx-vaadin-quarkus-extension-parent - 23.3.5-SNAPSHOT + 23.4.0-SNAPSHOT vertx-vaadin-quarkus-integration-tests diff --git a/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/index.ts b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/index.ts new file mode 100644 index 00000000..c20aa03f --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/index.ts @@ -0,0 +1,32 @@ +/****************************************************************************** + * This file is auto-generated by Vaadin. + * If you want to customize the entry point, you can copy this file or create + * your own `index.ts` in your frontend directory. + * By default, the `index.ts` file should be in `./frontend/` folder. + * + * NOTE: + * - You need to restart the dev-server after adding the new `index.ts` file. + * After that, all modifications to `index.ts` are recompiled automatically. + * - `index.js` is also supported if you don't want to use TypeScript. + ******************************************************************************/ + +// import Vaadin client-router to handle client-side and server-side navigation +import { Router } from '@vaadin/router'; + +// import Flow module to enable navigation to Vaadin server-side views +import { Flow } from 'Frontend/generated/jar-resources/Flow.js'; + +const { serverSideRoutes } = new Flow({ + imports: () => import('../../target/frontend/generated-flow-imports.js') +}); + +const routes = [ + // for client-side, place routes below (more info https://vaadin.com/docs/v15/flow/typescript/creating-routes.html) + + // for server-side, the next magic line sends all unmatched routes: + ...serverSideRoutes // IMPORTANT: this must be the last entry in the array +]; + +// Vaadin router needs an outlet in the index.html page to display views +const router = new Router(document.querySelector('#outlet')); +router.setRoutes(routes); diff --git a/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/Flow.d.ts b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/Flow.d.ts new file mode 100644 index 00000000..efbbbe84 --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/Flow.d.ts @@ -0,0 +1,74 @@ +export interface FlowConfig { + imports?: () => void; +} +interface AppConfig { + productionMode: boolean; + appId: string; + uidl: any; + clientRouting: boolean; +} +interface AppInitResponse { + appConfig: AppConfig; + pushScript?: string; +} +interface Router { + render: (ctx: NavigationParameters, shouldUpdateHistory: boolean) => Promise; +} +interface HTMLRouterContainer extends HTMLElement { + onBeforeEnter?: (ctx: NavigationParameters, cmd: PreventAndRedirectCommands, router: Router) => void | Promise; + onBeforeLeave?: (ctx: NavigationParameters, cmd: PreventCommands, router: Router) => void | Promise; + serverConnected?: (cancel: boolean, url?: NavigationParameters) => void; +} +interface FlowRoute { + action: (params: NavigationParameters) => Promise; + path: string; +} +export interface NavigationParameters { + pathname: string; + search: string; +} +export interface PreventCommands { + prevent: () => any; +} +export interface PreventAndRedirectCommands extends PreventCommands { + redirect: (route: string) => any; +} +/** + * Client API for flow UI operations. + */ +export declare class Flow { + config: FlowConfig; + response?: AppInitResponse; + pathname: string; + container: HTMLRouterContainer; + private isActive; + private baseRegex; + private appShellTitle; + constructor(config?: FlowConfig); + /** + * Return a `route` object for vaadin-router in an one-element array. + * + * The `FlowRoute` object `path` property handles any route, + * and the `action` returns the flow container without updating the content, + * delaying the actual Flow server call to the `onBeforeEnter` phase. + * + * This is a specific API for its use with `vaadin-router`. + */ + get serverSideRoutes(): [FlowRoute]; + loadingStarted(): void; + loadingFinished(): void; + private get action(); + private flowLeave; + private flowNavigate; + private getFlowRoutePath; + private getFlowRouteQuery; + private flowInit; + private loadScript; + private injectAppIdScript; + private flowInitClient; + private flowInitUi; + private addConnectionIndicator; + private offlineStubAction; + private isFlowClientLoaded; +} +export {}; diff --git a/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/Flow.js b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/Flow.js new file mode 100644 index 00000000..66ab4ae1 --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/Flow.js @@ -0,0 +1,324 @@ +import { ConnectionIndicator, ConnectionState } from '@vaadin/common-frontend'; +class FlowUiInitializationError extends Error { +} +// flow uses body for keeping references +const flowRoot = window.document.body; +const $wnd = window; +/** + * Client API for flow UI operations. + */ +export class Flow { + constructor(config) { + this.response = undefined; + this.pathname = ''; + // flag used to inform Testbench whether a server route is in progress + this.isActive = false; + this.baseRegex = /^\//; + flowRoot.$ = flowRoot.$ || []; + this.config = config || {}; + // TB checks for the existence of window.Vaadin.Flow in order + // to consider that TB needs to wait for `initFlow()`. + $wnd.Vaadin = $wnd.Vaadin || {}; + $wnd.Vaadin.Flow = $wnd.Vaadin.Flow || {}; + $wnd.Vaadin.Flow.clients = { + TypeScript: { + isActive: () => this.isActive + } + }; + // Regular expression used to remove the app-context + const elm = document.head.querySelector('base'); + this.baseRegex = new RegExp(`^${ + // IE11 does not support document.baseURI + (document.baseURI || (elm && elm.href) || '/').replace(/^https?:\/\/[^/]+/i, '')}`); + this.appShellTitle = document.title; + // Put a vaadin-connection-indicator in the dom + this.addConnectionIndicator(); + } + /** + * Return a `route` object for vaadin-router in an one-element array. + * + * The `FlowRoute` object `path` property handles any route, + * and the `action` returns the flow container without updating the content, + * delaying the actual Flow server call to the `onBeforeEnter` phase. + * + * This is a specific API for its use with `vaadin-router`. + */ + get serverSideRoutes() { + return [ + { + path: '(.*)', + action: this.action + } + ]; + } + loadingStarted() { + // Make Testbench know that server request is in progress + this.isActive = true; + $wnd.Vaadin.connectionState.loadingStarted(); + } + loadingFinished() { + // Make Testbench know that server request has finished + this.isActive = false; + $wnd.Vaadin.connectionState.loadingFinished(); + } + get action() { + // Return a function which is bound to the flow instance, thus we can use + // the syntax `...serverSideRoutes` in vaadin-router. + return async (params) => { + // Store last action pathname so as we can check it in events + this.pathname = params.pathname; + if ($wnd.Vaadin.connectionState.online) { + try { + await this.flowInit(); + } + catch (error) { + if (error instanceof FlowUiInitializationError) { + // error initializing Flow: assume connection lost + $wnd.Vaadin.connectionState.state = ConnectionState.CONNECTION_LOST; + return this.offlineStubAction(); + } + else { + throw error; + } + } + } + else { + // insert an offline stub + return this.offlineStubAction(); + } + // When an action happens, navigation will be resolved `onBeforeEnter` + this.container.onBeforeEnter = (ctx, cmd) => this.flowNavigate(ctx, cmd); + // For covering the 'server -> client' use case + this.container.onBeforeLeave = (ctx, cmd) => this.flowLeave(ctx, cmd); + return this.container; + }; + } + // Send a remote call to `JavaScriptBootstrapUI` to check + // whether navigation has to be cancelled. + async flowLeave(ctx, cmd) { + // server -> server, viewing offline stub, or browser is offline + const { connectionState } = $wnd.Vaadin; + if (this.pathname === ctx.pathname || !this.isFlowClientLoaded() || connectionState.offline) { + return Promise.resolve({}); + } + // 'server -> client' + return new Promise((resolve) => { + this.loadingStarted(); + // The callback to run from server side to cancel navigation + this.container.serverConnected = (cancel) => { + resolve(cmd && cancel ? cmd.prevent() : {}); + this.loadingFinished(); + }; + // Call server side to check whether we can leave the view + flowRoot.$server.leaveNavigation(this.getFlowRoutePath(ctx), this.getFlowRouteQuery(ctx)); + }); + } + // Send the remote call to `JavaScriptBootstrapUI` to render the flow + // route specified by the context + async flowNavigate(ctx, cmd) { + if (this.response) { + return new Promise((resolve) => { + this.loadingStarted(); + // The callback to run from server side once the view is ready + this.container.serverConnected = (cancel, redirectContext) => { + if (cmd && cancel) { + resolve(cmd.prevent()); + } + else if (cmd && cmd.redirect && redirectContext) { + resolve(cmd.redirect(redirectContext.pathname)); + } + else { + this.container.style.display = ''; + resolve(this.container); + } + this.loadingFinished(); + }; + // Call server side to navigate to the given route + flowRoot.$server.connectClient(this.container.localName, this.container.id, this.getFlowRoutePath(ctx), this.getFlowRouteQuery(ctx), this.appShellTitle, history.state); + }); + } + else { + // No server response => offline or erroneous connection + return Promise.resolve(this.container); + } + } + getFlowRoutePath(context) { + return decodeURIComponent(context.pathname).replace(this.baseRegex, ''); + } + getFlowRouteQuery(context) { + return (context.search && context.search.substring(1)) || ''; + } + // import flow client modules and initialize UI in server side. + async flowInit(serverSideRouting = false) { + // Do not start flow twice + if (!this.isFlowClientLoaded()) { + // show flow progress indicator + this.loadingStarted(); + // Initialize server side UI + this.response = await this.flowInitUi(serverSideRouting); + // Enable or disable server side routing + this.response.appConfig.clientRouting = !serverSideRouting; + const { pushScript, appConfig } = this.response; + if (typeof pushScript === 'string') { + await this.loadScript(pushScript); + } + const { appId } = appConfig; + // Load bootstrap script with server side parameters + const bootstrapMod = await import('./FlowBootstrap'); + await bootstrapMod.init(this.response); + // Load custom modules defined by user + if (typeof this.config.imports === 'function') { + this.injectAppIdScript(appId); + await this.config.imports(); + } + // Load flow-client module + const clientMod = await import('./FlowClient'); + await this.flowInitClient(clientMod); + if (!serverSideRouting) { + // we use a custom tag for the flow app container + const tag = `flow-container-${appId.toLowerCase()}`; + this.container = document.createElement(tag); + flowRoot.$[appId] = this.container; + this.container.id = appId; + } + // hide flow progress indicator + this.loadingFinished(); + } + // It might be that components created from server expect that their content has been rendered. + // Appending eagerly the container we avoid these kind of errors. + // Note that the client router will move this container to the outlet if the navigation succeed + if (this.container && !this.container.isConnected) { + this.container.style.display = 'none'; + document.body.appendChild(this.container); + } + return this.response; + } + async loadScript(url) { + return new Promise((resolve, reject) => { + const script = document.createElement('script'); + script.onload = () => resolve(); + script.onerror = reject; + script.src = url; + document.body.appendChild(script); + }); + } + injectAppIdScript(appId) { + const appIdWithoutHashCode = appId.substring(0, appId.lastIndexOf('-')); + const scriptAppId = document.createElement('script'); + scriptAppId.type = 'module'; + scriptAppId.setAttribute('data-app-id', appIdWithoutHashCode); + document.body.append(scriptAppId); + } + // After the flow-client javascript module has been loaded, this initializes flow UI + // in the browser. + async flowInitClient(clientMod) { + clientMod.init(); + // client init is async, we need to loop until initialized + return new Promise((resolve) => { + const intervalId = setInterval(() => { + // client `isActive() == true` while initializing or processing + const initializing = Object.keys($wnd.Vaadin.Flow.clients) + .filter((key) => key !== 'TypeScript') + .reduce((prev, id) => prev || $wnd.Vaadin.Flow.clients[id].isActive(), false); + if (!initializing) { + clearInterval(intervalId); + resolve(); + } + }, 5); + }); + } + // Returns the `appConfig` object + async flowInitUi(serverSideRouting) { + // appConfig was sent in the index.html request + const initial = $wnd.Vaadin && $wnd.Vaadin.TypeScript && $wnd.Vaadin.TypeScript.initial; + if (initial) { + $wnd.Vaadin.TypeScript.initial = undefined; + return Promise.resolve(initial); + } + // send a request to the `JavaScriptBootstrapHandler` + return new Promise((resolve, reject) => { + const xhr = new XMLHttpRequest(); + const httpRequest = xhr; + const serverRoutingParam = serverSideRouting ? '&serverSideRouting' : ''; + const requestPath = `?v-r=init&location=${encodeURIComponent(this.getFlowRoutePath(location))}&query=${encodeURIComponent(this.getFlowRouteQuery(location))}${serverRoutingParam}`; + httpRequest.open('GET', requestPath); + httpRequest.onerror = () => reject(new FlowUiInitializationError(`Invalid server response when initializing Flow UI. + ${httpRequest.status} + ${httpRequest.responseText}`)); + httpRequest.onload = () => { + const contentType = httpRequest.getResponseHeader('content-type'); + if (contentType && contentType.indexOf('application/json') !== -1) { + resolve(JSON.parse(httpRequest.responseText)); + } + else { + httpRequest.onerror(); + } + }; + httpRequest.send(); + }); + } + // Create shared connection state store and connection indicator + addConnectionIndicator() { + // add connection indicator to DOM + ConnectionIndicator.create(); + // Listen to browser online/offline events and update the loading indicator accordingly. + // Note: if flow-client is loaded, it instead handles the state transitions. + $wnd.addEventListener('online', () => { + if (!this.isFlowClientLoaded()) { + // Send an HTTP HEAD request for sw.js to verify server reachability. + // We do not expect sw.js to be cached, so the request goes to the + // server rather than being served from local cache. + // Require network-level failure to revert the state to CONNECTION_LOST + // (HTTP error code is ok since it still verifies server's presence). + $wnd.Vaadin.connectionState.state = ConnectionState.RECONNECTING; + const http = new XMLHttpRequest(); + http.open('HEAD', 'sw.js'); + http.onload = () => { + $wnd.Vaadin.connectionState.state = ConnectionState.CONNECTED; + }; + http.onerror = () => { + $wnd.Vaadin.connectionState.state = ConnectionState.CONNECTION_LOST; + }; + // Postpone request to reduce potential net::ERR_INTERNET_DISCONNECTED + // errors that sometimes occurs even if browser says it is online + setTimeout(() => http.send(), 50); + } + }); + $wnd.addEventListener('offline', () => { + if (!this.isFlowClientLoaded()) { + $wnd.Vaadin.connectionState.state = ConnectionState.CONNECTION_LOST; + } + }); + } + async offlineStubAction() { + const offlineStub = document.createElement('iframe'); + const offlineStubPath = './offline-stub.html'; + offlineStub.setAttribute('src', offlineStubPath); + offlineStub.setAttribute('style', 'width: 100%; height: 100%; border: 0'); + this.response = undefined; + let onlineListener; + const removeOfflineStubAndOnlineListener = () => { + if (onlineListener !== undefined) { + $wnd.Vaadin.connectionState.removeStateChangeListener(onlineListener); + onlineListener = undefined; + } + }; + offlineStub.onBeforeEnter = (ctx, _cmds, router) => { + onlineListener = () => { + if ($wnd.Vaadin.connectionState.online) { + removeOfflineStubAndOnlineListener(); + router.render(ctx, false); + } + }; + $wnd.Vaadin.connectionState.addStateChangeListener(onlineListener); + }; + offlineStub.onBeforeLeave = (_ctx, _cmds, _router) => { + removeOfflineStubAndOnlineListener(); + }; + return offlineStub; + } + isFlowClientLoaded() { + return this.response !== undefined; + } +} +//# sourceMappingURL=Flow.js.map \ No newline at end of file diff --git a/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/Flow.js.map b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/Flow.js.map new file mode 100644 index 00000000..bbd8ef2a --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/Flow.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Flow.js","sourceRoot":"","sources":["../../../../src/main/frontend/Flow.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n ConnectionIndicator,\n ConnectionState,\n ConnectionStateChangeListener,\n ConnectionStateStore\n} from '@vaadin/common-frontend';\n\nexport interface FlowConfig {\n imports?: () => void;\n}\n\nclass FlowUiInitializationError extends Error {}\n\ninterface AppConfig {\n productionMode: boolean;\n appId: string;\n uidl: any;\n clientRouting: boolean;\n}\n\ninterface AppInitResponse {\n appConfig: AppConfig;\n pushScript?: string;\n}\n\ninterface Router {\n render: (ctx: NavigationParameters, shouldUpdateHistory: boolean) => Promise;\n}\n\ninterface HTMLRouterContainer extends HTMLElement {\n onBeforeEnter?: (ctx: NavigationParameters, cmd: PreventAndRedirectCommands, router: Router) => void | Promise;\n onBeforeLeave?: (ctx: NavigationParameters, cmd: PreventCommands, router: Router) => void | Promise;\n serverConnected?: (cancel: boolean, url?: NavigationParameters) => void;\n}\n\ninterface FlowRoute {\n action: (params: NavigationParameters) => Promise;\n path: string;\n}\n\ninterface FlowRoot {\n $: any;\n $server: any;\n}\n\nexport interface NavigationParameters {\n pathname: string;\n search: string;\n}\n\nexport interface PreventCommands {\n prevent: () => any;\n}\n\nexport interface PreventAndRedirectCommands extends PreventCommands {\n redirect: (route: string) => any;\n}\n\n// flow uses body for keeping references\nconst flowRoot: FlowRoot = window.document.body as any;\nconst $wnd = window as any as {\n Vaadin: {\n Flow: any;\n TypeScript: any;\n connectionState: ConnectionStateStore;\n };\n} & EventTarget;\n\n/**\n * Client API for flow UI operations.\n */\nexport class Flow {\n config: FlowConfig;\n response?: AppInitResponse = undefined;\n pathname = '';\n\n container!: HTMLRouterContainer;\n\n // flag used to inform Testbench whether a server route is in progress\n private isActive = false;\n\n private baseRegex = /^\\//;\n private appShellTitle: string;\n\n constructor(config?: FlowConfig) {\n flowRoot.$ = flowRoot.$ || [];\n this.config = config || {};\n\n // TB checks for the existence of window.Vaadin.Flow in order\n // to consider that TB needs to wait for `initFlow()`.\n $wnd.Vaadin = $wnd.Vaadin || {};\n $wnd.Vaadin.Flow = $wnd.Vaadin.Flow || {};\n $wnd.Vaadin.Flow.clients = {\n TypeScript: {\n isActive: () => this.isActive\n }\n };\n\n // Regular expression used to remove the app-context\n const elm = document.head.querySelector('base');\n this.baseRegex = new RegExp(\n `^${\n // IE11 does not support document.baseURI\n (document.baseURI || (elm && elm.href) || '/').replace(/^https?:\\/\\/[^/]+/i, '')\n }`\n );\n this.appShellTitle = document.title;\n // Put a vaadin-connection-indicator in the dom\n this.addConnectionIndicator();\n }\n\n /**\n * Return a `route` object for vaadin-router in an one-element array.\n *\n * The `FlowRoute` object `path` property handles any route,\n * and the `action` returns the flow container without updating the content,\n * delaying the actual Flow server call to the `onBeforeEnter` phase.\n *\n * This is a specific API for its use with `vaadin-router`.\n */\n get serverSideRoutes(): [FlowRoute] {\n return [\n {\n path: '(.*)',\n action: this.action\n }\n ];\n }\n\n loadingStarted() {\n // Make Testbench know that server request is in progress\n this.isActive = true;\n $wnd.Vaadin.connectionState.loadingStarted();\n }\n\n loadingFinished() {\n // Make Testbench know that server request has finished\n this.isActive = false;\n $wnd.Vaadin.connectionState.loadingFinished();\n }\n\n private get action(): (params: NavigationParameters) => Promise {\n // Return a function which is bound to the flow instance, thus we can use\n // the syntax `...serverSideRoutes` in vaadin-router.\n return async (params: NavigationParameters) => {\n // Store last action pathname so as we can check it in events\n this.pathname = params.pathname;\n\n if ($wnd.Vaadin.connectionState.online) {\n try {\n await this.flowInit();\n } catch (error) {\n if (error instanceof FlowUiInitializationError) {\n // error initializing Flow: assume connection lost\n $wnd.Vaadin.connectionState.state = ConnectionState.CONNECTION_LOST;\n return this.offlineStubAction();\n } else {\n throw error;\n }\n }\n } else {\n // insert an offline stub\n return this.offlineStubAction();\n }\n\n // When an action happens, navigation will be resolved `onBeforeEnter`\n this.container.onBeforeEnter = (ctx, cmd) => this.flowNavigate(ctx, cmd);\n // For covering the 'server -> client' use case\n this.container.onBeforeLeave = (ctx, cmd) => this.flowLeave(ctx, cmd);\n return this.container;\n };\n }\n\n // Send a remote call to `JavaScriptBootstrapUI` to check\n // whether navigation has to be cancelled.\n private async flowLeave(ctx: NavigationParameters, cmd?: PreventCommands): Promise {\n // server -> server, viewing offline stub, or browser is offline\n const { connectionState } = $wnd.Vaadin;\n if (this.pathname === ctx.pathname || !this.isFlowClientLoaded() || connectionState.offline) {\n return Promise.resolve({});\n }\n // 'server -> client'\n return new Promise((resolve) => {\n this.loadingStarted();\n // The callback to run from server side to cancel navigation\n this.container.serverConnected = (cancel) => {\n resolve(cmd && cancel ? cmd.prevent() : {});\n this.loadingFinished();\n };\n\n // Call server side to check whether we can leave the view\n flowRoot.$server.leaveNavigation(this.getFlowRoutePath(ctx), this.getFlowRouteQuery(ctx));\n });\n }\n\n // Send the remote call to `JavaScriptBootstrapUI` to render the flow\n // route specified by the context\n private async flowNavigate(ctx: NavigationParameters, cmd?: PreventAndRedirectCommands): Promise {\n if (this.response) {\n return new Promise((resolve) => {\n this.loadingStarted();\n // The callback to run from server side once the view is ready\n this.container.serverConnected = (cancel, redirectContext?: NavigationParameters) => {\n if (cmd && cancel) {\n resolve(cmd.prevent());\n } else if (cmd && cmd.redirect && redirectContext) {\n resolve(cmd.redirect(redirectContext.pathname));\n } else {\n this.container.style.display = '';\n resolve(this.container);\n }\n this.loadingFinished();\n };\n\n // Call server side to navigate to the given route\n flowRoot.$server.connectClient(\n this.container.localName,\n this.container.id,\n this.getFlowRoutePath(ctx),\n this.getFlowRouteQuery(ctx),\n this.appShellTitle,\n history.state\n );\n });\n } else {\n // No server response => offline or erroneous connection\n return Promise.resolve(this.container);\n }\n }\n\n private getFlowRoutePath(context: NavigationParameters | Location): string {\n return decodeURIComponent(context.pathname).replace(this.baseRegex, '');\n }\n private getFlowRouteQuery(context: NavigationParameters | Location): string {\n return (context.search && context.search.substring(1)) || '';\n }\n\n // import flow client modules and initialize UI in server side.\n private async flowInit(serverSideRouting = false): Promise {\n // Do not start flow twice\n if (!this.isFlowClientLoaded()) {\n // show flow progress indicator\n this.loadingStarted();\n\n // Initialize server side UI\n this.response = await this.flowInitUi(serverSideRouting);\n\n // Enable or disable server side routing\n this.response.appConfig.clientRouting = !serverSideRouting;\n\n const { pushScript, appConfig } = this.response;\n\n if (typeof pushScript === 'string') {\n await this.loadScript(pushScript);\n }\n const { appId } = appConfig;\n\n // Load bootstrap script with server side parameters\n const bootstrapMod = await import('./FlowBootstrap');\n await bootstrapMod.init(this.response);\n\n // Load custom modules defined by user\n if (typeof this.config.imports === 'function') {\n this.injectAppIdScript(appId);\n await this.config.imports();\n }\n\n // Load flow-client module\n const clientMod = await import('./FlowClient');\n await this.flowInitClient(clientMod);\n\n if (!serverSideRouting) {\n // we use a custom tag for the flow app container\n const tag = `flow-container-${appId.toLowerCase()}`;\n this.container = document.createElement(tag);\n flowRoot.$[appId] = this.container;\n this.container.id = appId;\n }\n\n // hide flow progress indicator\n this.loadingFinished();\n }\n\n // It might be that components created from server expect that their content has been rendered.\n // Appending eagerly the container we avoid these kind of errors.\n // Note that the client router will move this container to the outlet if the navigation succeed\n if (this.container && !this.container.isConnected) {\n this.container.style.display = 'none';\n document.body.appendChild(this.container);\n }\n return this.response!;\n }\n\n private async loadScript(url: string): Promise {\n return new Promise((resolve, reject) => {\n const script = document.createElement('script');\n script.onload = () => resolve();\n script.onerror = reject;\n script.src = url;\n document.body.appendChild(script);\n });\n }\n\n private injectAppIdScript(appId: string) {\n const appIdWithoutHashCode = appId.substring(0, appId.lastIndexOf('-'));\n const scriptAppId = document.createElement('script');\n scriptAppId.type = 'module';\n scriptAppId.setAttribute('data-app-id', appIdWithoutHashCode);\n document.body.append(scriptAppId);\n }\n\n // After the flow-client javascript module has been loaded, this initializes flow UI\n // in the browser.\n private async flowInitClient(clientMod: any): Promise {\n clientMod.init();\n // client init is async, we need to loop until initialized\n return new Promise((resolve) => {\n const intervalId = setInterval(() => {\n // client `isActive() == true` while initializing or processing\n const initializing = Object.keys($wnd.Vaadin.Flow.clients)\n .filter((key) => key !== 'TypeScript')\n .reduce((prev, id) => prev || $wnd.Vaadin.Flow.clients[id].isActive(), false);\n if (!initializing) {\n clearInterval(intervalId);\n resolve();\n }\n }, 5);\n });\n }\n\n // Returns the `appConfig` object\n private async flowInitUi(serverSideRouting: boolean): Promise {\n // appConfig was sent in the index.html request\n const initial = $wnd.Vaadin && $wnd.Vaadin.TypeScript && $wnd.Vaadin.TypeScript.initial;\n if (initial) {\n $wnd.Vaadin.TypeScript.initial = undefined;\n return Promise.resolve(initial);\n }\n\n // send a request to the `JavaScriptBootstrapHandler`\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest();\n const httpRequest = xhr as any;\n const serverRoutingParam = serverSideRouting ? '&serverSideRouting' : '';\n const requestPath = `?v-r=init&location=${encodeURIComponent(\n this.getFlowRoutePath(location)\n )}&query=${encodeURIComponent(this.getFlowRouteQuery(location))}${serverRoutingParam}`;\n\n httpRequest.open('GET', requestPath);\n\n httpRequest.onerror = () =>\n reject(\n new FlowUiInitializationError(\n `Invalid server response when initializing Flow UI.\n ${httpRequest.status}\n ${httpRequest.responseText}`\n )\n );\n\n httpRequest.onload = () => {\n const contentType = httpRequest.getResponseHeader('content-type');\n if (contentType && contentType.indexOf('application/json') !== -1) {\n resolve(JSON.parse(httpRequest.responseText));\n } else {\n httpRequest.onerror();\n }\n };\n httpRequest.send();\n });\n }\n\n // Create shared connection state store and connection indicator\n private addConnectionIndicator() {\n // add connection indicator to DOM\n ConnectionIndicator.create();\n\n // Listen to browser online/offline events and update the loading indicator accordingly.\n // Note: if flow-client is loaded, it instead handles the state transitions.\n $wnd.addEventListener('online', () => {\n if (!this.isFlowClientLoaded()) {\n // Send an HTTP HEAD request for sw.js to verify server reachability.\n // We do not expect sw.js to be cached, so the request goes to the\n // server rather than being served from local cache.\n // Require network-level failure to revert the state to CONNECTION_LOST\n // (HTTP error code is ok since it still verifies server's presence).\n $wnd.Vaadin.connectionState.state = ConnectionState.RECONNECTING;\n const http = new XMLHttpRequest();\n http.open('HEAD', 'sw.js');\n http.onload = () => {\n $wnd.Vaadin.connectionState.state = ConnectionState.CONNECTED;\n };\n http.onerror = () => {\n $wnd.Vaadin.connectionState.state = ConnectionState.CONNECTION_LOST;\n };\n // Postpone request to reduce potential net::ERR_INTERNET_DISCONNECTED\n // errors that sometimes occurs even if browser says it is online\n setTimeout(() => http.send(), 50);\n }\n });\n $wnd.addEventListener('offline', () => {\n if (!this.isFlowClientLoaded()) {\n $wnd.Vaadin.connectionState.state = ConnectionState.CONNECTION_LOST;\n }\n });\n }\n\n private async offlineStubAction() {\n const offlineStub = document.createElement('iframe') as HTMLRouterContainer;\n const offlineStubPath = './offline-stub.html';\n offlineStub.setAttribute('src', offlineStubPath);\n offlineStub.setAttribute('style', 'width: 100%; height: 100%; border: 0');\n this.response = undefined;\n\n let onlineListener: ConnectionStateChangeListener | undefined;\n const removeOfflineStubAndOnlineListener = () => {\n if (onlineListener !== undefined) {\n $wnd.Vaadin.connectionState.removeStateChangeListener(onlineListener);\n onlineListener = undefined;\n }\n };\n\n offlineStub.onBeforeEnter = (ctx, _cmds, router) => {\n onlineListener = () => {\n if ($wnd.Vaadin.connectionState.online) {\n removeOfflineStubAndOnlineListener();\n router.render(ctx, false);\n }\n };\n $wnd.Vaadin.connectionState.addStateChangeListener(onlineListener);\n };\n offlineStub.onBeforeLeave = (_ctx, _cmds, _router) => {\n removeOfflineStubAndOnlineListener();\n };\n return offlineStub;\n }\n\n private isFlowClientLoaded(): boolean {\n return this.response !== undefined;\n }\n}\n"]} \ No newline at end of file diff --git a/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/FlowBootstrap.d.ts b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/FlowBootstrap.d.ts new file mode 100644 index 00000000..0398d576 --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/FlowBootstrap.d.ts @@ -0,0 +1 @@ +export const init: (appInitResponse: any) => void; diff --git a/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/FlowBootstrap.js b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/FlowBootstrap.js new file mode 100644 index 00000000..a8d94854 --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/FlowBootstrap.js @@ -0,0 +1,262 @@ +/* This is a copy of the regular `BootstrapHandler.js` in the flow-server + module, but with the following modifications: + - The main function is exported as an ES module for lazy initialization. + - Application configuration is passed as a parameter instead of using + replacement placeholders as in the regular bootstrapping. + - It reuses `Vaadin.Flow.clients` if exists. + - Fixed lint errors. + */ +const init = function (appInitResponse) { + window.Vaadin = window.Vaadin || {}; + window.Vaadin.Flow = window.Vaadin.Flow || {}; + + var apps = {}; + var widgetsets = {}; + + var log; + if (typeof window.console === undefined || !window.location.search.match(/[&?]debug(&|$)/)) { + /* If no console.log present, just use a no-op */ + log = function () {}; + } else if (typeof window.console.log === 'function') { + /* If it's a function, use it with apply */ + log = function () { + window.console.log.apply(window.console, arguments); + }; + } else { + /* In IE, its a native function for which apply is not defined, but it works + without a proper 'this' reference */ + log = window.console.log; + } + + var isInitializedInDom = function (appId) { + var appDiv = document.getElementById(appId); + if (!appDiv) { + return false; + } + for (var i = 0; i < appDiv.childElementCount; i++) { + var className = appDiv.childNodes[i].className; + /* If the app div contains a child with the class + 'v-app-loading' we have only received the HTML + but not yet started the widget set + (UIConnector removes the v-app-loading div). */ + if (className && className.indexOf('v-app-loading') != -1) { + return false; + } + } + return true; + }; + + /* + * Needed for Testbench compatibility, but prevents any Vaadin 7 app from + * bootstrapping unless the legacy vaadinBootstrap.js file is loaded before + * this script. + */ + window.Vaadin = window.Vaadin || {}; + window.Vaadin.Flow = window.Vaadin.Flow || {}; + + /* + * Needed for wrapping custom javascript functionality in the components (i.e. connectors) + */ + window.Vaadin.Flow.tryCatchWrapper = function (originalFunction, component) { + return function () { + try { + // eslint-disable-next-line + const result = originalFunction.apply(this, arguments); + return result; + } catch (error) { + console.error( + `There seems to be an error in ${component}: +${error.message} +Please submit an issue to https://github.com/vaadin/flow-components/issues/new/choose` + ); + } + }; + }; + + if (!window.Vaadin.Flow.initApplication) { + window.Vaadin.Flow.clients = window.Vaadin.Flow.clients || {}; + + window.Vaadin.Flow.initApplication = function (appId, config) { + var testbenchId = appId.replace(/-\d+$/, ''); + + if (apps[appId]) { + if ( + window.Vaadin && + window.Vaadin.Flow && + window.Vaadin.Flow.clients && + window.Vaadin.Flow.clients[testbenchId] && + window.Vaadin.Flow.clients[testbenchId].initializing + ) { + throw new Error('Application ' + appId + ' is already being initialized'); + } + if (isInitializedInDom(appId)) { + throw new Error('Application ' + appId + ' already initialized'); + } + } + + log('init application', appId, config); + + window.Vaadin.Flow.clients[testbenchId] = { + isActive: function () { + return true; + }, + initializing: true, + productionMode: mode + }; + + var getConfig = function (name) { + var value = config[name]; + return value; + }; + + /* Export public data */ + var app = { + getConfig: getConfig + }; + apps[appId] = app; + + if (!window.name) { + window.name = appId + '-' + Math.random(); + } + + var widgetset = 'client'; + widgetsets[widgetset] = { + pendingApps: [] + }; + if (widgetsets[widgetset].callback) { + log('Starting from bootstrap', appId); + widgetsets[widgetset].callback(appId); + } else { + log('Setting pending startup', appId); + widgetsets[widgetset].pendingApps.push(appId); + } + + return app; + }; + window.Vaadin.Flow.getAppIds = function () { + var ids = []; + for (var id in apps) { + if (Object.prototype.hasOwnProperty.call(apps, id)) { + ids.push(id); + } + } + return ids; + }; + window.Vaadin.Flow.getApp = function (appId) { + return apps[appId]; + }; + window.Vaadin.Flow.registerWidgetset = function (widgetset, callback) { + log('Widgetset registered', widgetset); + var ws = widgetsets[widgetset]; + if (ws && ws.pendingApps) { + ws.callback = callback; + for (var i = 0; i < ws.pendingApps.length; i++) { + var appId = ws.pendingApps[i]; + log('Starting from register widgetset', appId); + callback(appId); + } + ws.pendingApps = null; + } + }; + window.Vaadin.Flow.getBrowserDetailsParameters = function () { + var params = {}; + + /* Screen height and width */ + params['v-sh'] = window.screen.height; + params['v-sw'] = window.screen.width; + /* Browser window dimensions */ + params['v-wh'] = window.innerHeight; + params['v-ww'] = window.innerWidth; + /* Body element dimensions */ + params['v-bh'] = document.body.clientHeight; + params['v-bw'] = document.body.clientWidth; + + /* Current time */ + var date = new Date(); + params['v-curdate'] = date.getTime(); + + /* Current timezone offset (including DST shift) */ + var tzo1 = date.getTimezoneOffset(); + + /* Compare the current tz offset with the first offset from the end + of the year that differs --- if less that, we are in DST, otherwise + we are in normal time */ + var dstDiff = 0; + var rawTzo = tzo1; + for (var m = 12; m > 0; m--) { + date.setUTCMonth(m); + var tzo2 = date.getTimezoneOffset(); + if (tzo1 != tzo2) { + dstDiff = tzo1 > tzo2 ? tzo1 - tzo2 : tzo2 - tzo1; + rawTzo = tzo1 > tzo2 ? tzo1 : tzo2; + break; + } + } + + /* Time zone offset */ + params['v-tzo'] = tzo1; + + /* DST difference */ + params['v-dstd'] = dstDiff; + + /* Time zone offset without DST */ + params['v-rtzo'] = rawTzo; + + /* DST in effect? */ + params['v-dston'] = tzo1 != rawTzo; + + /* Time zone id (if available) */ + try { + params['v-tzid'] = Intl.DateTimeFormat().resolvedOptions().timeZone; + } catch (err) { + params['v-tzid'] = ''; + } + + /* Window name */ + if (window.name) { + params['v-wn'] = window.name; + } + + /* Detect touch device support */ + var supportsTouch = false; + try { + document.createEvent('TouchEvent'); + supportsTouch = true; + } catch (e) { + /* Chrome and IE10 touch detection */ + supportsTouch = 'ontouchstart' in window || typeof navigator.msMaxTouchPoints !== 'undefined'; + } + params['v-td'] = supportsTouch; + + /* Device Pixel Ratio */ + params['v-pr'] = window.devicePixelRatio; + + if (navigator.platform) { + params['v-np'] = navigator.platform; + } + + /* Stringify each value (they are parsed on the server side) */ + Object.keys(params).forEach(function (key) { + var value = params[key]; + if (typeof value !== 'undefined') { + params[key] = value.toString(); + } + }); + return params; + }; + } + + log('Flow bootstrap loaded'); + if (appInitResponse.appConfig.productionMode && typeof window.__gwtStatsEvent != 'function') { + window.Vaadin.Flow.gwtStatsEvents = []; + window.__gwtStatsEvent = function (event) { + window.Vaadin.Flow.gwtStatsEvents.push(event); + return true; + }; + } + var config = appInitResponse.appConfig; + var mode = appInitResponse.appConfig.productionMode; + window.Vaadin.Flow.initApplication(config.appId, config); +}; + +export { init }; diff --git a/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/FlowClient.d.ts b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/FlowClient.d.ts new file mode 100644 index 00000000..7b21f908 --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/FlowClient.d.ts @@ -0,0 +1 @@ +export const init: () => void; diff --git a/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/FlowClient.js b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/FlowClient.js new file mode 100644 index 00000000..cc3ead94 --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/FlowClient.js @@ -0,0 +1,1132 @@ +// Vertx-Vaadin FLowClient +const init = function(){ +function client(){var Jb='',Kb=0,Lb='gwt.codesvr=',Mb='gwt.hosted=',Nb='gwt.hybrid',Ob='client',Pb='#',Qb='?',Rb='/',Sb=1,Tb='img',Ub='clear.cache.gif',Vb='baseUrl',Wb='script',Xb='client.nocache.js',Yb='base',Zb='//',$b='meta',_b='name',ac='gwt:property',bc='content',cc='=',dc='gwt:onPropertyErrorFn',ec='Bad handler "',fc='" for "gwt:onPropertyErrorFn"',gc='gwt:onLoadErrorFn',hc='" for "gwt:onLoadErrorFn"',ic='user.agent',jc='webkit',kc='safari',lc='msie',mc=10,nc=11,oc='ie10',pc=9,qc='ie9',rc=8,sc='ie8',tc='gecko',uc='gecko1_8',vc=2,wc=3,xc=4,yc='Single-script hosted mode not yet implemented. See issue ',zc='http://code.google.com/p/google-web-toolkit/issues/detail?id=2079',Ac='9AD1E3DE66C168E6E989BC7BD2DA078C',Bc=':1',Cc=':',Dc='DOMContentLoaded',Ec=50;var l=Jb,m=Kb,n=Lb,o=Mb,p=Nb,q=Ob,r=Pb,s=Qb,t=Rb,u=Sb,v=Tb,w=Ub,A=Vb,B=Wb,C=Xb,D=Yb,F=Zb,G=$b,H=_b,I=ac,J=bc,K=cc,L=dc,M=ec,N=fc,O=gc,P=hc,Q=ic,R=jc,S=kc,T=lc,U=mc,V=nc,W=oc,X=pc,Y=qc,Z=rc,$=sc,_=tc,ab=uc,bb=vc,cb=wc,db=xc,eb=yc,fb=zc,gb=Ac,hb=Bc,ib=Cc,jb=Dc,kb=Ec;var lb=window,mb=document,nb,ob,pb=l,qb={},rb=[],sb=[],tb=[],ub=m,vb,wb;if(!lb.__gwt_stylesLoaded){lb.__gwt_stylesLoaded={}}if(!lb.__gwt_scriptsLoaded){lb.__gwt_scriptsLoaded={}}function xb(){var b=false;try{var c=lb.location.search;return (c.indexOf(n)!=-1||(c.indexOf(o)!=-1||lb.external&&lb.external.gwtOnLoad))&&c.indexOf(p)==-1}catch(a){}xb=function(){return b};return b} +function yb(){if(nb&&ob){nb(vb,q,pb,ub)}} +function zb(){function e(a){var b=a.lastIndexOf(r);if(b==-1){b=a.length}var c=a.indexOf(s);if(c==-1){c=a.length}var d=a.lastIndexOf(t,Math.min(c,b));return d>=m?a.substring(m,d+u):l} +function f(a){if(a.match(/^\w+:\/\//)){}else{var b=mb.createElement(v);b.src=a+w;a=e(b.src)}return a} +function g(){var a=Cb(A);if(a!=null){return a}return l} +function h(){var a=mb.getElementsByTagName(B);for(var b=m;bm){return a[a.length-u].href}return l} +function j(){var a=mb.location;return a.href==a.protocol+F+a.host+a.pathname+a.search+a.hash} +var k=g();if(k==l){k=h()}if(k==l){k=i()}if(k==l&&j()){k=e(mb.location.href)}k=f(k);return k} +function Ab(){var b=document.getElementsByTagName(G);for(var c=m,d=b.length;c=m){f=g.substring(m,i);h=g.substring(i+u)}else{f=g;h=l}qb[f]=h}}else if(f==L){g=e.getAttribute(J);if(g){try{wb=eval(g)}catch(a){alert(M+g+N)}}}else if(f==O){g=e.getAttribute(J);if(g){try{vb=eval(g)}catch(a){alert(M+g+P)}}}}}} +var Bb=function(a,b){return b in rb[a]};var Cb=function(a){var b=qb[a];return b==null?null:b};function Db(a,b){var c=tb;for(var d=m,e=a.length-u;d=U&&b=X&&b=Z&&b=V}())return ab;return S};rb[Q]={'gecko1_8':m,'ie10':u,'ie8':bb,'ie9':cb,'safari':db};client.onScriptLoad=function(a){client=null;nb=a;yb()};if(xb()){alert(eb+fb);return}zb();Ab();try{var Fb;Db([ab],gb);Db([S],gb+hb);Fb=tb[Eb(Q)];var Gb=Fb.indexOf(ib);if(Gb!=-1){ub=Number(Fb.substring(Gb+u))}}catch(a){return}var Hb;function Ib(){if(!ob){ob=true;yb();if(mb.removeEventListener){mb.removeEventListener(jb,Ib,false)}if(Hb){clearInterval(Hb)}}} +if(mb.addEventListener){mb.addEventListener(jb,function(){Ib()},false)}var Hb=setInterval(function(){if(/loaded|complete/.test(mb.readyState)){Ib()}},kb)} +client();(function () {var $gwt_version = "2.8.2";var $wnd = window;var $doc = $wnd.document;var $moduleName, $moduleBase;var $stats = $wnd.__gwtStatsEvent ? function(a) {$wnd.__gwtStatsEvent(a)} : null;var $strongName = '9AD1E3DE66C168E6E989BC7BD2DA078C';function G(){} +function kk(){} +function gk(){} +function qk(){} +function Uk(){} +function Kb(){} +function cd(){} +function kd(){} +function bl(){} +function Jl(){} +function Ll(){} +function Nl(){} +function zm(){} +function Em(){} +function Jm(){} +function Lm(){} +function Zm(){} +function Zr(){} +function Vr(){} +function Xr(){} +function _r(){} +function eo(){} +function go(){} +function io(){} +function Ro(){} +function To(){} +function Tt(){} +function Mt(){} +function Qt(){} +function Wp(){} +function dq(){} +function zs(){} +function Ds(){} +function nu(){} +function nz(){} +function rz(){} +function cv(){} +function hw(){} +function lw(){} +function Aw(){} +function AE(){} +function jy(){} +function Jy(){} +function Ly(){} +function IA(){} +function qB(){} +function wC(){} +function cI(){} +function BI(){} +function HI(){} +function nA(){kA()} +function Ek(a,b){a.b=b} +function Gk(a,b){a.d=b} +function Hk(a,b){a.e=b} +function Ik(a,b){a.f=b} +function Jk(a,b){a.g=b} +function Kk(a,b){a.i=b} +function Lk(a,b){a.j=b} +function Nk(a,b){a.n=b} +function Ok(a,b){a.o=b} +function Pk(a,b){a.p=b} +function Qk(a,b){a.q=b} +function Rk(a,b){a.r=b} +function Sk(a,b){a.s=b} +function Tk(a,b){a.t=b} +function ts(a,b){a.g=b} +function wu(a,b){a.b=b} +function wl(a){this.a=a} +function ul(a){this.a=a} +function hb(a){this.a=a} +function Eb(a){this.a=a} +function Gb(a){this.a=a} +function Ib(a){this.a=a} +function Tc(a){this.a=a} +function Vc(a){this.a=a} +function Vm(a){this.a=a} +function xm(a){this.a=a} +function Cm(a){this.a=a} +function Hm(a){this.a=a} +function Pm(a){this.a=a} +function Rm(a){this.a=a} +function Tm(a){this.a=a} +function Xm(a){this.a=a} +function Dn(a){this.a=a} +function ko(a){this.a=a} +function mo(a){this.a=a} +function uo(a){this.a=a} +function Ho(a){this.a=a} +function Jo(a){this.a=a} +function Lo(a){this.a=a} +function Vo(a){this.a=a} +function Go(a){this.c=a} +function Gp(a){this.a=a} +function qp(a){this.a=a} +function tp(a){this.a=a} +function up(a){this.a=a} +function Ap(a){this.a=a} +function Qp(a){this.a=a} +function Sp(a){this.a=a} +function Yp(a){this.a=a} +function $p(a){this.a=a} +function aq(a){this.a=a} +function eq(a){this.a=a} +function kq(a){this.a=a} +function xq(a){this.a=a} +function Pq(a){this.a=a} +function Ar(a){this.a=a} +function Cr(a){this.a=a} +function Er(a){this.a=a} +function Nr(a){this.a=a} +function Qr(a){this.a=a} +function Fs(a){this.a=a} +function Ks(a){this.a=a} +function Os(a){this.a=a} +function $s(a){this.a=a} +function Zs(a){this.c=a} +function ct(a){this.a=a} +function lt(a){this.a=a} +function tt(a){this.a=a} +function vt(a){this.a=a} +function xt(a){this.a=a} +function zt(a){this.a=a} +function Bt(a){this.a=a} +function Ct(a){this.a=a} +function Kt(a){this.a=a} +function cu(a){this.a=a} +function lu(a){this.a=a} +function pu(a){this.a=a} +function Au(a){this.a=a} +function Cu(a){this.a=a} +function Qu(a){this.a=a} +function Uu(a){this.a=a} +function xu(a){this.c=a} +function av(a){this.a=a} +function lv(a){this.a=a} +function nv(a){this.a=a} +function Hv(a){this.a=a} +function Lv(a){this.a=a} +function Lw(a){this.a=a} +function jw(a){this.a=a} +function Mw(a){this.a=a} +function Ow(a){this.a=a} +function Sw(a){this.a=a} +function Uw(a){this.a=a} +function Zw(a){this.a=a} +function Zy(a){this.a=a} +function Py(a){this.a=a} +function Ry(a){this.a=a} +function _y(a){this.a=a} +function Oy(a){this.b=a} +function lz(a){this.a=a} +function pz(a){this.a=a} +function tz(a){this.a=a} +function vz(a){this.a=a} +function zz(a){this.a=a} +function Iz(a){this.a=a} +function Kz(a){this.a=a} +function Mz(a){this.a=a} +function Oz(a){this.a=a} +function Sz(a){this.a=a} +function Yz(a){this.a=a} +function bA(a){this.a=a} +function zA(a){this.a=a} +function CA(a){this.a=a} +function KA(a){this.a=a} +function MA(a){this.e=a} +function oB(a){this.a=a} +function sB(a){this.a=a} +function uB(a){this.a=a} +function QB(a){this.a=a} +function dC(a){this.a=a} +function fC(a){this.a=a} +function hC(a){this.a=a} +function sC(a){this.a=a} +function uC(a){this.a=a} +function KC(a){this.a=a} +function jD(a){this.a=a} +function wE(a){this.a=a} +function yE(a){this.a=a} +function BE(a){this.a=a} +function rF(a){this.a=a} +function tG(a){this.a=a} +function EG(a){this.b=a} +function ZG(a){this.c=a} +function NH(a){this.a=a} +function pl(a){throw a} +function Vp(a){Pp(Md(a))} +function lk(){Gq();Kq()} +function Pb(a){Ob=a;zc()} +function Nb(){this.a=nc()} +function Bk(){this.a=++Ak} +function bm(){this.d=null} +function Gq(){Gq=gk;Fq=[]} +function Xj(a){return a.e} +function HC(a){hB(a.a,a.b)} +function Gt(a,b){TC(a.a,b)} +function Ox(a,b){fy(b,a)} +function Tx(a,b){ey(b,a)} +function Xx(a,b){Kx(b,a)} +function $A(a,b){aw(b,a)} +function Ev(a,b){b.rb(a)} +function bE(b,a){b.log(a)} +function cE(b,a){b.warn(a)} +function XD(b,a){b.data=a} +function _D(b,a){b.debug(a)} +function aE(b,a){b.error(a)} +function R(a,b){a.send(b)} +function ds(a){a.j||es(a.a)} +function Ts(a){Ss(a)&&Ws(a)} +function Zc(a){Yc();Xc.T(a)} +function Oc(a){return a.S()} +function co(a){return Jn(a)} +function bc(){Wb.call(this)} +function HE(){Wb.call(this)} +function FE(){bc.call(this)} +function yF(){bc.call(this)} +function hH(){bc.call(this)} +function HH(){bc.call(this)} +function qH(){qH=gk;pH=sH()} +function kA(){kA=gk;jA=xA()} +function gc(){gc=gk;fc=new G} +function Gc(){Gc=gk;Fc=new dq} +function gu(){gu=gk;fu=new nu} +function hI(){this.a=new iH} +function RA(){RA=gk;QA=new qB} +function rl(a){Ob=a;!!a&&zc()} +function tm(a){km();this.a=a} +function SD(b,a){b.display=a} +function fE(b,a){b.replace(a)} +function xy(a,b){b.forEach(a)} +function vn(a,b){a.a.add(b.d)} +function ao(a,b,c){a.set(b,c)} +function iB(a,b,c){a.Rb(c,b)} +function un(a,b,c){pn(a,c,b)} +function UH(a,b,c){Vp(a.a[c])} +function Mk(a,b){a.k=b;ll=!b} +function tE(b,a){return a in b} +function ME(a){return MI(a),a} +function mF(a){return MI(a),a} +function Mb(a){return nc()-a.a} +function $z(a){$x(a.b,a.a,a.c)} +function lB(a){kB.call(this,a)} +function NB(a){kB.call(this,a)} +function aC(a){kB.call(this,a)} +function vE(a){cc.call(this,a)} +function DE(a){cc.call(this,a)} +function pF(a){cc.call(this,a)} +function qF(a){cc.call(this,a)} +function AF(a){cc.call(this,a)} +function zF(a){ec.call(this,a)} +function CF(a){pF.call(this,a)} +function EE(a){DE.call(this,a)} +function bG(a){DE.call(this,a)} +function $F(){BE.call(this,'')} +function _F(){BE.call(this,'')} +function EI(a){new VG;this.a=a} +function RE(a){QE(a);return a.j} +function xr(a,b){return a.a>b.a} +function Td(a,b){return Xd(a,b)} +function nd(a,b){return $E(a,b)} +function sE(a){return Object(a)} +function dp(a,b){a.d?fp(b):um()} +function rv(a,b){a.c.forEach(b)} +function oC(a,b){a.e||a.c.add(b)} +function rm(a,b){++jm;b.M(a,gm)} +function Xn(a,b){CC(new so(b,a))} +function Rx(a,b){CC(new Uz(b,a))} +function Sx(a,b){CC(new Wz(b,a))} +function Cy(a,b,c){qC(ly(a,c,b))} +function tc(){tc=gk;!!(Yc(),Xc)} +function _H(){_H=gk;ZH=new cI} +function dG(){dG=gk;cG=new AE} +function uH(){qH();return new pH} +function VA(a){jB(a.a);return a.g} +function ZA(a){jB(a.a);return a.c} +function SA(a,b){return eB(a.a,b)} +function SB(a,b){return eB(a.a,b)} +function EB(a,b){return eB(a.a,b)} +function wy(a,b){return _m(a.b,b)} +function Vx(a,b){return wx(b.a,a)} +function mk(b,a){return b.exec(a)} +function pG(a){return a.a.c+a.b.c} +function Kc(a){return !!a.b||!!a.g} +function dl(a,b){this.b=a;this.a=b} +function rb(a,b){this.b=a;this.c=b} +function Nm(a,b){this.a=a;this.b=b} +function hn(a,b){this.a=a;this.b=b} +function kn(a,b){this.a=a;this.b=b} +function zn(a,b){this.a=a;this.b=b} +function Bn(a,b){this.a=a;this.b=b} +function oo(a,b){this.a=a;this.b=b} +function qo(a,b){this.a=a;this.b=b} +function so(a,b){this.a=a;this.b=b} +function wo(a,b){this.b=a;this.a=b} +function yo(a,b){this.a=a;this.b=b} +function Ao(a,b){this.a=a;this.b=b} +function xp(a,b){this.a=a;this.b=b} +function Cp(a,b){this.b=a;this.a=b} +function Ep(a,b){this.b=a;this.a=b} +function Cb(a,b){rb.call(this,a,b)} +function rq(a,b){rb.call(this,a,b)} +function iF(){cc.call(this,null)} +function ak(){$j==null&&($j=[])} +function Ec(){oc!=0&&(oc=0);sc=-1} +function Iu(){this.a=new $wnd.Map} +function $C(){this.c=new $wnd.Map} +function bs(a,b){this.b=a;this.a=b} +function Eu(a,b){this.b=a;this.a=b} +function Su(a,b){this.a=a;this.b=b} +function Wu(a,b){this.a=a;this.b=b} +function Is(a,b){this.a=a;this.b=b} +function Ms(a,b){this.a=a;this.b=b} +function Fv(a,b){this.a=a;this.b=b} +function Jv(a,b){this.a=a;this.b=b} +function Nv(a,b){this.a=a;this.b=b} +function hz(a,b){this.a=a;this.b=b} +function jz(a,b){this.a=a;this.b=b} +function Bz(a,b){this.a=a;this.b=b} +function Qz(a,b){this.a=a;this.b=b} +function Uz(a,b){this.b=a;this.a=b} +function Wz(a,b){this.b=a;this.a=b} +function Vy(a,b){this.b=a;this.a=b} +function dA(a,b){this.b=a;this.a=b} +function fA(a,b){this.b=a;this.a=b} +function tA(a,b){this.b=a;this.a=b} +function rA(a,b){this.a=a;this.b=b} +function wB(a,b){this.a=a;this.b=b} +function jC(a,b){this.a=a;this.b=b} +function IC(a,b){this.a=a;this.b=b} +function LC(a,b){this.a=a;this.b=b} +function DB(a,b){this.d=a;this.e=b} +function BD(a,b){rb.call(this,a,b)} +function JD(a,b){rb.call(this,a,b)} +function hE(c,a,b){c.setItem(a,b)} +function mn(a,b){return Kd(a.b[b])} +function wH(a,b){return a.a.get(b)} +function fr(a,b){Zq(a,(wr(),ur),b)} +function Xt(a,b,c,d){Wt(a,b.d,c,d)} +function Qx(a,b,c){cy(a,b);Fx(c.e)} +function jx(b,a){cx();delete b[a]} +function jE(b,a){b.clearTimeout(a)} +function Dc(a){$wnd.clearTimeout(a)} +function sk(a){$wnd.clearTimeout(a)} +function iE(b,a){b.clearInterval(a)} +function mA(a,b){rC(b);jA.delete(a)} +function wq(a,b){return uq(b,vq(a))} +function RF(a,b){return a.substr(b)} +function IF(a,b){return MI(a),a===b} +function NE(a,b){return MI(a),a===b} +function nF(a){return Zd((MI(a),a))} +function Vd(a){return typeof a===cJ} +function vA(a){a.length=0;return a} +function XF(a,b){a.a+=''+b;return a} +function YF(a,b){a.a+=''+b;return a} +function ZF(a,b){a.a+=''+b;return a} +function $d(a){OI(a==null);return a} +function NG(a){this.a=null;this.b=a} +function lH(a){this.a=uH();this.b=a} +function yH(a){this.a=uH();this.b=a} +function _C(a){UC(a.a,a.d,a.c,a.b)} +function mr(a,b){Zq(a,(wr(),vr),b.a)} +function tn(a,b){return a.a.has(b.d)} +function KF(a,b){return a.indexOf(b)} +function gE(b,a){return b.getItem(a)} +function pE(a){return a&&a.valueOf()} +function rE(a){return a&&a.valueOf()} +function kG(a){return !a?null:a.fc()} +function Yd(a){return a==null?null:a} +function JH(a){return a!=null?M(a):0} +function rk(a){$wnd.clearInterval(a)} +function W(a){cq((Gc(),Fc),new hb(a))} +function LH(){LH=gk;KH=new NH(null)} +function Cw(){Cw=gk;Bw=new $wnd.Map} +function cx(){cx=gk;bx=new $wnd.Map} +function LE(){LE=gk;JE=false;KE=true} +function br(a){!!a.b&&kr(a,(wr(),tr))} +function gr(a){!!a.b&&kr(a,(wr(),ur))} +function pr(a){!!a.b&&kr(a,(wr(),vr))} +function Qb(a){a.i=pd(hj,sJ,30,0,0,1)} +function ml(a){ll&&_D($wnd.console,a)} +function ol(a){ll&&aE($wnd.console,a)} +function sl(a){ll&&bE($wnd.console,a)} +function tl(a){ll&&cE($wnd.console,a)} +function Kp(a){ll&&aE($wnd.console,a)} +function Lr(a){this.a=a;qk.call(this)} +function Bs(a){this.a=a;qk.call(this)} +function jt(a){this.a=a;qk.call(this)} +function Jt(a){this.a=new $C;this.c=a} +function xA(){return new $wnd.WeakMap} +function wv(a,b){return a.i.delete(b)} +function yv(a,b){return a.b.delete(b)} +function hB(a,b){return a.a.delete(b)} +function fB(a,b){return eB(a,a.Sb(b))} +function Dy(a,b,c){return ly(a,c.a,b)} +function vy(a,b){return Pn(a.b.root,b)} +function gs(a){return sK in a?a[sK]:-1} +function ns(a){cq((Gc(),Fc),new Os(a))} +function By(a){cq((Gc(),Fc),new Oz(a))} +function om(a){cq((Gc(),Fc),new Xm(a))} +function Do(a){cq((Gc(),Fc),new Lo(a))} +function Oq(a){cq((Gc(),Fc),new Pq(a))} +function gn(a,b){Fd(yl(a,Df),27).kb(b)} +function Dz(a,b){yy(a.a,a.c,a.d,a.b,b)} +function GB(a,b){jB(a.a);a.c.forEach(b)} +function TB(a,b){jB(a.a);a.b.forEach(b)} +function wI(a,b){if(mI){return}a.b=b} +function UD(a,b,c,d){return MD(a,b,c,d)} +function vd(a,b,c){return {l:a,m:b,h:c}} +function MH(a,b){return a.a!=null?a.a:b} +function WF(a){return a==null?yJ:jk(a)} +function Pd(a,b){return a!=null&&Ed(a,b)} +function TI(a){return a.$H||(a.$H=++SI)} +function Po(a){return ''+Qo(No.wb()-a,3)} +function aG(a){BE.call(this,(MI(a),a))} +function VG(){this.a=pd(ej,sJ,1,0,5,1)} +function Wb(){Qb(this);Rb(this);this.Q()} +function gt(a){if(a.a){nk(a.a);a.a=null}} +function JI(a){if(!a){throw Xj(new FE)}} +function KI(a){if(!a){throw Xj(new HH)}} +function OI(a){if(!a){throw Xj(new iF)}} +function XI(){XI=gk;UI=new G;WI=new G} +function Ux(a,b){var c;c=wx(b,a);qC(c)} +function et(a,b){b.a.b==(qq(),pq)&>(a)} +function VD(a,b){return a.appendChild(b)} +function WD(b,a){return b.appendChild(a)} +function MF(a,b){return a.lastIndexOf(b)} +function LF(a,b,c){return a.indexOf(b,c)} +function vm(a,b,c){km();return a.set(c,b)} +function rI(a,b){if(mI){return}RG(a.a,b)} +function pC(a){if(a.d||a.e){return}nC(a)} +function QE(a){if(a.j!=null){return}cF(a)} +function kc(a){return a==null?null:a.name} +function Rd(a){return typeof a==='number'} +function Ud(a){return typeof a==='string'} +function SF(a,b,c){return a.substr(b,c-b)} +function dE(d,a,b,c){d.pushState(a,b,c)} +function TD(d,a,b,c){d.setProperty(a,b,c)} +function DI(a,b){CI(a);a.b=true;TH(a.a,b)} +function yB(a,b){MA.call(this,a);this.a=b} +function dv(a,b){MD(b,lK,new lv(a),false)} +function Ub(a,b){a.e=b;b!=null&&RI(b,wJ,a)} +function jB(a){var b;b=yC;!!b&&lC(b,a.b)} +function qb(a){return a.b!=null?a.b:''+a.c} +function Qd(a){return typeof a==='boolean'} +function YD(b,a){return b.createElement(a)} +function ad(a){Yc();return parseInt(a)||-1} +function wm(a){km();jm==0?a.I():im.push(a)} +function Gd(a){OI(a==null||Qd(a));return a} +function Hd(a){OI(a==null||Rd(a));return a} +function Id(a){OI(a==null||Vd(a));return a} +function Md(a){OI(a==null||Ud(a));return a} +function CC(a){zC==null&&(zC=[]);zC.push(a)} +function DC(a){BC==null&&(BC=[]);BC.push(a)} +function Ul(a){a.f=[];a.g=[];a.a=0;a.b=nc()} +function jI(a){this.a=a;dG();Zj(Date.now())} +function kB(a){this.a=new $wnd.Set;this.b=a} +function on(){this.a=new $wnd.Map;this.b=[]} +function VH(a,b){this.b=0;this.c=b;this.a=a} +function xI(a,b){if(mI){return}!!b&&(a.d=b)} +function Gr(a,b){b.a.b==(qq(),pq)&&Jr(a,-1)} +function Nc(a,b){a.b=Pc(a.b,[b,false]);Lc(a)} +function Mp(a,b){Np(a,b,Fd(yl(a.a,xe),9).q)} +function wk(a,b){return $wnd.setTimeout(a,b)} +function NF(a,b,c){return a.lastIndexOf(b,c)} +function uc(a,b,c){return a.apply(b,c);var d} +function Xd(a,b){return a&&b&&a instanceof b} +function vk(a,b){return $wnd.setInterval(a,b)} +function cH(a){return new EI(bH(a,a.length))} +function jc(a){return a==null?null:a.message} +function Hw(a){a.b?iE($wnd,a.c):jE($wnd,a.c)} +function eE(d,a,b,c){d.replaceState(a,b,c)} +function st(a,b,c){a.set(c,(jB(b.a),Md(b.g)))} +function Tr(a,b,c){a.pb(vF(WA(Fd(c.e,28),b)))} +function yr(a,b,c){rb.call(this,a,b);this.a=c} +function jb(a,b,c){this.a=a;this.c=b;this.b=c} +function Fw(a,b,c){this.a=a;this.c=b;this.g=c} +function Ip(a,b,c){this.a=a;this.b=b;this.c=c} +function Xy(a,b,c){this.a=a;this.b=b;this.c=c} +function bz(a,b,c){this.a=a;this.b=b;this.c=c} +function dz(a,b,c){this.a=a;this.b=b;this.c=c} +function fz(a,b,c){this.a=a;this.b=b;this.c=c} +function xz(a,b,c){this.b=a;this.a=b;this.c=c} +function _z(a,b,c){this.b=a;this.a=b;this.c=c} +function _w(a,b,c){this.b=a;this.a=b;this.c=c} +function Ty(a,b,c){this.b=a;this.c=b;this.a=c} +function Gz(a,b,c){this.c=a;this.b=b;this.a=c} +function hA(a,b,c){this.c=a;this.b=b;this.a=c} +function DH(a,b,c){this.a=a;this.b=b;this.c=c} +function iq(){this.b=(qq(),nq);this.a=new $C} +function km(){km=gk;im=[];gm=new zm;hm=new Em} +function xF(){xF=gk;wF=pd(_i,sJ,33,256,0,1)} +function pv(a,b){a.b.add(b);return new Nv(a,b)} +function qv(a,b){a.i.add(b);return new Jv(a,b)} +function uI(a,b){if(!lI){return}vI(a,(_H(),b))} +function mE(a){if(a==null){return 0}return +a} +function Fd(a,b){OI(a==null||Ed(a,b));return a} +function Ld(a,b){OI(a==null||Xd(a,b));return a} +function XE(a,b){var c;c=UE(a,b);c.e=2;return c} +function RG(a,b){a.a[a.a.length]=b;return true} +function SG(a,b){LI(b,a.a.length);return a.a[b]} +function Cl(a,b,c){Bl(a,b,c.jb());a.b.set(b,c)} +function yn(a,b,c){return a.set(c,(jB(b.a),b.g))} +function RD(b,a){return b.getPropertyValue(a)} +function tk(a,b){return _I(function(){a.W(b)})} +function Ww(a,b){return Xw(new Zw(a),b,19,true)} +function Jq(a){return $wnd.Vaadin.Flow.getApp(a)} +function rC(a){a.e=true;nC(a);a.c.clear();mC(a)} +function aB(a,b){a.d=true;TA(a,b);DC(new sB(a))} +function QC(a,b){a.a==null&&(a.a=[]);a.a.push(b)} +function SC(a,b,c,d){var e;e=WC(a,b,c);e.push(d)} +function at(a,b){var c;c=Zd(mF(Hd(b.a)));ft(a,c)} +function rr(a,b){this.a=a;this.b=b;qk.call(this)} +function uu(a,b){this.a=a;this.b=b;qk.call(this)} +function ku(a){gu();this.c=[];this.a=fu;this.d=a} +function xk(a){a.onreadystatechange=function(){}} +function RI(b,c,d){try{b[c]=d}catch(a){}} +function PD(a,b,c,d){a.removeEventListener(b,c,d)} +function QH(a){LH();return !a?KH:new NH(MI(a))} +function QD(b,a){return b.getPropertyPriority(a)} +function vH(a,b){return !(a.a.get(b)===undefined)} +function Sd(a){return a!=null&&Wd(a)&&!(a.jc===kk)} +function rd(a){return Array.isArray(a)&&a.jc===kk} +function Od(a){return !Array.isArray(a)&&a.jc===kk} +function Wd(a){return typeof a===aJ||typeof a===cJ} +function bH(a,b){return SH(b,a.length),new VH(a,b)} +function Yu(a){a.a=Et(Fd(yl(a.d,Bg),13),new av(a))} +function sm(a){++jm;dp(Fd(yl(a.a,Af),57),new Lm)} +function os(a,b){Ju(Fd(yl(a.k,Ug),87),b['execute'])} +function Pc(a,b){!a&&(a=[]);a[a.length]=b;return a} +function UE(a,b){var c;c=new SE;c.f=a;c.d=b;return c} +function VE(a,b,c){var d;d=UE(a,b);gF(c,d);return d} +function Rv(a,b){var c;c=b;return Fd(a.a.get(c),6)} +function sG(a,b){if(b){return gG(a.a,b)}return false} +function zc(){tc();if(pc){return}pc=true;Ac(false)} +function cc(a){Qb(this);this.g=a;Rb(this);this.Q()} +function AB(a,b,c){MA.call(this,a);this.b=b;this.a=c} +function zl(a,b,c){a.a.delete(c);a.a.set(c,b.jb())} +function Zn(a,b,c){return a.push(SA(c,new Ao(c,b)))} +function sd(a,b,c){JI(c==null||md(a,c));return a[b]=c} +function Jd(a){OI(a==null||Array.isArray(a));return a} +function MI(a){if(a==null){throw Xj(new yF)}return a} +function $I(){if(VI==256){UI=WI;WI=new G;VI=0}++VI} +function TH(a,b){MI(b);while(a.b=0){a.a=new jt(a);pk(a.a,b)}} +function Rl(a,b,c){am(td(nd(_d,1),sJ,95,15,[b,c]));_C(a.e)} +function KD(){ID();return td(nd(Di,1),sJ,51,0,[GD,FD,HD])} +function sq(){qq();return td(nd(Nf,1),sJ,60,0,[nq,oq,pq])} +function zr(){wr();return td(nd(Tf,1),sJ,63,0,[tr,ur,vr])} +function HA(a){if(!FA){return a}return $wnd.Polymer.dom(a)} +function lE(c,a,b){return c.setTimeout(_I(a.Vb).bind(a),b)} +function Nd(a){return a.hc||Array.isArray(a)&&nd(je,1)||je} +function Np(a,b,c){Op(a,c.caption,c.message,b,c.url,null)} +function Zv(a,b,c,d){Uv(a,b)&&Xt(Fd(yl(a.c,Fg),26),b,c,d)} +function bo(a,b,c,d,e){a.splice.apply(a,[b,c,d].concat(e))} +function mp(a,b,c){this.a=a;this.c=b;this.b=c;qk.call(this)} +function op(a,b,c){this.a=a;this.c=b;this.b=c;qk.call(this)} +function kp(a,b,c){this.b=a;this.d=b;this.c=c;this.a=new Nb} +function xv(a,b){Yd(b.db(a))===Yd((LE(),KE))&&a.b.delete(b)} +function OD(a,b){Od(a)?a.ub(b):(a.handleEvent(b),undefined)} +function Qw(a,b){BA(b).forEach(hk(Uw.prototype.pb,Uw,[a]))} +function iG(a,b){return b===a?'(this Map)':b==null?yJ:jk(b)} +function Vb(a,b){var c;c=RE(a.hc);return b==null?c:c+': '+b} +function gH(a){var b,c;c=a;b=c.$modCount|0;c.$modCount=b+1} +function Qn(a){var b;b=a.f;while(!!b&&!b.a){b=b.f}return b} +function aF(a){if(a._b()){return null}var b=a.i;return dk[b]} +function iu(a){a.a=fu;if(!a.b){return}Ws(Fd(yl(a.d,pg),17))} +function Ur(a){jl('applyDefaultTheme',(LE(),a?true:false))} +function es(a){a&&a.afterServerUpdate&&a.afterServerUpdate()} +function kE(c,a,b){return c.setInterval(_I(a.Vb).bind(a),b)} +function EA(a,b,c,d){return a.splice.apply(a,[b,c].concat(d))} +function Yx(a,b,c){return a.push(UA(UB(uv(b.e,1),c),b.b[c]))} +function Db(){Bb();return td(nd(ce,1),sJ,50,0,[zb,Ab,yb,xb])} +function CD(){AD();return td(nd(Ci,1),sJ,41,0,[zD,xD,yD,wD])} +function ab(){return $wnd.vaadinPush&&$wnd.vaadinPush.SockJS} +function Bq(a){a?($wnd.location=a):$wnd.location.reload(false)} +function GC(a){this.a=a;this.b=[];this.c=new $wnd.Set;nC(this)} +function GE(a,b){Qb(this);this.f=b;this.g=a;Rb(this);this.Q()} +function iH(){this.a=new lH(this);this.b=new yH(this);gH(this)} +function Yc(){Yc=gk;var a,b;b=!bd();a=new kd;Xc=b?new cd:a} +function WE(a,b,c,d){var e;e=UE(a,b);gF(c,e);e.e=d?8:0;return e} +function Ql(a){var b;b={};b[LJ]=sE(a.a);b[MJ]=sE(a.b);return b} +function ik(a){function b(){} +;b.prototype=a||{};return new b} +function Nw(a,b){BA(b).forEach(hk(Sw.prototype.pb,Sw,[a.a]))} +function TA(a,b){if(!a.b&&a.c&&IH(b,a.g)){return}bB(a,b,true)} +function Vs(a,b){!!a.b&&T(a.b)?Y(a.b,b):ru(Fd(yl(a.c,Pg),73),b)} +function UC(a,b,c,d){a.b>0?QC(a,new dD(a,b,c,d)):VC(a,b,c,d)} +function gD(a,b,c,d){return iD(new $wnd.XMLHttpRequest,a,b,c,d)} +function Gn(a,b){a.updateComplete.then(_I(function(){b.X()}))} +function fp(a){$wnd.HTMLImports.whenReady(_I(function(){a.X()}))} +function _A(a){if(a.c){a.d=true;bB(a,null,false);DC(new uB(a))}} +function nD(a){if(a.length>2){rD(a[0],'OS major');rD(a[1],cL)}} +function fH(a,b){if(b.$modCount!=a.$modCount){throw Xj(new hH)}} +function fn(a,b){var c;if(b.length!=0){c=new JA(b);a.e.set(Vh,c)}} +function Ju(a,b){var c,d;for(c=0;c-1} +function Zd(a){return Math.max(Math.min(a,2147483647),-2147483648)|0} +function ED(){ED=gk;DD=sb((AD(),td(nd(Ci,1),sJ,41,0,[zD,xD,yD,wD])))} +function Px(a,b){var c;c=b.f;Iy(Fd(yl(b.e.e.g.c,xe),9),a,c,(jB(b.a),b.g))} +function bt(a,b){var c,d;c=uv(a,8);d=UB(c,'pollInterval');SA(d,new ct(b))} +function XB(a,b){DB.call(this,a,b);this.b=new $wnd.Map;this.a=new aC(this)} +function XH(a,b){this.b=', ';this.d=a;this.e=b;this.c=this.d+(''+this.e)} +function us(a){this.n=new $wnd.Set;this.i=[];this.c=new Bs(this);this.k=a} +function Kw(a){!!a.a.e&&Hw(a.a.e);a.a.b&&Dz(a.a.f,'trailing');Ew(a.a)} +function Rw(a,b){Dz(b.f,null);RG(a,b.f);if(b.d){Hw(b.d);Iw(b.d,Zd(b.g))}} +function IB(a,b,c,d){var e;e=EA(a.c,b,c,d);gB(a.a,new OA(a,b,e,d,false))} +function _q(a,b){ol('Heartbeat exception: '+b.P());Zq(a,(wr(),tr),null)} +function VB(a,b){if(!a.b.has(b)){return false}return ZA(Fd(a.b.get(b),28))} +function LI(a,b){if(a<0||a>=b){throw Xj(new DE('Index: '+a+', Size: '+b))}} +function NI(a,b){if(a<0||a>=b){throw Xj(new bG('Index: '+a+', Size: '+b))}} +function Pu(a){Fd(yl(a.a,Of),10).b==(qq(),pq)||hq(Fd(yl(a.a,Of),10),pq)} +function dr(a){Jr(Fd(yl(a.c,_f),56),Fd(yl(a.c,xe),9).f);Zq(a,(wr(),tr),null)} +function xG(a){var b;fH(a.d,a);KI(a.b);b=Fd(a.a.dc(),43);a.b=wG(a);return b} +function pd(a,b,c,d,e,f){var g;g=qd(e,d);e!=10&&td(nd(a,f),b,c,e,g);return g} +function VC(a,b,c,d){var e,f;e=XC(a,b,c);f=wA(e,d);f&&e.length==0&&ZC(a,b,c)} +function Dq(a,b,c){c==null?HA(a).removeAttribute(b):HA(a).setAttribute(b,c)} +function Un(a,b){$wnd.customElements.whenDefined(a).then(function(){b.X()})} +function Lq(a){Gq();!$wnd.WebComponents||$wnd.WebComponents.ready?Iq(a):Hq(a)} +function FI(a,b){return od(b)!=10&&td(K(b),b.ic,b.__elementTypeId$,od(b),a),a} +function K(a){return Ud(a)?kj:Rd(a)?Ui:Qd(a)?Ri:Od(a)?a.hc:rd(a)?a.hc:Nd(a)} +function Ys(a,b){b&&!a.b?(a.b=new $(a.c)):!b&&!!a.b&&S(a.b)&&P(a.b,new $s(a))} +function JA(a){this.a=new $wnd.Set;a.forEach(hk(KA.prototype.pb,KA,[this.a]))} +function ay(a){var b;b=HA(a);while(b.firstChild){b.removeChild(b.firstChild)}} +function rt(a){var b;if(a==null){return false}b=Md(a);return !IF('DISABLED',b)} +function ud(a){var b,c,d;b=a&EJ;c=a>>22&EJ;d=a<0?1048575:0;return vd(b,c,d)} +function nw(a,b){var c,d,e;e=Zd(rE(a[NK]));d=uv(b,e);c=a['key'];return UB(d,c)} +function wb(a,b){var c;MI(b);c=a[':'+b];II(!!c,td(nd(ej,1),sJ,1,5,[b]));return c} +function yq(a,b){if(IF(b.substr(0,a.length),a)){return RF(b,a.length)}return b} +function TG(a,b,c){for(;ca||a>b){throw Xj(new EE('fromIndex: 0, toIndex: '+a+', length: '+b))}} +function DF(a,b,c){if(a==null){debugger;throw Xj(new HE)}this.a=DJ;this.d=a;this.b=b;this.c=c} +function _v(a,b,c,d,e){if(!Pv(a,b)){debugger;throw Xj(new HE)}Zt(Fd(yl(a.c,Fg),26),b,c,d,e)} +function $v(a,b,c,d,e,f){if(!Pv(a,b)){debugger;throw Xj(new HE)}Yt(Fd(yl(a.c,Fg),26),b,c,d,e,f)} +function Nx(a,b,c,d){var e,f,g;g=c[GK];e="path='"+mb(g)+"'";f=new hz(a,g);Ex(a,b,d,f,null,e)} +function xx(a,b,c,d){var e;e=uv(d,a);TB(e,hk(dA.prototype.M,dA,[b,c]));return SB(e,new fA(b,c))} +function Uq(c,a){var b=c.getConfig(a);if(b===null||b===undefined){return null}else{return b+''}} +function Tq(c,a){var b=c.getConfig(a);if(b===null||b===undefined){return null}else{return vF(b)}} +function tu(b){if(b.readyState!=1){return false}try{b.send();return true}catch(a){return false}} +function ju(a){if(fu!=a.a||a.c.length==0){return}a.b=true;a.a=new lu(a);cq((Gc(),Fc),new pu(a))} +function Xk(a,b){if(!b){Ts(Fd(yl(a.a,pg),17))}else{It(Fd(yl(a.a,Bg),13));js(Fd(yl(a.a,ng),19),b)}} +function er(a,b,c){T(b)&&Ft(Fd(yl(a.c,Bg),13));jr(c)||$q(a,'Invalid JSON from server: '+c,null)} +function Jr(a,b){ll&&bE($wnd.console,'Setting heartbeat interval to '+b+'sec.');a.a=b;Hr(a)} +function NC(b,c,d){return _I(function(){var a=Array.prototype.slice.call(arguments);d.Cb(b,c,a)})} +function Rc(b,c){Gc();function d(){var a=_I(Oc)(b);a&&$wnd.setTimeout(d,c)} +$wnd.setTimeout(d,c)} +function CI(a){if(a.b){throw Xj(new qF("Stream already terminated, can't be modified or used"))}} +function Lc(a){if(!a.j){a.j=true;!a.f&&(a.f=new Tc(a));Rc(a.f,1);!a.i&&(a.i=new Vc(a));Rc(a.i,50)}} +function wr(){wr=gk;tr=new yr('HEARTBEAT',0,0);ur=new yr('PUSH',1,1);vr=new yr('XHR',2,2)} +function qq(){qq=gk;nq=new rq('INITIALIZING',0);oq=new rq('RUNNING',1);pq=new rq('TERMINATED',2)} +function ap(a,b){var c,d;c=new tp(a);d=new $wnd.Function(a);jp(a,new Ap(d),new Cp(b,c),new Ep(b,c))} +function by(a,b){var c;c=Fd(b.d.get(a),42);b.d.delete(a);if(!c){debugger;throw Xj(new HE)}c.Gb()} +function AI(a){var b,c;b=IF(typeof(b),pJ)?null:new HI;if(!b){return}_H();c=(null,'info');GI(c,a.a)} +function _b(a){var b;if(a!=null){b=a[wJ];if(b){return b}}return Td(a,TypeError)?new zF(a):new ec(a)} +function uq(a,b){var c;if(a==null){return null}c=tq('context://',b,a);c=tq('base://','',c);return c} +function Yj(a){var b;b=a.h;if(b==0){return a.l+a.m*GJ}if(b==1048575){return a.l+a.m*GJ-FJ}return a} +function ls(a,b){if(b==-1){return true}if(b==a.f+1){return true}if(a.f==-1){return true}return false} +function wG(a){if(a.a.cc()){return true}if(a.a!=a.c){return false}a.a=new mH(a.d.a);return a.a.cc()} +function tI(a){if(mI){return pd(Lj,pL,80,0,0,1)}return Fd(UG(a.a,pd(Lj,pL,80,a.a.a.length,0,1)),323)} +function fw(a,b){var c;if(Pd(a,29)){c=Fd(a,29);Zd((MI(b),b))==2?HB(c,(jB(c.a),c.c.length)):FB(c)}} +function Wv(a,b){var c;if(b!=a.e){c=b.a;!!c&&(cx(),!!c[MK])&&ix((cx(),c[MK]));cw(a,b);b.f=null}} +function jH(a){var b,c,d;for(c=0,d=a.length;ca.length?(d=a.length):(d=c);return a.substr(e,d-e)} +function Wt(a,b,c,d){var e;e={};e[VJ]=AK;e[BK]=Object(b);e[AK]=c;!!d&&(e['data']=d,undefined);$t(a,e)} +function td(a,b,c,d,e){e.hc=a;e.ic=b;e.jc=kk;e.__elementTypeId$=c;e.__elementTypeCategory$=d;return e} +function ND(b){var c=b.handler;if(!c){c=_I(function(a){OD(b,a)});c.listener=b;b.handler=c}return c} +function oE(c){return $wnd.JSON.stringify(c,function(a,b){if(a=='$H'){return undefined}return b},0)} +function Sc(b,c){Gc();var d=$wnd.setInterval(function(){var a=_I(Oc)(b);!a&&$wnd.clearInterval(d)},c)} +function qm(a,b){var c;c=new $wnd.Map;b.forEach(hk(Nm.prototype.M,Nm,[a,c]));c.size==0||wm(new Pm(c))} +function Fk(a,b){var c;c='/'.length;if(!IF(b.substr(b.length-c,c),'/')){debugger;throw Xj(new HE)}a.c=b} +function Nu(a,b){var c;c=!!b.a&&!NE((LE(),JE),VA(UB(uv(b,0),FK)));if(!c||!b.f){return c}return Nu(a,b.f)} +function px(a,b){var c;if(b.d.has(a)){debugger;throw Xj(new HE)}c=UD(b.b,a,new zz(b),false);b.d.set(a,c)} +function aH(a){var b,c,d,e;e=1;for(c=0,d=a.length;c-129&&a<128){b=a+128;c=(xF(),wF)[b];!c&&(c=wF[b]=new rF(a));return c}return new rF(a)} +function zw(a){var b,c;c=yw(a);b=a.a;if(!a.a){b=c.Kb(a);if(!b){debugger;throw Xj(new HE)}zv(a,b)}xw(a,b);return b} +function gB(a,b){var c;if(b.Pb()!=a.b){debugger;throw Xj(new HE)}c=yA(a.a);c.forEach(hk(LC.prototype.pb,LC,[a,b]))} +function vI(a,b){var c;(kI?(sI(a),true):lI?(_H(),true):oI?(_H(),false):nI&&(_H(),false))&&(c=new jI(b),qI(a,c))} +function In(a,b){var c;Hn==null&&(Hn=xA());c=Ld(Hn.get(a),$wnd.Set);if(c==null){c=new $wnd.Set;Hn.set(a,c)}c.add(b)} +function Bv(a,b){this.c=new $wnd.Map;this.i=new $wnd.Set;this.b=new $wnd.Set;this.e=new $wnd.Map;this.d=a;this.g=b} +function am(a){$wnd.Vaadin.Flow.setScrollPosition?$wnd.Vaadin.Flow.setScrollPosition(a):$wnd.scrollTo(a[0],a[1])} +function Xq(a){a.b=null;Fd(yl(a.c,Bg),13).b&&Ft(Fd(yl(a.c,Bg),13));kl('connection-lost');Jr(Fd(yl(a.c,_f),56),0)} +function ot(a){if(VB(uv(Fd(yl(a.a,bh),11).e,5),zK)){return Md(VA(UB(uv(Fd(yl(a.a,bh),11).e,5),zK)))}return null} +function XA(a){var b;jB(a.a);if(a.c){b=(jB(a.a),a.g);if(b==null){return null}return jB(a.a),Md(a.g)}else{return null}} +function lx(a){var b;b=Id(bx.get(a));if(b==null){b=Id(new $wnd.Function(AK,SK,'return ('+a+')'));bx.set(a,b)}return b} +function gp(a,b,c){var d;d=Jd(c.get(a));if(d==null){d=[];d.push(b);c.set(a,d);return true}else{d.push(b);return false}} +function uE(c){var a=[];for(var b in c){Object.prototype.hasOwnProperty.call(c,b)&&b!='$H'&&a.push(b)}return a} +function wx(a,b){var c,d;d=a.f;if(b.c.has(d)){debugger;throw Xj(new HE)}c=new GC(new xz(a,b,d));b.c.set(d,c);return c} +function Sv(a,b){var c,d,e;e=BA(a.a);for(c=0;c0){c=Fd(a.b.splice(0,1)[0],28);wn(c,b)||aw(Fd(yl(a.c,bh),11),c);EC()}} +function Cc(a,b){tc();var c;c=Ob;if(c){if(c==qc){return}c.N(a);return}if(b){Bc(Pd(a,23)?Fd(a,23).R():a)}else{dG();Sb(a,cG,'')}} +function jk(a){var b;if(Array.isArray(a)&&a.jc===kk){return RE(K(a))+'@'+(b=M(a)>>>0,b.toString(16))}return a.toString()} +function vq(a){var b,c;b=Fd(yl(a.a,xe),9).c;c='/'.length;if(!IF(b.substr(b.length-c,c),'/')){debugger;throw Xj(new HE)}return b} +function um(){km();var a,b;--jm;if(jm==0&&im.length!=0){try{for(b=0;b1} +function hl(){this.a=new tD($wnd.navigator.userAgent);this.a.b?'ontouchstart' in window:this.a.f?!!navigator.msMaxTouchPoints:gl()} +function ep(a){this.b=new $wnd.Set;this.a=new $wnd.Map;this.d=!!($wnd.HTMLImports&&$wnd.HTMLImports.whenReady);this.c=a;Zo(this)} +function qr(a){this.c=a;gq(Fd(yl(a,Of),10),new Ar(this));MD($wnd,'offline',new Cr(this),false);MD($wnd,'online',new Er(this),false)} +function AD(){AD=gk;zD=new BD('STYLESHEET',0);xD=new BD('JAVASCRIPT',1);yD=new BD('JS_MODULE',2);wD=new BD('DYNAMIC_IMPORT',3)} +function Nn(a){var b;if(Hn==null){return}b=Ld(Hn.get(a),$wnd.Set);if(b!=null){Hn.delete(a);b.forEach(hk(io.prototype.pb,io,[]))}} +function nC(a){var b;a.d=true;mC(a);a.e||CC(new sC(a));if(a.c.size!=0){b=a.c;a.c=new $wnd.Set;b.forEach(hk(wC.prototype.pb,wC,[]))}} +function zx(a){var b;if(!a.b){debugger;throw Xj(new IE('Cannot bind shadow root to a Node'))}b=uv(a.e,20);rx(a);return SB(b,new bA(a))} +function Cx(a){var b;b=Md(VA(UB(uv(a,0),'tag')));if(b==null){debugger;throw Xj(new IE('New child must have a tag'))}return YD($doc,b)} +function au(a,b,c,d,e){var f;f={};f[VJ]='mSync';f[BK]=sE(b.d);f['feature']=Object(c);f['property']=d;f[$J]=e==null?null:e;$t(a,f)} +function al(a,b,c){var d;if(a==c.d){d=new $wnd.Function('callback','callback();');d.call(null,b);return LE(),true}return LE(),false} +function bd(){if(Error.stackTraceLimit>0){$wnd.Error.stackTraceLimit=Error.stackTraceLimit=64;return true}return 'stack' in new Error} +function Fn(a){return typeof a.update==cJ&&a.updateComplete instanceof Promise&&typeof a.shouldUpdate==cJ&&typeof a.firstUpdated==cJ} +function oF(a){var b;b=kF(a);if(b>3.4028234663852886E38){return Infinity}else if(b<-3.4028234663852886E38){return -Infinity}return b} +function OE(a){if(a>=48&&a<48+$wnd.Math.min(10,10)){return a-48}if(a>=97&&a<97){return a-97+10}if(a>=65&&a<65){return a-65+10}return -1} +function fF(a,b){var c=0;while(!b[c]||b[c]==''){c++}var d=b[c++];for(;cd&&sd(b,d,null);return b} +function tv(a,b){var c,d;d=b;c=Fd(a.c.get(d),39);if(!c){c=new JB(b,a);a.c.set(d,c)}if(!Pd(c,29)){debugger;throw Xj(new HE)}return Fd(c,29)} +function uv(a,b){var c,d;d=b;c=Fd(a.c.get(d),39);if(!c){c=new XB(b,a);a.c.set(d,c)}if(!Pd(c,40)){debugger;throw Xj(new HE)}return Fd(c,40)} +function JF(a,b){MI(a);if(b==null){return false}if(IF(a,b)){return true}return a.length==b.length&&IF(a.toLowerCase(),b.toLowerCase())} +function Xv(a){GB(tv(a.e,24),hk(hw.prototype.pb,hw,[]));rv(a.e,hk(lw.prototype.M,lw,[]));a.a.forEach(hk(jw.prototype.M,jw,[a]));a.d=true} +function pm(a){ll&&($wnd.console.log('Finished loading eager dependencies, loading lazy.'),undefined);a.forEach(hk(Zm.prototype.M,Zm,[]))} +function Ir(a){nk(a.c);ll&&($wnd.console.debug('Sending heartbeat request...'),undefined);gD(a.d,null,'text/plain; charset=utf-8',new Nr(a))} +function qE(b){var c;try{return c=$wnd.JSON.parse(b),c}catch(a){a=Wj(a);if(Pd(a,7)){throw Xj(new vE("Can't parse "+b))}else throw Xj(a)}} +function Wl(a){this.d=a;'scrollRestoration' in history&&(history.scrollRestoration='manual');MD($wnd,SJ,new Gp(this),false);Tl(this,true)} +function kr(a,b){if(a.b!=b){return}a.b=null;a.a=0;kl('connected');ll&&($wnd.console.log('Re-established connection to server'),undefined)} +function Zt(a,b,c,d,e){var f;f={};f[VJ]='attachExistingElementById';f[BK]=sE(b.d);f[CK]=Object(c);f[DK]=Object(d);f['attachId']=e;$t(a,f)} +function ZI(a){XI();var b,c,d;c=':'+a;d=WI[c];if(d!=null){return Zd((MI(d),d))}d=UI[c];b=d==null?YI(a):Zd((MI(d),d));$I();WI[c]=b;return b} +function M(a){return Ud(a)?ZI(a):Rd(a)?Zd((MI(a),a)):Qd(a)?(MI(a),a)?1231:1237:Od(a)?a.w():rd(a)?TI(a):!!a&&!!a.hashCode?a.hashCode():TI(a)} +function I(a,b){return Ud(a)?IF(a,b):Rd(a)?(MI(a),a===b):Qd(a)?(MI(a),a===b):Od(a)?a.u(b):rd(a)?a===b:!!a&&!!a.equals?a.equals(b):Yd(a)===Yd(b)} +function Bl(a,b,c){if(a.a.has(b)){debugger;throw Xj(new IE((QE(b),'Registry already has a class of type '+b.j+' registered')))}a.a.set(b,c)} +function xw(a,b){ww();var c;if(a.g.f){debugger;throw Xj(new IE('Binding state node while processing state tree changes'))}c=yw(a);c.Jb(a,b,uw)} +function OA(a,b,c,d,e){this.e=a;if(c==null){debugger;throw Xj(new HE)}if(d==null){debugger;throw Xj(new HE)}this.c=b;this.d=c;this.a=d;this.b=e} +function dy(a,b){var c,d;d=UB(b,WK);jB(d.a);d.c||aB(d,a.getAttribute(WK));c=UB(b,XK);Vn(a)&&(jB(c.a),!c.c)&&!!a.style&&aB(c,a.style.display)} +function bn(a,b,c,d){var e,f;if(!d){f=Fd(yl(a.g.c,Ye),59);e=Fd(f.a.get(c),33);if(!e){f.b[b]=c;f.a.set(c,vF(b));return vF(b)}return e}return d} +function qy(a,b){var c,d;while(b!=null){for(c=a.length-1;c>-1;c--){d=Fd(a[c],6);if(b.isSameNode(d.a)){return d.d}}b=HA(b.parentNode)}return -1} +function en(a,b,c){var d;if(cn(a.a,c)){d=Fd(a.e.get(Vh),77);if(!d||!d.a.has(c)){return}UA(UB(b,c),a.a[c]).X()}else{VB(b,c)||aB(UB(b,c),null)}} +function pn(a,b,c){var d,e;e=Rv(Fd(yl(a.c,bh),11),Zd((MI(b),b)));if(e.c.has(1)){d=new $wnd.Map;TB(uv(e,1),hk(Dn.prototype.M,Dn,[d]));c.set(b,d)}} +function WC(a,b,c){var d,e;e=Ld(a.c.get(b),$wnd.Map);if(e==null){e=new $wnd.Map;a.c.set(b,e)}d=Jd(e.get(c));if(d==null){d=[];e.set(c,d)}return d} +function py(a){var b;nx==null&&(nx=new $wnd.Map);b=Id(nx.get(a));if(b==null){b=Id(new $wnd.Function(AK,SK,'return ('+a+')'));nx.set(a,b)}return b} +function vs(){if($wnd.performance&&$wnd.performance.timing){return (new Date).getTime()-$wnd.performance.timing.responseStart}else{return -1}} +function Yw(a,b,c,d){var e,f,g,h,i;i=Kd(a.jb());h=d.d;for(g=0;g=1&&rD(a[0],'OS major');if(a.length>=2){b=KF(a[1],UF(45));if(b>-1){c=a[1].substr(0,b-0);rD(c,cL)}else{rD(a[1],cL)}}} +function rD(b,c){var d;try{return lF(b)}catch(a){a=Wj(a);if(Pd(a,7)){d=a;dG();c+' version parsing failed for: '+b+' '+d.P()}else throw Xj(a)}return -1} +function Sb(a,b,c){var d,e,f,g,h;Tb(a);for(e=(a.j==null&&(a.j=pd(lj,sJ,5,0,0,1)),a.j),f=0,g=e.length;f0){ml('Scheduling heartbeat in '+a.a+' seconds');ok(a.c,a.a*1000)}else{ll&&($wnd.console.debug('Disabling heartbeat'),undefined);nk(a.c)}} +function nt(a){var b,c,d,e;b=UB(uv(Fd(yl(a.a,bh),11).e,5),'parameters');e=(jB(b.a),Fd(b.g,6));d=uv(e,6);c=new $wnd.Map;TB(d,hk(zt.prototype.M,zt,[c]));return c} +function Ex(a,b,c,d,e,f){var g,h;if(!hy(a.e,b,e,f)){return}g=Kd(d.jb());if(iy(g,b,e,f,a)){if(!c){h=Fd(yl(b.g.c,$e),48);h.a.add(b.d);rn(h)}zv(b,g);zw(b)}c||EC()} +function aw(a,b){var c,d;if(!b){debugger;throw Xj(new HE)}d=b.e;c=d.e;if(sn(Fd(yl(a.c,$e),48),b)||!Uv(a,c)){return}au(Fd(yl(a.c,Fg),26),c,d.d,b.f,(jB(b.a),b.g))} +function jv(a,b){var c;c=$wnd.location.pathname;if(c==null){debugger;throw Xj(new IE('window.location.path should never be null'))}if(c!=a){return false}return b} +function RC(a,b,c){var d;if(!b){throw Xj(new AF('Cannot add a handler with a null type'))}a.b>0?QC(a,new bD(a,b,c)):(d=WC(a,b,null),d.push(c));return new aD(a,b,c)} +function cy(a,b){var c,d,e;dy(a,b);e=UB(b,WK);jB(e.a);e.c&&Iy(Fd(yl(b.e.g.c,xe),9),a,WK,(jB(e.a),e.g));c=UB(b,XK);jB(c.a);if(c.c){d=(jB(c.a),jk(c.g));SD(a.style,d)}} +function hq(a,b){if(b.c!=a.b.c+1){throw Xj(new pF('Tried to move from state '+qb(a.b)+' to '+(b.b!=null?b.b:''+b.c)+' which is not allowed'))}a.b=b;TC(a.a,new kq(a))} +function ys(a){var b;if(a==null){return null}if(!IF(a.substr(0,9),'for(;;);[')||(b=']'.length,!IF(a.substr(a.length-b,b),']'))){return null}return SF(a,9,a.length-1)} +function bk(b,c,d,e){ak();var f=$j;$moduleName=c;$moduleBase=d;Vj=e;function g(){for(var a=0;a=0;d--){if(IF(a[d].d,b)||IF(a[d].d,c)){a.length>=d+1&&a.splice(0,d+1);break}}return a} +function Yt(a,b,c,d,e,f){var g;g={};g[VJ]='attachExistingElement';g[BK]=sE(b.d);g[CK]=Object(c);g[DK]=Object(d);g['attachTagName']=e;g['attachIndex']=Object(f);$t(a,g)} +function Wn(a){var b=typeof $wnd.Polymer===cJ&&$wnd.Polymer.Element&&a instanceof $wnd.Polymer.Element;var c=a.constructor.polymerElementVersion!==undefined;return b||c} +function Xw(a,b,c,d){var e,f,g,h;h=tv(b,c);jB(h.a);if(h.c.length>0){f=Kd(a.jb());for(e=0;e<(jB(h.a),h.c.length);e++){g=Md(h.c[e]);dx(f,g,b,d)}}return EB(h,new _w(a,b,d))} +function oy(a,b){var c,d,e,f,g;c=HA(b).childNodes;for(e=0;ed&&(NI(b-1,a.length),a.charCodeAt(b-1)<=32)){--b}return d>0||b=65536){b=55296+(a-65536>>10&1023)&65535;c=56320+(a-65536&1023)&65535;return String.fromCharCode(b)+(''+String.fromCharCode(c))}else{return String.fromCharCode(a&65535)}} +function yc(a){a&&Ic((Gc(),Fc));--oc;if(oc<0){debugger;throw Xj(new IE('Negative entryDepth value at exit '+oc))}if(a){if(oc!=0){debugger;throw Xj(new IE('Depth not 0'+oc))}if(sc!=-1){Dc(sc);sc=-1}}} +function Fy(a,b,c,d){var e,f,g,h,i,j,k;e=false;for(h=0;h2000){rc=a;sc=$wnd.setTimeout(Ec,10)}}if(oc++==0){Hc((Gc(),Fc));return true}return false} +function Vk(f,b,c){var d=f;var e=$wnd.Vaadin.Flow.clients[b];e.isActive=_I(function(){return d.cb()});e.getVersionInfo=_I(function(a){return {'flow':c}});e.debug=_I(function(){var a=d.a;return a.hb().Hb().Eb()})} +function ks(a){var b,c,d,e;if(a.i.length==0){return false}e=-1;for(b=0;b=f&&(NI(b,a.length),a.charCodeAt(b)!=32)){--b}if(b==f){return}d=a.substr(b+1,c-(b+1));e=QF(d,'\\.',0);nD(e)} +function Hu(a,b){var c,d,e,f,g,h;if(!b){debugger;throw Xj(new HE)}for(d=(g=uE(b),g),e=0,f=d.length;e=0;d--){ZF((g.a+=i,g),Md(c[d]));i='.'}return g.a} +function Z(a,b){var c,d,e,f,g;if(ab()){W(b.a)}else{f=(Fd(yl(a.c,xe),9).k?(e='vaadinPushSockJS-min.js'):(e='vaadinPushSockJS.js'),'VAADIN/static/push/'+e);ll&&bE($wnd.console,'Loading sockJS '+f);d=Fd(yl(a.c,Af),57);g=Fd(yl(a.c,xe),9).c+f;c=new jb(a,f,b);bp(d,g,c,false,gJ)}} +function sw(a,b){var c,d,e,f;f=nw(a,b);if($J in a){e=a[$J];aB(f,e)}else if('nodeValue' in a){d=Zd(rE(a['nodeValue']));c=Rv(b.g,d);if(!c){debugger;throw Xj(new HE)}c.f=b;aB(f,c)}else{debugger;throw Xj(new IE('Change should have either value or nodeValue property: '+Cq(a)))}} +function PC(a,b){var c,d,e,f,g,h;if(nE(b)==1){c=b;h=Zd(rE(c[0]));switch(h){case 0:{g=Zd(rE(c[1]));d=(f=g,Fd(a.a.get(f),6)).a;return d}case 1:return e=Jd(c[1]),e;case 2:return NC(Zd(rE(c[1])),Zd(rE(c[2])),Fd(yl(a.c,Fg),26));default:throw Xj(new pF(aL+oE(c)));}}else{return b}} +function hs(a,b){var c,d,e,f,g;ll&&($wnd.console.log('Handling dependencies'),undefined);c=new $wnd.Map;for(e=(ID(),td(nd(Di,1),sJ,51,0,[GD,FD,HD])),f=0,g=e.length;fa.a){a.a==0?ll&&bE($wnd.console,'Updating client-to-server id to '+b+' based on server'):tl('Server expects next client-to-server id to be '+b+' but we were going to use '+a.a+'. Will use '+b+'.');a.a=b}} +function P(a,b){if(!b){debugger;throw Xj(new HE)}switch(a.e.c){case 0:a.e=(Bb(),yb);a.b=b;break;case 1:ll&&($wnd.console.log('Closing push connection'),undefined);a.d.close();a.e=(Bb(),xb);b.I();break;case 2:case 3:throw Xj(new qF('Can not disconnect more than once'));default:throw Xj(new qF('Invalid state'));}} +function fy(a,b){var c,d,e,f,g,h;c=a.f;d=b.style;jB(a.a);if(a.c){h=(jB(a.a),Md(a.g));e=false;if(h.indexOf('!important')!=-1){f=YD($doc,b.tagName);g=f.style;g.cssText=c+': '+h+';';if(IF('important',QD(f.style,c))){TD(d,c,RD(f.style,c),'important');e=true}}e||(d.setProperty(c,h),undefined)}else{d.removeProperty(c)}} +function Vq(a){var b,c,d,e;XA((c=uv(Fd(yl(Fd(yl(a.c,zg),35).a,bh),11).e,9),UB(c,qK)))!=null&&jl('reconnectingText',XA((d=uv(Fd(yl(Fd(yl(a.c,zg),35).a,bh),11).e,9),UB(d,qK))));XA((e=uv(Fd(yl(Fd(yl(a.c,zg),35).a,bh),11).e,9),UB(e,rK)))!=null&&jl('offlineText',XA((b=uv(Fd(yl(Fd(yl(a.c,zg),35).a,bh),11).e,9),UB(b,rK))))} +function cp(a,b,c){var d,e,f;f=Aq(b);d=new tp(f);if(a.b.has(f)){!!c&&c.K(d);return}if(gp(f,c,a.a)){e=$doc.createElement('link');e.rel=kK;e.type='text/css';e.href=f;if((!fl&&(fl=new hl),fl).a.k||il()){Sc((Gc(),new kp(a,f,d)),10)}else{hp(e,new xp(a,f),d);(!fl&&(fl=new hl),fl).a.j&&ok(new mp(a,f,d),5000)}WD($doc.head,e)}} +function Op(a,b,c,d,e,f){var g,h,i;if(b==null&&c==null&&d==null){Fd(yl(a.a,xe),9).t?(h=Fd(yl(a.a,xe),9).o+'web-component/web-component-bootstrap.js',i=LD(h,'v-r=webcomponent-resync'),fD(i,new Sp(a)),undefined):Bq(e);return}g=Lp(b,c,d,f);if(!Fd(yl(a.a,xe),9).t){MD(g,lK,new $p(e),false);MD($doc,'keydown',new aq(e),false)}} +function rH(){if(!Object.create||!Object.getOwnPropertyNames){return false}var a='__proto__';var b=Object.create(null);if(b[a]!==undefined){return false}var c=Object.getOwnPropertyNames(b);if(c.length!=0){return false}b[a]=42;if(b[a]!==42){return false}if(Object.getOwnPropertyNames(b).length==0){return false}return true} +function On(a,b){var c,d,e,f,g;c=HA(a).children;e=-1;for(f=0;f0){k=Ix(a,b);d=!k?null:HA(k.a).nextSibling}else{d=null}for(g=0;g=a.f.length||a.a>=a.g.length){tl('No matching scroll position found (entries X:'+a.f.length+', Y:'+a.g.length+') for opened history index ('+a.a+'). '+RJ);Ul(a);return}c=nF(Hd(a.f[a.a]));d=nF(Hd(a.g[a.a]));b?(a.e=Et(Fd(yl(a.d,Bg),13),new Ip(a,c,d))):am(td(nd(_d,1),sJ,95,15,[c,d]))} +function Hx(b,c){var d,e,f,g,h;if(!c){return -1}try{h=HA(Kd(c));f=[];f.push(b);for(e=0;e=9223372036854775807){return Ad(),xd}e=false;if(a<0){e=true;a=-a}d=0;if(a>=FJ){d=Zd(a/FJ);a-=d*FJ}c=0;if(a>=GJ){c=Zd(a/GJ);a-=c*GJ}b=Zd(a);f=vd(b,c,d);e&&(g=~f.l+1&EJ,h=~f.m+(g==0?1:0)&EJ,i=~f.h+(g==0&&h==0?1:0)&1048575,f.l=g,f.m=h,f.h=i,undefined);return f} +function gv(a,b){var c,d,e,f;if(iv(b)||Fd(yl(a,Of),10).b!=(qq(),oq)){return}c=ev(b);if(!c){return}f=c.href;d=b.currentTarget.ownerDocument.baseURI;if(!IF(f.substr(0,d.length),d)){return}if(jv(c.pathname,c.href.indexOf('#')!=-1)){e=$doc.location.hash;IF(e,c.hash)||Fd(yl(a,Df),27).lb(f);Fd(yl(a,Df),27).nb(true);return}if(!c.hasAttribute('router-link')){return}hv(b,d,f,a)} +function Wq(a,b){if(Fd(yl(a.c,Of),10).b!=(qq(),oq)){ll&&($wnd.console.warn('Trying to reconnect after application has been stopped. Giving up'),undefined);return}if(b){ll&&($wnd.console.log('Re-sending last message to the server...'),undefined);Vs(Fd(yl(a.c,pg),17),b)}else{ll&&($wnd.console.log('Trying to re-establish server connection...'),undefined);Ir(Fd(yl(a.c,_f),56))}} +function lF(a){var b,c,d,e,f;if(a==null){throw Xj(new CF(yJ))}d=a.length;e=d>0&&(NI(0,a.length),a.charCodeAt(0)==45||(NI(0,a.length),a.charCodeAt(0)==43))?1:0;for(b=e;b2147483647){throw Xj(new CF(lL+a+'"'))}return f} +function QF(a,b,c){var d,e,f,g,h,i,j,k;d=new RegExp(b,'g');j=pd(kj,sJ,2,0,6,1);e=0;k=a;g=null;while(true){i=d.exec(k);if(i==null||k==''||e==c-1&&c>0){j[e]=k;break}else{h=i.index;j[e]=k.substr(0,h);k=SF(k,h+i[0].length,k.length);d.lastIndex=0;if(g==k){j[e]=k.substr(0,1);k=k.substr(1)}g=k;++e}}if(c==0&&a.length>0){f=j.length;while(f>0&&j[f-1]==''){--f}f=14&&c<=16));case 11:return b!=null&&Vd(b);case 12:return b!=null&&(typeof b===aJ||typeof b==cJ);case 0:return Ed(b,a.__elementTypeId$);case 2:return Wd(b)&&!(b.jc===kk);case 1:return Wd(b)&&!(b.jc===kk)||Ed(b,a.__elementTypeId$);default:return true;}} +function _m(b,c){if(document.body.$&&document.body.$.hasOwnProperty&&document.body.$.hasOwnProperty(c)){return document.body.$[c]}else if(b.shadowRoot){return b.shadowRoot.getElementById(c)}else if(b.getElementById){return b.getElementById(c)}else if(c&&c.match('^[a-zA-Z0-9-_]*$')){return b.querySelector('#'+c)}else{return Array.from(b.querySelectorAll('[id]')).find(function(a){return a.id==c})}} +function Fo(a,b){var c,d,e,f,g,h,i,j;if(Fd(yl(a.c,Of),10).b!=(qq(),oq)){Bq(null);return}d=$wnd.location.pathname;e=$wnd.location.search;if(a.a==null){debugger;throw Xj(new IE('Initial response has not ended before pop state event was triggered'))}f=!(d==a.a&&e==a.b);Fd(yl(a.c,Df),27).mb(b,f);if(!f){return}c=yq($doc.baseURI,$doc.location.href);c.indexOf('#')!=-1&&(c=QF(c,'#',2)[0]);g=b['state'];kv(a.c,c,g,false)} +function Zq(a,b,c){var d;if(Fd(yl(a.c,Of),10).b!=(qq(),oq)){return}kl('reconnecting');if(a.b){if(xr(b,a.b)){ll&&cE($wnd.console,'Now reconnecting because of '+b+' failure');a.b=b}}else{a.b=b;ll&&cE($wnd.console,'Reconnecting because of '+b+' failure')}if(a.b!=b){return}++a.a;sl('Reconnect attempt '+a.a+' for '+b);a.a>=WA((d=uv(Fd(yl(Fd(yl(a.c,zg),35).a,bh),11).e,9),UB(d,'reconnectAttempts')),10000)?Xq(a):lr(a,c)} +function an(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r;j=null;g=HA(a.a).childNodes;o=new $wnd.Map;e=!b;i=-1;for(m=0;m. User has navigated out of site in an unrecognized way.');Ul(b)}}else{Ul(b)}} +function Iy(a,b,c,d){var e,f,g,h,i;if(d==null||Ud(d)){Dq(b,c,Md(d))}else{f=d;if(0==nE(f)){g=f;if(!('uri' in g)){debugger;throw Xj(new IE("Implementation error: JsonObject is recieved as an attribute value for '"+c+"' but it has no "+'uri'+' key'))}i=g['uri'];if(a.t&&!i.match(/^(?:[a-zA-Z]+:)?\/\//)){e=a.o;e=(h='/'.length,IF(e.substr(e.length-h,h),'/')?e:e+'/');HA(b).setAttribute(c,e+(''+i))}else{i==null?HA(b).removeAttribute(c):HA(b).setAttribute(c,i)}}else{Dq(b,c,jk(d))}}} +function Mx(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;o=Fd(c.e.get(Vh),77);if(!o||!o.a.has(a)){return}k=QF(a,'\\.',0);g=c;f=null;e=0;j=k.length;for(m=0,n=k.length;m=f){debugger;throw Xj(new HE)}return g.length==0?null:g}else{return a}} +function ry(a,b,c,d,e){var f,g,h;h=Rv(e,Zd(a));if(!h.c.has(1)){return}if(!my(h,b)){debugger;throw Xj(new IE('Host element is not a parent of the node whose property has changed. This is an implementation error. Most likely it means that there are several StateTrees on the same page (might be possible with portlets) and the target StateTree should not be passed into the method as an argument but somehow detected from the host element. Another option is that host element is calculated incorrectly.'))}f=uv(h,1);g=UB(f,c);UA(g,d).X()} +function Lp(a,b,c,d){var e,f,g,h,i,j;h=$doc;j=h.createElement('div');j.className='v-system-error';if(a!=null){f=h.createElement('div');f.className='caption';f.textContent=a;j.appendChild(f);ll&&aE($wnd.console,a)}if(b!=null){i=h.createElement('div');i.className='message';i.textContent=b;j.appendChild(i);ll&&aE($wnd.console,b)}if(c!=null){g=h.createElement('div');g.className='details';g.textContent=c;j.appendChild(g);ll&&aE($wnd.console,c)}if(d!=null){e=h.querySelector(d);!!e&&VD(Kd(MH(QH(e.shadowRoot),e)),j)}else{WD(h.body,j)}return j} +function Ku(h,e,f){var g={};g.getNode=_I(function(a){var b=e.get(a);if(b==null){throw new ReferenceError('There is no a StateNode for the given argument.')}return b});g.$appId=h.Db().replace(/-\d+$/,'');g.registry=h.a;g.attachExistingElement=_I(function(a,b,c,d){an(g.getNode(a),b,c,d)});g.populateModelProperties=_I(function(a,b){dn(g.getNode(a),b)});g.registerUpdatableModelProperties=_I(function(a,b){fn(g.getNode(a),b)});g.stopApplication=_I(function(){f.X()});g.scrollPositionHandlerAfterServerNavigation=_I(function(a){gn(g.registry,a)});return g} +function fd(a,b){var c,d,e,f,g,h,i,j,k;if(b.length==0){return a.V(DJ,BJ,-1,-1)}k=TF(b);IF(k.substr(0,3),'at ')&&(k=k.substr(3));k=k.replace(/\[.*?\]/g,'');g=k.indexOf('(');if(g==-1){g=k.indexOf('@');if(g==-1){j=k;k=''}else{j=TF(k.substr(g+1));k=TF(k.substr(0,g))}}else{c=k.indexOf(')',g);j=k.substr(g+1,c-(g+1));k=TF(k.substr(0,g))}g=KF(k,UF(46));g!=-1&&(k=k.substr(g+1));(k.length==0||IF(k,'Anonymous function'))&&(k=BJ);h=MF(j,UF(58));e=NF(j,UF(58),h-1);i=-1;d=-1;f=DJ;if(h!=-1&&e!=-1){f=j.substr(0,e);i=ad(j.substr(e+1,h-(e+1)));d=ad(j.substr(h+1))}return a.V(f,k,i,d)} +function Mq(a,b){var c,d,e;c=Uq(b,'serviceUrl');Tk(a,Sq(b,'webComponentMode'));Ek(a,Sq(b,'clientRouting'));if(c==null){Ok(a,Aq('.'));Fk(a,Aq(Uq(b,nK)))}else{a.o=c;Fk(a,Aq(c+(''+Uq(b,nK))))}Sk(a,Tq(b,'v-uiId').a);Ik(a,Tq(b,'heartbeatInterval').a);Lk(a,Tq(b,'maxMessageSuspendTimeout').a);Pk(a,(d=b.getConfig(oK),d?d.vaadinVersion:null));e=b.getConfig(oK);Rq();Qk(a,b.getConfig('sessExpMsg'));Mk(a,!Sq(b,'debug'));Nk(a,Sq(b,'requestTiming'));Hk(a,b.getConfig('webcomponents'));Gk(a,Sq(b,'devToolsEnabled'));Kk(a,Uq(b,'liveReloadUrl'));Jk(a,Uq(b,'liveReloadBackend'));Rk(a,Uq(b,'springBootLiveReloadPort'))} +function mb(b){var c=function(a){return typeof a!=pJ};var d=function(a){return a.replace(/\r\n/g,'')};if(c(b.outerHTML))return d(b.outerHTML);c(b.innerHTML)&&b.cloneNode&&$doc.createElement('div').appendChild(b.cloneNode(true)).innerHTML;if(c(b.nodeType)&&b.nodeType==3){return "'"+b.data.replace(/ /g,'\u25AB').replace(/\u00A0/,'\u25AA')+"'"}if(typeof c(b.htmlText)&&b.collapse){var e=b.htmlText;if(e){return 'IETextRange ['+d(e)+']'}else{var f=b.duplicate();f.pasteHTML('|');var g='IETextRange '+d(b.parentElement().outerHTML);f.moveStart('character',-1);f.pasteHTML('');return g}}return b.toString?b.toString():'[JavaScriptObject]'} +function $(a){var b,c,d,e;this.e=(Bb(),zb);this.c=a;gq(Fd(yl(a,Of),10),new Eb(this));this.a={transport:fJ,fallbackTransport:hJ,transports:[fJ,hJ,iJ],reconnectInterval:5000,maxReconnectAttempts:10,timeout:5000};this.a['logLevel']='debug';nt(Fd(yl(this.c,xg),46)).forEach(hk(Gb.prototype.M,Gb,[this]));pb(this.a);c=ot(Fd(yl(this.c,xg),46));if(c==null||TF(c).length==0||IF('/',c)){this.g=jJ;d=Fd(yl(a,xe),9).o;IF('.',d)||(e='/'.length,IF(d.substr(d.length-e,e),'/')||(d+='/'));this.g=d+(''+this.g)}else{b=Fd(yl(a,xe),9).c;e='/'.length;IF(b.substr(b.length-e,e),'/')&&IF(c.substr(0,1),'/')&&(c=c.substr(1));this.g=b+(''+c)+jJ}Z(this,new Ib(this))} +function _n(a,b,c){var d,e,f;f=[];if(a.c.has(1)){if(!Pd(b,40)){debugger;throw Xj(new IE('Received an inconsistent NodeFeature for a node that has a ELEMENT_PROPERTIES feature. It should be NodeMap, but it is: '+b))}e=Fd(b,40);TB(e,hk(qo.prototype.M,qo,[f,c]));f.push(SB(e,new oo(f,c)))}else if(a.c.has(16)){if(!Pd(b,29)){debugger;throw Xj(new IE('Received an inconsistent NodeFeature for a node that has a TEMPLATE_MODELLIST feature. It should be NodeList, but it is: '+b))}d=Fd(b,29);f.push(EB(d,new ko(c)))}if(f.length==0){debugger;throw Xj(new IE('Node should have ELEMENT_PROPERTIES or TEMPLATE_MODELLIST feature'))}f.push(qv(a,new mo(f)))} +function Il(a,b){this.a=new $wnd.Map;this.b=new $wnd.Map;Bl(this,Ae,a);Bl(this,xe,b);Bl(this,Af,new ep(this));Bl(this,Pf,new xq(this));Bl(this,Ve,new tm(this));Bl(this,Jf,new Qp(this));Cl(this,Of,new Jl);Bl(this,bh,new dw(this));Bl(this,Bg,new Jt(this));Bl(this,ng,new us(this));Bl(this,pg,new Zs(this));Bl(this,Jg,new ku(this));Bl(this,Fg,new cu(this));Bl(this,Ug,new Qu(this));Cl(this,Qg,new Ll);Cl(this,Ye,new Nl);Bl(this,$e,new xn(this));Bl(this,_f,new Kr(this));Bl(this,Rf,new qr(this));Bl(this,Pg,new su(this));Bl(this,xg,new qt(this));Bl(this,zg,new Bt(this));b.b||(b.t?Bl(this,Df,new bm):Bl(this,Df,new Wl(this)));Bl(this,tg,new ht(this))} +function iy(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o;l=e.e;o=Md(VA(UB(uv(b,0),'tag')));h=false;if(!a){h=true;ll&&cE($wnd.console,YK+d+" is not found. The requested tag name is '"+o+"'")}else if(!(!!a&&JF(o,a.tagName))){h=true;tl(YK+d+" has the wrong tag name '"+a.tagName+"', the requested tag name is '"+o+"'")}if(h){_v(l.g,l,b.d,-1,c);return false}if(!l.c.has(20)){return true}k=uv(l,20);m=Fd(VA(UB(k,TK)),6);if(!m){return true}j=tv(m,2);g=null;for(i=0;i<(jB(j.a),j.c.length);i++){n=Fd(j.c[i],6);f=n.a;if(I(f,a)){g=vF(n.d);break}}if(g){ll&&cE($wnd.console,YK+d+" has been already attached previously via the node id='"+g+"'");_v(l.g,l,b.d,g.a,c);return false}return true} +function Mu(b,c,d,e){var f,g,h,i,j,k,l,m;if(c.length!=d.length+1){debugger;throw Xj(new HE)}try{j=new ($wnd.Function.bind.apply($wnd.Function,[null].concat(c)));j.apply(Ku(b,e,new Uu(b)),d)}catch(a){a=Wj(a);if(Pd(a,7)){i=a;ll&&nl(new ul(i));ll&&($wnd.console.error('Exception is thrown during JavaScript execution. Stacktrace will be dumped separately.'),undefined);if(!Fd(yl(b.a,xe),9).k){g=new aG('[');h='';for(l=0,m=c.length;l=b.length)return {done:true};var a=b[d++];return {value:[a,c.get(a)],done:false}}}};if(!rH()){e.prototype.createObject=function(){return {}};e.prototype.get=function(a){return this.obj[':'+a]};e.prototype.set=function(a,b){this.obj[':'+a]=b};e.prototype['delete']=function(a){delete this.obj[':'+a]};e.prototype.keys=function(){var a=[];for(var b in this.obj){b.charCodeAt(0)==58&&a.push(b.substring(1))}return a}}return e} +function Kx(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F;if(!b){debugger;throw Xj(new HE)}f=b.b;s=b.e;if(!f){debugger;throw Xj(new IE('Cannot handle DOM event for a Node'))}C=a.type;r=uv(s,4);e=Fd(yl(s.g.c,Qg),58);i=Md(VA(UB(r,C)));if(i==null){debugger;throw Xj(new HE)}if(!Gu(e,i)){debugger;throw Xj(new HE)}j=Kd(Fu(e,i));o=(w=uE(j),w);A=new $wnd.Set;o.length==0?(g=null):(g={});for(l=0,m=o.length;l=0){g=b.substr(f+3);g=PF(g,hL,'$1');this.a=oF(g)}}else if(this.o){g=RF(b,b.indexOf('webkit/')+7);g=PF(g,iL,'$1');this.a=oF(g)}else if(this.n){g=RF(b,b.indexOf(eL)+8);g=PF(g,iL,'$1');this.a=oF(g);this.a>7&&(this.a=7)}else this.c&&(this.a=0)}catch(a){a=Wj(a);if(Pd(a,7)){c=a;dG();'Browser engine version parsing failed for: '+b+' '+c.P()}else throw Xj(a)}try{if(this.f){if(b.indexOf('msie')!=-1){if(this.n);else{e=RF(b,b.indexOf('msie ')+5);e=vD(e,0,KF(e,UF(59)));sD(e)}}else{f=b.indexOf('rv:');if(f>=0){g=b.substr(f+3);g=PF(g,hL,'$1');sD(g)}}}else if(this.d){d=b.indexOf(' firefox/')+9;sD(vD(b,d,d+5))}else if(this.b){oD(b)}else if(this.k){d=b.indexOf(' version/');if(d>=0){d+=9;sD(vD(b,d,d+5))}}else if(this.j){d=b.indexOf(' version/');d!=-1?(d+=9):(d=b.indexOf('opera/')+6);sD(vD(b,d,d+5))}else if(this.c){d=b.indexOf(' edge/')+6;b.indexOf(' edg/')!=-1?(d=b.indexOf(' edg/')+5):b.indexOf(fL)!=-1?(d=b.indexOf(fL)+6):b.indexOf(gL)!=-1&&(d=b.indexOf(gL)+8);sD(vD(b,d,d+8))}}catch(a){a=Wj(a);if(Pd(a,7)){c=a;dG();'Browser version parsing failed for: '+b+' '+c.P()}else throw Xj(a)}if(b.indexOf('windows ')!=-1){b.indexOf('windows phone')!=-1}else if(b.indexOf('android')!=-1){lD(b)}else if(b.indexOf('linux')!=-1);else if(b.indexOf('macintosh')!=-1||b.indexOf('mac osx')!=-1||b.indexOf('mac os x')!=-1){this.g=b.indexOf('ipad')!=-1;this.i=b.indexOf('iphone')!=-1;(this.g||this.i)&&pD(b)}else b.indexOf('; cros ')!=-1&&mD(b)} +var aJ='object',bJ='[object Array]',cJ='function',dJ='java.lang',eJ='v-uiId=',fJ='websocket',gJ='text/javascript',hJ='xhr-polling',iJ='xhr-streaming',jJ='VAADIN/push',kJ='transport',lJ='Received push (',mJ='com.github.mcollovati.vertx.vaadin.sockjs.client',nJ='com.vaadin.client',oJ={22:1},pJ='undefined',qJ='com.google.gwt.core.client',rJ='fallbackTransport',sJ={4:1},tJ={97:1},uJ={21:1},vJ='__noinit__',wJ='__java$exception',xJ={4:1,7:1,8:1,5:1},yJ='null',zJ='com.google.gwt.core.client.impl',AJ='Working array length changed ',BJ='anonymous',CJ='fnStack',DJ='Unknown',EJ=4194303,FJ=17592186044416,GJ=4194304,HJ='must be non-negative',IJ='must be positive',JJ='com.google.web.bindery.event.shared',KJ='url',LJ='historyIndex',MJ='historyResetToken',NJ='xPositions',OJ='yPositions',PJ='scrollPos-',QJ='Failed to get session storage: ',RJ='Unable to restore scroll positions. History.state has been manipulated or user has navigated away from site in an unrecognized way.',SJ='beforeunload',TJ='scrollPositionX',UJ='scrollPositionY',VJ='type',WJ={68:1},XJ={18:1},YJ='constructor',ZJ='properties',$J='value',_J='com.vaadin.client.flow.reactive',aK={14:1},bK='nodeId',cK='Root node for node ',dK=' could not be found',eK=' is not an Element',fK={69:1},gK={82:1},hK={44:1},iK={96:1},jK='script',kK='stylesheet',lK='click',mK='com.vaadin.flow.shared',nK='contextRootUrl',oK='versionInfo',pK='com.vaadin.client.communication',qK='dialogText',rK='dialogTextGaveUp',sK='syncId',tK='resynchronize',uK='Received message with server id ',vK='clientId',wK='Vaadin-Security-Key',xK='Vaadin-Push-ID',yK='sessionExpired',zK='pushServletMapping',AK='event',BK='node',CK='attachReqId',DK='attachAssignedId',EK='com.vaadin.client.flow',FK='bound',GK='payload',HK='subTemplate',IK={42:1},JK='Node is null',KK='Node is not created for this tree',LK='Node id is not registered with this tree',MK='$server',NK='feat',OK='remove',PK='com.vaadin.client.flow.binding',QK='intermediate',RK='elemental.util',SK='element',TK='shadowRoot',UK='The HTML node for the StateNode with id=',VK='An error occurred when Flow tried to find a state node matching the element ',WK='hidden',XK='styleDisplay',YK='Element addressed by the ',ZK='dom-repeat',$K='dom-change',_K='com.vaadin.client.flow.nodefeature',aL='Unsupported complex type in ',bL='com.vaadin.client.gwt.com.google.web.bindery.event.shared',cL='OS minor',dL=' headlesschrome/',eL='trident/',fL=' edga/',gL=' edgios/',hL='(\\.[0-9]+).+',iL='([0-9]+\\.[0-9]+).*',jL='com.vaadin.flow.shared.ui',kL='java.io',lL='For input string: "',mL='java.util',nL={43:1},oL='java.util.logging',pL={4:1,323:1},qL='java.util.stream',rL='user.agent';var _,dk,$j,Vj=-1;ek();fk(1,null,{},G);_.u=function H(a){return this===a};_.v=function J(){return this.hc};_.w=function L(){return TI(this)};_.A=function N(){var a;return RE(K(this))+'@'+(a=M(this)>>>0,a.toString(16))};_.equals=function(a){return this.u(a)};_.hashCode=function(){return this.w()};_.toString=function(){return this.A()};var Bd,Cd,Dd;fk(99,1,{},SE);_.Wb=function TE(a){var b;b=new SE;b.e=4;a>1?(b.c=$E(this,a-1)):(b.c=this);return b};_.Xb=function ZE(){QE(this);return this.b};_.Yb=function _E(){return RE(this)};_.Zb=function bF(){QE(this);return this.g};_.$b=function dF(){return (this.e&4)!=0};_._b=function eF(){return (this.e&1)!=0};_.A=function hF(){return ((this.e&2)!=0?'interface ':(this.e&1)!=0?'':'class ')+(QE(this),this.j)};_.e=0;var PE=1;var ej=VE(dJ,'Object',1);var Ti=VE(dJ,'Class',99);fk(105,1,{},$);_.B=function bb(a){this.e=(Bb(),zb);Fd(yl(this.c,Rf),16);ll&&($wnd.console.log('Push connection closed'),undefined)};_.C=function cb(a){this.e=(Bb(),xb);Yq(Fd(Fd(yl(this.c,Rf),16),88),'Push connection using '+a[kJ]+' failed!')};_.D=function db(a){var b,c;c=a['data'];b=xs(ys(c));if(!b){er(Fd(yl(this.c,Rf),16),this,c)}else{sl(lJ+this.f+') message: '+c);Fd(yl(this.c,Of),10).b==(qq(),pq)?tl(lJ+this.f+') message, but ui is already terminated: '+c):js(Fd(yl(this.c,ng),19),b)}};_.F=function eb(a){uI(zI((QE(ge),ge.j)),'Push connection established using '+this.d.getTransport());X(this,this.d)};_.G=function fb(a){this.e==(Bb(),Ab)&&(this.e=zb);hr(Fd(yl(this.c,Rf),16),this)};_.H=function gb(a){uI(zI((QE(ge),ge.j)),'Push connection re-established using '+this.d.getTransport());X(this,this.d)};var ge=VE(mJ,'SockJSPushConnection',105);fk(239,1,{},hb);_.I=function ib(){O(this.a)};var ae=VE(mJ,'SockJSPushConnection/0methodref$connect$Type',239);var uf=XE(nJ,'ResourceLoader/ResourceLoadListener');fk(241,1,oJ,jb);_.J=function kb(a){ir(Fd(yl(this.a.c,Rf),16),a.a)};_.K=function lb(a){if(ab()){sl(this.c+' loaded');W(this.b.a)}else{ll&&($wnd.console.log('SockJS not loaded???????'),undefined);ir(Fd(yl(this.a.c,Rf),16),a.a)}};var be=VE(mJ,'SockJSPushConnection/1',241);var je=VE(qJ,'JavaScriptObject$',0);var nb;fk(25,1,{4:1,32:1,25:1});_.u=function tb(a){return this===a};_.w=function ub(){return TI(this)};_.A=function vb(){return this.b!=null?this.b:''+this.c};_.c=0;var Vi=VE(dJ,'Enum',25);fk(50,25,{50:1,4:1,32:1,25:1},Cb);var xb,yb,zb,Ab;var ce=WE(mJ,'SockJSPushConnection/State',50,Db);fk(238,1,tJ,Eb);_.L=function Fb(a){U(this.a,a)};var de=VE(mJ,'SockJSPushConnection/lambda$0$Type',238);fk(371,$wnd.Function,{},Gb);_.M=function Hb(a,b){V(this.a,a,b)};var Ce=XE(nJ,'Command');fk(240,1,uJ,Ib);_.I=function Jb(){W(this.a)};var ee=VE(mJ,'SockJSPushConnection/lambda$2$Type',240);fk(237,1,uJ,Kb);_.I=function Lb(){};var fe=VE(mJ,'SockJSPushConnection/lambda$3$Type',237);fk(101,1,{},Nb);_.a=0;var he=VE(qJ,'Duration',101);var Ob=null;fk(5,1,{4:1,5:1});_.O=function Xb(a){return new Error(a)};_.P=function Zb(){return this.g};_.Q=function $b(){var a,b,c;c=this.g==null?null:this.g.replace(new RegExp('\n','g'),' ');b=(a=RE(this.hc),c==null?a:a+': '+c);Ub(this,Yb(this.O(b)));Zc(this)};_.A=function ac(){return Vb(this,this.P())};_.e=vJ;_.k=true;var lj=VE(dJ,'Throwable',5);fk(7,5,{4:1,7:1,5:1});var Xi=VE(dJ,'Exception',7);fk(8,7,xJ,dc);var gj=VE(dJ,'RuntimeException',8);fk(54,8,xJ,ec);var aj=VE(dJ,'JsException',54);fk(120,54,xJ);var le=VE(zJ,'JavaScriptExceptionBase',120);fk(23,120,{23:1,4:1,7:1,8:1,5:1},ic);_.P=function lc(){return hc(this),this.c};_.R=function mc(){return Yd(this.b)===Yd(fc)?null:this.b};var fc;var ie=VE(qJ,'JavaScriptException',23);fk(324,1,{});var ke=VE(qJ,'Scheduler',324);var oc=0,pc=false,qc,rc=0,sc=-1;fk(129,324,{});_.e=false;_.j=false;var Fc;var oe=VE(zJ,'SchedulerImpl',129);fk(130,1,{},Tc);_.S=function Uc(){this.a.e=true;Jc(this.a);this.a.e=false;return this.a.j=Kc(this.a)};var me=VE(zJ,'SchedulerImpl/Flusher',130);fk(131,1,{},Vc);_.S=function Wc(){this.a.e&&Rc(this.a.f,1);return this.a.j};var ne=VE(zJ,'SchedulerImpl/Rescuer',131);var Xc;fk(334,1,{});var se=VE(zJ,'StackTraceCreator/Collector',334);fk(121,334,{},cd);_.T=function dd(a){var b={},j;var c=[];a[CJ]=c;var d=arguments.callee.caller;while(d){var e=(Yc(),d.name||(d.name=_c(d.toString())));c.push(e);var f=':'+e;var g=b[f];if(g){var h,i;for(h=0,i=g.length;h0){Yo(this.b,this.c);return false}else if(a==0){Xo(this.b,this.c);return true}else if(Mb(this.a)>60000){Xo(this.b,this.c);return false}else{return true}};var pf=VE(nJ,'ResourceLoader/1',185);fk(186,38,{},mp);_.X=function np(){this.a.b.has(this.c)||Xo(this.a,this.b)};var qf=VE(nJ,'ResourceLoader/2',186);fk(190,38,{},op);_.X=function pp(){this.a.b.has(this.c)?Yo(this.a,this.b):Xo(this.a,this.b)};var rf=VE(nJ,'ResourceLoader/3',190);fk(191,1,oJ,qp);_.J=function rp(a){Xo(this.a,a)};_.K=function sp(a){Yo(this.a,a)};var sf=VE(nJ,'ResourceLoader/4',191);fk(62,1,{},tp);var tf=VE(nJ,'ResourceLoader/ResourceLoadEvent',62);fk(104,1,oJ,up);_.J=function vp(a){Xo(this.a,a)};_.K=function wp(a){Yo(this.a,a)};var vf=VE(nJ,'ResourceLoader/SimpleLoadListener',104);fk(184,1,oJ,xp);_.J=function yp(a){Xo(this.a,a)};_.K=function zp(a){var b;if((!fl&&(fl=new hl),fl).a.b||(!fl&&(fl=new hl),fl).a.f||(!fl&&(fl=new hl),fl).a.c){b=ip(this.b);if(b==0){Xo(this.a,a);return}}Yo(this.a,a)};var wf=VE(nJ,'ResourceLoader/StyleSheetLoadListener',184);fk(187,1,{},Ap);_.jb=function Bp(){return this.a.call(null)};var xf=VE(nJ,'ResourceLoader/lambda$0$Type',187);fk(188,1,XJ,Cp);_.X=function Dp(){this.b.K(this.a)};var yf=VE(nJ,'ResourceLoader/lambda$1$Type',188);fk(189,1,XJ,Ep);_.X=function Fp(){this.b.J(this.a)};var zf=VE(nJ,'ResourceLoader/lambda$2$Type',189);fk(150,1,{},Gp);_.ub=function Hp(a){Sl(this.a)};var Bf=VE(nJ,'ScrollPositionHandler/0methodref$onBeforeUnload$Type',150);fk(151,1,iK,Ip);_.vb=function Jp(a){Rl(this.a,this.b,this.c)};_.b=0;_.c=0;var Cf=VE(nJ,'ScrollPositionHandler/lambda$0$Type',151);fk(24,1,{24:1},Qp);var Jf=VE(nJ,'SystemErrorHandler',24);fk(155,1,{},Sp);_.xb=function Tp(a,b){Kp(b.P())};_.yb=function Up(a){var b;sl('Received xhr HTTP session resynchronization message: '+a.responseText);Al(this.a.a);hq(Fd(yl(this.a.a,Of),10),(qq(),oq));b=xs(ys(a.responseText));js(Fd(yl(this.a.a,ng),19),b);Sk(Fd(yl(this.a.a,xe),9),b['uiId']);cq((Gc(),Fc),new Yp(this))};var Gf=VE(nJ,'SystemErrorHandler/1',155);fk(156,1,{},Wp);_.pb=function Xp(a){Vp(a)};var Ef=VE(nJ,'SystemErrorHandler/1/0methodref$recreateNodes$Type',156);fk(157,1,{},Yp);_.I=function Zp(){DI(cH(Fd(yl(this.a.a.a,xe),9).e),new Wp)};var Ff=VE(nJ,'SystemErrorHandler/1/lambda$0$Type',157);fk(153,1,{},$p);_.ub=function _p(a){Bq(this.a)};var Hf=VE(nJ,'SystemErrorHandler/lambda$0$Type',153);fk(154,1,{},aq);_.ub=function bq(a){Rp(this.a,a)};var If=VE(nJ,'SystemErrorHandler/lambda$1$Type',154);fk(133,129,{},dq);_.a=0;var Lf=VE(nJ,'TrackingScheduler',133);fk(134,1,{},eq);_.I=function fq(){this.a.a--};var Kf=VE(nJ,'TrackingScheduler/lambda$0$Type',134);fk(10,1,{10:1},iq);var Of=VE(nJ,'UILifecycle',10);fk(161,343,{},kq);_.Z=function lq(a){Fd(a,97).L(this)};_._=function mq(){return jq};var jq=null;var Mf=VE(nJ,'UILifecycle/StateChangeEvent',161);fk(60,25,{60:1,4:1,32:1,25:1},rq);var nq,oq,pq;var Nf=WE(nJ,'UILifecycle/UIState',60,sq);fk(342,1,sJ);var Bi=VE(mK,'VaadinUriResolver',342);fk(47,342,{47:1,4:1},xq);_.zb=function zq(a){return wq(this,a)};var Pf=VE(nJ,'URIResolver',47);var Eq=false,Fq;fk(114,1,{},Pq);_.I=function Qq(){Lq(this.a)};var Qf=VE('com.vaadin.client.bootstrap','Bootstrapper/lambda$0$Type',114);var Rf=XE(pK,'ConnectionStateHandler');fk(88,1,{16:1,88:1},qr);_.a=0;_.b=null;var Xf=VE(pK,'DefaultConnectionStateHandler',88);fk(214,38,{},rr);_.X=function sr(){this.a.d=null;Wq(this.a,this.b)};var Sf=VE(pK,'DefaultConnectionStateHandler/1',214);fk(63,25,{63:1,4:1,32:1,25:1},yr);_.a=0;var tr,ur,vr;var Tf=WE(pK,'DefaultConnectionStateHandler/Type',63,zr);fk(213,1,tJ,Ar);_.L=function Br(a){cr(this.a,a)};var Uf=VE(pK,'DefaultConnectionStateHandler/lambda$0$Type',213);fk(215,1,{},Cr);_.ub=function Dr(a){Xq(this.a)};var Vf=VE(pK,'DefaultConnectionStateHandler/lambda$1$Type',215);fk(216,1,{},Er);_.ub=function Fr(a){dr(this.a)};var Wf=VE(pK,'DefaultConnectionStateHandler/lambda$2$Type',216);fk(56,1,{56:1},Kr);_.a=-1;var _f=VE(pK,'Heartbeat',56);fk(210,38,{},Lr);_.X=function Mr(){Ir(this.a)};var Yf=VE(pK,'Heartbeat/1',210);fk(212,1,{},Nr);_.xb=function Or(a,b){!b?ar(Fd(yl(this.a.b,Rf),16),a):_q(Fd(yl(this.a.b,Rf),16),b);Hr(this.a)};_.yb=function Pr(a){br(Fd(yl(this.a.b,Rf),16));Hr(this.a)};var Zf=VE(pK,'Heartbeat/2',212);fk(211,1,tJ,Qr);_.L=function Rr(a){Gr(this.a,a)};var $f=VE(pK,'Heartbeat/lambda$0$Type',211);fk(163,1,{},Vr);_.pb=function Wr(a){jl('firstDelay',vF(a.a))};var ag=VE(pK,'LoadingIndicatorConfigurator/0methodref$setFirstDelay$Type',163);fk(164,1,{},Xr);_.pb=function Yr(a){jl('secondDelay',vF(a.a))};var bg=VE(pK,'LoadingIndicatorConfigurator/1methodref$setSecondDelay$Type',164);fk(165,1,{},Zr);_.pb=function $r(a){jl('thirdDelay',vF(a.a))};var cg=VE(pK,'LoadingIndicatorConfigurator/2methodref$setThirdDelay$Type',165);fk(166,1,hK,_r);_.tb=function as(a){Ur(YA(Fd(a.e,28)))};var dg=VE(pK,'LoadingIndicatorConfigurator/lambda$0$Type',166);fk(167,1,hK,bs);_.tb=function cs(a){Tr(this.b,this.a,a)};_.a=0;var eg=VE(pK,'LoadingIndicatorConfigurator/lambda$1$Type',167);fk(19,1,{19:1},us);_.a=0;_.b='init';_.d=false;_.e=0;_.f=-1;_.j=null;_.p=0;var ng=VE(pK,'MessageHandler',19);fk(178,1,uJ,zs);_.I=function As(){!GA&&$wnd.Polymer!=null&&IF($wnd.Polymer.version.substr(0,'1.'.length),'1.')&&(GA=true,ll&&($wnd.console.log('Polymer micro is now loaded, using Polymer DOM API'),undefined),FA=new IA,undefined)};var fg=VE(pK,'MessageHandler/0methodref$updateApiImplementation$Type',178);fk(177,38,{},Bs);_.X=function Cs(){fs(this.a)};var gg=VE(pK,'MessageHandler/1',177);fk(359,$wnd.Function,{},Ds);_.pb=function Es(a){ds(Fd(a,6))};fk(61,1,{61:1},Fs);var hg=VE(pK,'MessageHandler/PendingUIDLMessage',61);fk(179,1,uJ,Gs);_.I=function Hs(){qs(this.a,this.d,this.b,this.c)};_.c=0;var ig=VE(pK,'MessageHandler/lambda$0$Type',179);fk(181,1,aK,Is);_.ob=function Js(){DC(new Ms(this.a,this.b))};var jg=VE(pK,'MessageHandler/lambda$1$Type',181);fk(183,1,aK,Ks);_.ob=function Ls(){ns(this.a)};var kg=VE(pK,'MessageHandler/lambda$3$Type',183);fk(180,1,aK,Ms);_.ob=function Ns(){os(this.a,this.b)};var lg=VE(pK,'MessageHandler/lambda$4$Type',180);fk(182,1,{},Os);_.I=function Ps(){this.a.forEach(hk(Ds.prototype.pb,Ds,[]))};var mg=VE(pK,'MessageHandler/lambda$5$Type',182);fk(17,1,{17:1},Zs);_.a=0;_.d=0;var pg=VE(pK,'MessageSender',17);fk(175,1,uJ,$s);_.I=function _s(){Rs(this.a)};var og=VE(pK,'MessageSender/lambda$0$Type',175);fk(158,1,hK,ct);_.tb=function dt(a){at(this.a,a)};var qg=VE(pK,'PollConfigurator/lambda$0$Type',158);fk(75,1,{75:1},ht);_.Ab=function it(){var a;a=Fd(yl(this.b,bh),11);Zv(a,a.e,'ui-poll',null)};_.a=null;var tg=VE(pK,'Poller',75);fk(160,38,{},jt);_.X=function kt(){var a;a=Fd(yl(this.a.b,bh),11);Zv(a,a.e,'ui-poll',null)};var rg=VE(pK,'Poller/1',160);fk(159,1,tJ,lt);_.L=function mt(a){et(this.a,a)};var sg=VE(pK,'Poller/lambda$0$Type',159);fk(46,1,{46:1},qt);var xg=VE(pK,'PushConfiguration',46);fk(221,1,hK,tt);_.tb=function ut(a){pt(this.a,a)};var ug=VE(pK,'PushConfiguration/0methodref$onPushModeChange$Type',221);fk(222,1,aK,vt);_.ob=function wt(){Ys(Fd(yl(this.a.a,pg),17),true)};var vg=VE(pK,'PushConfiguration/lambda$0$Type',222);fk(223,1,aK,xt);_.ob=function yt(){Ys(Fd(yl(this.a.a,pg),17),false)};var wg=VE(pK,'PushConfiguration/lambda$1$Type',223);fk(365,$wnd.Function,{},zt);_.M=function At(a,b){st(this.a,a,b)};fk(35,1,{35:1},Bt);var zg=VE(pK,'ReconnectConfiguration',35);fk(162,1,uJ,Ct);_.I=function Dt(){Vq(this.a)};var yg=VE(pK,'ReconnectConfiguration/lambda$0$Type',162);fk(13,1,{13:1},Jt);_.b=false;var Bg=VE(pK,'RequestResponseTracker',13);fk(176,1,{},Kt);_.I=function Lt(){Ht(this.a)};var Ag=VE(pK,'RequestResponseTracker/lambda$0$Type',176);fk(236,343,{},Mt);_.Z=function Nt(a){$d(a);null.kc()};_._=function Ot(){return null};var Cg=VE(pK,'RequestStartingEvent',236);fk(152,343,{},Qt);_.Z=function Rt(a){Fd(a,96).vb(this)};_._=function St(){return Pt};var Pt;var Dg=VE(pK,'ResponseHandlingEndedEvent',152);fk(276,343,{},Tt);_.Z=function Ut(a){$d(a);null.kc()};_._=function Vt(){return null};var Eg=VE(pK,'ResponseHandlingStartedEvent',276);fk(26,1,{26:1},cu);_.Bb=function du(a,b,c){Wt(this,a,b,c)};_.Cb=function eu(a,b,c){var d;d={};d[VJ]='channel';d[BK]=Object(a);d['channel']=Object(b);d['args']=c;$t(this,d)};var Fg=VE(pK,'ServerConnector',26);fk(34,1,{34:1},ku);_.b=false;var fu;var Jg=VE(pK,'ServerRpcQueue',34);fk(204,1,XJ,lu);_.X=function mu(){iu(this.a)};var Gg=VE(pK,'ServerRpcQueue/0methodref$doFlush$Type',204);fk(203,1,XJ,nu);_.X=function ou(){gu()};var Hg=VE(pK,'ServerRpcQueue/lambda$0$Type',203);fk(205,1,{},pu);_.I=function qu(){this.a.a.X()};var Ig=VE(pK,'ServerRpcQueue/lambda$1$Type',205);fk(73,1,{73:1},su);_.b=false;var Pg=VE(pK,'XhrConnection',73);fk(220,38,{},uu);_.X=function vu(){tu(this.b)&&this.a.b&&ok(this,250)};var Kg=VE(pK,'XhrConnection/1',220);fk(217,1,{},xu);_.xb=function yu(a,b){var c;c=new Eu(a,this.a);if(!b){or(Fd(yl(this.c.a,Rf),16),c);return}else{mr(Fd(yl(this.c.a,Rf),16),c)}};_.yb=function zu(a){var b,c;sl('Server visit took '+Po(this.b)+'ms');c=a.responseText;b=xs(ys(c));if(!b){nr(Fd(yl(this.c.a,Rf),16),new Eu(a,this.a));return}pr(Fd(yl(this.c.a,Rf),16));ll&&bE($wnd.console,'Received xhr message: '+c);js(Fd(yl(this.c.a,ng),19),b)};_.b=0;var Lg=VE(pK,'XhrConnection/XhrResponseHandler',217);fk(218,1,{},Au);_.ub=function Bu(a){this.a.b=true};var Mg=VE(pK,'XhrConnection/lambda$0$Type',218);fk(219,1,iK,Cu);_.vb=function Du(a){this.a.b=false};var Ng=VE(pK,'XhrConnection/lambda$1$Type',219);fk(108,1,{},Eu);var Og=VE(pK,'XhrConnectionError',108);fk(58,1,{58:1},Iu);var Qg=VE(EK,'ConstantPool',58);fk(87,1,{87:1},Qu);_.Db=function Ru(){return Fd(yl(this.a,xe),9).a};var Ug=VE(EK,'ExecuteJavaScriptProcessor',87);fk(207,1,{},Su);_.db=function Tu(a){return DC(new Wu(this.a,this.b)),LE(),true};var Rg=VE(EK,'ExecuteJavaScriptProcessor/lambda$0$Type',207);fk(208,1,XJ,Uu);_.X=function Vu(){Pu(this.a)};var Sg=VE(EK,'ExecuteJavaScriptProcessor/lambda$1$Type',208);fk(206,1,aK,Wu);_.ob=function Xu(){Lu(this.a,this.b)};var Tg=VE(EK,'ExecuteJavaScriptProcessor/lambda$3$Type',206);fk(302,1,{},$u);var Wg=VE(EK,'FragmentHandler',302);fk(303,1,iK,av);_.vb=function bv(a){Zu(this.a)};var Vg=VE(EK,'FragmentHandler/0methodref$onResponseHandlingEnded$Type',303);fk(300,1,{},cv);var Xg=VE(EK,'NodeUnregisterEvent',300);fk(173,1,{},lv);_.ub=function mv(a){gv(this.a,a)};var Yg=VE(EK,'RouterLinkHandler/lambda$0$Type',173);fk(174,1,uJ,nv);_.I=function ov(){Bq(this.a)};var Zg=VE(EK,'RouterLinkHandler/lambda$1$Type',174);fk(6,1,{6:1},Bv);_.Eb=function Cv(){return sv(this)};_.Fb=function Dv(){return this.g};_.d=0;_.j=false;var ah=VE(EK,'StateNode',6);fk(352,$wnd.Function,{},Fv);_.M=function Gv(a,b){vv(this.a,this.b,a,b)};fk(353,$wnd.Function,{},Hv);_.pb=function Iv(a){Ev(this.a,a)};var Ei=XE('elemental.events','EventRemover');fk(142,1,IK,Jv);_.Gb=function Kv(){wv(this.a,this.b)};var $g=VE(EK,'StateNode/lambda$2$Type',142);fk(354,$wnd.Function,{},Lv);_.pb=function Mv(a){xv(this.a,a)};fk(143,1,IK,Nv);_.Gb=function Ov(){yv(this.a,this.b)};var _g=VE(EK,'StateNode/lambda$4$Type',143);fk(11,1,{11:1},dw);_.Hb=function ew(){return this.e};_.Ib=function gw(a,b,c,d){var e;if(Uv(this,a)){e=Kd(c);bu(Fd(yl(this.c,Fg),26),a,b,e,d)}};_.d=false;_.f=false;var bh=VE(EK,'StateTree',11);fk(357,$wnd.Function,{},hw);_.pb=function iw(a){rv(Fd(a,6),hk(lw.prototype.M,lw,[]))};fk(358,$wnd.Function,{},jw);_.M=function kw(a,b){Wv(this.a,a)};fk(348,$wnd.Function,{},lw);_.M=function mw(a,b){fw(a,b)};var uw,vw;fk(168,1,{},Aw);var dh=VE(PK,'Binder/BinderContextImpl',168);var eh=XE(PK,'BindingStrategy');fk(94,1,{94:1},Fw);_.b=false;_.g=0;var Bw;var hh=VE(PK,'Debouncer',94);fk(347,1,{});_.b=false;_.c=0;var Ji=VE(RK,'Timer',347);fk(311,347,{},Lw);var fh=VE(PK,'Debouncer/1',311);fk(312,347,{},Mw);var gh=VE(PK,'Debouncer/2',312);fk(386,$wnd.Function,{},Ow);_.M=function Pw(a,b){var c;Nw(this,(c=Ld(a,$wnd.Map),Kd(b),c))};fk(387,$wnd.Function,{},Sw);_.pb=function Tw(a){Qw(this.a,a)};fk(388,$wnd.Function,{},Uw);_.pb=function Vw(a){Rw(this.a,a)};fk(297,1,{},Zw);_.jb=function $w(){return kx(this.a)};var ih=VE(PK,'ServerEventHandlerBinder/lambda$0$Type',297);fk(298,1,fK,_w);_.qb=function ax(a){Yw(this.b,this.a,this.c,a)};_.c=false;var jh=VE(PK,'ServerEventHandlerBinder/lambda$1$Type',298);var bx;fk(242,1,{320:1},jy);_.Jb=function ky(a,b,c){sx(this,a,b,c)};_.Kb=function ny(a){return Cx(a)};_.Mb=function sy(a,b){var c,d,e;d=Object.keys(a);e=new _z(d,a,b);c=Fd(b.e.get(lh),76);!c?$x(e.b,e.a,e.c):(c.a=e)};_.Nb=function ty(r,s){var t=this;var u=s._propertiesChanged;u&&(s._propertiesChanged=function(a,b,c){_I(function(){t.Mb(b,r)})();u.apply(this,arguments)});var v=r.Fb();var w=s.ready;s.ready=function(){w.apply(this,arguments);Nn(s);var q=function(){var o=s.root.querySelector(ZK);if(o){s.removeEventListener($K,q)}else{return}if(!o.constructor.prototype.$propChangedModified){o.constructor.prototype.$propChangedModified=true;var p=o.constructor.prototype._propertiesChanged;o.constructor.prototype._propertiesChanged=function(a,b,c){p.apply(this,arguments);var d=Object.getOwnPropertyNames(b);var e='items.';var f;for(f=0;f0){var i=h.substr(0,g);var j=h.substr(g+1);var k=a.items[i];if(k&&k.nodeId){var l=k.nodeId;var m=k[j];var n=this.__dataHost;while(!n.localName||n.__dataHost){n=n.__dataHost}_I(function(){ry(l,n,j,m,v)})()}}}}}}};s.root&&s.root.querySelector(ZK)?q():s.addEventListener($K,q)}};_.Lb=function uy(a){if(a.c.has(0)){return true}return !!a.g&&I(a,a.g.e)};var mx,nx;var Qh=VE(PK,'SimpleElementBindingStrategy',242);fk(376,$wnd.Function,{},Jy);_.pb=function Ky(a){Fd(a,42).Gb()};fk(380,$wnd.Function,{},Ly);_.pb=function My(a){Fd(a,18).X()};fk(106,1,{},Ny);var kh=VE(PK,'SimpleElementBindingStrategy/BindingContext',106);fk(76,1,{76:1},Oy);var lh=VE(PK,'SimpleElementBindingStrategy/InitialPropertyUpdate',76);fk(243,1,{},Py);_.Ob=function Qy(a){Ox(this.a,a)};var mh=VE(PK,'SimpleElementBindingStrategy/lambda$0$Type',243);fk(244,1,{},Ry);_.Ob=function Sy(a){Px(this.a,a)};var nh=VE(PK,'SimpleElementBindingStrategy/lambda$1$Type',244);fk(255,1,aK,Ty);_.ob=function Uy(){Qx(this.b,this.c,this.a)};var oh=VE(PK,'SimpleElementBindingStrategy/lambda$10$Type',255);fk(256,1,uJ,Vy);_.I=function Wy(){this.b.Ob(this.a)};var ph=VE(PK,'SimpleElementBindingStrategy/lambda$11$Type',256);fk(257,1,uJ,Xy);_.I=function Yy(){this.a[this.b]=Jn(this.c)};var qh=VE(PK,'SimpleElementBindingStrategy/lambda$12$Type',257);fk(259,1,fK,Zy);_.qb=function $y(a){Rx(this.a,a)};var rh=VE(PK,'SimpleElementBindingStrategy/lambda$13$Type',259);fk(261,1,fK,_y);_.qb=function az(a){Sx(this.a,a)};var sh=VE(PK,'SimpleElementBindingStrategy/lambda$14$Type',261);fk(262,1,XJ,bz);_.X=function cz(){Lx(this.a,this.b,this.c,false)};var th=VE(PK,'SimpleElementBindingStrategy/lambda$15$Type',262);fk(263,1,XJ,dz);_.X=function ez(){Lx(this.a,this.b,this.c,false)};var uh=VE(PK,'SimpleElementBindingStrategy/lambda$16$Type',263);fk(264,1,XJ,fz);_.X=function gz(){Nx(this.a,this.b,this.c,false)};var vh=VE(PK,'SimpleElementBindingStrategy/lambda$17$Type',264);fk(265,1,{},hz);_.jb=function iz(){return vy(this.a,this.b)};var wh=VE(PK,'SimpleElementBindingStrategy/lambda$18$Type',265);fk(266,1,{},jz);_.jb=function kz(){return wy(this.a,this.b)};var xh=VE(PK,'SimpleElementBindingStrategy/lambda$19$Type',266);fk(245,1,{},lz);_.Ob=function mz(a){Tx(this.a,a)};var yh=VE(PK,'SimpleElementBindingStrategy/lambda$2$Type',245);fk(373,$wnd.Function,{},nz);_.M=function oz(a,b){rC(Fd(a,49))};fk(374,$wnd.Function,{},pz);_.pb=function qz(a){xy(this.a,a)};fk(375,$wnd.Function,{},rz);_.M=function sz(a,b){Fd(a,42).Gb()};fk(377,$wnd.Function,{},tz);_.M=function uz(a,b){Ux(this.a,a)};fk(267,1,gK,vz);_.sb=function wz(a){Vx(this.a,a)};var zh=VE(PK,'SimpleElementBindingStrategy/lambda$25$Type',267);fk(268,1,uJ,xz);_.I=function yz(){Wx(this.b,this.a,this.c)};var Ah=VE(PK,'SimpleElementBindingStrategy/lambda$26$Type',268);fk(269,1,{},zz);_.ub=function Az(a){Xx(this.a,a)};var Bh=VE(PK,'SimpleElementBindingStrategy/lambda$27$Type',269);fk(378,$wnd.Function,{},Bz);_.pb=function Cz(a){Yx(this.a,this.b,a)};fk(270,1,{},Ez);_.pb=function Fz(a){Dz(this,a)};var Ch=VE(PK,'SimpleElementBindingStrategy/lambda$29$Type',270);fk(246,1,{},Gz);_.rb=function Hz(a){_x(this.c,this.b,this.a)};var Dh=VE(PK,'SimpleElementBindingStrategy/lambda$3$Type',246);fk(271,1,fK,Iz);_.qb=function Jz(a){zy(this.a,a)};var Eh=VE(PK,'SimpleElementBindingStrategy/lambda$30$Type',271);fk(272,1,{},Kz);_.jb=function Lz(){return this.a.b};var Fh=VE(PK,'SimpleElementBindingStrategy/lambda$31$Type',272);fk(379,$wnd.Function,{},Mz);_.pb=function Nz(a){this.a.push(Fd(a,6))};fk(247,1,{},Oz);_.I=function Pz(){Ay(this.a)};var Gh=VE(PK,'SimpleElementBindingStrategy/lambda$33$Type',247);fk(249,1,{},Qz);_.jb=function Rz(){return this.a[this.b]};var Hh=VE(PK,'SimpleElementBindingStrategy/lambda$34$Type',249);fk(251,1,aK,Sz);_.ob=function Tz(){rx(this.a)};var Ih=VE(PK,'SimpleElementBindingStrategy/lambda$35$Type',251);fk(258,1,aK,Uz);_.ob=function Vz(){Jx(this.b,this.a)};var Jh=VE(PK,'SimpleElementBindingStrategy/lambda$36$Type',258);fk(260,1,aK,Wz);_.ob=function Xz(){Zx(this.b,this.a)};var Kh=VE(PK,'SimpleElementBindingStrategy/lambda$37$Type',260);fk(248,1,aK,Yz);_.ob=function Zz(){By(this.a)};var Lh=VE(PK,'SimpleElementBindingStrategy/lambda$4$Type',248);fk(250,1,XJ,_z);_.X=function aA(){$z(this)};var Mh=VE(PK,'SimpleElementBindingStrategy/lambda$5$Type',250);fk(252,1,gK,bA);_.sb=function cA(a){CC(new Sz(this.a))};var Nh=VE(PK,'SimpleElementBindingStrategy/lambda$6$Type',252);fk(372,$wnd.Function,{},dA);_.M=function eA(a,b){Cy(this.b,this.a,a)};fk(253,1,gK,fA);_.sb=function gA(a){Dy(this.b,this.a,a)};var Oh=VE(PK,'SimpleElementBindingStrategy/lambda$8$Type',253);fk(254,1,hK,hA);_.tb=function iA(a){gy(this.c,this.b,this.a)};var Ph=VE(PK,'SimpleElementBindingStrategy/lambda$9$Type',254);fk(273,1,{320:1},nA);_.Jb=function oA(a,b,c){lA(a,b)};_.Kb=function pA(a){return $doc.createTextNode('')};_.Lb=function qA(a){return a.c.has(7)};var jA;var Th=VE(PK,'TextBindingStrategy',273);fk(274,1,uJ,rA);_.I=function sA(){kA();XD(this.a,Md(VA(this.b)))};var Rh=VE(PK,'TextBindingStrategy/lambda$0$Type',274);fk(275,1,{},tA);_.rb=function uA(a){mA(this.b,this.a)};var Sh=VE(PK,'TextBindingStrategy/lambda$1$Type',275);fk(351,$wnd.Function,{},zA);_.pb=function AA(a){this.a.add(a)};fk(355,$wnd.Function,{},CA);_.M=function DA(a,b){this.a.push(a)};var FA,GA=false;fk(289,1,{},IA);var Uh=VE('com.vaadin.client.flow.dom','PolymerDomApiImpl',289);fk(77,1,{77:1},JA);var Vh=VE('com.vaadin.client.flow.model','UpdatableModelProperties',77);fk(385,$wnd.Function,{},KA);_.pb=function LA(a){this.a.add(Md(a))};fk(91,1,{});_.Pb=function NA(){return this.e};var ti=VE(_J,'ReactiveValueChangeEvent',91);fk(52,91,{52:1},OA);_.Pb=function PA(){return Fd(this.e,29)};_.b=false;_.c=0;var Wh=VE(_K,'ListSpliceEvent',52);fk(28,1,{28:1,321:1},cB);_.Qb=function dB(a){return fB(this.a,a)};_.b=false;_.c=false;_.d=false;var QA;var di=VE(_K,'MapProperty',28);fk(89,1,{});var si=VE(_J,'ReactiveEventRouter',89);fk(228,89,{},lB);_.Rb=function mB(a,b){Fd(a,44).tb(Fd(b,79))};_.Sb=function nB(a){return new oB(a)};var Yh=VE(_K,'MapProperty/1',228);fk(229,1,hK,oB);_.tb=function pB(a){pC(this.a)};var Xh=VE(_K,'MapProperty/1/0methodref$onValueChange$Type',229);fk(227,1,XJ,qB);_.X=function rB(){RA()};var Zh=VE(_K,'MapProperty/lambda$0$Type',227);fk(230,1,aK,sB);_.ob=function tB(){this.a.d=false};var $h=VE(_K,'MapProperty/lambda$1$Type',230);fk(231,1,aK,uB);_.ob=function vB(){this.a.d=false};var _h=VE(_K,'MapProperty/lambda$2$Type',231);fk(232,1,XJ,wB);_.X=function xB(){$A(this.a,this.b)};var ai=VE(_K,'MapProperty/lambda$3$Type',232);fk(92,91,{92:1},yB);_.Pb=function zB(){return Fd(this.e,40)};var bi=VE(_K,'MapPropertyAddEvent',92);fk(79,91,{79:1},AB);_.Pb=function BB(){return Fd(this.e,28)};var ci=VE(_K,'MapPropertyChangeEvent',79);fk(39,1,{39:1});_.d=0;var ei=VE(_K,'NodeFeature',39);fk(29,39,{39:1,29:1,321:1},JB);_.Qb=function KB(a){return fB(this.a,a)};_.Tb=function LB(a){var b,c,d;c=[];for(b=0;b=0?':'+this.c:'')+')'};_.c=0;var hj=VE(dJ,'StackTraceElement',30);Dd={4:1,111:1,32:1,2:1};var kj=VE(dJ,'String',2);fk(71,85,{111:1},$F,_F,aG);var ij=VE(dJ,'StringBuilder',71);fk(123,86,xJ,bG);var jj=VE(dJ,'StringIndexOutOfBoundsException',123);fk(500,1,{});var cG;fk(338,1,{});_.A=function fG(){var a,b,c;c=new XH('[',']');for(b=this.ac();b.cc();){a=b.dc();WH(c,a===this?'(this Collection)':a==null?yJ:jk(a))}return !c.a?c.c:c.e.length==0?c.a.a:c.a.a+(''+c.e)};var mj=VE(mL,'AbstractCollection',338);fk(341,1,{110:1});_.u=function jG(a){var b,c,d;if(a===this){return true}if(!Pd(a,78)){return false}d=Fd(a,110);if(this.a.c+this.b.c!=d.a.c+d.b.c){return false}for(c=new yG((new tG(d)).a);c.b;){b=xG(c);if(!gG(this,b)){return false}}return true};_.w=function lG(){return dH(new tG(this))};_.A=function mG(){var a,b,c;c=new XH('{','}');for(b=new yG((new tG(this)).a);b.b;){a=xG(b);WH(c,iG(this,a.ec())+'='+iG(this,a.fc()))}return !c.a?c.c:c.e.length==0?c.a.a:c.a.a+(''+c.e)};var vj=VE(mL,'AbstractMap',341);fk(280,341,{110:1});var pj=VE(mL,'AbstractHashMap',280);fk(340,338,{319:1});_.u=function qG(a){var b;if(a===this){return true}if(!Pd(a,64)){return false}b=Fd(a,319);if(pG(b.a)!=this.bc()){return false}return eG(this,b)};_.w=function rG(){return dH(this)};var wj=VE(mL,'AbstractSet',340);fk(64,340,{64:1,319:1},tG);_.ac=function uG(){return new yG(this.a)};_.bc=function vG(){return pG(this.a)};var oj=VE(mL,'AbstractHashMap/EntrySet',64);fk(65,1,{},yG);_.dc=function AG(){return xG(this)};_.cc=function zG(){return this.b};_.b=false;var nj=VE(mL,'AbstractHashMap/EntrySetIterator',65);fk(339,338,{318:1});_.u=function BG(a){var b,c,d,e,f;if(a===this){return true}if(!Pd(a,45)){return false}f=Fd(a,318);if(this.bc()!=f.a.length){return false}e=new ZG(f);for(c=new ZG(this);c.a Element[]; +export declare const licenseCheckOk: (data: Product) => void; +export declare const licenseCheckFailed: (data: ProductAndMessage) => void; +export declare const licenseCheckNoKey: (data: ProductAndMessage) => void; +export declare const licenseInit: () => void; diff --git a/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/License.js b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/License.js new file mode 100644 index 00000000..5f0f6178 --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/License.js @@ -0,0 +1,110 @@ +const noLicenseFallbackTimeout = 1000; +export const findAll = (element, tags) => { + const lightDom = Array.from(element.querySelectorAll(tags.join(', '))); + const shadowDom = Array.from(element.querySelectorAll('*')) + .filter((e) => e.shadowRoot) + .flatMap((e) => findAll(e.shadowRoot, tags)); + return [...lightDom, ...shadowDom]; +}; +let licenseCheckListener = false; +const showNoLicenseFallback = (element, productAndMessage) => { + if (!licenseCheckListener) { + // When a license check has succeeded, refresh so that all elements are properly shown again + window.addEventListener('message', (e) => { + if (e.data === 'validate-license') { + window.location.reload(); + } + }, false); + licenseCheckListener = true; + } + const overlay = element._overlayElement; + if (overlay) { + if (overlay.shadowRoot) { + const defaultSlot = overlay.shadowRoot.querySelector('slot:not([name])'); + if (defaultSlot && defaultSlot.assignedElements().length > 0) { + showNoLicenseFallback(defaultSlot.assignedElements()[0], productAndMessage); + return; + } + } + showNoLicenseFallback(overlay, productAndMessage); + return; + } + const htmlMessage = productAndMessage.messageHtml + ? productAndMessage.messageHtml + : `${productAndMessage.message}

Component: ${productAndMessage.product.name} ${productAndMessage.product.version}

`.replace(/https:([^ ]*)/g, "https:$1"); + if (element.isConnected) { + element.outerHTML = `
${htmlMessage}
`; + } +}; +const productTagNames = {}; +const productChecking = {}; +const productMissingLicense = {}; +const productCheckOk = {}; +const key = (product) => { + return `${product.name}_${product.version}`; +}; +const checkLicenseIfNeeded = (cvdlElement) => { + var _a; + const { cvdlName, version } = cvdlElement.constructor; + const product = { name: cvdlName, version }; + const tagName = cvdlElement.tagName.toLowerCase(); + productTagNames[cvdlName] = (_a = productTagNames[cvdlName]) !== null && _a !== void 0 ? _a : []; + productTagNames[cvdlName].push(tagName); + const failedLicenseCheck = productMissingLicense[key(product)]; + if (failedLicenseCheck) { + // Has been checked and the check failed + setTimeout(() => showNoLicenseFallback(cvdlElement, failedLicenseCheck), noLicenseFallbackTimeout); + } + if (productMissingLicense[key(product)] || productCheckOk[key(product)]) { + // Already checked + } + else if (!productChecking[key(product)]) { + // Has not been checked + productChecking[key(product)] = true; + window.Vaadin.devTools.checkLicense(product); + } +}; +export const licenseCheckOk = (data) => { + productCheckOk[key(data)] = true; + // eslint-disable-next-line no-console + console.debug('License check ok for', data); +}; +export const licenseCheckFailed = (data) => { + const productName = data.product.name; + productMissingLicense[key(data.product)] = data; + // eslint-disable-next-line no-console + console.error('License check failed for', productName); + const tags = productTagNames[productName]; + if ((tags === null || tags === void 0 ? void 0 : tags.length) > 0) { + findAll(document, tags).forEach((element) => { + setTimeout(() => showNoLicenseFallback(element, productMissingLicense[key(data.product)]), noLicenseFallbackTimeout); + }); + } +}; +export const licenseCheckNoKey = (data) => { + const keyUrl = data.message; + const productName = data.product.name; + data.messageHtml = `No license found. Go here to start a trial or retrieve your license.`; + productMissingLicense[key(data.product)] = data; + // eslint-disable-next-line no-console + console.error('No license found when checking', productName); + const tags = productTagNames[productName]; + if ((tags === null || tags === void 0 ? void 0 : tags.length) > 0) { + findAll(document, tags).forEach((element) => { + setTimeout(() => showNoLicenseFallback(element, productMissingLicense[key(data.product)]), noLicenseFallbackTimeout); + }); + } +}; +export const licenseInit = () => { + // Process already registered elements + window.Vaadin.devTools.createdCvdlElements.forEach((element) => { + checkLicenseIfNeeded(element); + }); + // Handle new elements directly + window.Vaadin.devTools.createdCvdlElements = { + push: (element) => { + checkLicenseIfNeeded(element); + } + }; +}; +//# sourceMappingURL=License.js.map \ No newline at end of file diff --git a/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/License.js.map b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/License.js.map new file mode 100644 index 00000000..49a8674c --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/License.js.map @@ -0,0 +1 @@ +{"version":3,"file":"License.js","sourceRoot":"","sources":["../../../../src/main/frontend/License.ts"],"names":[],"mappings":"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","sourcesContent":["const noLicenseFallbackTimeout = 1000;\n\nexport interface Product {\n name: string;\n version: string;\n}\n\nexport interface ProductAndMessage {\n message: string;\n messageHtml?: string;\n product: Product;\n}\n\nexport const findAll = (element: Element | ShadowRoot | Document, tags: string[]): Element[] => {\n const lightDom = Array.from(element.querySelectorAll(tags.join(', ')));\n const shadowDom = Array.from(element.querySelectorAll('*'))\n .filter((e) => e.shadowRoot)\n .flatMap((e) => findAll(e.shadowRoot!, tags));\n return [...lightDom, ...shadowDom];\n};\n\nlet licenseCheckListener = false;\n\nconst showNoLicenseFallback = (element: Element, productAndMessage: ProductAndMessage) => {\n if (!licenseCheckListener) {\n // When a license check has succeeded, refresh so that all elements are properly shown again\n window.addEventListener(\n 'message',\n (e) => {\n if (e.data === 'validate-license') {\n window.location.reload();\n }\n },\n false\n );\n licenseCheckListener = true;\n }\n const overlay = (element as any)._overlayElement;\n if (overlay) {\n if (overlay.shadowRoot) {\n const defaultSlot = overlay.shadowRoot.querySelector('slot:not([name])');\n if (defaultSlot && defaultSlot.assignedElements().length > 0) {\n showNoLicenseFallback(defaultSlot.assignedElements()[0], productAndMessage);\n return;\n }\n }\n showNoLicenseFallback(overlay, productAndMessage);\n return;\n }\n\n const htmlMessage = productAndMessage.messageHtml\n ? productAndMessage.messageHtml\n : `${productAndMessage.message}

Component: ${productAndMessage.product.name} ${productAndMessage.product.version}

`.replace(\n /https:([^ ]*)/g,\n \"https:$1\"\n );\n\n if (element.isConnected) {\n element.outerHTML = `
${htmlMessage}
`;\n }\n};\n\nconst productTagNames: Record = {};\nconst productChecking: Record = {};\nconst productMissingLicense: Record = {};\nconst productCheckOk: Record = {};\n\nconst key = (product: Product): string => {\n return `${product.name}_${product.version}`;\n};\n\nconst checkLicenseIfNeeded = (cvdlElement: Element) => {\n const { cvdlName, version } = cvdlElement.constructor as CustomElementConstructor & {\n cvdlName: string;\n version: string;\n };\n const product: Product = { name: cvdlName, version };\n const tagName = cvdlElement.tagName.toLowerCase();\n productTagNames[cvdlName] = productTagNames[cvdlName] ?? [];\n productTagNames[cvdlName].push(tagName);\n\n const failedLicenseCheck = productMissingLicense[key(product)];\n if (failedLicenseCheck) {\n // Has been checked and the check failed\n setTimeout(() => showNoLicenseFallback(cvdlElement, failedLicenseCheck), noLicenseFallbackTimeout);\n }\n\n if (productMissingLicense[key(product)] || productCheckOk[key(product)]) {\n // Already checked\n } else if (!productChecking[key(product)]) {\n // Has not been checked\n productChecking[key(product)] = true;\n (window as any).Vaadin.devTools.checkLicense(product);\n }\n};\n\nexport const licenseCheckOk = (data: Product) => {\n productCheckOk[key(data)] = true;\n\n // eslint-disable-next-line no-console\n console.debug('License check ok for', data);\n};\n\nexport const licenseCheckFailed = (data: ProductAndMessage) => {\n const productName = data.product.name;\n productMissingLicense[key(data.product)] = data;\n // eslint-disable-next-line no-console\n console.error('License check failed for', productName);\n\n const tags = productTagNames[productName];\n if (tags?.length > 0) {\n findAll(document, tags).forEach((element) => {\n setTimeout(\n () => showNoLicenseFallback(element, productMissingLicense[key(data.product)]),\n noLicenseFallbackTimeout\n );\n });\n }\n};\n\nexport const licenseCheckNoKey = (data: ProductAndMessage) => {\n const keyUrl = data.message;\n\n const productName = data.product.name;\n data.messageHtml = `No license found. Go here to start a trial or retrieve your license.`;\n productMissingLicense[key(data.product)] = data;\n // eslint-disable-next-line no-console\n console.error('No license found when checking', productName);\n\n const tags = productTagNames[productName];\n if (tags?.length > 0) {\n findAll(document, tags).forEach((element) => {\n setTimeout(\n () => showNoLicenseFallback(element, productMissingLicense[key(data.product)]),\n noLicenseFallbackTimeout\n );\n });\n }\n};\n\nexport const licenseInit = () => {\n // Process already registered elements\n (window as any).Vaadin.devTools.createdCvdlElements.forEach((element: Element) => {\n checkLicenseIfNeeded(element);\n });\n\n // Handle new elements directly\n (window as any).Vaadin.devTools.createdCvdlElements = {\n push: (element: Element) => {\n checkLicenseIfNeeded(element);\n }\n };\n};\n"]} \ No newline at end of file diff --git a/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/copy-to-clipboard.js b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/copy-to-clipboard.js new file mode 100644 index 00000000..475842a8 --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/copy-to-clipboard.js @@ -0,0 +1,150 @@ +"use strict"; + +var deselectCurrent = function () { + var selection = document.getSelection(); + if (!selection.rangeCount) { + return function () {}; + } + var active = document.activeElement; + + var ranges = []; + for (var i = 0; i < selection.rangeCount; i++) { + ranges.push(selection.getRangeAt(i)); + } + + switch (active.tagName.toUpperCase()) { // .toUpperCase handles XHTML + case 'INPUT': + case 'TEXTAREA': + active.blur(); + break; + + default: + active = null; + break; + } + + selection.removeAllRanges(); + return function () { + selection.type === 'Caret' && + selection.removeAllRanges(); + + if (!selection.rangeCount) { + ranges.forEach(function(range) { + selection.addRange(range); + }); + } + + active && + active.focus(); + }; +}; + + +var clipboardToIE11Formatting = { + "text/plain": "Text", + "text/html": "Url", + "default": "Text" +} + +var defaultMessage = "Copy to clipboard: #{key}, Enter"; + +function format(message) { + var copyKey = (/mac os x/i.test(navigator.userAgent) ? "⌘" : "Ctrl") + "+C"; + return message.replace(/#{\s*key\s*}/g, copyKey); +} + +export function copy(text, options) { + var debug, + message, + reselectPrevious, + range, + selection, + mark, + success = false; + if (!options) { + options = {}; + } + debug = options.debug || false; + try { + reselectPrevious = deselectCurrent(); + + range = document.createRange(); + selection = document.getSelection(); + + mark = document.createElement("span"); + mark.textContent = text; + // reset user styles for span element + mark.style.all = "unset"; + // prevents scrolling to the end of the page + mark.style.position = "fixed"; + mark.style.top = 0; + mark.style.clip = "rect(0, 0, 0, 0)"; + // used to preserve spaces and line breaks + mark.style.whiteSpace = "pre"; + // do not inherit user-select (it may be `none`) + mark.style.webkitUserSelect = "text"; + mark.style.MozUserSelect = "text"; + mark.style.msUserSelect = "text"; + mark.style.userSelect = "text"; + mark.addEventListener("copy", function(e) { + e.stopPropagation(); + if (options.format) { + e.preventDefault(); + if (typeof e.clipboardData === "undefined") { // IE 11 + debug && console.warn("unable to use e.clipboardData"); + debug && console.warn("trying IE specific stuff"); + window.clipboardData.clearData(); + var format = clipboardToIE11Formatting[options.format] || clipboardToIE11Formatting["default"] + window.clipboardData.setData(format, text); + } else { // all other browsers + e.clipboardData.clearData(); + e.clipboardData.setData(options.format, text); + } + } + if (options.onCopy) { + e.preventDefault(); + options.onCopy(e.clipboardData); + } + }); + + document.body.appendChild(mark); + + range.selectNodeContents(mark); + selection.addRange(range); + + var successful = document.execCommand("copy"); + if (!successful) { + throw new Error("copy command was unsuccessful"); + } + success = true; + } catch (err) { + debug && console.error("unable to copy using execCommand: ", err); + debug && console.warn("trying IE specific stuff"); + try { + window.clipboardData.setData(options.format || "text", text); + options.onCopy && options.onCopy(window.clipboardData); + success = true; + } catch (err) { + debug && console.error("unable to copy using clipboardData: ", err); + debug && console.error("falling back to prompt"); + message = format("message" in options ? options.message : defaultMessage); + window.prompt(message, text); + } + } finally { + if (selection) { + if (typeof selection.removeRange == "function") { + selection.removeRange(range); + } else { + selection.removeAllRanges(); + } + } + + if (mark) { + document.body.removeChild(mark); + } + reselectPrevious(); + } + + return success; +} + diff --git a/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/dndConnector-es6.js b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/dndConnector-es6.js new file mode 100644 index 00000000..699684da --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/dndConnector-es6.js @@ -0,0 +1 @@ +import './dndConnector.js'; diff --git a/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/dndConnector.js b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/dndConnector.js new file mode 100644 index 00000000..13170ec2 --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/dndConnector.js @@ -0,0 +1,110 @@ +window.Vaadin = window.Vaadin || {}; +window.Vaadin.Flow = window.Vaadin.Flow || {}; +window.Vaadin.Flow.dndConnector = { + __ondragenterListener: function (event) { + // TODO filter by data type + // TODO prevent dropping on itself (by default) + const effect = event.currentTarget['__dropEffect']; + if (!event.currentTarget.hasAttribute('disabled')) { + if (effect) { + event.dataTransfer.dropEffect = effect; + } + + if (effect && effect !== 'none') { + /* #7108: if drag moves on top of drop target's children, first another ondragenter event + * is fired and then a ondragleave event. This happens again once the drag + * moves on top of another children, or back on top of the drop target element. + * Thus need to "cancel" the following ondragleave, to not remove class name. + * Drop event will happen even when dropped to a child element. */ + if (event.currentTarget.classList.contains('v-drag-over-target')) { + event.currentTarget['__skip-leave'] = true; + } else { + event.currentTarget.classList.add('v-drag-over-target'); + } + // enables browser specific pseudo classes (at least FF) + event.preventDefault(); + event.stopPropagation(); // don't let parents know + } + } + }, + + __ondragoverListener: function (event) { + // TODO filter by data type + // TODO filter by effectAllowed != dropEffect due to Safari & IE11 ? + if (!event.currentTarget.hasAttribute('disabled')) { + const effect = event.currentTarget['__dropEffect']; + if (effect) { + event.dataTransfer.dropEffect = effect; + } + // allows the drop && don't let parents know + event.preventDefault(); + event.stopPropagation(); + } + }, + + __ondragleaveListener: function (event) { + if (event.currentTarget['__skip-leave']) { + event.currentTarget['__skip-leave'] = false; + } else { + event.currentTarget.classList.remove('v-drag-over-target'); + } + // #7109 need to stop or any parent drop target might not get highlighted, + // as ondragenter for it is fired before the child gets dragleave. + event.stopPropagation(); + }, + + __ondropListener: function (event) { + const effect = event.currentTarget['__dropEffect']; + if (effect) { + event.dataTransfer.dropEffect = effect; + } + event.currentTarget.classList.remove('v-drag-over-target'); + // prevent browser handling && don't let parents know + event.preventDefault(); + event.stopPropagation(); + }, + + updateDropTarget: function (element) { + if (element['__active']) { + element.addEventListener('dragenter', this.__ondragenterListener, false); + element.addEventListener('dragover', this.__ondragoverListener, false); + element.addEventListener('dragleave', this.__ondragleaveListener, false); + element.addEventListener('drop', this.__ondropListener, false); + } else { + element.removeEventListener('dragenter', this.__ondragenterListener, false); + element.removeEventListener('dragover', this.__ondragoverListener, false); + element.removeEventListener('dragleave', this.__ondragleaveListener, false); + element.removeEventListener('drop', this.__ondropListener, false); + element.classList.remove('v-drag-over-target'); + } + }, + + /** DRAG SOURCE METHODS: */ + + __dragstartListener: function (event) { + event.stopPropagation(); + event.dataTransfer.setData('text/plain', ''); + if (event.currentTarget.hasAttribute('disabled')) { + event.preventDefault(); + } else { + if (event.currentTarget['__effectAllowed']) { + event.dataTransfer.effectAllowed = event.currentTarget['__effectAllowed']; + } + event.currentTarget.classList.add('v-dragged'); + } + }, + + __dragendListener: function (event) { + event.currentTarget.classList.remove('v-dragged'); + }, + + updateDragSource: function (element) { + if (element['draggable']) { + element.addEventListener('dragstart', this.__dragstartListener, false); + element.addEventListener('dragend', this.__dragendListener, false); + } else { + element.removeEventListener('dragstart', this.__dragstartListener, false); + element.removeEventListener('dragend', this.__dragendListener, false); + } + } +}; diff --git a/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/index.d.ts b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/index.d.ts new file mode 100644 index 00000000..d4e6e0db --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/index.d.ts @@ -0,0 +1 @@ +export * from './Flow'; diff --git a/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/index.js b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/index.js new file mode 100644 index 00000000..6c148278 --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/index.js @@ -0,0 +1,2 @@ +export * from './Flow'; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/index.js.map b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/index.js.map new file mode 100644 index 00000000..c662ab4b --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/main/frontend/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC","sourcesContent":["export * from './Flow';\n"]} \ No newline at end of file diff --git a/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/lumo-includes.ts b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/lumo-includes.ts new file mode 100644 index 00000000..bd4834fe --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/lumo-includes.ts @@ -0,0 +1,9 @@ +import { color } from '@vaadin/vaadin-lumo-styles/color.js'; +import { typography } from '@vaadin/vaadin-lumo-styles/typography.js'; + +const tpl = document.createElement('template'); +tpl.innerHTML = ``; +document.head.appendChild(tpl.content); diff --git a/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/src/hello-world-jandex.ts b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/src/hello-world-jandex.ts new file mode 100644 index 00000000..db258179 --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/src/hello-world-jandex.ts @@ -0,0 +1,15 @@ +import { html, LitElement } from 'lit'; +import '@axa-ch/input-text'; + +class HelloWorldJandex extends LitElement { + + render() { + return html` +
+ Addon with Jandex index + +
`; + } +} + +customElements.define('hello-world-jandex', HelloWorldJandex); diff --git a/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/src/hello-world.ts b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/src/hello-world.ts new file mode 100644 index 00000000..9a850e1c --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/src/hello-world.ts @@ -0,0 +1,15 @@ +import { html, LitElement } from 'lit'; +import '@axa-ch/input-text'; + +class HelloWorld extends LitElement { + + render() { + return html` +
+ Addon without Jandex index + +
`; + } +} + +customElements.define('hello-world', HelloWorld); diff --git a/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/themes/reusable-theme/styles.css b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/themes/reusable-theme/styles.css new file mode 100644 index 00000000..699c70e0 --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/themes/reusable-theme/styles.css @@ -0,0 +1,13 @@ + +/* + CSS styling examples for the Vaadin app. + This is the style entrypoint for the theme and together with css in ./components/ included + automatically into the theme. + Visit https://vaadin.com/docs-beta/latest/theming/application-theme/ for more information. +*/ + +/* Example: CSS class name to center align the content . */ +.centered-content { + margin: 0 auto; + max-width: 250px; +} diff --git a/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/tooltip.ts b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/tooltip.ts new file mode 100644 index 00000000..e5849ac6 --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/tooltip.ts @@ -0,0 +1,11 @@ +import { Tooltip } from '@vaadin/tooltip/src/vaadin-tooltip.js'; + +const _window = window as any; +_window.Vaadin = _window.Vaadin || {}; +_window.Vaadin.Flow = _window.Vaadin.Flow || {}; + +_window.Vaadin.Flow.tooltip = { + setDefaultHideDelay: (hideDelay: number) => Tooltip.setDefaultHideDelay(hideDelay), + setDefaultFocusDelay: (focusDelay: number) => Tooltip.setDefaultFocusDelay(focusDelay), + setDefaultHoverDelay: (hoverDelay: number) => Tooltip.setDefaultHoverDelay(hoverDelay), +} diff --git a/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/vaadin-dev-tools.d.ts b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/vaadin-dev-tools.d.ts new file mode 100644 index 00000000..a7583c0c --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/vaadin-dev-tools.d.ts @@ -0,0 +1,119 @@ +import { LitElement } from 'lit'; +import { Product } from './License'; +interface Feature { + id: string; + title: string; + moreInfoLink: string; + requiresServerRestart: boolean; + enabled: boolean; +} +declare enum ConnectionStatus { + ACTIVE = "active", + INACTIVE = "inactive", + UNAVAILABLE = "unavailable", + ERROR = "error" +} +export declare class Connection extends Object { + static HEARTBEAT_INTERVAL: number; + status: ConnectionStatus; + webSocket?: WebSocket; + constructor(url?: string); + onHandshake(): void; + onReload(): void; + onConnectionError(_: string): void; + onStatusChange(_: ConnectionStatus): void; + onMessage(message: any): void; + handleMessage(msg: any): void; + handleError(msg: any): void; + setActive(yes: boolean): void; + setStatus(status: ConnectionStatus): void; + private send; + setFeature(featureId: string, enabled: boolean): void; + sendTelemetry(browserData: any): void; + sendLicenseCheck(product: Product): void; +} +declare enum MessageType { + LOG = "log", + INFORMATION = "information", + WARNING = "warning", + ERROR = "error" +} +interface Message { + id: number; + type: MessageType; + message: string; + details?: string; + link?: string; + persistentId?: string; + dontShowAgain: boolean; + deleted: boolean; +} +export declare class VaadinDevTools extends LitElement { + static BLUE_HSL: import("lit").CSSResult; + static GREEN_HSL: import("lit").CSSResult; + static GREY_HSL: import("lit").CSSResult; + static YELLOW_HSL: import("lit").CSSResult; + static RED_HSL: import("lit").CSSResult; + static MAX_LOG_ROWS: number; + static get styles(): import("lit").CSSResult; + static DISMISSED_NOTIFICATIONS_IN_LOCAL_STORAGE: string; + static ACTIVE_KEY_IN_SESSION_STORAGE: string; + static TRIGGERED_KEY_IN_SESSION_STORAGE: string; + static TRIGGERED_COUNT_KEY_IN_SESSION_STORAGE: string; + static AUTO_DEMOTE_NOTIFICATION_DELAY: number; + static HOTSWAP_AGENT: string; + static JREBEL: string; + static SPRING_BOOT_DEVTOOLS: string; + static BACKEND_DISPLAY_NAME: Record; + static get isActive(): boolean; + static notificationDismissed(persistentId: string): boolean; + url?: string; + liveReloadDisabled?: boolean; + backend?: string; + springBootLiveReloadPort?: number; + expanded: boolean; + messages: Message[]; + splashMessage?: string; + notifications: Message[]; + frontendStatus: ConnectionStatus; + javaStatus: ConnectionStatus; + private tabs; + private activeTab; + private serverInfo; + private features; + private unreadErrors; + private root; + private javaConnection?; + private frontendConnection?; + private nextMessageId; + private disableEventListener?; + private transitionDuration; + elementTelemetry(): void; + openWebSocketConnection(): void; + getDedicatedWebSocketUrl(): string | undefined; + getSpringBootWebSocketUrl(location: any): string; + connectedCallback(): void; + format(o: any): string; + catchErrors(): void; + disconnectedCallback(): void; + toggleExpanded(): void; + showSplashMessage(msg: string | undefined): void; + demoteSplashMessage(): void; + checkLicense(productInfo: Product): void; + log(type: MessageType, message: string, details?: string, link?: string): void; + showNotification(type: MessageType, message: string, details?: string, link?: string, persistentId?: string): void; + dismissNotification(id: number): void; + findNotificationIndex(id: number): number; + toggleDontShowAgain(id: number): void; + setActive(yes: boolean): void; + getStatusColor(status: ConnectionStatus | undefined): import("lit").CSSResult; + renderMessage(messageObject: Message): import("lit-html").TemplateResult<1>; + render(): import("lit-html").TemplateResult<1>; + renderLog(): import("lit-html").TemplateResult<1>; + activateLog(): void; + renderInfo(): import("lit-html").TemplateResult<1>; + private renderFeatures; + copyInfoToClipboard(): void; + toggleFeatureFlag(e: Event, feature: Feature): void; +} +export {}; diff --git a/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/vaadin-dev-tools.js b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/vaadin-dev-tools.js new file mode 100644 index 00000000..547fd0da --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/vaadin-dev-tools.js @@ -0,0 +1,1477 @@ +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +import { css, html, LitElement, nothing } from 'lit'; +import { property, query, state } from 'lit/decorators.js'; +import { classMap } from 'lit/directives/class-map.js'; +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-ignore +import { copy } from './copy-to-clipboard.js'; +import { licenseCheckFailed, licenseCheckNoKey, licenseCheckOk, licenseInit } from './License'; +var ConnectionStatus; +(function (ConnectionStatus) { + ConnectionStatus["ACTIVE"] = "active"; + ConnectionStatus["INACTIVE"] = "inactive"; + ConnectionStatus["UNAVAILABLE"] = "unavailable"; + ConnectionStatus["ERROR"] = "error"; +})(ConnectionStatus || (ConnectionStatus = {})); +export class Connection extends Object { + constructor(url) { + super(); + this.status = ConnectionStatus.UNAVAILABLE; + if (url) { + this.webSocket = new WebSocket(url); + this.webSocket.onmessage = (msg) => this.handleMessage(msg); + this.webSocket.onerror = (err) => this.handleError(err); + this.webSocket.onclose = (_) => { + if (this.status !== ConnectionStatus.ERROR) { + this.setStatus(ConnectionStatus.UNAVAILABLE); + } + this.webSocket = undefined; + }; + } + setInterval(() => { + if (this.webSocket && self.status !== ConnectionStatus.ERROR && this.status !== ConnectionStatus.UNAVAILABLE) { + this.webSocket.send(''); + } + }, Connection.HEARTBEAT_INTERVAL); + } + onHandshake() { + // Intentionally empty + } + onReload() { + // Intentionally empty + } + onConnectionError(_) { + // Intentionally empty + } + onStatusChange(_) { + // Intentionally empty + } + onMessage(message) { + // eslint-disable-next-line no-console + console.error('Unknown message received from the live reload server:', message); + } + handleMessage(msg) { + let json; + try { + json = JSON.parse(msg.data); + } + catch (e) { + this.handleError(`[${e.name}: ${e.message}`); + return; + } + if (json.command === 'hello') { + this.setStatus(ConnectionStatus.ACTIVE); + this.onHandshake(); + } + else if (json.command === 'reload') { + if (this.status === ConnectionStatus.ACTIVE) { + this.onReload(); + } + } + else if (json.command === 'license-check-ok') { + licenseCheckOk(json.data); + } + else if (json.command === 'license-check-failed') { + licenseCheckFailed(json.data); + } + else if (json.command === 'license-check-nokey') { + licenseCheckNoKey(json.data); + } + else { + this.onMessage(json); + } + } + handleError(msg) { + // eslint-disable-next-line no-console + console.error(msg); + this.setStatus(ConnectionStatus.ERROR); + if (msg instanceof Event && this.webSocket) { + this.onConnectionError(`Error in WebSocket connection to ${this.webSocket.url}`); + } + else { + this.onConnectionError(msg); + } + } + setActive(yes) { + if (!yes && this.status === ConnectionStatus.ACTIVE) { + this.setStatus(ConnectionStatus.INACTIVE); + } + else if (yes && this.status === ConnectionStatus.INACTIVE) { + this.setStatus(ConnectionStatus.ACTIVE); + } + } + setStatus(status) { + if (this.status !== status) { + this.status = status; + this.onStatusChange(status); + } + } + send(command, data) { + const message = JSON.stringify({ command, data }); + if (!this.webSocket) { + // eslint-disable-next-line no-console + console.error(`Unable to send message ${command}. No websocket is available`); + } + else if (this.webSocket.readyState !== WebSocket.OPEN) { + this.webSocket.addEventListener('open', () => this.webSocket.send(message)); + } + else { + this.webSocket.send(message); + } + } + setFeature(featureId, enabled) { + this.send('setFeature', { featureId, enabled }); + } + sendTelemetry(browserData) { + this.send('reportTelemetry', { browserData }); + } + sendLicenseCheck(product) { + this.send('checkLicense', product); + } +} +Connection.HEARTBEAT_INTERVAL = 180000; +var MessageType; +(function (MessageType) { + MessageType["LOG"] = "log"; + MessageType["INFORMATION"] = "information"; + MessageType["WARNING"] = "warning"; + MessageType["ERROR"] = "error"; +})(MessageType || (MessageType = {})); +export class VaadinDevTools extends LitElement { + constructor() { + super(...arguments); + this.expanded = false; + this.messages = []; + this.notifications = []; + this.frontendStatus = ConnectionStatus.UNAVAILABLE; + this.javaStatus = ConnectionStatus.UNAVAILABLE; + this.tabs = [ + { id: 'log', title: 'Log', render: this.renderLog, activate: this.activateLog }, + { id: 'info', title: 'Info', render: this.renderInfo }, + { id: 'features', title: 'Feature Flags', render: this.renderFeatures } + ]; + this.activeTab = 'log'; + this.serverInfo = { + flowVersion: '', + vaadinVersion: '', + javaVersion: '', + osVersion: '', + productName: '' + }; + this.features = []; + this.unreadErrors = false; + this.nextMessageId = 1; + this.transitionDuration = 0; + } + static get styles() { + return css ` + :host { + --dev-tools-font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, + 'Helvetica Neue', sans-serif; + --dev-tools-font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', + monospace; + + --dev-tools-font-size: 0.8125rem; + --dev-tools-font-size-small: 0.75rem; + + --dev-tools-text-color: rgba(255, 255, 255, 0.8); + --dev-tools-text-color-secondary: rgba(255, 255, 255, 0.65); + --dev-tools-text-color-emphasis: rgba(255, 255, 255, 0.95); + --dev-tools-text-color-active: rgba(255, 255, 255, 1); + + --dev-tools-background-color-inactive: rgba(45, 45, 45, 0.25); + --dev-tools-background-color-active: rgba(45, 45, 45, 0.98); + --dev-tools-background-color-active-blurred: rgba(45, 45, 45, 0.85); + + --dev-tools-border-radius: 0.5rem; + --dev-tools-box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.05), 0 4px 12px -2px rgba(0, 0, 0, 0.4); + + --dev-tools-blue-hsl: ${this.BLUE_HSL}; + --dev-tools-blue-color: hsl(var(--dev-tools-blue-hsl)); + --dev-tools-green-hsl: ${this.GREEN_HSL}; + --dev-tools-green-color: hsl(var(--dev-tools-green-hsl)); + --dev-tools-grey-hsl: ${this.GREY_HSL}; + --dev-tools-grey-color: hsl(var(--dev-tools-grey-hsl)); + --dev-tools-yellow-hsl: ${this.YELLOW_HSL}; + --dev-tools-yellow-color: hsl(var(--dev-tools-yellow-hsl)); + --dev-tools-red-hsl: ${this.RED_HSL}; + --dev-tools-red-color: hsl(var(--dev-tools-red-hsl)); + + /* Needs to be in ms, used in JavaScript as well */ + --dev-tools-transition-duration: 180ms; + + all: initial; + + direction: ltr; + cursor: default; + font: normal 400 var(--dev-tools-font-size) / 1.125rem var(--dev-tools-font-family); + color: var(--dev-tools-text-color); + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + + position: fixed; + z-index: 20000; + pointer-events: none; + bottom: 0; + right: 0; + width: 100%; + height: 100%; + display: flex; + flex-direction: column-reverse; + align-items: flex-end; + } + + .dev-tools { + pointer-events: auto; + display: flex; + align-items: center; + position: fixed; + z-index: inherit; + right: 0.5rem; + bottom: 0.5rem; + min-width: 1.75rem; + height: 1.75rem; + max-width: 1.75rem; + border-radius: 0.5rem; + padding: 0.375rem; + box-sizing: border-box; + background-color: var(--dev-tools-background-color-inactive); + box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.05); + color: var(--dev-tools-text-color); + transition: var(--dev-tools-transition-duration); + white-space: nowrap; + line-height: 1rem; + } + + .dev-tools:hover, + .dev-tools.active { + background-color: var(--dev-tools-background-color-active); + box-shadow: var(--dev-tools-box-shadow); + } + + .dev-tools.active { + max-width: calc(100% - 1rem); + } + + .dev-tools .dev-tools-icon { + flex: none; + pointer-events: none; + display: inline-block; + width: 1rem; + height: 1rem; + fill: #fff; + transition: var(--dev-tools-transition-duration); + margin: 0; + } + + .dev-tools.active .dev-tools-icon { + opacity: 0; + position: absolute; + transform: scale(0.5); + } + + .dev-tools .status-blip { + flex: none; + display: block; + width: 6px; + height: 6px; + border-radius: 50%; + z-index: 20001; + background: var(--dev-tools-grey-color); + position: absolute; + top: -1px; + right: -1px; + } + + .dev-tools .status-description { + overflow: hidden; + text-overflow: ellipsis; + padding: 0 0.25rem; + } + + .dev-tools.error { + background-color: hsla(var(--dev-tools-red-hsl), 0.15); + animation: bounce 0.5s; + animation-iteration-count: 2; + } + + .switch { + display: inline-flex; + align-items: center; + } + + .switch input { + opacity: 0; + width: 0; + height: 0; + position: absolute; + } + + .switch .slider { + display: block; + flex: none; + width: 28px; + height: 18px; + border-radius: 9px; + background-color: rgba(255, 255, 255, 0.3); + transition: var(--dev-tools-transition-duration); + margin-right: 0.5rem; + } + + .switch:focus-within .slider, + .switch .slider:hover { + background-color: rgba(255, 255, 255, 0.35); + transition: none; + } + + .switch input:focus-visible ~ .slider { + box-shadow: 0 0 0 2px var(--dev-tools-background-color-active), 0 0 0 4px var(--dev-tools-blue-color); + } + + .switch .slider::before { + content: ''; + display: block; + margin: 2px; + width: 14px; + height: 14px; + background-color: #fff; + transition: var(--dev-tools-transition-duration); + border-radius: 50%; + } + + .switch input:checked + .slider { + background-color: var(--dev-tools-green-color); + } + + .switch input:checked + .slider::before { + transform: translateX(10px); + } + + .switch input:disabled + .slider::before { + background-color: var(--dev-tools-grey-color); + } + + .window.hidden { + opacity: 0; + transform: scale(0); + position: absolute; + } + + .window.visible { + transform: none; + opacity: 1; + pointer-events: auto; + } + + .window.visible ~ .dev-tools { + opacity: 0; + pointer-events: none; + } + + .window.visible ~ .dev-tools .dev-tools-icon, + .window.visible ~ .dev-tools .status-blip { + transition: none; + opacity: 0; + } + + .window { + border-radius: var(--dev-tools-border-radius); + overflow: hidden; + margin: 0.5rem; + width: 30rem; + max-width: calc(100% - 1rem); + max-height: calc(100vh - 1rem); + flex-shrink: 1; + background-color: var(--dev-tools-background-color-active); + color: var(--dev-tools-text-color); + transition: var(--dev-tools-transition-duration); + transform-origin: bottom right; + display: flex; + flex-direction: column; + box-shadow: var(--dev-tools-box-shadow); + outline: none; + } + + .window-toolbar { + display: flex; + flex: none; + align-items: center; + padding: 0.375rem; + white-space: nowrap; + order: 1; + background-color: rgba(0, 0, 0, 0.2); + gap: 0.5rem; + } + + .tab { + color: var(--dev-tools-text-color-secondary); + font: inherit; + font-size: var(--dev-tools-font-size-small); + font-weight: 500; + line-height: 1; + padding: 0.25rem 0.375rem; + background: none; + border: none; + margin: 0; + border-radius: 0.25rem; + transition: var(--dev-tools-transition-duration); + } + + .tab:hover, + .tab.active { + color: var(--dev-tools-text-color-active); + } + + .tab.active { + background-color: rgba(255, 255, 255, 0.12); + } + + .tab.unreadErrors::after { + content: '•'; + color: hsl(var(--dev-tools-red-hsl)); + font-size: 1.5rem; + position: absolute; + transform: translate(0, -50%); + } + + .ahreflike { + font-weight: 500; + color: var(--dev-tools-text-color-secondary); + text-decoration: underline; + cursor: pointer; + } + + .ahreflike:hover { + color: var(--dev-tools-text-color-emphasis); + } + + .button { + all: initial; + font-family: inherit; + font-size: var(--dev-tools-font-size-small); + line-height: 1; + white-space: nowrap; + background-color: rgba(0, 0, 0, 0.2); + color: inherit; + font-weight: 600; + padding: 0.25rem 0.375rem; + border-radius: 0.25rem; + } + + .button:focus, + .button:hover { + color: var(--dev-tools-text-color-emphasis); + } + + .minimize-button { + flex: none; + width: 1rem; + height: 1rem; + color: inherit; + background-color: transparent; + border: 0; + padding: 0; + margin: 0 0 0 auto; + opacity: 0.8; + } + + .minimize-button:hover { + opacity: 1; + } + + .minimize-button svg { + max-width: 100%; + } + + .message.information { + --dev-tools-notification-color: var(--dev-tools-blue-color); + } + + .message.warning { + --dev-tools-notification-color: var(--dev-tools-yellow-color); + } + + .message.error { + --dev-tools-notification-color: var(--dev-tools-red-color); + } + + .message { + display: flex; + padding: 0.1875rem 0.75rem 0.1875rem 2rem; + background-clip: padding-box; + } + + .message.log { + padding-left: 0.75rem; + } + + .message-content { + margin-right: 0.5rem; + -webkit-user-select: text; + -moz-user-select: text; + user-select: text; + } + + .message-heading { + position: relative; + display: flex; + align-items: center; + margin: 0.125rem 0; + } + + .message.log { + color: var(--dev-tools-text-color-secondary); + } + + .message:not(.log) .message-heading { + font-weight: 500; + } + + .message.has-details .message-heading { + color: var(--dev-tools-text-color-emphasis); + font-weight: 600; + } + + .message-heading::before { + position: absolute; + margin-left: -1.5rem; + display: inline-block; + text-align: center; + font-size: 0.875em; + font-weight: 600; + line-height: calc(1.25em - 2px); + width: 14px; + height: 14px; + box-sizing: border-box; + border: 1px solid transparent; + border-radius: 50%; + } + + .message.information .message-heading::before { + content: 'i'; + border-color: currentColor; + color: var(--dev-tools-notification-color); + } + + .message.warning .message-heading::before, + .message.error .message-heading::before { + content: '!'; + color: var(--dev-tools-background-color-active); + background-color: var(--dev-tools-notification-color); + } + + .features-tray { + padding: 0.75rem; + flex: auto; + overflow: auto; + animation: fade-in var(--dev-tools-transition-duration) ease-in; + user-select: text; + } + + .features-tray p { + margin-top: 0; + color: var(--dev-tools-text-color-secondary); + } + + .features-tray .feature { + display: flex; + align-items: center; + gap: 1rem; + padding-bottom: 0.5em; + } + + .message .message-details { + font-weight: 400; + color: var(--dev-tools-text-color-secondary); + margin: 0.25rem 0; + } + + .message .message-details[hidden] { + display: none; + } + + .message .message-details p { + display: inline; + margin: 0; + margin-right: 0.375em; + word-break: break-word; + } + + .message .persist { + color: var(--dev-tools-text-color-secondary); + white-space: nowrap; + margin: 0.375rem 0; + display: flex; + align-items: center; + position: relative; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + } + + .message .persist::before { + content: ''; + width: 1em; + height: 1em; + border-radius: 0.2em; + margin-right: 0.375em; + background-color: rgba(255, 255, 255, 0.3); + } + + .message .persist:hover::before { + background-color: rgba(255, 255, 255, 0.4); + } + + .message .persist.on::before { + background-color: rgba(255, 255, 255, 0.9); + } + + .message .persist.on::after { + content: ''; + order: -1; + position: absolute; + width: 0.75em; + height: 0.25em; + border: 2px solid var(--dev-tools-background-color-active); + border-width: 0 0 2px 2px; + transform: translate(0.05em, -0.05em) rotate(-45deg) scale(0.8, 0.9); + } + + .message .dismiss-message { + font-weight: 600; + align-self: stretch; + display: flex; + align-items: center; + padding: 0 0.25rem; + margin-left: 0.5rem; + color: var(--dev-tools-text-color-secondary); + } + + .message .dismiss-message:hover { + color: var(--dev-tools-text-color); + } + + .notification-tray { + display: flex; + flex-direction: column-reverse; + align-items: flex-end; + margin: 0.5rem; + flex: none; + } + + .window.hidden + .notification-tray { + margin-bottom: 3rem; + } + + .notification-tray .message { + pointer-events: auto; + background-color: var(--dev-tools-background-color-active); + color: var(--dev-tools-text-color); + max-width: 30rem; + box-sizing: border-box; + border-radius: var(--dev-tools-border-radius); + margin-top: 0.5rem; + transition: var(--dev-tools-transition-duration); + transform-origin: bottom right; + animation: slideIn var(--dev-tools-transition-duration); + box-shadow: var(--dev-tools-box-shadow); + padding-top: 0.25rem; + padding-bottom: 0.25rem; + } + + .notification-tray .message.animate-out { + animation: slideOut forwards var(--dev-tools-transition-duration); + } + + .notification-tray .message .message-details { + max-height: 10em; + overflow: hidden; + } + + .message-tray { + flex: auto; + overflow: auto; + max-height: 20rem; + user-select: text; + } + + .message-tray .message { + animation: fade-in var(--dev-tools-transition-duration) ease-in; + padding-left: 2.25rem; + } + + .message-tray .message.warning { + background-color: hsla(var(--dev-tools-yellow-hsl), 0.09); + } + + .message-tray .message.error { + background-color: hsla(var(--dev-tools-red-hsl), 0.09); + } + + .message-tray .message.error .message-heading { + color: hsl(var(--dev-tools-red-hsl)); + } + + .message-tray .message.warning .message-heading { + color: hsl(var(--dev-tools-yellow-hsl)); + } + + .message-tray .message + .message { + border-top: 1px solid rgba(255, 255, 255, 0.07); + } + + .message-tray .dismiss-message, + .message-tray .persist { + display: none; + } + + .info-tray { + padding: 0.75rem; + position: relative; + flex: auto; + overflow: auto; + animation: fade-in var(--dev-tools-transition-duration) ease-in; + user-select: text; + } + + .info-tray dl { + margin: 0; + display: grid; + grid-template-columns: max-content 1fr; + column-gap: 0.75rem; + position: relative; + } + + .info-tray dt { + grid-column: 1; + color: var(--dev-tools-text-color-emphasis); + } + + .info-tray dt:not(:first-child)::before { + content: ''; + width: 100%; + position: absolute; + height: 1px; + background-color: rgba(255, 255, 255, 0.1); + margin-top: -0.375rem; + } + + .info-tray dd { + grid-column: 2; + margin: 0; + } + + .info-tray :is(dt, dd):not(:last-child) { + margin-bottom: 0.75rem; + } + + .info-tray dd + dd { + margin-top: -0.5rem; + } + + .info-tray .live-reload-status::before { + content: '•'; + color: var(--status-color); + width: 0.75rem; + display: inline-block; + font-size: 1rem; + line-height: 0.5rem; + } + + .info-tray .copy { + position: fixed; + z-index: 1; + top: 0.5rem; + right: 0.5rem; + } + + .info-tray .switch { + vertical-align: -4px; + } + + @keyframes slideIn { + from { + transform: translateX(100%); + opacity: 0; + } + to { + transform: translateX(0%); + opacity: 1; + } + } + + @keyframes slideOut { + from { + transform: translateX(0%); + opacity: 1; + } + to { + transform: translateX(100%); + opacity: 0; + } + } + + @keyframes fade-in { + 0% { + opacity: 0; + } + } + + @keyframes bounce { + 0% { + transform: scale(0.8); + } + 50% { + transform: scale(1.5); + background-color: hsla(var(--dev-tools-red-hsl), 1); + } + 100% { + transform: scale(1); + } + } + + @supports (backdrop-filter: blur(1px)) { + .dev-tools, + .window, + .notification-tray .message { + backdrop-filter: blur(8px); + } + .dev-tools:hover, + .dev-tools.active, + .window, + .notification-tray .message { + background-color: var(--dev-tools-background-color-active-blurred); + } + } + `; + } + static get isActive() { + const active = window.sessionStorage.getItem(VaadinDevTools.ACTIVE_KEY_IN_SESSION_STORAGE); + return active === null || active !== 'false'; + } + static notificationDismissed(persistentId) { + const shown = window.localStorage.getItem(VaadinDevTools.DISMISSED_NOTIFICATIONS_IN_LOCAL_STORAGE); + return shown !== null && shown.includes(persistentId); + } + elementTelemetry() { + let data = {}; + try { + // localstorage data is collected by vaadin-usage-statistics.js + const localStorageStatsString = localStorage.getItem('vaadin.statistics.basket'); + if (!localStorageStatsString) { + // Do not send empty data + return; + } + data = JSON.parse(localStorageStatsString); + } + catch (e) { + // In case of parse errors don't send anything + return; + } + if (this.frontendConnection) { + this.frontendConnection.sendTelemetry(data); + } + } + openWebSocketConnection() { + this.frontendStatus = ConnectionStatus.UNAVAILABLE; + this.javaStatus = ConnectionStatus.UNAVAILABLE; + const onConnectionError = (msg) => this.log(MessageType.ERROR, msg); + const onReload = () => { + if (this.liveReloadDisabled) { + return; + } + this.showSplashMessage('Reloading…'); + const lastReload = window.sessionStorage.getItem(VaadinDevTools.TRIGGERED_COUNT_KEY_IN_SESSION_STORAGE); + const nextReload = lastReload ? parseInt(lastReload, 10) + 1 : 1; + window.sessionStorage.setItem(VaadinDevTools.TRIGGERED_COUNT_KEY_IN_SESSION_STORAGE, nextReload.toString()); + window.sessionStorage.setItem(VaadinDevTools.TRIGGERED_KEY_IN_SESSION_STORAGE, 'true'); + window.location.reload(); + }; + const frontendConnection = new Connection(this.getDedicatedWebSocketUrl()); + frontendConnection.onHandshake = () => { + this.log(MessageType.LOG, 'Vaadin development mode initialized'); + if (!VaadinDevTools.isActive) { + frontendConnection.setActive(false); + } + this.elementTelemetry(); + }; + frontendConnection.onConnectionError = onConnectionError; + frontendConnection.onReload = onReload; + frontendConnection.onStatusChange = (status) => { + this.frontendStatus = status; + }; + frontendConnection.onMessage = (message) => { + if ((message === null || message === void 0 ? void 0 : message.command) === 'serverInfo') { + this.serverInfo = message.data; + } + else if ((message === null || message === void 0 ? void 0 : message.command) === 'featureFlags') { + this.features = message.data.features; + } + else { + // eslint-disable-next-line no-console + console.error('Unknown message from front-end connection:', JSON.stringify(message)); + } + }; + this.frontendConnection = frontendConnection; + let javaConnection; + if (this.backend === VaadinDevTools.SPRING_BOOT_DEVTOOLS && this.springBootLiveReloadPort) { + javaConnection = new Connection(this.getSpringBootWebSocketUrl(window.location)); + javaConnection.onHandshake = () => { + if (!VaadinDevTools.isActive) { + javaConnection.setActive(false); + } + }; + javaConnection.onReload = onReload; + javaConnection.onConnectionError = onConnectionError; + } + else if (this.backend === VaadinDevTools.JREBEL || this.backend === VaadinDevTools.HOTSWAP_AGENT) { + javaConnection = frontendConnection; + } + else { + javaConnection = new Connection(undefined); + } + const prevOnStatusChange = javaConnection.onStatusChange; + javaConnection.onStatusChange = (status) => { + prevOnStatusChange(status); + this.javaStatus = status; + }; + const prevOnHandshake = javaConnection.onHandshake; + javaConnection.onHandshake = () => { + prevOnHandshake(); + if (this.backend) { + this.log(MessageType.INFORMATION, `Java live reload available: ${VaadinDevTools.BACKEND_DISPLAY_NAME[this.backend]}`); + } + }; + this.javaConnection = javaConnection; + if (!this.backend) { + this.showNotification(MessageType.WARNING, 'Java live reload unavailable', 'Live reload for Java changes is currently not set up. Find out how to make use of this functionality to boost your workflow.', 'https://vaadin.com/docs/latest/flow/configuration/live-reload', 'liveReloadUnavailable'); + } + } + getDedicatedWebSocketUrl() { + function getAbsoluteUrl(relative) { + // Use innerHTML to obtain an absolute URL + const div = document.createElement('div'); + div.innerHTML = ``; + return div.firstChild.href; + } + if (this.url === undefined) { + return undefined; + } + const connectionBaseUrl = getAbsoluteUrl(this.url); + if (!connectionBaseUrl.startsWith('http://') && !connectionBaseUrl.startsWith('https://')) { + // eslint-disable-next-line no-console + console.error('The protocol of the url should be http or https for live reload to work.'); + return undefined; + } + return `${connectionBaseUrl.replace(/^http/, 'ws')}?v-r=push&debug_window`; + } + getSpringBootWebSocketUrl(location) { + const { hostname } = location; + const wsProtocol = location.protocol === 'https:' ? 'wss' : 'ws'; + if (hostname.endsWith('gitpod.io')) { + // Gitpod uses `port-url` instead of `url:port` + const hostnameWithoutPort = hostname.replace(/.*?-/, ''); + return `${wsProtocol}://${this.springBootLiveReloadPort}-${hostnameWithoutPort}`; + } + else { + return `${wsProtocol}://${hostname}:${this.springBootLiveReloadPort}`; + } + } + connectedCallback() { + super.connectedCallback(); + this.catchErrors(); + // when focus or clicking anywhere, move the splash message to the message tray + this.disableEventListener = (_) => this.demoteSplashMessage(); + document.body.addEventListener('focus', this.disableEventListener); + document.body.addEventListener('click', this.disableEventListener); + this.openWebSocketConnection(); + const lastReload = window.sessionStorage.getItem(VaadinDevTools.TRIGGERED_KEY_IN_SESSION_STORAGE); + if (lastReload) { + const now = new Date(); + const reloaded = `${`0${now.getHours()}`.slice(-2)}:${`0${now.getMinutes()}`.slice(-2)}:${`0${now.getSeconds()}`.slice(-2)}`; + this.showSplashMessage(`Page reloaded at ${reloaded}`); + window.sessionStorage.removeItem(VaadinDevTools.TRIGGERED_KEY_IN_SESSION_STORAGE); + } + this.transitionDuration = parseInt(window.getComputedStyle(this).getPropertyValue('--dev-tools-transition-duration'), 10); + const windowAny = window; + windowAny.Vaadin = windowAny.Vaadin || {}; + windowAny.Vaadin.devTools = Object.assign(this, windowAny.Vaadin.devTools); + licenseInit(); + } + format(o) { + return o.toString(); + } + catchErrors() { + // Process stored messages + const queue = window.Vaadin.ConsoleErrors; + if (queue) { + queue.forEach((args) => { + this.log(MessageType.ERROR, args.map((o) => this.format(o)).join(' ')); + }); + } + // Install new handler that immediately processes messages + window.Vaadin.ConsoleErrors = { + push: (args) => { + this.log(MessageType.ERROR, args.map((o) => this.format(o)).join(' ')); + } + }; + } + disconnectedCallback() { + if (this.disableEventListener) { + document.body.removeEventListener('focus', this.disableEventListener); + document.body.removeEventListener('click', this.disableEventListener); + } + super.disconnectedCallback(); + } + toggleExpanded() { + this.notifications.slice().forEach((notification) => this.dismissNotification(notification.id)); + this.expanded = !this.expanded; + if (this.expanded) { + this.root.focus(); + } + } + showSplashMessage(msg) { + this.splashMessage = msg; + if (this.splashMessage) { + if (this.expanded) { + this.demoteSplashMessage(); + } + else { + // automatically move notification to message tray after a certain amount of time + setTimeout(() => { + this.demoteSplashMessage(); + }, VaadinDevTools.AUTO_DEMOTE_NOTIFICATION_DELAY); + } + } + } + demoteSplashMessage() { + if (this.splashMessage) { + this.log(MessageType.LOG, this.splashMessage); + } + this.showSplashMessage(undefined); + } + checkLicense(productInfo) { + if (this.frontendConnection) { + this.frontendConnection.sendLicenseCheck(productInfo); + } + else { + licenseCheckFailed({ message: 'Internal error: no connection', product: productInfo }); + } + } + log(type, message, details, link) { + const id = this.nextMessageId; + this.nextMessageId += 1; + this.messages.push({ + id, + type, + message, + details, + link, + dontShowAgain: false, + deleted: false + }); + while (this.messages.length > VaadinDevTools.MAX_LOG_ROWS) { + this.messages.shift(); + } + this.requestUpdate(); + this.updateComplete.then(() => { + // Scroll into view + const lastMessage = this.renderRoot.querySelector('.message-tray .message:last-child'); + if (this.expanded && lastMessage) { + setTimeout(() => lastMessage.scrollIntoView({ behavior: 'smooth' }), this.transitionDuration); + this.unreadErrors = false; + } + else if (type === MessageType.ERROR) { + this.unreadErrors = true; + } + }); + } + showNotification(type, message, details, link, persistentId) { + if (persistentId === undefined || !VaadinDevTools.notificationDismissed(persistentId)) { + // Do not open persistent message if another is already visible with the same persistentId + const matchingVisibleNotifications = this.notifications + .filter((notification) => notification.persistentId === persistentId) + .filter((notification) => !notification.deleted); + if (matchingVisibleNotifications.length > 0) { + return; + } + const id = this.nextMessageId; + this.nextMessageId += 1; + this.notifications.push({ + id, + type, + message, + details, + link, + persistentId, + dontShowAgain: false, + deleted: false + }); + // automatically move notification to message tray after a certain amount of time unless it contains a link + if (link === undefined) { + setTimeout(() => { + this.dismissNotification(id); + }, VaadinDevTools.AUTO_DEMOTE_NOTIFICATION_DELAY); + } + this.requestUpdate(); + } + else { + this.log(type, message, details, link); + } + } + dismissNotification(id) { + const index = this.findNotificationIndex(id); + if (index !== -1 && !this.notifications[index].deleted) { + const notification = this.notifications[index]; + // user is explicitly dismissing a notification---after that we won't bug them with it + if (notification.dontShowAgain && + notification.persistentId && + !VaadinDevTools.notificationDismissed(notification.persistentId)) { + let dismissed = window.localStorage.getItem(VaadinDevTools.DISMISSED_NOTIFICATIONS_IN_LOCAL_STORAGE); + dismissed = dismissed === null ? notification.persistentId : `${dismissed},${notification.persistentId}`; + window.localStorage.setItem(VaadinDevTools.DISMISSED_NOTIFICATIONS_IN_LOCAL_STORAGE, dismissed); + } + notification.deleted = true; + this.log(notification.type, notification.message, notification.details, notification.link); + // give some time for the animation + setTimeout(() => { + const idx = this.findNotificationIndex(id); + if (idx !== -1) { + this.notifications.splice(idx, 1); + this.requestUpdate(); + } + }, this.transitionDuration); + } + } + findNotificationIndex(id) { + let index = -1; + this.notifications.some((notification, idx) => { + if (notification.id === id) { + index = idx; + return true; + } + else { + return false; + } + }); + return index; + } + toggleDontShowAgain(id) { + const index = this.findNotificationIndex(id); + if (index !== -1 && !this.notifications[index].deleted) { + const notification = this.notifications[index]; + notification.dontShowAgain = !notification.dontShowAgain; + this.requestUpdate(); + } + } + setActive(yes) { + var _a, _b; + (_a = this.frontendConnection) === null || _a === void 0 ? void 0 : _a.setActive(yes); + (_b = this.javaConnection) === null || _b === void 0 ? void 0 : _b.setActive(yes); + window.sessionStorage.setItem(VaadinDevTools.ACTIVE_KEY_IN_SESSION_STORAGE, yes ? 'true' : 'false'); + } + getStatusColor(status) { + if (status === ConnectionStatus.ACTIVE) { + return css `hsl(${VaadinDevTools.GREEN_HSL})`; + } + else if (status === ConnectionStatus.INACTIVE) { + return css `hsl(${VaadinDevTools.GREY_HSL})`; + } + else if (status === ConnectionStatus.UNAVAILABLE) { + return css `hsl(${VaadinDevTools.YELLOW_HSL})`; + } + else if (status === ConnectionStatus.ERROR) { + return css `hsl(${VaadinDevTools.RED_HSL})`; + } + else { + return css `none`; + } + } + /* eslint-disable lit/no-template-arrow */ + renderMessage(messageObject) { + return html ` + + `; + } + /* eslint-disable lit/no-template-map */ + render() { + return html `
e.key === 'Escape' && this.toggleExpanded()} + > +
+ ${this.tabs.map((tab) => html ` `)} + +
+ ${this.tabs.map((tab) => (this.activeTab === tab.id ? tab.render.call(this) : nothing))} +
+ +
${this.notifications.map((msg) => this.renderMessage(msg))}
+
this.toggleExpanded()} + > + ${this.unreadErrors + ? html ` + + + + + + ` + : html ``} + + + ${this.splashMessage ? html `${this.splashMessage}
` : nothing} + `; + } + renderLog() { + return html `
${this.messages.map((msg) => this.renderMessage(msg))}
`; + } + activateLog() { + this.unreadErrors = false; + this.updateComplete.then(() => { + const lastMessage = this.renderRoot.querySelector('.message-tray .message:last-child'); + if (lastMessage) { + lastMessage.scrollIntoView(); + } + }); + } + renderInfo() { + return html `
+ +
+
${this.serverInfo.productName}
+
${this.serverInfo.vaadinVersion}
+
Flow
+
${this.serverInfo.flowVersion}
+
Java
+
${this.serverInfo.javaVersion}
+
OS
+
${this.serverInfo.osVersion}
+
Browser
+
${navigator.userAgent}
+
+ Live reload + +
+
+ Java ${this.javaStatus} ${this.backend ? `(${VaadinDevTools.BACKEND_DISPLAY_NAME[this.backend]})` : ''} +
+
+ Front end ${this.frontendStatus} +
+
+
`; + } + renderFeatures() { + return html `
+ ${this.features.map((feature) => html `
+ + Learn more +
`)} +
`; + } + copyInfoToClipboard() { + const items = this.renderRoot.querySelectorAll('.info-tray dt, .info-tray dd'); + const text = Array.from(items) + .map((message) => (message.localName === 'dd' ? ': ' : '\n') + message.textContent.trim()) + .join('') + .replace(/^\n/, ''); + copy(text); + this.showNotification(MessageType.INFORMATION, 'Environment information copied to clipboard', undefined, undefined, 'versionInfoCopied'); + } + toggleFeatureFlag(e, feature) { + const enabled = e.target.checked; + if (this.frontendConnection) { + this.frontendConnection.setFeature(feature.id, enabled); + this.showNotification(MessageType.INFORMATION, `“${feature.title}” ${enabled ? 'enabled' : 'disabled'}`, feature.requiresServerRestart ? 'This feature requires a server restart' : undefined, undefined, `feature${feature.id}${enabled ? 'Enabled' : 'Disabled'}`); + } + else { + this.log(MessageType.ERROR, `Unable to toggle feature ${feature.title}: No server connection available`); + } + } +} +VaadinDevTools.BLUE_HSL = css `206, 100%, 70%`; +VaadinDevTools.GREEN_HSL = css `145, 80%, 42%`; +VaadinDevTools.GREY_HSL = css `0, 0%, 50%`; +VaadinDevTools.YELLOW_HSL = css `38, 98%, 64%`; +VaadinDevTools.RED_HSL = css `355, 100%, 68%`; +VaadinDevTools.MAX_LOG_ROWS = 1000; +VaadinDevTools.DISMISSED_NOTIFICATIONS_IN_LOCAL_STORAGE = 'vaadin.live-reload.dismissedNotifications'; +VaadinDevTools.ACTIVE_KEY_IN_SESSION_STORAGE = 'vaadin.live-reload.active'; +VaadinDevTools.TRIGGERED_KEY_IN_SESSION_STORAGE = 'vaadin.live-reload.triggered'; +VaadinDevTools.TRIGGERED_COUNT_KEY_IN_SESSION_STORAGE = 'vaadin.live-reload.triggeredCount'; +VaadinDevTools.AUTO_DEMOTE_NOTIFICATION_DELAY = 5000; +VaadinDevTools.HOTSWAP_AGENT = 'HOTSWAP_AGENT'; +VaadinDevTools.JREBEL = 'JREBEL'; +VaadinDevTools.SPRING_BOOT_DEVTOOLS = 'SPRING_BOOT_DEVTOOLS'; +VaadinDevTools.BACKEND_DISPLAY_NAME = { + HOTSWAP_AGENT: 'HotswapAgent', + JREBEL: 'JRebel', + SPRING_BOOT_DEVTOOLS: 'Spring Boot Devtools' +}; +__decorate([ + property({ type: String }) +], VaadinDevTools.prototype, "url", void 0); +__decorate([ + property({ type: Boolean, attribute: true }) +], VaadinDevTools.prototype, "liveReloadDisabled", void 0); +__decorate([ + property({ type: String }) +], VaadinDevTools.prototype, "backend", void 0); +__decorate([ + property({ type: Number }) +], VaadinDevTools.prototype, "springBootLiveReloadPort", void 0); +__decorate([ + property({ type: Boolean, attribute: false }) +], VaadinDevTools.prototype, "expanded", void 0); +__decorate([ + property({ type: Array, attribute: false }) +], VaadinDevTools.prototype, "messages", void 0); +__decorate([ + property({ type: String, attribute: false }) +], VaadinDevTools.prototype, "splashMessage", void 0); +__decorate([ + property({ type: Array, attribute: false }) +], VaadinDevTools.prototype, "notifications", void 0); +__decorate([ + property({ type: String, attribute: false }) +], VaadinDevTools.prototype, "frontendStatus", void 0); +__decorate([ + property({ type: String, attribute: false }) +], VaadinDevTools.prototype, "javaStatus", void 0); +__decorate([ + state() +], VaadinDevTools.prototype, "tabs", void 0); +__decorate([ + state() +], VaadinDevTools.prototype, "activeTab", void 0); +__decorate([ + state() +], VaadinDevTools.prototype, "serverInfo", void 0); +__decorate([ + state() +], VaadinDevTools.prototype, "features", void 0); +__decorate([ + state() +], VaadinDevTools.prototype, "unreadErrors", void 0); +__decorate([ + query('.window') +], VaadinDevTools.prototype, "root", void 0); +if (customElements.get('vaadin-dev-tools') === undefined) { + customElements.define('vaadin-dev-tools', VaadinDevTools); +} +//# sourceMappingURL=vaadin-dev-tools.js.map \ No newline at end of file diff --git a/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/vaadin-dev-tools.js.map b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/vaadin-dev-tools.js.map new file mode 100644 index 00000000..55ba4dd0 --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/jar-resources/vaadin-dev-tools.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vaadin-dev-tools.js","sourceRoot":"","sources":["../../../../src/main/frontend/vaadin-dev-tools.ts"],"names":[],"mappings":"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","sourcesContent":["import { css, html, LitElement, nothing } from 'lit';\nimport { property, query, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport { copy } from './copy-to-clipboard.js';\nimport { licenseCheckFailed, licenseCheckNoKey, licenseCheckOk, Product, licenseInit } from './License';\n\ninterface ServerInfo {\n vaadinVersion: string;\n flowVersion: string;\n javaVersion: string;\n osVersion: string;\n productName: string;\n}\n\ninterface Feature {\n id: string;\n title: string;\n moreInfoLink: string;\n requiresServerRestart: boolean;\n enabled: boolean;\n}\n\ninterface Tab {\n id: 'log' | 'info' | 'features';\n title: string;\n render: () => unknown;\n activate?: () => void;\n}\n\nenum ConnectionStatus {\n ACTIVE = 'active',\n INACTIVE = 'inactive',\n UNAVAILABLE = 'unavailable',\n ERROR = 'error'\n}\n\nexport class Connection extends Object {\n static HEARTBEAT_INTERVAL = 180000;\n\n status: ConnectionStatus = ConnectionStatus.UNAVAILABLE;\n webSocket?: WebSocket;\n\n constructor(url?: string) {\n super();\n\n if (url) {\n this.webSocket = new WebSocket(url);\n this.webSocket.onmessage = (msg) => this.handleMessage(msg);\n this.webSocket.onerror = (err) => this.handleError(err);\n this.webSocket.onclose = (_) => {\n if (this.status !== ConnectionStatus.ERROR) {\n this.setStatus(ConnectionStatus.UNAVAILABLE);\n }\n this.webSocket = undefined;\n };\n }\n\n setInterval(() => {\n if (this.webSocket && self.status !== ConnectionStatus.ERROR && this.status !== ConnectionStatus.UNAVAILABLE) {\n this.webSocket.send('');\n }\n }, Connection.HEARTBEAT_INTERVAL);\n }\n\n onHandshake() {\n // Intentionally empty\n }\n\n onReload() {\n // Intentionally empty\n }\n\n onConnectionError(_: string) {\n // Intentionally empty\n }\n\n onStatusChange(_: ConnectionStatus) {\n // Intentionally empty\n }\n\n onMessage(message: any) {\n // eslint-disable-next-line no-console\n console.error('Unknown message received from the live reload server:', message);\n }\n\n handleMessage(msg: any) {\n let json;\n try {\n json = JSON.parse(msg.data);\n } catch (e: any) {\n this.handleError(`[${e.name}: ${e.message}`);\n return;\n }\n if (json.command === 'hello') {\n this.setStatus(ConnectionStatus.ACTIVE);\n this.onHandshake();\n } else if (json.command === 'reload') {\n if (this.status === ConnectionStatus.ACTIVE) {\n this.onReload();\n }\n } else if (json.command === 'license-check-ok') {\n licenseCheckOk(json.data);\n } else if (json.command === 'license-check-failed') {\n licenseCheckFailed(json.data);\n } else if (json.command === 'license-check-nokey') {\n licenseCheckNoKey(json.data);\n } else {\n this.onMessage(json);\n }\n }\n\n handleError(msg: any) {\n // eslint-disable-next-line no-console\n console.error(msg);\n this.setStatus(ConnectionStatus.ERROR);\n if (msg instanceof Event && this.webSocket) {\n this.onConnectionError(`Error in WebSocket connection to ${this.webSocket.url}`);\n } else {\n this.onConnectionError(msg);\n }\n }\n\n setActive(yes: boolean) {\n if (!yes && this.status === ConnectionStatus.ACTIVE) {\n this.setStatus(ConnectionStatus.INACTIVE);\n } else if (yes && this.status === ConnectionStatus.INACTIVE) {\n this.setStatus(ConnectionStatus.ACTIVE);\n }\n }\n\n setStatus(status: ConnectionStatus) {\n if (this.status !== status) {\n this.status = status;\n this.onStatusChange(status);\n }\n }\n\n private send(command: string, data: any) {\n const message = JSON.stringify({ command, data });\n if (!this.webSocket) {\n // eslint-disable-next-line no-console\n console.error(`Unable to send message ${command}. No websocket is available`);\n } else if (this.webSocket.readyState !== WebSocket.OPEN) {\n this.webSocket.addEventListener('open', () => this.webSocket!.send(message));\n } else {\n this.webSocket.send(message);\n }\n }\n\n setFeature(featureId: string, enabled: boolean) {\n this.send('setFeature', { featureId, enabled });\n }\n sendTelemetry(browserData: any) {\n this.send('reportTelemetry', { browserData });\n }\n sendLicenseCheck(product: Product) {\n this.send('checkLicense', product);\n }\n}\n\nenum MessageType {\n LOG = 'log',\n INFORMATION = 'information',\n WARNING = 'warning',\n ERROR = 'error'\n}\n\ninterface Message {\n id: number;\n type: MessageType;\n message: string;\n details?: string;\n link?: string;\n persistentId?: string;\n dontShowAgain: boolean;\n deleted: boolean;\n}\n\nexport class VaadinDevTools extends LitElement {\n static BLUE_HSL = css`206, 100%, 70%`;\n static GREEN_HSL = css`145, 80%, 42%`;\n static GREY_HSL = css`0, 0%, 50%`;\n static YELLOW_HSL = css`38, 98%, 64%`;\n static RED_HSL = css`355, 100%, 68%`;\n static MAX_LOG_ROWS = 1000;\n\n static get styles() {\n return css`\n :host {\n --dev-tools-font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell,\n 'Helvetica Neue', sans-serif;\n --dev-tools-font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New',\n monospace;\n\n --dev-tools-font-size: 0.8125rem;\n --dev-tools-font-size-small: 0.75rem;\n\n --dev-tools-text-color: rgba(255, 255, 255, 0.8);\n --dev-tools-text-color-secondary: rgba(255, 255, 255, 0.65);\n --dev-tools-text-color-emphasis: rgba(255, 255, 255, 0.95);\n --dev-tools-text-color-active: rgba(255, 255, 255, 1);\n\n --dev-tools-background-color-inactive: rgba(45, 45, 45, 0.25);\n --dev-tools-background-color-active: rgba(45, 45, 45, 0.98);\n --dev-tools-background-color-active-blurred: rgba(45, 45, 45, 0.85);\n\n --dev-tools-border-radius: 0.5rem;\n --dev-tools-box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.05), 0 4px 12px -2px rgba(0, 0, 0, 0.4);\n\n --dev-tools-blue-hsl: ${this.BLUE_HSL};\n --dev-tools-blue-color: hsl(var(--dev-tools-blue-hsl));\n --dev-tools-green-hsl: ${this.GREEN_HSL};\n --dev-tools-green-color: hsl(var(--dev-tools-green-hsl));\n --dev-tools-grey-hsl: ${this.GREY_HSL};\n --dev-tools-grey-color: hsl(var(--dev-tools-grey-hsl));\n --dev-tools-yellow-hsl: ${this.YELLOW_HSL};\n --dev-tools-yellow-color: hsl(var(--dev-tools-yellow-hsl));\n --dev-tools-red-hsl: ${this.RED_HSL};\n --dev-tools-red-color: hsl(var(--dev-tools-red-hsl));\n\n /* Needs to be in ms, used in JavaScript as well */\n --dev-tools-transition-duration: 180ms;\n\n all: initial;\n\n direction: ltr;\n cursor: default;\n font: normal 400 var(--dev-tools-font-size) / 1.125rem var(--dev-tools-font-family);\n color: var(--dev-tools-text-color);\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n\n position: fixed;\n z-index: 20000;\n pointer-events: none;\n bottom: 0;\n right: 0;\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column-reverse;\n align-items: flex-end;\n }\n\n .dev-tools {\n pointer-events: auto;\n display: flex;\n align-items: center;\n position: fixed;\n z-index: inherit;\n right: 0.5rem;\n bottom: 0.5rem;\n min-width: 1.75rem;\n height: 1.75rem;\n max-width: 1.75rem;\n border-radius: 0.5rem;\n padding: 0.375rem;\n box-sizing: border-box;\n background-color: var(--dev-tools-background-color-inactive);\n box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.05);\n color: var(--dev-tools-text-color);\n transition: var(--dev-tools-transition-duration);\n white-space: nowrap;\n line-height: 1rem;\n }\n\n .dev-tools:hover,\n .dev-tools.active {\n background-color: var(--dev-tools-background-color-active);\n box-shadow: var(--dev-tools-box-shadow);\n }\n\n .dev-tools.active {\n max-width: calc(100% - 1rem);\n }\n\n .dev-tools .dev-tools-icon {\n flex: none;\n pointer-events: none;\n display: inline-block;\n width: 1rem;\n height: 1rem;\n fill: #fff;\n transition: var(--dev-tools-transition-duration);\n margin: 0;\n }\n\n .dev-tools.active .dev-tools-icon {\n opacity: 0;\n position: absolute;\n transform: scale(0.5);\n }\n\n .dev-tools .status-blip {\n flex: none;\n display: block;\n width: 6px;\n height: 6px;\n border-radius: 50%;\n z-index: 20001;\n background: var(--dev-tools-grey-color);\n position: absolute;\n top: -1px;\n right: -1px;\n }\n\n .dev-tools .status-description {\n overflow: hidden;\n text-overflow: ellipsis;\n padding: 0 0.25rem;\n }\n\n .dev-tools.error {\n background-color: hsla(var(--dev-tools-red-hsl), 0.15);\n animation: bounce 0.5s;\n animation-iteration-count: 2;\n }\n\n .switch {\n display: inline-flex;\n align-items: center;\n }\n\n .switch input {\n opacity: 0;\n width: 0;\n height: 0;\n position: absolute;\n }\n\n .switch .slider {\n display: block;\n flex: none;\n width: 28px;\n height: 18px;\n border-radius: 9px;\n background-color: rgba(255, 255, 255, 0.3);\n transition: var(--dev-tools-transition-duration);\n margin-right: 0.5rem;\n }\n\n .switch:focus-within .slider,\n .switch .slider:hover {\n background-color: rgba(255, 255, 255, 0.35);\n transition: none;\n }\n\n .switch input:focus-visible ~ .slider {\n box-shadow: 0 0 0 2px var(--dev-tools-background-color-active), 0 0 0 4px var(--dev-tools-blue-color);\n }\n\n .switch .slider::before {\n content: '';\n display: block;\n margin: 2px;\n width: 14px;\n height: 14px;\n background-color: #fff;\n transition: var(--dev-tools-transition-duration);\n border-radius: 50%;\n }\n\n .switch input:checked + .slider {\n background-color: var(--dev-tools-green-color);\n }\n\n .switch input:checked + .slider::before {\n transform: translateX(10px);\n }\n\n .switch input:disabled + .slider::before {\n background-color: var(--dev-tools-grey-color);\n }\n\n .window.hidden {\n opacity: 0;\n transform: scale(0);\n position: absolute;\n }\n\n .window.visible {\n transform: none;\n opacity: 1;\n pointer-events: auto;\n }\n\n .window.visible ~ .dev-tools {\n opacity: 0;\n pointer-events: none;\n }\n\n .window.visible ~ .dev-tools .dev-tools-icon,\n .window.visible ~ .dev-tools .status-blip {\n transition: none;\n opacity: 0;\n }\n\n .window {\n border-radius: var(--dev-tools-border-radius);\n overflow: hidden;\n margin: 0.5rem;\n width: 30rem;\n max-width: calc(100% - 1rem);\n max-height: calc(100vh - 1rem);\n flex-shrink: 1;\n background-color: var(--dev-tools-background-color-active);\n color: var(--dev-tools-text-color);\n transition: var(--dev-tools-transition-duration);\n transform-origin: bottom right;\n display: flex;\n flex-direction: column;\n box-shadow: var(--dev-tools-box-shadow);\n outline: none;\n }\n\n .window-toolbar {\n display: flex;\n flex: none;\n align-items: center;\n padding: 0.375rem;\n white-space: nowrap;\n order: 1;\n background-color: rgba(0, 0, 0, 0.2);\n gap: 0.5rem;\n }\n\n .tab {\n color: var(--dev-tools-text-color-secondary);\n font: inherit;\n font-size: var(--dev-tools-font-size-small);\n font-weight: 500;\n line-height: 1;\n padding: 0.25rem 0.375rem;\n background: none;\n border: none;\n margin: 0;\n border-radius: 0.25rem;\n transition: var(--dev-tools-transition-duration);\n }\n\n .tab:hover,\n .tab.active {\n color: var(--dev-tools-text-color-active);\n }\n\n .tab.active {\n background-color: rgba(255, 255, 255, 0.12);\n }\n\n .tab.unreadErrors::after {\n content: '•';\n color: hsl(var(--dev-tools-red-hsl));\n font-size: 1.5rem;\n position: absolute;\n transform: translate(0, -50%);\n }\n\n .ahreflike {\n font-weight: 500;\n color: var(--dev-tools-text-color-secondary);\n text-decoration: underline;\n cursor: pointer;\n }\n\n .ahreflike:hover {\n color: var(--dev-tools-text-color-emphasis);\n }\n\n .button {\n all: initial;\n font-family: inherit;\n font-size: var(--dev-tools-font-size-small);\n line-height: 1;\n white-space: nowrap;\n background-color: rgba(0, 0, 0, 0.2);\n color: inherit;\n font-weight: 600;\n padding: 0.25rem 0.375rem;\n border-radius: 0.25rem;\n }\n\n .button:focus,\n .button:hover {\n color: var(--dev-tools-text-color-emphasis);\n }\n\n .minimize-button {\n flex: none;\n width: 1rem;\n height: 1rem;\n color: inherit;\n background-color: transparent;\n border: 0;\n padding: 0;\n margin: 0 0 0 auto;\n opacity: 0.8;\n }\n\n .minimize-button:hover {\n opacity: 1;\n }\n\n .minimize-button svg {\n max-width: 100%;\n }\n\n .message.information {\n --dev-tools-notification-color: var(--dev-tools-blue-color);\n }\n\n .message.warning {\n --dev-tools-notification-color: var(--dev-tools-yellow-color);\n }\n\n .message.error {\n --dev-tools-notification-color: var(--dev-tools-red-color);\n }\n\n .message {\n display: flex;\n padding: 0.1875rem 0.75rem 0.1875rem 2rem;\n background-clip: padding-box;\n }\n\n .message.log {\n padding-left: 0.75rem;\n }\n\n .message-content {\n margin-right: 0.5rem;\n -webkit-user-select: text;\n -moz-user-select: text;\n user-select: text;\n }\n\n .message-heading {\n position: relative;\n display: flex;\n align-items: center;\n margin: 0.125rem 0;\n }\n\n .message.log {\n color: var(--dev-tools-text-color-secondary);\n }\n\n .message:not(.log) .message-heading {\n font-weight: 500;\n }\n\n .message.has-details .message-heading {\n color: var(--dev-tools-text-color-emphasis);\n font-weight: 600;\n }\n\n .message-heading::before {\n position: absolute;\n margin-left: -1.5rem;\n display: inline-block;\n text-align: center;\n font-size: 0.875em;\n font-weight: 600;\n line-height: calc(1.25em - 2px);\n width: 14px;\n height: 14px;\n box-sizing: border-box;\n border: 1px solid transparent;\n border-radius: 50%;\n }\n\n .message.information .message-heading::before {\n content: 'i';\n border-color: currentColor;\n color: var(--dev-tools-notification-color);\n }\n\n .message.warning .message-heading::before,\n .message.error .message-heading::before {\n content: '!';\n color: var(--dev-tools-background-color-active);\n background-color: var(--dev-tools-notification-color);\n }\n\n .features-tray {\n padding: 0.75rem;\n flex: auto;\n overflow: auto;\n animation: fade-in var(--dev-tools-transition-duration) ease-in;\n user-select: text;\n }\n\n .features-tray p {\n margin-top: 0;\n color: var(--dev-tools-text-color-secondary);\n }\n\n .features-tray .feature {\n display: flex;\n align-items: center;\n gap: 1rem;\n padding-bottom: 0.5em;\n }\n\n .message .message-details {\n font-weight: 400;\n color: var(--dev-tools-text-color-secondary);\n margin: 0.25rem 0;\n }\n\n .message .message-details[hidden] {\n display: none;\n }\n\n .message .message-details p {\n display: inline;\n margin: 0;\n margin-right: 0.375em;\n word-break: break-word;\n }\n\n .message .persist {\n color: var(--dev-tools-text-color-secondary);\n white-space: nowrap;\n margin: 0.375rem 0;\n display: flex;\n align-items: center;\n position: relative;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n }\n\n .message .persist::before {\n content: '';\n width: 1em;\n height: 1em;\n border-radius: 0.2em;\n margin-right: 0.375em;\n background-color: rgba(255, 255, 255, 0.3);\n }\n\n .message .persist:hover::before {\n background-color: rgba(255, 255, 255, 0.4);\n }\n\n .message .persist.on::before {\n background-color: rgba(255, 255, 255, 0.9);\n }\n\n .message .persist.on::after {\n content: '';\n order: -1;\n position: absolute;\n width: 0.75em;\n height: 0.25em;\n border: 2px solid var(--dev-tools-background-color-active);\n border-width: 0 0 2px 2px;\n transform: translate(0.05em, -0.05em) rotate(-45deg) scale(0.8, 0.9);\n }\n\n .message .dismiss-message {\n font-weight: 600;\n align-self: stretch;\n display: flex;\n align-items: center;\n padding: 0 0.25rem;\n margin-left: 0.5rem;\n color: var(--dev-tools-text-color-secondary);\n }\n\n .message .dismiss-message:hover {\n color: var(--dev-tools-text-color);\n }\n\n .notification-tray {\n display: flex;\n flex-direction: column-reverse;\n align-items: flex-end;\n margin: 0.5rem;\n flex: none;\n }\n\n .window.hidden + .notification-tray {\n margin-bottom: 3rem;\n }\n\n .notification-tray .message {\n pointer-events: auto;\n background-color: var(--dev-tools-background-color-active);\n color: var(--dev-tools-text-color);\n max-width: 30rem;\n box-sizing: border-box;\n border-radius: var(--dev-tools-border-radius);\n margin-top: 0.5rem;\n transition: var(--dev-tools-transition-duration);\n transform-origin: bottom right;\n animation: slideIn var(--dev-tools-transition-duration);\n box-shadow: var(--dev-tools-box-shadow);\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n }\n\n .notification-tray .message.animate-out {\n animation: slideOut forwards var(--dev-tools-transition-duration);\n }\n\n .notification-tray .message .message-details {\n max-height: 10em;\n overflow: hidden;\n }\n\n .message-tray {\n flex: auto;\n overflow: auto;\n max-height: 20rem;\n user-select: text;\n }\n\n .message-tray .message {\n animation: fade-in var(--dev-tools-transition-duration) ease-in;\n padding-left: 2.25rem;\n }\n\n .message-tray .message.warning {\n background-color: hsla(var(--dev-tools-yellow-hsl), 0.09);\n }\n\n .message-tray .message.error {\n background-color: hsla(var(--dev-tools-red-hsl), 0.09);\n }\n\n .message-tray .message.error .message-heading {\n color: hsl(var(--dev-tools-red-hsl));\n }\n\n .message-tray .message.warning .message-heading {\n color: hsl(var(--dev-tools-yellow-hsl));\n }\n\n .message-tray .message + .message {\n border-top: 1px solid rgba(255, 255, 255, 0.07);\n }\n\n .message-tray .dismiss-message,\n .message-tray .persist {\n display: none;\n }\n\n .info-tray {\n padding: 0.75rem;\n position: relative;\n flex: auto;\n overflow: auto;\n animation: fade-in var(--dev-tools-transition-duration) ease-in;\n user-select: text;\n }\n\n .info-tray dl {\n margin: 0;\n display: grid;\n grid-template-columns: max-content 1fr;\n column-gap: 0.75rem;\n position: relative;\n }\n\n .info-tray dt {\n grid-column: 1;\n color: var(--dev-tools-text-color-emphasis);\n }\n\n .info-tray dt:not(:first-child)::before {\n content: '';\n width: 100%;\n position: absolute;\n height: 1px;\n background-color: rgba(255, 255, 255, 0.1);\n margin-top: -0.375rem;\n }\n\n .info-tray dd {\n grid-column: 2;\n margin: 0;\n }\n\n .info-tray :is(dt, dd):not(:last-child) {\n margin-bottom: 0.75rem;\n }\n\n .info-tray dd + dd {\n margin-top: -0.5rem;\n }\n\n .info-tray .live-reload-status::before {\n content: '•';\n color: var(--status-color);\n width: 0.75rem;\n display: inline-block;\n font-size: 1rem;\n line-height: 0.5rem;\n }\n\n .info-tray .copy {\n position: fixed;\n z-index: 1;\n top: 0.5rem;\n right: 0.5rem;\n }\n\n .info-tray .switch {\n vertical-align: -4px;\n }\n\n @keyframes slideIn {\n from {\n transform: translateX(100%);\n opacity: 0;\n }\n to {\n transform: translateX(0%);\n opacity: 1;\n }\n }\n\n @keyframes slideOut {\n from {\n transform: translateX(0%);\n opacity: 1;\n }\n to {\n transform: translateX(100%);\n opacity: 0;\n }\n }\n\n @keyframes fade-in {\n 0% {\n opacity: 0;\n }\n }\n\n @keyframes bounce {\n 0% {\n transform: scale(0.8);\n }\n 50% {\n transform: scale(1.5);\n background-color: hsla(var(--dev-tools-red-hsl), 1);\n }\n 100% {\n transform: scale(1);\n }\n }\n\n @supports (backdrop-filter: blur(1px)) {\n .dev-tools,\n .window,\n .notification-tray .message {\n backdrop-filter: blur(8px);\n }\n .dev-tools:hover,\n .dev-tools.active,\n .window,\n .notification-tray .message {\n background-color: var(--dev-tools-background-color-active-blurred);\n }\n }\n `;\n }\n\n static DISMISSED_NOTIFICATIONS_IN_LOCAL_STORAGE = 'vaadin.live-reload.dismissedNotifications';\n static ACTIVE_KEY_IN_SESSION_STORAGE = 'vaadin.live-reload.active';\n static TRIGGERED_KEY_IN_SESSION_STORAGE = 'vaadin.live-reload.triggered';\n static TRIGGERED_COUNT_KEY_IN_SESSION_STORAGE = 'vaadin.live-reload.triggeredCount';\n\n static AUTO_DEMOTE_NOTIFICATION_DELAY = 5000;\n\n static HOTSWAP_AGENT = 'HOTSWAP_AGENT';\n static JREBEL = 'JREBEL';\n static SPRING_BOOT_DEVTOOLS = 'SPRING_BOOT_DEVTOOLS';\n static BACKEND_DISPLAY_NAME: Record = {\n HOTSWAP_AGENT: 'HotswapAgent',\n JREBEL: 'JRebel',\n SPRING_BOOT_DEVTOOLS: 'Spring Boot Devtools'\n };\n\n static get isActive() {\n const active = window.sessionStorage.getItem(VaadinDevTools.ACTIVE_KEY_IN_SESSION_STORAGE);\n return active === null || active !== 'false';\n }\n\n static notificationDismissed(persistentId: string) {\n const shown = window.localStorage.getItem(VaadinDevTools.DISMISSED_NOTIFICATIONS_IN_LOCAL_STORAGE);\n return shown !== null && shown.includes(persistentId);\n }\n\n @property({ type: String })\n url?: string;\n\n @property({ type: Boolean, attribute: true })\n liveReloadDisabled?: boolean;\n\n @property({ type: String })\n backend?: string;\n\n @property({ type: Number })\n springBootLiveReloadPort?: number;\n\n @property({ type: Boolean, attribute: false })\n expanded: boolean = false;\n\n @property({ type: Array, attribute: false })\n messages: Message[] = [];\n\n @property({ type: String, attribute: false })\n splashMessage?: string;\n\n @property({ type: Array, attribute: false })\n notifications: Message[] = [];\n\n @property({ type: String, attribute: false })\n frontendStatus: ConnectionStatus = ConnectionStatus.UNAVAILABLE;\n\n @property({ type: String, attribute: false })\n javaStatus: ConnectionStatus = ConnectionStatus.UNAVAILABLE;\n\n @state()\n private tabs: readonly Tab[] = [\n { id: 'log', title: 'Log', render: this.renderLog, activate: this.activateLog },\n { id: 'info', title: 'Info', render: this.renderInfo },\n { id: 'features', title: 'Feature Flags', render: this.renderFeatures }\n ];\n\n @state()\n private activeTab: string = 'log';\n\n @state()\n private serverInfo: ServerInfo = {\n flowVersion: '',\n vaadinVersion: '',\n javaVersion: '',\n osVersion: '',\n productName: ''\n };\n\n @state()\n private features: Feature[] = [];\n\n @state()\n private unreadErrors = false;\n\n @query('.window')\n private root!: HTMLElement;\n\n private javaConnection?: Connection;\n private frontendConnection?: Connection;\n\n private nextMessageId: number = 1;\n\n private disableEventListener?: EventListener;\n\n private transitionDuration: number = 0;\n\n elementTelemetry() {\n let data = {};\n try {\n // localstorage data is collected by vaadin-usage-statistics.js\n const localStorageStatsString = localStorage.getItem('vaadin.statistics.basket');\n if (!localStorageStatsString) {\n // Do not send empty data\n return;\n }\n data = JSON.parse(localStorageStatsString);\n } catch (e) {\n // In case of parse errors don't send anything\n return;\n }\n\n if (this.frontendConnection) {\n this.frontendConnection.sendTelemetry(data);\n }\n }\n\n openWebSocketConnection() {\n this.frontendStatus = ConnectionStatus.UNAVAILABLE;\n this.javaStatus = ConnectionStatus.UNAVAILABLE;\n\n const onConnectionError = (msg: string) => this.log(MessageType.ERROR, msg);\n const onReload = () => {\n if (this.liveReloadDisabled) {\n return;\n }\n this.showSplashMessage('Reloading…');\n const lastReload = window.sessionStorage.getItem(VaadinDevTools.TRIGGERED_COUNT_KEY_IN_SESSION_STORAGE);\n const nextReload = lastReload ? parseInt(lastReload, 10) + 1 : 1;\n window.sessionStorage.setItem(VaadinDevTools.TRIGGERED_COUNT_KEY_IN_SESSION_STORAGE, nextReload.toString());\n window.sessionStorage.setItem(VaadinDevTools.TRIGGERED_KEY_IN_SESSION_STORAGE, 'true');\n window.location.reload();\n };\n\n const frontendConnection = new Connection(this.getDedicatedWebSocketUrl());\n frontendConnection.onHandshake = () => {\n this.log(MessageType.LOG, 'Vaadin development mode initialized');\n if (!VaadinDevTools.isActive) {\n frontendConnection.setActive(false);\n }\n this.elementTelemetry();\n };\n frontendConnection.onConnectionError = onConnectionError;\n frontendConnection.onReload = onReload;\n frontendConnection.onStatusChange = (status: ConnectionStatus) => {\n this.frontendStatus = status;\n };\n frontendConnection.onMessage = (message: any) => {\n if (message?.command === 'serverInfo') {\n this.serverInfo = message.data as ServerInfo;\n } else if (message?.command === 'featureFlags') {\n this.features = message.data.features as Feature[];\n } else {\n // eslint-disable-next-line no-console\n console.error('Unknown message from front-end connection:', JSON.stringify(message));\n }\n };\n this.frontendConnection = frontendConnection;\n\n let javaConnection: Connection;\n if (this.backend === VaadinDevTools.SPRING_BOOT_DEVTOOLS && this.springBootLiveReloadPort) {\n javaConnection = new Connection(this.getSpringBootWebSocketUrl(window.location));\n javaConnection.onHandshake = () => {\n if (!VaadinDevTools.isActive) {\n javaConnection.setActive(false);\n }\n };\n javaConnection.onReload = onReload;\n javaConnection.onConnectionError = onConnectionError;\n } else if (this.backend === VaadinDevTools.JREBEL || this.backend === VaadinDevTools.HOTSWAP_AGENT) {\n javaConnection = frontendConnection;\n } else {\n javaConnection = new Connection(undefined);\n }\n const prevOnStatusChange = javaConnection.onStatusChange;\n javaConnection.onStatusChange = (status) => {\n prevOnStatusChange(status);\n this.javaStatus = status;\n };\n const prevOnHandshake = javaConnection.onHandshake;\n javaConnection.onHandshake = () => {\n prevOnHandshake();\n if (this.backend) {\n this.log(\n MessageType.INFORMATION,\n `Java live reload available: ${VaadinDevTools.BACKEND_DISPLAY_NAME[this.backend]}`\n );\n }\n };\n this.javaConnection = javaConnection;\n\n if (!this.backend) {\n this.showNotification(\n MessageType.WARNING,\n 'Java live reload unavailable',\n 'Live reload for Java changes is currently not set up. Find out how to make use of this functionality to boost your workflow.',\n 'https://vaadin.com/docs/latest/flow/configuration/live-reload',\n 'liveReloadUnavailable'\n );\n }\n }\n\n getDedicatedWebSocketUrl(): string | undefined {\n function getAbsoluteUrl(relative: string) {\n // Use innerHTML to obtain an absolute URL\n const div = document.createElement('div');\n div.innerHTML = ``;\n return (div.firstChild as HTMLLinkElement).href;\n }\n if (this.url === undefined) {\n return undefined;\n }\n const connectionBaseUrl = getAbsoluteUrl(this.url!);\n\n if (!connectionBaseUrl.startsWith('http://') && !connectionBaseUrl.startsWith('https://')) {\n // eslint-disable-next-line no-console\n console.error('The protocol of the url should be http or https for live reload to work.');\n return undefined;\n }\n return `${connectionBaseUrl.replace(/^http/, 'ws')}?v-r=push&debug_window`;\n }\n\n getSpringBootWebSocketUrl(location: any) {\n const { hostname } = location;\n const wsProtocol = location.protocol === 'https:' ? 'wss' : 'ws';\n if (hostname.endsWith('gitpod.io')) {\n // Gitpod uses `port-url` instead of `url:port`\n const hostnameWithoutPort = hostname.replace(/.*?-/, '');\n return `${wsProtocol}://${this.springBootLiveReloadPort}-${hostnameWithoutPort}`;\n } else {\n return `${wsProtocol}://${hostname}:${this.springBootLiveReloadPort}`;\n }\n }\n\n connectedCallback() {\n super.connectedCallback();\n this.catchErrors();\n\n // when focus or clicking anywhere, move the splash message to the message tray\n this.disableEventListener = (_: any) => this.demoteSplashMessage();\n document.body.addEventListener('focus', this.disableEventListener);\n document.body.addEventListener('click', this.disableEventListener);\n this.openWebSocketConnection();\n\n const lastReload = window.sessionStorage.getItem(VaadinDevTools.TRIGGERED_KEY_IN_SESSION_STORAGE);\n if (lastReload) {\n const now = new Date();\n const reloaded = `${`0${now.getHours()}`.slice(-2)}:${`0${now.getMinutes()}`.slice(\n -2\n )}:${`0${now.getSeconds()}`.slice(-2)}`;\n this.showSplashMessage(`Page reloaded at ${reloaded}`);\n window.sessionStorage.removeItem(VaadinDevTools.TRIGGERED_KEY_IN_SESSION_STORAGE);\n }\n\n this.transitionDuration = parseInt(\n window.getComputedStyle(this).getPropertyValue('--dev-tools-transition-duration'),\n 10\n );\n\n const windowAny = window as any;\n windowAny.Vaadin = windowAny.Vaadin || {};\n windowAny.Vaadin.devTools = Object.assign(this, windowAny.Vaadin.devTools);\n\n licenseInit();\n }\n format(o: any): string {\n return o.toString();\n }\n catchErrors() {\n // Process stored messages\n const queue = (window as any).Vaadin.ConsoleErrors as any[];\n if (queue) {\n queue.forEach((args: any[]) => {\n this.log(MessageType.ERROR, args.map((o) => this.format(o)).join(' '));\n });\n }\n // Install new handler that immediately processes messages\n (window as any).Vaadin.ConsoleErrors = {\n push: (args: any[]) => {\n this.log(MessageType.ERROR, args.map((o) => this.format(o)).join(' '));\n }\n };\n }\n\n disconnectedCallback() {\n if (this.disableEventListener) {\n document.body.removeEventListener('focus', this.disableEventListener!);\n document.body.removeEventListener('click', this.disableEventListener!);\n }\n super.disconnectedCallback();\n }\n\n toggleExpanded() {\n this.notifications.slice().forEach((notification) => this.dismissNotification(notification.id));\n this.expanded = !this.expanded;\n if (this.expanded) {\n this.root.focus();\n }\n }\n\n showSplashMessage(msg: string | undefined) {\n this.splashMessage = msg;\n if (this.splashMessage) {\n if (this.expanded) {\n this.demoteSplashMessage();\n } else {\n // automatically move notification to message tray after a certain amount of time\n setTimeout(() => {\n this.demoteSplashMessage();\n }, VaadinDevTools.AUTO_DEMOTE_NOTIFICATION_DELAY);\n }\n }\n }\n\n demoteSplashMessage() {\n if (this.splashMessage) {\n this.log(MessageType.LOG, this.splashMessage);\n }\n this.showSplashMessage(undefined);\n }\n\n checkLicense(productInfo: Product) {\n if (this.frontendConnection) {\n this.frontendConnection.sendLicenseCheck(productInfo);\n } else {\n licenseCheckFailed({ message: 'Internal error: no connection', product: productInfo });\n }\n }\n\n log(type: MessageType, message: string, details?: string, link?: string) {\n const id = this.nextMessageId;\n this.nextMessageId += 1;\n this.messages.push({\n id,\n type,\n message,\n details,\n link,\n dontShowAgain: false,\n deleted: false\n });\n while (this.messages.length > VaadinDevTools.MAX_LOG_ROWS) {\n this.messages.shift();\n }\n this.requestUpdate();\n this.updateComplete.then(() => {\n // Scroll into view\n const lastMessage = this.renderRoot.querySelector('.message-tray .message:last-child');\n if (this.expanded && lastMessage) {\n setTimeout(() => lastMessage.scrollIntoView({ behavior: 'smooth' }), this.transitionDuration);\n this.unreadErrors = false;\n } else if (type === MessageType.ERROR) {\n this.unreadErrors = true;\n }\n });\n }\n\n showNotification(type: MessageType, message: string, details?: string, link?: string, persistentId?: string) {\n if (persistentId === undefined || !VaadinDevTools.notificationDismissed(persistentId!)) {\n // Do not open persistent message if another is already visible with the same persistentId\n const matchingVisibleNotifications = this.notifications\n .filter((notification) => notification.persistentId === persistentId)\n .filter((notification) => !notification.deleted);\n if (matchingVisibleNotifications.length > 0) {\n return;\n }\n const id = this.nextMessageId;\n this.nextMessageId += 1;\n this.notifications.push({\n id,\n type,\n message,\n details,\n link,\n persistentId,\n dontShowAgain: false,\n deleted: false\n });\n // automatically move notification to message tray after a certain amount of time unless it contains a link\n if (link === undefined) {\n setTimeout(() => {\n this.dismissNotification(id);\n }, VaadinDevTools.AUTO_DEMOTE_NOTIFICATION_DELAY);\n }\n this.requestUpdate();\n } else {\n this.log(type, message, details, link);\n }\n }\n\n dismissNotification(id: number) {\n const index = this.findNotificationIndex(id);\n if (index !== -1 && !this.notifications[index].deleted) {\n const notification = this.notifications[index];\n\n // user is explicitly dismissing a notification---after that we won't bug them with it\n if (\n notification.dontShowAgain &&\n notification.persistentId &&\n !VaadinDevTools.notificationDismissed(notification.persistentId)\n ) {\n let dismissed = window.localStorage.getItem(VaadinDevTools.DISMISSED_NOTIFICATIONS_IN_LOCAL_STORAGE);\n dismissed = dismissed === null ? notification.persistentId : `${dismissed},${notification.persistentId}`;\n window.localStorage.setItem(VaadinDevTools.DISMISSED_NOTIFICATIONS_IN_LOCAL_STORAGE, dismissed);\n }\n\n notification.deleted = true;\n this.log(notification.type, notification.message, notification.details, notification.link);\n\n // give some time for the animation\n setTimeout(() => {\n const idx = this.findNotificationIndex(id);\n if (idx !== -1) {\n this.notifications.splice(idx, 1);\n this.requestUpdate();\n }\n }, this.transitionDuration);\n }\n }\n\n findNotificationIndex(id: number): number {\n let index = -1;\n this.notifications.some((notification, idx) => {\n if (notification.id === id) {\n index = idx;\n return true;\n } else {\n return false;\n }\n });\n return index;\n }\n\n toggleDontShowAgain(id: number) {\n const index = this.findNotificationIndex(id);\n if (index !== -1 && !this.notifications[index].deleted) {\n const notification = this.notifications[index];\n notification.dontShowAgain = !notification.dontShowAgain;\n this.requestUpdate();\n }\n }\n\n setActive(yes: boolean) {\n this.frontendConnection?.setActive(yes);\n this.javaConnection?.setActive(yes);\n window.sessionStorage.setItem(VaadinDevTools.ACTIVE_KEY_IN_SESSION_STORAGE, yes ? 'true' : 'false');\n }\n\n getStatusColor(status: ConnectionStatus | undefined) {\n if (status === ConnectionStatus.ACTIVE) {\n return css`hsl(${VaadinDevTools.GREEN_HSL})`;\n } else if (status === ConnectionStatus.INACTIVE) {\n return css`hsl(${VaadinDevTools.GREY_HSL})`;\n } else if (status === ConnectionStatus.UNAVAILABLE) {\n return css`hsl(${VaadinDevTools.YELLOW_HSL})`;\n } else if (status === ConnectionStatus.ERROR) {\n return css`hsl(${VaadinDevTools.RED_HSL})`;\n } else {\n return css`none`;\n }\n }\n\n /* eslint-disable lit/no-template-arrow */\n renderMessage(messageObject: Message) {\n return html`\n \n
\n
${messageObject.message}
\n
\n ${messageObject.persistentId\n ? html` this.toggleDontShowAgain(messageObject.id)}\n >\n Don’t show again\n
`\n : ''}\n \n
this.dismissNotification(messageObject.id)}>Dismiss
\n \n `;\n }\n\n /* eslint-disable lit/no-template-map */\n render() {\n return html` e.key === 'Escape' && this.toggleExpanded()}\n >\n
\n ${this.tabs.map(\n (tab) =>\n html` {\n this.activeTab = tab.id;\n if (tab.activate) tab.activate.call(this);\n }}\n >\n ${tab.title}\n `\n )}\n \n
\n ${this.tabs.map((tab) => (this.activeTab === tab.id ? tab.render.call(this) : nothing))}\n \n\n
${this.notifications.map((msg) => this.renderMessage(msg))}
\n this.toggleExpanded()}\n >\n ${this.unreadErrors\n ? html`\n \n \n \n \n \n `\n : html`\n \n \n \n \n `}\n\n \n ${this.splashMessage ? html`${this.splashMessage}` : nothing}\n `;\n }\n\n renderLog() {\n return html`
${this.messages.map((msg) => this.renderMessage(msg))}
`;\n }\n activateLog() {\n this.unreadErrors = false;\n this.updateComplete.then(() => {\n const lastMessage = this.renderRoot.querySelector('.message-tray .message:last-child');\n if (lastMessage) {\n lastMessage.scrollIntoView();\n }\n });\n }\n\n renderInfo() {\n return html`
\n \n
\n
${this.serverInfo.productName}
\n
${this.serverInfo.vaadinVersion}
\n
Flow
\n
${this.serverInfo.flowVersion}
\n
Java
\n
${this.serverInfo.javaVersion}
\n
OS
\n
${this.serverInfo.osVersion}
\n
Browser
\n
${navigator.userAgent}
\n
\n Live reload\n \n
\n
\n Java ${this.javaStatus} ${this.backend ? `(${VaadinDevTools.BACKEND_DISPLAY_NAME[this.backend]})` : ''}\n
\n
\n Front end ${this.frontendStatus}\n
\n
\n
`;\n }\n\n private renderFeatures() {\n return html`
\n ${this.features.map(\n (feature) => html`
\n \n Learn more\n
`\n )}\n
`;\n }\n\n copyInfoToClipboard() {\n const items = this.renderRoot.querySelectorAll('.info-tray dt, .info-tray dd');\n const text = Array.from(items)\n .map((message) => (message.localName === 'dd' ? ': ' : '\\n') + message.textContent!.trim())\n .join('')\n .replace(/^\\n/, '');\n copy(text);\n this.showNotification(\n MessageType.INFORMATION,\n 'Environment information copied to clipboard',\n undefined,\n undefined,\n 'versionInfoCopied'\n );\n }\n\n toggleFeatureFlag(e: Event, feature: Feature) {\n const enabled = (e.target! as HTMLInputElement).checked;\n if (this.frontendConnection) {\n this.frontendConnection.setFeature(feature.id, enabled);\n this.showNotification(\n MessageType.INFORMATION,\n `“${feature.title}” ${enabled ? 'enabled' : 'disabled'}`,\n feature.requiresServerRestart ? 'This feature requires a server restart' : undefined,\n undefined,\n `feature${feature.id}${enabled ? 'Enabled' : 'Disabled'}`\n );\n } else {\n this.log(MessageType.ERROR, `Unable to toggle feature ${feature.title}: No server connection available`);\n }\n }\n}\n\nif (customElements.get('vaadin-dev-tools') === undefined) {\n customElements.define('vaadin-dev-tools', VaadinDevTools);\n}\n"]} \ No newline at end of file diff --git a/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/theme-reusable-theme.generated.js b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/theme-reusable-theme.generated.js new file mode 100644 index 00000000..8455c8ec --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/theme-reusable-theme.generated.js @@ -0,0 +1,114 @@ +import 'construct-style-sheets-polyfill'; +import stripCssComments from 'strip-css-comments'; + +const createLinkReferences = (css, target) => { + // Unresolved urls are written as '@import url(text);' or '@import "text";' to the css + // media query can be present on @media tag or on @import directive after url + // Note that with Vite production build there is no space between @import and "text" + // [0] is the full match + // [1] matches the media query + // [2] matches the url + // [3] matches the quote char surrounding in '@import "..."' + // [4] matches the url in '@import "..."' + // [5] matches media query on @import statement + const importMatcher = /(?:@media\s(.+?))?(?:\s{)?\@import\s*(?:url\(\s*['"]?(.+?)['"]?\s*\)|(["'])((?:\\.|[^\\])*?)\3)([^;]*);(?:})?/g + + // Only cleanup if comment exist + if(/\/\*(.|[\r\n])*?\*\//gm.exec(css) != null) { + // clean up comments + css = stripCssComments(css); + } + + var match; + var styleCss = css; + + // For each external url import add a link reference + while((match = importMatcher.exec(css)) !== null) { + styleCss = styleCss.replace(match[0], ""); + const link = document.createElement('link'); + link.rel = 'stylesheet'; + link.href = match[2] || match[4]; + const media = match[1] || match[5]; + if (media) { + link.media = media; + } + // For target document append to head else append to target + if (target === document) { + document.head.appendChild(link); + } else { + target.appendChild(link); + } + }; + return styleCss; +}; + +// target: Document | ShadowRoot +export const injectGlobalCss = (css, target, first) => { + if(target === document) { + const hash = getHash(css); + if (window.Vaadin.theme.injectedGlobalCss.indexOf(hash) !== -1) { + return; + } + window.Vaadin.theme.injectedGlobalCss.push(hash); + } + const sheet = new CSSStyleSheet(); + sheet.replaceSync(createLinkReferences(css,target)); + if (first) { + target.adoptedStyleSheets = [sheet, ...target.adoptedStyleSheets]; + } else { + target.adoptedStyleSheets = [...target.adoptedStyleSheets, sheet]; + } +}; +import stylesCss from 'themes/reusable-theme/styles.css?inline'; +import { color } from '@vaadin/vaadin-lumo-styles/color.js'; +import { typography } from '@vaadin/vaadin-lumo-styles/typography.js'; + +window.Vaadin = window.Vaadin || {}; +window.Vaadin.theme = window.Vaadin.theme || {}; +window.Vaadin.theme.injectedGlobalCss = []; + +/** + * Calculate a 32 bit FNV-1a hash + * Found here: https://gist.github.com/vaiorabbit/5657561 + * Ref.: http://isthe.com/chongo/tech/comp/fnv/ + * + * @param {string} str the input value + * @returns {string} 32 bit (as 8 byte hex string) + */ +function hashFnv32a(str) { + /*jshint bitwise:false */ + let i, l, hval = 0x811c9dc5; + + for (i = 0, l = str.length; i < l; i++) { + hval ^= str.charCodeAt(i); + hval += (hval << 1) + (hval << 4) + (hval << 7) + (hval << 8) + (hval << 24); + } + + // Convert to 8 digit hex string + return ("0000000" + (hval >>> 0).toString(16)).substr(-8); +} + +/** + * Calculate a 64 bit hash for the given input. + * Double hash is used to significantly lower the collision probability. + * + * @param {string} input value to get hash for + * @returns {string} 64 bit (as 16 byte hex string) + */ +function getHash(input) { + let h1 = hashFnv32a(input); // returns 32 bit (as 8 byte hex string) + return h1 + hashFnv32a(h1 + input); +} +export const applyTheme = (target) => { + + injectGlobalCss(stylesCss.toString(), target); + + + if (!document['_vaadintheme_reusable-theme_componentCss']) { + + document['_vaadintheme_reusable-theme_componentCss'] = true; + } + injectGlobalCss(color.cssText, target, true); +injectGlobalCss(typography.cssText, target, true); + +} diff --git a/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/theme.d.ts b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/theme.d.ts new file mode 100644 index 00000000..94ce92d6 --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/theme.d.ts @@ -0,0 +1 @@ +export declare const applyTheme: (target: Node) => void; \ No newline at end of file diff --git a/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/theme.js b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/theme.js new file mode 100644 index 00000000..a39a3c4f --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/theme.js @@ -0,0 +1,2 @@ +import {applyTheme as _applyTheme} from './theme-reusable-theme.generated.js'; +export const applyTheme = _applyTheme; diff --git a/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/vaadin-featureflags.ts b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/vaadin-featureflags.ts new file mode 100644 index 00000000..d3399438 --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/vaadin-featureflags.ts @@ -0,0 +1,11 @@ +// @ts-nocheck +window.Vaadin = window.Vaadin || {}; +window.Vaadin.featureFlags = window.Vaadin.featureFlags || {}; +window.Vaadin.featureFlags.exampleFeatureFlag = false; +window.Vaadin.featureFlags.hillaPush = false; +window.Vaadin.featureFlags.hillaEngine = false; +window.Vaadin.featureFlags.oldLicenseChecker = false; +window.Vaadin.featureFlags.collaborationEngineBackend = false; +window.Vaadin.featureFlags.webpackForFrontendBuild = false; +window.Vaadin.featureFlags.enforceFieldValidation = false; +export {}; \ No newline at end of file diff --git a/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/vaadin.ts b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/vaadin.ts new file mode 100644 index 00000000..20c80ff7 --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/generated/vaadin.ts @@ -0,0 +1,6 @@ +import './vaadin-featureflags.ts'; + +import './index'; + +import { applyTheme } from './theme.js'; +applyTheme(document); diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/test-pnpm/frontend/index.html b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/index.html similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/test-pnpm/frontend/index.html rename to vertx-vaadin-quarkus-extension/integration-tests/production/frontend/index.html diff --git a/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/my.css b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/my.css new file mode 100644 index 00000000..4f60e404 --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/production/frontend/my.css @@ -0,0 +1,3 @@ +html { + background : blue; +} diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/production/pom.xml b/vertx-vaadin-quarkus-extension/integration-tests/production/pom.xml similarity index 99% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/production/pom.xml rename to vertx-vaadin-quarkus-extension/integration-tests/production/pom.xml index 1337f525..ec295984 100644 --- a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/production/pom.xml +++ b/vertx-vaadin-quarkus-extension/integration-tests/production/pom.xml @@ -6,7 +6,7 @@ com.github.mcollovati.vertx vertx-vaadin-quarkus-integration-tests - 23.3.5-SNAPSHOT + 23.4.0-SNAPSHOT vertx-vaadin-quarkus-production-tests diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/reusable-theme/pom.xml b/vertx-vaadin-quarkus-extension/integration-tests/reusable-theme/pom.xml similarity index 95% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/reusable-theme/pom.xml rename to vertx-vaadin-quarkus-extension/integration-tests/reusable-theme/pom.xml index 7d9ef462..1019cf1c 100644 --- a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/reusable-theme/pom.xml +++ b/vertx-vaadin-quarkus-extension/integration-tests/reusable-theme/pom.xml @@ -5,7 +5,7 @@ com.github.mcollovati.vertx vertx-vaadin-quarkus-integration-tests - 23.3.5-SNAPSHOT + 23.4.0-SNAPSHOT 4.0.0 diff --git a/vertx-vaadin-quarkus-extension/integration-tests/reusable-theme/src/main/resources/META-INF/resources/themes/reusable-theme/styles.css b/vertx-vaadin-quarkus-extension/integration-tests/reusable-theme/src/main/resources/META-INF/resources/themes/reusable-theme/styles.css new file mode 100644 index 00000000..699c70e0 --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/reusable-theme/src/main/resources/META-INF/resources/themes/reusable-theme/styles.css @@ -0,0 +1,13 @@ + +/* + CSS styling examples for the Vaadin app. + This is the style entrypoint for the theme and together with css in ./components/ included + automatically into the theme. + Visit https://vaadin.com/docs-beta/latest/theming/application-theme/ for more information. +*/ + +/* Example: CSS class name to center align the content . */ +.centered-content { + margin: 0 auto; + max-width: 250px; +} diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/test-addons/addon-with-jandex/pom.xml b/vertx-vaadin-quarkus-extension/integration-tests/test-addons/addon-with-jandex/pom.xml similarity index 98% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/test-addons/addon-with-jandex/pom.xml rename to vertx-vaadin-quarkus-extension/integration-tests/test-addons/addon-with-jandex/pom.xml index 580df5c6..ef44620c 100644 --- a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/test-addons/addon-with-jandex/pom.xml +++ b/vertx-vaadin-quarkus-extension/integration-tests/test-addons/addon-with-jandex/pom.xml @@ -7,7 +7,7 @@ com.github.mcollovati.vertx vertx-vaadin-quarkus-integration-tests - 23.3.5-SNAPSHOT + 23.4.0-SNAPSHOT ../../pom.xml diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/test-addons/addon-with-jandex/src/main/java/org/vaadin/jandex/HelloWorldJandex.java b/vertx-vaadin-quarkus-extension/integration-tests/test-addons/addon-with-jandex/src/main/java/org/vaadin/jandex/HelloWorldJandex.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/test-addons/addon-with-jandex/src/main/java/org/vaadin/jandex/HelloWorldJandex.java rename to vertx-vaadin-quarkus-extension/integration-tests/test-addons/addon-with-jandex/src/main/java/org/vaadin/jandex/HelloWorldJandex.java diff --git a/vertx-vaadin-quarkus-extension/integration-tests/test-addons/addon-with-jandex/src/main/resources/META-INF/frontend/src/hello-world-jandex.ts b/vertx-vaadin-quarkus-extension/integration-tests/test-addons/addon-with-jandex/src/main/resources/META-INF/frontend/src/hello-world-jandex.ts new file mode 100644 index 00000000..db258179 --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/test-addons/addon-with-jandex/src/main/resources/META-INF/frontend/src/hello-world-jandex.ts @@ -0,0 +1,15 @@ +import { html, LitElement } from 'lit'; +import '@axa-ch/input-text'; + +class HelloWorldJandex extends LitElement { + + render() { + return html` +
+ Addon with Jandex index + +
`; + } +} + +customElements.define('hello-world-jandex', HelloWorldJandex); diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/test-addons/addon-without-jandex/pom.xml b/vertx-vaadin-quarkus-extension/integration-tests/test-addons/addon-without-jandex/pom.xml similarity index 98% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/test-addons/addon-without-jandex/pom.xml rename to vertx-vaadin-quarkus-extension/integration-tests/test-addons/addon-without-jandex/pom.xml index 06d2bea5..df2b7ceb 100644 --- a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/test-addons/addon-without-jandex/pom.xml +++ b/vertx-vaadin-quarkus-extension/integration-tests/test-addons/addon-without-jandex/pom.xml @@ -7,7 +7,7 @@ com.github.mcollovati.vertx vertx-vaadin-quarkus-integration-tests - 23.3.5-SNAPSHOT + 23.4.0-SNAPSHOT ../../pom.xml diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/test-addons/addon-without-jandex/src/main/java/org/vaadin/nojandex/HelloWorld.java b/vertx-vaadin-quarkus-extension/integration-tests/test-addons/addon-without-jandex/src/main/java/org/vaadin/nojandex/HelloWorld.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/integration-tests/test-addons/addon-without-jandex/src/main/java/org/vaadin/nojandex/HelloWorld.java rename to vertx-vaadin-quarkus-extension/integration-tests/test-addons/addon-without-jandex/src/main/java/org/vaadin/nojandex/HelloWorld.java diff --git a/vertx-vaadin-quarkus-extension/integration-tests/test-addons/addon-without-jandex/src/main/resources/META-INF/frontend/src/hello-world.ts b/vertx-vaadin-quarkus-extension/integration-tests/test-addons/addon-without-jandex/src/main/resources/META-INF/frontend/src/hello-world.ts new file mode 100644 index 00000000..9a850e1c --- /dev/null +++ b/vertx-vaadin-quarkus-extension/integration-tests/test-addons/addon-without-jandex/src/main/resources/META-INF/frontend/src/hello-world.ts @@ -0,0 +1,15 @@ +import { html, LitElement } from 'lit'; +import '@axa-ch/input-text'; + +class HelloWorld extends LitElement { + + render() { + return html` +
+ Addon without Jandex index + +
`; + } +} + +customElements.define('hello-world', HelloWorld); diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/pom.xml b/vertx-vaadin-quarkus-extension/pom.xml similarity index 97% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/pom.xml rename to vertx-vaadin-quarkus-extension/pom.xml index 489d01e6..49b4c6eb 100644 --- a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/pom.xml +++ b/vertx-vaadin-quarkus-extension/pom.xml @@ -6,12 +6,11 @@ com.github.mcollovati.vertx vertx-vaadin-root - 1.0-dev - + 23.4.0-SNAPSHOT + ../pom.xml vertx-vaadin-quarkus-extension-parent - 23.3.5-SNAPSHOT pom Vertx Vaadin Extension - Parent diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/pom.xml b/vertx-vaadin-quarkus-extension/runtime/pom.xml similarity index 98% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/pom.xml rename to vertx-vaadin-quarkus-extension/runtime/pom.xml index d815db66..d3af56c5 100644 --- a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/pom.xml +++ b/vertx-vaadin-quarkus-extension/runtime/pom.xml @@ -6,7 +6,7 @@ com.github.mcollovati.vertx vertx-vaadin-quarkus-extension-parent - 23.3.5-SNAPSHOT + 23.4.0-SNAPSHOT vertx-vaadin-quarkus-extension Vertx Vaadin Extension - Runtime diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/AnyLiteral.java b/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/AnyLiteral.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/AnyLiteral.java rename to vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/AnyLiteral.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/BeanLookup.java b/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/BeanLookup.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/BeanLookup.java rename to vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/BeanLookup.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/QuarkusInstantiator.java b/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/QuarkusInstantiator.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/QuarkusInstantiator.java rename to vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/QuarkusInstantiator.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/QuarkusResourceProvider.java b/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/QuarkusResourceProvider.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/QuarkusResourceProvider.java rename to vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/QuarkusResourceProvider.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/QuarkusVaadinVerticle.java b/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/QuarkusVaadinVerticle.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/QuarkusVaadinVerticle.java rename to vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/QuarkusVaadinVerticle.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/QuarkusVertxVaadin.java b/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/QuarkusVertxVaadin.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/QuarkusVertxVaadin.java rename to vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/QuarkusVertxVaadin.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/QuarkusVertxVaadinService.java b/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/QuarkusVertxVaadinService.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/QuarkusVertxVaadinService.java rename to vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/QuarkusVertxVaadinService.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/VaadinVerticleConfigurer.java b/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/VaadinVerticleConfigurer.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/VaadinVerticleConfigurer.java rename to vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/VaadinVerticleConfigurer.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/VaadinVerticleDeployer.java b/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/VaadinVerticleDeployer.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/VaadinVerticleDeployer.java rename to vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/VaadinVerticleDeployer.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/annotation/NormalRouteScoped.java b/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/annotation/NormalRouteScoped.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/annotation/NormalRouteScoped.java rename to vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/annotation/NormalRouteScoped.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/annotation/NormalUIScoped.java b/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/annotation/NormalUIScoped.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/annotation/NormalUIScoped.java rename to vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/annotation/NormalUIScoped.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/annotation/RouteScopeOwner.java b/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/annotation/RouteScopeOwner.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/annotation/RouteScopeOwner.java rename to vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/annotation/RouteScopeOwner.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/annotation/RouteScoped.java b/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/annotation/RouteScoped.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/annotation/RouteScoped.java rename to vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/annotation/RouteScoped.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/annotation/UIScoped.java b/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/annotation/UIScoped.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/annotation/UIScoped.java rename to vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/annotation/UIScoped.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/annotation/VaadinServiceEnabled.java b/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/annotation/VaadinServiceEnabled.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/annotation/VaadinServiceEnabled.java rename to vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/annotation/VaadinServiceEnabled.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/annotation/VaadinServiceScoped.java b/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/annotation/VaadinServiceScoped.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/annotation/VaadinServiceScoped.java rename to vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/annotation/VaadinServiceScoped.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/annotation/VaadinSessionScoped.java b/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/annotation/VaadinSessionScoped.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/annotation/VaadinSessionScoped.java rename to vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/annotation/VaadinSessionScoped.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/AbstractContext.java b/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/AbstractContext.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/AbstractContext.java rename to vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/AbstractContext.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/AbstractContextualStorageManager.java b/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/AbstractContextualStorageManager.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/AbstractContextualStorageManager.java rename to vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/AbstractContextualStorageManager.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/BeanProvider.java b/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/BeanProvider.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/BeanProvider.java rename to vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/BeanProvider.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/ContextUtils.java b/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/ContextUtils.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/ContextUtils.java rename to vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/ContextUtils.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/ContextualInstanceInfo.java b/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/ContextualInstanceInfo.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/ContextualInstanceInfo.java rename to vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/ContextualInstanceInfo.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/ContextualStorage.java b/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/ContextualStorage.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/ContextualStorage.java rename to vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/ContextualStorage.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/RouteContextWrapper.java b/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/RouteContextWrapper.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/RouteContextWrapper.java rename to vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/RouteContextWrapper.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/RouteScopedContext.java b/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/RouteScopedContext.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/RouteScopedContext.java rename to vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/RouteScopedContext.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/UIContextWrapper.java b/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/UIContextWrapper.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/UIContextWrapper.java rename to vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/UIContextWrapper.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/UIScopedContext.java b/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/UIScopedContext.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/UIScopedContext.java rename to vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/UIScopedContext.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/VaadinServiceScopedContext.java b/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/VaadinServiceScopedContext.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/VaadinServiceScopedContext.java rename to vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/VaadinServiceScopedContext.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/VaadinSessionScopedContext.java b/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/VaadinSessionScopedContext.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/VaadinSessionScopedContext.java rename to vertx-vaadin-quarkus-extension/runtime/src/main/java/com/github/mcollovati/vertx/quarkus/context/VaadinSessionScopedContext.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/resources/META-INF/beans.xml b/vertx-vaadin-quarkus-extension/runtime/src/main/resources/META-INF/beans.xml similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/resources/META-INF/beans.xml rename to vertx-vaadin-quarkus-extension/runtime/src/main/resources/META-INF/beans.xml diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/resources/META-INF/quarkus-extension.yaml b/vertx-vaadin-quarkus-extension/runtime/src/main/resources/META-INF/quarkus-extension.yaml similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/resources/META-INF/quarkus-extension.yaml rename to vertx-vaadin-quarkus-extension/runtime/src/main/resources/META-INF/quarkus-extension.yaml diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/resources/application.properties b/vertx-vaadin-quarkus-extension/runtime/src/main/resources/application.properties similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/main/resources/application.properties rename to vertx-vaadin-quarkus-extension/runtime/src/main/resources/application.properties diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/NoOpVaadinVerticle.java b/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/NoOpVaadinVerticle.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/NoOpVaadinVerticle.java rename to vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/NoOpVaadinVerticle.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/ResourceProviderTest.java b/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/ResourceProviderTest.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/ResourceProviderTest.java rename to vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/ResourceProviderTest.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/TestQuarkusVertxVaadinServletService.java b/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/TestQuarkusVertxVaadinServletService.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/TestQuarkusVertxVaadinServletService.java rename to vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/TestQuarkusVertxVaadinServletService.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/AbstractContextTest.java b/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/AbstractContextTest.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/AbstractContextTest.java rename to vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/AbstractContextTest.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/BeanManagerProxy.java b/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/BeanManagerProxy.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/BeanManagerProxy.java rename to vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/BeanManagerProxy.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/InjectableContextTest.java b/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/InjectableContextTest.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/InjectableContextTest.java rename to vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/InjectableContextTest.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/RouteContextTest.java b/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/RouteContextTest.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/RouteContextTest.java rename to vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/RouteContextTest.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/RouteContextWithinDifferentUITest.java b/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/RouteContextWithinDifferentUITest.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/RouteContextWithinDifferentUITest.java rename to vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/RouteContextWithinDifferentUITest.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/RouteContextWrapperTest.java b/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/RouteContextWrapperTest.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/RouteContextWrapperTest.java rename to vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/RouteContextWrapperTest.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/RouteContextWrapperWithinDifferentUITest.java b/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/RouteContextWrapperWithinDifferentUITest.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/RouteContextWrapperWithinDifferentUITest.java rename to vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/RouteContextWrapperWithinDifferentUITest.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/RouteContextualStorageManagerTest.java b/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/RouteContextualStorageManagerTest.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/RouteContextualStorageManagerTest.java rename to vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/RouteContextualStorageManagerTest.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/RouteUnderTestContext.java b/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/RouteUnderTestContext.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/RouteUnderTestContext.java rename to vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/RouteUnderTestContext.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/ServiceContextTest.java b/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/ServiceContextTest.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/ServiceContextTest.java rename to vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/ServiceContextTest.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/ServiceUnderTestContext.java b/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/ServiceUnderTestContext.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/ServiceUnderTestContext.java rename to vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/ServiceUnderTestContext.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/SessionContextTest.java b/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/SessionContextTest.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/SessionContextTest.java rename to vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/SessionContextTest.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/SessionUnderTestContext.java b/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/SessionUnderTestContext.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/SessionUnderTestContext.java rename to vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/SessionUnderTestContext.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/TestBean.java b/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/TestBean.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/TestBean.java rename to vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/TestBean.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/TestContextualStorageManager.java b/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/TestContextualStorageManager.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/TestContextualStorageManager.java rename to vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/TestContextualStorageManager.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/TestHasElement.java b/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/TestHasElement.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/TestHasElement.java rename to vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/TestHasElement.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/TestNavigationTarget.java b/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/TestNavigationTarget.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/TestNavigationTarget.java rename to vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/TestNavigationTarget.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/TestRouteScopedContext.java b/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/TestRouteScopedContext.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/TestRouteScopedContext.java rename to vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/TestRouteScopedContext.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/UIUnderTestContext.java b/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/UIUnderTestContext.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/UIUnderTestContext.java rename to vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/UIUnderTestContext.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/UiContextTest.java b/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/UiContextTest.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/UiContextTest.java rename to vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/UiContextTest.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/UiPseudoScopeContextTest.java b/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/UiPseudoScopeContextTest.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/UiPseudoScopeContextTest.java rename to vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/UiPseudoScopeContextTest.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/UnderTestContext.java b/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/UnderTestContext.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/UnderTestContext.java rename to vertx-vaadin-quarkus-extension/runtime/src/test/java/com/github/mcollovati/vertx/quarkus/context/UnderTestContext.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/resources/resource-provider/some-resource.json b/vertx-vaadin-quarkus-extension/runtime/src/test/resources/resource-provider/some-resource.json similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-quarkus-extension/runtime/src/test/resources/resource-provider/some-resource.json rename to vertx-vaadin-quarkus-extension/runtime/src/test/resources/resource-provider/some-resource.json diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/.gitignore b/vertx-vaadin-tests/.gitignore similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/.gitignore rename to vertx-vaadin-tests/.gitignore diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/drivers.xml b/vertx-vaadin-tests/drivers.xml similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/drivers.xml rename to vertx-vaadin-tests/drivers.xml diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/pom.xml b/vertx-vaadin-tests/pom.xml similarity index 84% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/pom.xml rename to vertx-vaadin-tests/pom.xml index d22608b8..2cbe6887 100644 --- a/vertx-vaadin-flow-parent/vertx-vaadin-tests/pom.xml +++ b/vertx-vaadin-tests/pom.xml @@ -6,19 +6,18 @@ com.github.mcollovati.vertx vertx-vaadin-root - 1.0-dev - + 23.4.0-SNAPSHOT + ../pom.xml com.github.mcollovati.vertx.tests vertx-vaadin-test - 23.3.5-SNAPSHOT vertx-vaadin tests pom true - 1.0.22 + 1.0.28 ${project.version} - 8.2.3 + 8.2.5 1.0.17 false @@ -34,18 +33,6 @@ pom import - org.hamcrest hamcrest-all @@ -62,7 +49,7 @@ org.slf4j slf4j-simple - 1.7.28 + 2.0.9 com.github.mcollovati.vertx @@ -126,10 +113,15 @@ start - ${skipVertxRun} - ${test.vertx.jvmArgs} + + -Dvertx.logger-delegate-factory-class-name=io.vertx.core.logging.SLF4JLogDelegateFactory + + -Dorg.slf4j.simpleLogger.logFile=${project.build.directory}/verticle.log + + -Dvaadin.require.home.node=true + -Xmx2048M @@ -140,7 +132,6 @@ stop - ${skipVertxRun} ${test.vertx.jvmArgs} @@ -160,12 +151,14 @@ false true - all 2 + 3 + 4 + + 2 + ${webdriver.chrome.driver} ${test.excludegroup} @@ -173,6 +166,7 @@ **/*$* ${exclude.it.tests} + diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-common/pom.xml b/vertx-vaadin-tests/test-common/pom.xml similarity index 96% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-common/pom.xml rename to vertx-vaadin-tests/test-common/pom.xml index 06077ae3..e3a289ba 100644 --- a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-common/pom.xml +++ b/vertx-vaadin-tests/test-common/pom.xml @@ -6,7 +6,7 @@ com.github.mcollovati.vertx.tests vertx-vaadin-test - 23.3.5-SNAPSHOT + 23.4.0-SNAPSHOT ../pom.xml vertx-vaadin-test-common diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-common/src/main/java/com/vaadin/flow/uitest/ui/AbstractDivView.java b/vertx-vaadin-tests/test-common/src/main/java/com/vaadin/flow/uitest/ui/AbstractDivView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-common/src/main/java/com/vaadin/flow/uitest/ui/AbstractDivView.java rename to vertx-vaadin-tests/test-common/src/main/java/com/vaadin/flow/uitest/ui/AbstractDivView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-common/src/main/java/com/vaadin/flow/uitest/ui/dependencies/DependenciesLoadingBaseView.java b/vertx-vaadin-tests/test-common/src/main/java/com/vaadin/flow/uitest/ui/dependencies/DependenciesLoadingBaseView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-common/src/main/java/com/vaadin/flow/uitest/ui/dependencies/DependenciesLoadingBaseView.java rename to vertx-vaadin-tests/test-common/src/main/java/com/vaadin/flow/uitest/ui/dependencies/DependenciesLoadingBaseView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-common/src/main/java/com/vaadin/flow/uitest/vertx/ProductionModeTimingDataViewTestServlet.java b/vertx-vaadin-tests/test-common/src/main/java/com/vaadin/flow/uitest/vertx/ProductionModeTimingDataViewTestServlet.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-common/src/main/java/com/vaadin/flow/uitest/vertx/ProductionModeTimingDataViewTestServlet.java rename to vertx-vaadin-tests/test-common/src/main/java/com/vaadin/flow/uitest/vertx/ProductionModeTimingDataViewTestServlet.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-common/src/main/java/com/vaadin/flow/uitest/vertx/ProductionModeViewTestServlet.java b/vertx-vaadin-tests/test-common/src/main/java/com/vaadin/flow/uitest/vertx/ProductionModeViewTestServlet.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-common/src/main/java/com/vaadin/flow/uitest/vertx/ProductionModeViewTestServlet.java rename to vertx-vaadin-tests/test-common/src/main/java/com/vaadin/flow/uitest/vertx/ProductionModeViewTestServlet.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-common/src/main/java/com/vaadin/flow/uitest/vertx/RouterTestServlet.java b/vertx-vaadin-tests/test-common/src/main/java/com/vaadin/flow/uitest/vertx/RouterTestServlet.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-common/src/main/java/com/vaadin/flow/uitest/vertx/RouterTestServlet.java rename to vertx-vaadin-tests/test-common/src/main/java/com/vaadin/flow/uitest/vertx/RouterTestServlet.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-common/src/main/java/com/vaadin/flow/uitest/vertx/TestBootVerticle.java b/vertx-vaadin-tests/test-common/src/main/java/com/vaadin/flow/uitest/vertx/TestBootVerticle.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-common/src/main/java/com/vaadin/flow/uitest/vertx/TestBootVerticle.java rename to vertx-vaadin-tests/test-common/src/main/java/com/vaadin/flow/uitest/vertx/TestBootVerticle.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-common/src/main/java/com/vaadin/flow/uitest/vertx/ViewClassLocator.java b/vertx-vaadin-tests/test-common/src/main/java/com/vaadin/flow/uitest/vertx/ViewClassLocator.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-common/src/main/java/com/vaadin/flow/uitest/vertx/ViewClassLocator.java rename to vertx-vaadin-tests/test-common/src/main/java/com/vaadin/flow/uitest/vertx/ViewClassLocator.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-common/src/main/java/com/vaadin/flow/uitest/vertx/ViewTestLayout.java b/vertx-vaadin-tests/test-common/src/main/java/com/vaadin/flow/uitest/vertx/ViewTestLayout.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-common/src/main/java/com/vaadin/flow/uitest/vertx/ViewTestLayout.java rename to vertx-vaadin-tests/test-common/src/main/java/com/vaadin/flow/uitest/vertx/ViewTestLayout.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-common/src/main/java/com/vaadin/flow/uitest/vertx/ViewTestServlet.java b/vertx-vaadin-tests/test-common/src/main/java/com/vaadin/flow/uitest/vertx/ViewTestServlet.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-common/src/main/java/com/vaadin/flow/uitest/vertx/ViewTestServlet.java rename to vertx-vaadin-tests/test-common/src/main/java/com/vaadin/flow/uitest/vertx/ViewTestServlet.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-common/src/main/java/com/vaadin/flow/uitest/vertx/WebJarsServlet.java b/vertx-vaadin-tests/test-common/src/main/java/com/vaadin/flow/uitest/vertx/WebJarsServlet.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-common/src/main/java/com/vaadin/flow/uitest/vertx/WebJarsServlet.java rename to vertx-vaadin-tests/test-common/src/main/java/com/vaadin/flow/uitest/vertx/WebJarsServlet.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-common/src/main/resources/simplelogger.properties b/vertx-vaadin-tests/test-common/src/main/resources/simplelogger.properties similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-common/src/main/resources/simplelogger.properties rename to vertx-vaadin-tests/test-common/src/main/resources/simplelogger.properties diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/addon-with-templates/pom.xml b/vertx-vaadin-tests/test-frontend/addon-with-templates/pom.xml similarity index 95% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/addon-with-templates/pom.xml rename to vertx-vaadin-tests/test-frontend/addon-with-templates/pom.xml index ad8f2c03..a93dbb69 100644 --- a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/addon-with-templates/pom.xml +++ b/vertx-vaadin-tests/test-frontend/addon-with-templates/pom.xml @@ -7,7 +7,7 @@ com.github.mcollovati.vertx.tests test-frontend - 23.3.5-SNAPSHOT + 23.4.0-SNAPSHOT addon-with-templates diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/addon-with-templates/src/main/java/org/vaadin/example/addon/AddonLitComponent.java b/vertx-vaadin-tests/test-frontend/addon-with-templates/src/main/java/org/vaadin/example/addon/AddonLitComponent.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/addon-with-templates/src/main/java/org/vaadin/example/addon/AddonLitComponent.java rename to vertx-vaadin-tests/test-frontend/addon-with-templates/src/main/java/org/vaadin/example/addon/AddonLitComponent.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/addon-with-templates/src/main/resources/META-INF/frontend/AddonLitComponent.ts b/vertx-vaadin-tests/test-frontend/addon-with-templates/src/main/resources/META-INF/frontend/AddonLitComponent.ts similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/addon-with-templates/src/main/resources/META-INF/frontend/AddonLitComponent.ts rename to vertx-vaadin-tests/test-frontend/addon-with-templates/src/main/resources/META-INF/frontend/AddonLitComponent.ts diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-context-path/frontend/index.html b/vertx-vaadin-tests/test-frontend/frontend/index.html similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-context-path/frontend/index.html rename to vertx-vaadin-tests/test-frontend/frontend/index.html diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/pom.xml b/vertx-vaadin-tests/test-frontend/pom.xml similarity index 87% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/pom.xml rename to vertx-vaadin-tests/test-frontend/pom.xml index 4e0e105b..f8e37478 100644 --- a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/pom.xml +++ b/vertx-vaadin-tests/test-frontend/pom.xml @@ -6,7 +6,7 @@ com.github.mcollovati.vertx.tests vertx-vaadin-test - 23.3.5-SNAPSHOT + 23.4.0-SNAPSHOT test-frontend Frontend build (npm + Webpack + Vite) @@ -51,9 +51,17 @@ ${project.basedir}/src/test/conf/vertx-vaadin-test.conf com.vaadin.flow.uitest.vertx.TestBootVerticle + + -Dvertx.logger-delegate-factory-class-name=io.vertx.core.logging.SLF4JLogDelegateFactory + -Dorg.slf4j.simpleLogger.logFile=${project.build.directory}/verticle.log + -Dvaadin.require.home.node=true + -Xmx2048M + + diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/test-npm/README.md b/vertx-vaadin-tests/test-frontend/test-npm/README.md similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/test-npm/README.md rename to vertx-vaadin-tests/test-frontend/test-npm/README.md diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-embedded/frontend/index.html b/vertx-vaadin-tests/test-frontend/test-npm/frontend/index.html similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-embedded/frontend/index.html rename to vertx-vaadin-tests/test-frontend/test-npm/frontend/index.html diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/test-npm/frontend/my-component.js b/vertx-vaadin-tests/test-frontend/test-npm/frontend/my-component.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/test-npm/frontend/my-component.js rename to vertx-vaadin-tests/test-frontend/test-npm/frontend/my-component.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/test-npm/pom-production.xml b/vertx-vaadin-tests/test-frontend/test-npm/pom-production.xml similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/test-npm/pom-production.xml rename to vertx-vaadin-tests/test-frontend/test-npm/pom-production.xml diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/test-npm/pom.xml b/vertx-vaadin-tests/test-frontend/test-npm/pom.xml similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/test-npm/pom.xml rename to vertx-vaadin-tests/test-frontend/test-npm/pom.xml diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/test-npm/src/main/java/com/vaadin/flow/mixedtest/ui/IdTestView.java b/vertx-vaadin-tests/test-frontend/test-npm/src/main/java/com/vaadin/flow/mixedtest/ui/IdTestView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/test-npm/src/main/java/com/vaadin/flow/mixedtest/ui/IdTestView.java rename to vertx-vaadin-tests/test-frontend/test-npm/src/main/java/com/vaadin/flow/mixedtest/ui/IdTestView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/test-npm/src/main/java/com/vaadin/flow/mixedtest/ui/MissingDependenciesView.java b/vertx-vaadin-tests/test-frontend/test-npm/src/main/java/com/vaadin/flow/mixedtest/ui/MissingDependenciesView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/test-npm/src/main/java/com/vaadin/flow/mixedtest/ui/MissingDependenciesView.java rename to vertx-vaadin-tests/test-frontend/test-npm/src/main/java/com/vaadin/flow/mixedtest/ui/MissingDependenciesView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/test-npm/src/main/resources/vaadin-featureflags.properties b/vertx-vaadin-tests/test-frontend/test-npm/src/main/resources/vaadin-featureflags.properties similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/test-npm/src/main/resources/vaadin-featureflags.properties rename to vertx-vaadin-tests/test-frontend/test-npm/src/main/resources/vaadin-featureflags.properties diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/test-npm/src/test/java/com/vaadin/flow/mixedtest/ui/IdTestIT.java b/vertx-vaadin-tests/test-frontend/test-npm/src/test/java/com/vaadin/flow/mixedtest/ui/IdTestIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/test-npm/src/test/java/com/vaadin/flow/mixedtest/ui/IdTestIT.java rename to vertx-vaadin-tests/test-frontend/test-npm/src/test/java/com/vaadin/flow/mixedtest/ui/IdTestIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/test-npm/src/test/java/com/vaadin/flow/mixedtest/ui/NpmUsedIT.java b/vertx-vaadin-tests/test-frontend/test-npm/src/test/java/com/vaadin/flow/mixedtest/ui/NpmUsedIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/test-npm/src/test/java/com/vaadin/flow/mixedtest/ui/NpmUsedIT.java rename to vertx-vaadin-tests/test-frontend/test-npm/src/test/java/com/vaadin/flow/mixedtest/ui/NpmUsedIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/test-pnpm/.npmrc b/vertx-vaadin-tests/test-frontend/test-pnpm/.npmrc similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/test-pnpm/.npmrc rename to vertx-vaadin-tests/test-frontend/test-pnpm/.npmrc diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/test-pnpm/.pnpmfile.cjs b/vertx-vaadin-tests/test-frontend/test-pnpm/.pnpmfile.cjs similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/test-pnpm/.pnpmfile.cjs rename to vertx-vaadin-tests/test-frontend/test-pnpm/.pnpmfile.cjs diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/test-pnpm/README.md b/vertx-vaadin-tests/test-frontend/test-pnpm/README.md similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/test-pnpm/README.md rename to vertx-vaadin-tests/test-frontend/test-pnpm/README.md diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/frontend/index.html b/vertx-vaadin-tests/test-frontend/test-pnpm/frontend/index.html similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/frontend/index.html rename to vertx-vaadin-tests/test-frontend/test-pnpm/frontend/index.html diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/test-pnpm/frontend/my-component.js b/vertx-vaadin-tests/test-frontend/test-pnpm/frontend/my-component.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/test-pnpm/frontend/my-component.js rename to vertx-vaadin-tests/test-frontend/test-pnpm/frontend/my-component.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/test-pnpm/pom-production.xml b/vertx-vaadin-tests/test-frontend/test-pnpm/pom-production.xml similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/test-pnpm/pom-production.xml rename to vertx-vaadin-tests/test-frontend/test-pnpm/pom-production.xml diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/test-pnpm/pom.xml b/vertx-vaadin-tests/test-frontend/test-pnpm/pom.xml similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/test-pnpm/pom.xml rename to vertx-vaadin-tests/test-frontend/test-pnpm/pom.xml diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/test-pnpm/src/main/java/com/vaadin/flow/mixedtest/ui/IdTestView.java b/vertx-vaadin-tests/test-frontend/test-pnpm/src/main/java/com/vaadin/flow/mixedtest/ui/IdTestView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/test-pnpm/src/main/java/com/vaadin/flow/mixedtest/ui/IdTestView.java rename to vertx-vaadin-tests/test-frontend/test-pnpm/src/main/java/com/vaadin/flow/mixedtest/ui/IdTestView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/test-pnpm/src/main/java/com/vaadin/flow/mixedtest/ui/MissingDependenciesView.java b/vertx-vaadin-tests/test-frontend/test-pnpm/src/main/java/com/vaadin/flow/mixedtest/ui/MissingDependenciesView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/test-pnpm/src/main/java/com/vaadin/flow/mixedtest/ui/MissingDependenciesView.java rename to vertx-vaadin-tests/test-frontend/test-pnpm/src/main/java/com/vaadin/flow/mixedtest/ui/MissingDependenciesView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/test-pnpm/src/main/resources/vaadin-featureflags.properties b/vertx-vaadin-tests/test-frontend/test-pnpm/src/main/resources/vaadin-featureflags.properties similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/test-pnpm/src/main/resources/vaadin-featureflags.properties rename to vertx-vaadin-tests/test-frontend/test-pnpm/src/main/resources/vaadin-featureflags.properties diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/test-pnpm/src/test/java/com/vaadin/flow/mixedtest/ui/IdTestIT.java b/vertx-vaadin-tests/test-frontend/test-pnpm/src/test/java/com/vaadin/flow/mixedtest/ui/IdTestIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/test-pnpm/src/test/java/com/vaadin/flow/mixedtest/ui/IdTestIT.java rename to vertx-vaadin-tests/test-frontend/test-pnpm/src/test/java/com/vaadin/flow/mixedtest/ui/IdTestIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/test-pnpm/src/test/java/com/vaadin/flow/mixedtest/ui/PnpmUsedIT.java b/vertx-vaadin-tests/test-frontend/test-pnpm/src/test/java/com/vaadin/flow/mixedtest/ui/PnpmUsedIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/test-pnpm/src/test/java/com/vaadin/flow/mixedtest/ui/PnpmUsedIT.java rename to vertx-vaadin-tests/test-frontend/test-pnpm/src/test/java/com/vaadin/flow/mixedtest/ui/PnpmUsedIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/.npmrc b/vertx-vaadin-tests/test-frontend/vite-basics/.npmrc similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/.npmrc rename to vertx-vaadin-tests/test-frontend/vite-basics/.npmrc diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/frontend/a-directory/index.js b/vertx-vaadin-tests/test-frontend/vite-basics/frontend/a-directory/index.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/frontend/a-directory/index.js rename to vertx-vaadin-tests/test-frontend/vite-basics/frontend/a-directory/index.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/frontend/cssimport-textfield.css b/vertx-vaadin-tests/test-frontend/vite-basics/frontend/cssimport-textfield.css similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/frontend/cssimport-textfield.css rename to vertx-vaadin-tests/test-frontend/vite-basics/frontend/cssimport-textfield.css diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/frontend/cssimport.css b/vertx-vaadin-tests/test-frontend/vite-basics/frontend/cssimport.css similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/frontend/cssimport.css rename to vertx-vaadin-tests/test-frontend/vite-basics/frontend/cssimport.css diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/frontend/importdir.js b/vertx-vaadin-tests/test-frontend/vite-basics/frontend/importdir.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/frontend/importdir.js rename to vertx-vaadin-tests/test-frontend/vite-basics/frontend/importdir.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/frontend/index.html b/vertx-vaadin-tests/test-frontend/vite-basics/frontend/index.html similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/frontend/index.html rename to vertx-vaadin-tests/test-frontend/vite-basics/frontend/index.html diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/frontend/jsonloader.js b/vertx-vaadin-tests/test-frontend/vite-basics/frontend/jsonloader.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/frontend/jsonloader.js rename to vertx-vaadin-tests/test-frontend/vite-basics/frontend/jsonloader.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/frontend/my.json b/vertx-vaadin-tests/test-frontend/vite-basics/frontend/my.json similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/frontend/my.json rename to vertx-vaadin-tests/test-frontend/vite-basics/frontend/my.json diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/frontend/testscopebuttonloader.js b/vertx-vaadin-tests/test-frontend/vite-basics/frontend/testscopebuttonloader.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/frontend/testscopebuttonloader.js rename to vertx-vaadin-tests/test-frontend/vite-basics/frontend/testscopebuttonloader.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/frontend/testscopemaploader.js b/vertx-vaadin-tests/test-frontend/vite-basics/frontend/testscopemaploader.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/frontend/testscopemaploader.js rename to vertx-vaadin-tests/test-frontend/vite-basics/frontend/testscopemaploader.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/frontend/themes/vite-basics/images/plant.png b/vertx-vaadin-tests/test-frontend/vite-basics/frontend/themes/vite-basics/images/plant.png similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/frontend/themes/vite-basics/images/plant.png rename to vertx-vaadin-tests/test-frontend/vite-basics/frontend/themes/vite-basics/images/plant.png diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/frontend/themes/vite-basics/styles.css b/vertx-vaadin-tests/test-frontend/vite-basics/frontend/themes/vite-basics/styles.css similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/frontend/themes/vite-basics/styles.css rename to vertx-vaadin-tests/test-frontend/vite-basics/frontend/themes/vite-basics/styles.css diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/frontend/themes/vite-basics/theme.json b/vertx-vaadin-tests/test-frontend/vite-basics/frontend/themes/vite-basics/theme.json similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/frontend/themes/vite-basics/theme.json rename to vertx-vaadin-tests/test-frontend/vite-basics/frontend/themes/vite-basics/theme.json diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/package-outside-npm/index.js b/vertx-vaadin-tests/test-frontend/vite-basics/package-outside-npm/index.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/package-outside-npm/index.js rename to vertx-vaadin-tests/test-frontend/vite-basics/package-outside-npm/index.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/package-outside-npm/package.json b/vertx-vaadin-tests/test-frontend/vite-basics/package-outside-npm/package.json similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/package-outside-npm/package.json rename to vertx-vaadin-tests/test-frontend/vite-basics/package-outside-npm/package.json diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/package.json b/vertx-vaadin-tests/test-frontend/vite-basics/package.json similarity index 84% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/package.json rename to vertx-vaadin-tests/test-frontend/vite-basics/package.json index 51266fc7..c3cc47d6 100644 --- a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/package.json +++ b/vertx-vaadin-tests/test-frontend/vite-basics/package.json @@ -11,11 +11,11 @@ "@testscope/map": "../vite-test-assets/packages/@testscope/map", "@vaadin/bundles": "../vite-test-assets/packages/@vaadin/bundles", "@vaadin/common-frontend": "0.0.18", - "@vaadin/polymer-legacy-adapter": "23.1.1", + "@vaadin/polymer-legacy-adapter": "23.3.0-alpha2", "@vaadin/router": "1.7.5", - "@vaadin/vaadin-lumo-styles": "23.1.1", - "@vaadin/vaadin-text-field": "23.1.1", - "@vaadin/vaadin-themable-mixin": "23.1.1", + "@vaadin/vaadin-lumo-styles": "23.3.0-alpha2", + "@vaadin/vaadin-text-field": "23.3.0-alpha2", + "@vaadin/vaadin-themable-mixin": "23.3.0-alpha2", "construct-style-sheets-polyfill": "3.1.0", "copy-to-clipboard": "^3.3.1", "lit": "2.6.1", @@ -32,7 +32,7 @@ "strip-css-comments": "5.0.0", "transform-ast": "2.4.4", "typescript": "4.9.5", - "vite": "3.2.6", + "vite": "3.2.7", "vite-plugin-checker": "0.5.4", "workbox-build": "6.5.4", "workbox-core": "6.5.4", @@ -64,11 +64,11 @@ "dependencies": { "@polymer/polymer": "3.5.1", "@vaadin/common-frontend": "0.0.18", - "@vaadin/polymer-legacy-adapter": "23.1.1", + "@vaadin/polymer-legacy-adapter": "23.3.0-alpha2", "@vaadin/router": "1.7.5", - "@vaadin/vaadin-lumo-styles": "23.1.1", - "@vaadin/vaadin-text-field": "23.1.1", - "@vaadin/vaadin-themable-mixin": "23.1.1", + "@vaadin/vaadin-lumo-styles": "23.3.0-alpha2", + "@vaadin/vaadin-text-field": "23.3.0-alpha2", + "@vaadin/vaadin-themable-mixin": "23.3.0-alpha2", "construct-style-sheets-polyfill": "3.1.0", "lit": "2.6.1" }, @@ -82,12 +82,12 @@ "strip-css-comments": "5.0.0", "transform-ast": "2.4.4", "typescript": "4.9.5", - "vite": "3.2.6", + "vite": "3.2.7", "vite-plugin-checker": "0.5.4", "workbox-build": "6.5.4", "workbox-core": "6.5.4", "workbox-precaching": "6.5.4" }, - "hash": "a18c57cac1ac877bb0752a788f6b4b084f9831548dd13ac638b385be11d11bc2" + "hash": "bd375585790019b58df8162c21564efadce8a4c5a555cec17a3882c64818d975" } } diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/package2-outside-npm/index.js b/vertx-vaadin-tests/test-frontend/vite-basics/package2-outside-npm/index.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/package2-outside-npm/index.js rename to vertx-vaadin-tests/test-frontend/vite-basics/package2-outside-npm/index.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/package2-outside-npm/package.json b/vertx-vaadin-tests/test-frontend/vite-basics/package2-outside-npm/package.json similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/package2-outside-npm/package.json rename to vertx-vaadin-tests/test-frontend/vite-basics/package2-outside-npm/package.json diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/pom.xml b/vertx-vaadin-tests/test-frontend/vite-basics/pom.xml similarity index 98% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/pom.xml rename to vertx-vaadin-tests/test-frontend/vite-basics/pom.xml index a3e548ab..6dcdefd8 100644 --- a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/pom.xml +++ b/vertx-vaadin-tests/test-frontend/vite-basics/pom.xml @@ -5,7 +5,7 @@ com.github.mcollovati.vertx.tests test-frontend - 23.3.5-SNAPSHOT + 23.4.0-SNAPSHOT vite-basics Vite dev mode functionality diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/src/main/java/com/vaadin/viteapp/AppShell.java b/vertx-vaadin-tests/test-frontend/vite-basics/src/main/java/com/vaadin/viteapp/AppShell.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/src/main/java/com/vaadin/viteapp/AppShell.java rename to vertx-vaadin-tests/test-frontend/vite-basics/src/main/java/com/vaadin/viteapp/AppShell.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/src/main/java/com/vaadin/viteapp/views/empty/MainView.java b/vertx-vaadin-tests/test-frontend/vite-basics/src/main/java/com/vaadin/viteapp/views/empty/MainView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/src/main/java/com/vaadin/viteapp/views/empty/MainView.java rename to vertx-vaadin-tests/test-frontend/vite-basics/src/main/java/com/vaadin/viteapp/views/empty/MainView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/src/test/conf/vertx-vaadin-test.conf b/vertx-vaadin-tests/test-frontend/vite-basics/src/test/conf/vertx-vaadin-test.conf similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/src/test/conf/vertx-vaadin-test.conf rename to vertx-vaadin-tests/test-frontend/vite-basics/src/test/conf/vertx-vaadin-test.conf diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/src/test/java/com/vaadin/viteapp/BasicsIT.java b/vertx-vaadin-tests/test-frontend/vite-basics/src/test/java/com/vaadin/viteapp/BasicsIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/src/test/java/com/vaadin/viteapp/BasicsIT.java rename to vertx-vaadin-tests/test-frontend/vite-basics/src/test/java/com/vaadin/viteapp/BasicsIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/src/test/java/com/vaadin/viteapp/BundlesIT.java b/vertx-vaadin-tests/test-frontend/vite-basics/src/test/java/com/vaadin/viteapp/BundlesIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/src/test/java/com/vaadin/viteapp/BundlesIT.java rename to vertx-vaadin-tests/test-frontend/vite-basics/src/test/java/com/vaadin/viteapp/BundlesIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/src/test/java/com/vaadin/viteapp/ExternalPackageIT.java b/vertx-vaadin-tests/test-frontend/vite-basics/src/test/java/com/vaadin/viteapp/ExternalPackageIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/src/test/java/com/vaadin/viteapp/ExternalPackageIT.java rename to vertx-vaadin-tests/test-frontend/vite-basics/src/test/java/com/vaadin/viteapp/ExternalPackageIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/src/test/java/com/vaadin/viteapp/FileAccessIT.java b/vertx-vaadin-tests/test-frontend/vite-basics/src/test/java/com/vaadin/viteapp/FileAccessIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/src/test/java/com/vaadin/viteapp/FileAccessIT.java rename to vertx-vaadin-tests/test-frontend/vite-basics/src/test/java/com/vaadin/viteapp/FileAccessIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/src/test/java/com/vaadin/viteapp/PostinstallIT.java b/vertx-vaadin-tests/test-frontend/vite-basics/src/test/java/com/vaadin/viteapp/PostinstallIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/src/test/java/com/vaadin/viteapp/PostinstallIT.java rename to vertx-vaadin-tests/test-frontend/vite-basics/src/test/java/com/vaadin/viteapp/PostinstallIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/src/test/java/com/vaadin/viteapp/ThemeIT.java b/vertx-vaadin-tests/test-frontend/vite-basics/src/test/java/com/vaadin/viteapp/ThemeIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/src/test/java/com/vaadin/viteapp/ThemeIT.java rename to vertx-vaadin-tests/test-frontend/vite-basics/src/test/java/com/vaadin/viteapp/ThemeIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/src/test/java/com/vaadin/viteapp/ThemeReloadIT.java b/vertx-vaadin-tests/test-frontend/vite-basics/src/test/java/com/vaadin/viteapp/ThemeReloadIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/src/test/java/com/vaadin/viteapp/ThemeReloadIT.java rename to vertx-vaadin-tests/test-frontend/vite-basics/src/test/java/com/vaadin/viteapp/ThemeReloadIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/src/test/java/com/vaadin/viteapp/ViteDevModeIT.java b/vertx-vaadin-tests/test-frontend/vite-basics/src/test/java/com/vaadin/viteapp/ViteDevModeIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/src/test/java/com/vaadin/viteapp/ViteDevModeIT.java rename to vertx-vaadin-tests/test-frontend/vite-basics/src/test/java/com/vaadin/viteapp/ViteDevModeIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/tsconfig.json b/vertx-vaadin-tests/test-frontend/vite-basics/tsconfig.json similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/tsconfig.json rename to vertx-vaadin-tests/test-frontend/vite-basics/tsconfig.json diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/types.d.ts b/vertx-vaadin-tests/test-frontend/vite-basics/types.d.ts similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/types.d.ts rename to vertx-vaadin-tests/test-frontend/vite-basics/types.d.ts diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/vite.config.ts b/vertx-vaadin-tests/test-frontend/vite-basics/vite.config.ts similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/vite.config.ts rename to vertx-vaadin-tests/test-frontend/vite-basics/vite.config.ts diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-context-path/.npmrc b/vertx-vaadin-tests/test-frontend/vite-context-path/.npmrc similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-context-path/.npmrc rename to vertx-vaadin-tests/test-frontend/vite-context-path/.npmrc diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/.pnpmfile.cjs b/vertx-vaadin-tests/test-frontend/vite-context-path/.pnpmfile.cjs similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/.pnpmfile.cjs rename to vertx-vaadin-tests/test-frontend/vite-context-path/.pnpmfile.cjs diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/frontend/index.html b/vertx-vaadin-tests/test-frontend/vite-context-path/frontend/index.html similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/frontend/index.html rename to vertx-vaadin-tests/test-frontend/vite-context-path/frontend/index.html diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-context-path/frontend/themes/vite-context-path/styles.css b/vertx-vaadin-tests/test-frontend/vite-context-path/frontend/themes/vite-context-path/styles.css similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-context-path/frontend/themes/vite-context-path/styles.css rename to vertx-vaadin-tests/test-frontend/vite-context-path/frontend/themes/vite-context-path/styles.css diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-context-path/frontend/themes/vite-context-path/theme.json b/vertx-vaadin-tests/test-frontend/vite-context-path/frontend/themes/vite-context-path/theme.json similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-context-path/frontend/themes/vite-context-path/theme.json rename to vertx-vaadin-tests/test-frontend/vite-context-path/frontend/themes/vite-context-path/theme.json diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-context-path/pom-production.xml b/vertx-vaadin-tests/test-frontend/vite-context-path/pom-production.xml similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-context-path/pom-production.xml rename to vertx-vaadin-tests/test-frontend/vite-context-path/pom-production.xml diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-context-path/pom.xml b/vertx-vaadin-tests/test-frontend/vite-context-path/pom.xml similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-context-path/pom.xml rename to vertx-vaadin-tests/test-frontend/vite-context-path/pom.xml diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-context-path/src/main/java/com/vaadin/viteapp/AppShell.java b/vertx-vaadin-tests/test-frontend/vite-context-path/src/main/java/com/vaadin/viteapp/AppShell.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-context-path/src/main/java/com/vaadin/viteapp/AppShell.java rename to vertx-vaadin-tests/test-frontend/vite-context-path/src/main/java/com/vaadin/viteapp/AppShell.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-context-path/src/main/java/com/vaadin/viteapp/views/empty/MainView.java b/vertx-vaadin-tests/test-frontend/vite-context-path/src/main/java/com/vaadin/viteapp/views/empty/MainView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-context-path/src/main/java/com/vaadin/viteapp/views/empty/MainView.java rename to vertx-vaadin-tests/test-frontend/vite-context-path/src/main/java/com/vaadin/viteapp/views/empty/MainView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-context-path/src/test/java/com/vaadin/viteapp/BundlesIT.java b/vertx-vaadin-tests/test-frontend/vite-context-path/src/test/java/com/vaadin/viteapp/BundlesIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-context-path/src/test/java/com/vaadin/viteapp/BundlesIT.java rename to vertx-vaadin-tests/test-frontend/vite-context-path/src/test/java/com/vaadin/viteapp/BundlesIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-context-path/src/test/java/com/vaadin/viteapp/ContextPathIT.java b/vertx-vaadin-tests/test-frontend/vite-context-path/src/test/java/com/vaadin/viteapp/ContextPathIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-context-path/src/test/java/com/vaadin/viteapp/ContextPathIT.java rename to vertx-vaadin-tests/test-frontend/vite-context-path/src/test/java/com/vaadin/viteapp/ContextPathIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/tsconfig.json b/vertx-vaadin-tests/test-frontend/vite-context-path/tsconfig.json similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/tsconfig.json rename to vertx-vaadin-tests/test-frontend/vite-context-path/tsconfig.json diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/types.d.ts b/vertx-vaadin-tests/test-frontend/vite-context-path/types.d.ts similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-basics/types.d.ts rename to vertx-vaadin-tests/test-frontend/vite-context-path/types.d.ts diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-context-path/vite.config.ts b/vertx-vaadin-tests/test-frontend/vite-context-path/vite.config.ts similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-context-path/vite.config.ts rename to vertx-vaadin-tests/test-frontend/vite-context-path/vite.config.ts diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-embedded/.gitignore b/vertx-vaadin-tests/test-frontend/vite-embedded/.gitignore similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-embedded/.gitignore rename to vertx-vaadin-tests/test-frontend/vite-embedded/.gitignore diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-embedded/.npmrc b/vertx-vaadin-tests/test-frontend/vite-embedded/.npmrc similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-embedded/.npmrc rename to vertx-vaadin-tests/test-frontend/vite-embedded/.npmrc diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-context-path/.pnpmfile.cjs b/vertx-vaadin-tests/test-frontend/vite-embedded/.pnpmfile.cjs similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-context-path/.pnpmfile.cjs rename to vertx-vaadin-tests/test-frontend/vite-embedded/.pnpmfile.cjs diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa/frontend/index.html b/vertx-vaadin-tests/test-frontend/vite-embedded/frontend/index.html similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa/frontend/index.html rename to vertx-vaadin-tests/test-frontend/vite-embedded/frontend/index.html diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-embedded/frontend/themes/my-theme/styles.css b/vertx-vaadin-tests/test-frontend/vite-embedded/frontend/themes/my-theme/styles.css similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-embedded/frontend/themes/my-theme/styles.css rename to vertx-vaadin-tests/test-frontend/vite-embedded/frontend/themes/my-theme/styles.css diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-embedded/frontend/web-component.html b/vertx-vaadin-tests/test-frontend/vite-embedded/frontend/web-component.html similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-embedded/frontend/web-component.html rename to vertx-vaadin-tests/test-frontend/vite-embedded/frontend/web-component.html diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-embedded/pom-production.xml b/vertx-vaadin-tests/test-frontend/vite-embedded/pom-production.xml similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-embedded/pom-production.xml rename to vertx-vaadin-tests/test-frontend/vite-embedded/pom-production.xml diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-embedded/pom.xml b/vertx-vaadin-tests/test-frontend/vite-embedded/pom.xml similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-embedded/pom.xml rename to vertx-vaadin-tests/test-frontend/vite-embedded/pom.xml diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-embedded/src/main/java/com/vaadin/viteapp/BasicComponent.java b/vertx-vaadin-tests/test-frontend/vite-embedded/src/main/java/com/vaadin/viteapp/BasicComponent.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-embedded/src/main/java/com/vaadin/viteapp/BasicComponent.java rename to vertx-vaadin-tests/test-frontend/vite-embedded/src/main/java/com/vaadin/viteapp/BasicComponent.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-embedded/src/main/java/com/vaadin/viteapp/PushComponent.java b/vertx-vaadin-tests/test-frontend/vite-embedded/src/main/java/com/vaadin/viteapp/PushComponent.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-embedded/src/main/java/com/vaadin/viteapp/PushComponent.java rename to vertx-vaadin-tests/test-frontend/vite-embedded/src/main/java/com/vaadin/viteapp/PushComponent.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-embedded/src/main/webapp/basic-component.html b/vertx-vaadin-tests/test-frontend/vite-embedded/src/main/webapp/basic-component.html similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-embedded/src/main/webapp/basic-component.html rename to vertx-vaadin-tests/test-frontend/vite-embedded/src/main/webapp/basic-component.html diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-embedded/src/main/webapp/push-component.html b/vertx-vaadin-tests/test-frontend/vite-embedded/src/main/webapp/push-component.html similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-embedded/src/main/webapp/push-component.html rename to vertx-vaadin-tests/test-frontend/vite-embedded/src/main/webapp/push-component.html diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-embedded/src/test/java/com/vaadin/viteapp/BasicComponentIT.java b/vertx-vaadin-tests/test-frontend/vite-embedded/src/test/java/com/vaadin/viteapp/BasicComponentIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-embedded/src/test/java/com/vaadin/viteapp/BasicComponentIT.java rename to vertx-vaadin-tests/test-frontend/vite-embedded/src/test/java/com/vaadin/viteapp/BasicComponentIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-embedded/src/test/java/com/vaadin/viteapp/PushComponentIT.java b/vertx-vaadin-tests/test-frontend/vite-embedded/src/test/java/com/vaadin/viteapp/PushComponentIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-embedded/src/test/java/com/vaadin/viteapp/PushComponentIT.java rename to vertx-vaadin-tests/test-frontend/vite-embedded/src/test/java/com/vaadin/viteapp/PushComponentIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-context-path/tsconfig.json b/vertx-vaadin-tests/test-frontend/vite-embedded/tsconfig.json similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-context-path/tsconfig.json rename to vertx-vaadin-tests/test-frontend/vite-embedded/tsconfig.json diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-context-path/types.d.ts b/vertx-vaadin-tests/test-frontend/vite-embedded/types.d.ts similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-context-path/types.d.ts rename to vertx-vaadin-tests/test-frontend/vite-embedded/types.d.ts diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production-custom-frontend/frontend-custom/lit-templates/test-form.js b/vertx-vaadin-tests/test-frontend/vite-production-custom-frontend/frontend-custom/lit-templates/test-form.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production-custom-frontend/frontend-custom/lit-templates/test-form.js rename to vertx-vaadin-tests/test-frontend/vite-production-custom-frontend/frontend-custom/lit-templates/test-form.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production-custom-frontend/pom.xml b/vertx-vaadin-tests/test-frontend/vite-production-custom-frontend/pom.xml similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production-custom-frontend/pom.xml rename to vertx-vaadin-tests/test-frontend/vite-production-custom-frontend/pom.xml diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production-custom-frontend/src/main/java/com/vaadin/viteapp/AppShell.java b/vertx-vaadin-tests/test-frontend/vite-production-custom-frontend/src/main/java/com/vaadin/viteapp/AppShell.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production-custom-frontend/src/main/java/com/vaadin/viteapp/AppShell.java rename to vertx-vaadin-tests/test-frontend/vite-production-custom-frontend/src/main/java/com/vaadin/viteapp/AppShell.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production-custom-frontend/src/main/java/com/vaadin/viteapp/littemplate/TestForm.java b/vertx-vaadin-tests/test-frontend/vite-production-custom-frontend/src/main/java/com/vaadin/viteapp/littemplate/TestForm.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production-custom-frontend/src/main/java/com/vaadin/viteapp/littemplate/TestForm.java rename to vertx-vaadin-tests/test-frontend/vite-production-custom-frontend/src/main/java/com/vaadin/viteapp/littemplate/TestForm.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production-custom-frontend/src/main/java/com/vaadin/viteapp/view/TestView.java b/vertx-vaadin-tests/test-frontend/vite-production-custom-frontend/src/main/java/com/vaadin/viteapp/view/TestView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production-custom-frontend/src/main/java/com/vaadin/viteapp/view/TestView.java rename to vertx-vaadin-tests/test-frontend/vite-production-custom-frontend/src/main/java/com/vaadin/viteapp/view/TestView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production-custom-frontend/src/test/java/com/vaadin/viteapp/ProductionBasicsIT.java b/vertx-vaadin-tests/test-frontend/vite-production-custom-frontend/src/test/java/com/vaadin/viteapp/ProductionBasicsIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production-custom-frontend/src/test/java/com/vaadin/viteapp/ProductionBasicsIT.java rename to vertx-vaadin-tests/test-frontend/vite-production-custom-frontend/src/test/java/com/vaadin/viteapp/ProductionBasicsIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production/.npmrc b/vertx-vaadin-tests/test-frontend/vite-production/.npmrc similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production/.npmrc rename to vertx-vaadin-tests/test-frontend/vite-production/.npmrc diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-embedded/.pnpmfile.cjs b/vertx-vaadin-tests/test-frontend/vite-production/.pnpmfile.cjs similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-embedded/.pnpmfile.cjs rename to vertx-vaadin-tests/test-frontend/vite-production/.pnpmfile.cjs diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production/frontend/image.css b/vertx-vaadin-tests/test-frontend/vite-production/frontend/image.css similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production/frontend/image.css rename to vertx-vaadin-tests/test-frontend/vite-production/frontend/image.css diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production/frontend/index.html b/vertx-vaadin-tests/test-frontend/vite-production/frontend/index.html similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production/frontend/index.html rename to vertx-vaadin-tests/test-frontend/vite-production/frontend/index.html diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production/frontend/lit-invalid-imports.ts b/vertx-vaadin-tests/test-frontend/vite-production/frontend/lit-invalid-imports.ts similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production/frontend/lit-invalid-imports.ts rename to vertx-vaadin-tests/test-frontend/vite-production/frontend/lit-invalid-imports.ts diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production/frontend/themes/vite-production/images/plant.png b/vertx-vaadin-tests/test-frontend/vite-production/frontend/themes/vite-production/images/plant.png similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production/frontend/themes/vite-production/images/plant.png rename to vertx-vaadin-tests/test-frontend/vite-production/frontend/themes/vite-production/images/plant.png diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production/frontend/themes/vite-production/styles.css b/vertx-vaadin-tests/test-frontend/vite-production/frontend/themes/vite-production/styles.css similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production/frontend/themes/vite-production/styles.css rename to vertx-vaadin-tests/test-frontend/vite-production/frontend/themes/vite-production/styles.css diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production/frontend/themes/vite-production/theme.json b/vertx-vaadin-tests/test-frontend/vite-production/frontend/themes/vite-production/theme.json similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production/frontend/themes/vite-production/theme.json rename to vertx-vaadin-tests/test-frontend/vite-production/frontend/themes/vite-production/theme.json diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production/frontend/yes.png b/vertx-vaadin-tests/test-frontend/vite-production/frontend/yes.png similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production/frontend/yes.png rename to vertx-vaadin-tests/test-frontend/vite-production/frontend/yes.png diff --git a/vertx-vaadin-tests/test-frontend/vite-production/package-lock.json b/vertx-vaadin-tests/test-frontend/vite-production/package-lock.json new file mode 100644 index 00000000..40b0292c --- /dev/null +++ b/vertx-vaadin-tests/test-frontend/vite-production/package-lock.json @@ -0,0 +1,6262 @@ +{ + "name": "no-name", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "no-name", + "license": "UNLICENSED", + "dependencies": { + "@polymer/polymer": "3.5.1", + "@testscope/all": "../vite-test-assets/packages/@testscope/all", + "@testscope/button": "../vite-test-assets/packages/@testscope/button", + "@testscope/map": "../vite-test-assets/packages/@testscope/map", + "@vaadin/bundles": "../vite-test-assets/packages/@vaadin/bundles", + "@vaadin/common-frontend": "0.0.18", + "@vaadin/polymer-legacy-adapter": "23.1.1", + "@vaadin/router": "1.7.5", + "@vaadin/vaadin-lumo-styles": "23.1.1", + "@vaadin/vaadin-text-field": "23.1.1", + "@vaadin/vaadin-themable-mixin": "23.1.1", + "construct-style-sheets-polyfill": "3.1.0", + "lit": "2.6.1" + }, + "devDependencies": { + "@rollup/plugin-replace": "3.1.0", + "@rollup/pluginutils": "4.1.0", + "async": "3.2.2", + "glob": "7.2.3", + "mkdirp": "1.0.4", + "rollup-plugin-brotli": "3.1.0", + "strip-css-comments": "5.0.0", + "transform-ast": "2.4.4", + "typescript": "4.9.5", + "vite": "3.2.7", + "vite-plugin-checker": "0.5.4", + "workbox-build": "6.5.4", + "workbox-core": "6.5.4", + "workbox-precaching": "6.5.4" + } + }, + "../vite-test-assets/packages/@testscope/all": { + "version": "1.0.0", + "license": "Apache-2.0" + }, + "../vite-test-assets/packages/@testscope/button": { + "version": "1.0.0", + "license": "Apache-2.0" + }, + "../vite-test-assets/packages/@testscope/map": { + "version": "1.0.0", + "license": "Apache-2.0" + }, + "../vite-test-assets/packages/@vaadin/bundles": { + "version": "1.0.0", + "license": "Apache-2.0" + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@apideck/better-ajv-errors": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", + "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", + "dev": true, + "dependencies": { + "json-schema": "^0.4.0", + "jsonpointer": "^5.0.0", + "leven": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "ajv": ">=8" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", + "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.6.tgz", + "integrity": "sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.23.6", + "@babel/parser": "^7.23.6", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.6", + "@babel/types": "^7.23.6", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.23.6", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", + "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.6.tgz", + "integrity": "sha512-cBXU1vZni/CpGF29iTu4YRbOZt3Wat6zCoMDxRF1MayiEc4URxOj31tT65HUM0CRpMowA3HCJaAOVOUnMf96cw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-member-expression-to-functions": "^7.23.0", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", + "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.4.tgz", + "integrity": "sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", + "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", + "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-wrap-function": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", + "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-optimise-call-expression": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", + "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.15", + "@babel/types": "^7.22.19" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.6.tgz", + "integrity": "sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.6", + "@babel/types": "^7.23.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", + "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz", + "integrity": "sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz", + "integrity": "sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.3.tgz", + "integrity": "sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz", + "integrity": "sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz", + "integrity": "sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz", + "integrity": "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.4.tgz", + "integrity": "sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.20", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz", + "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz", + "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz", + "integrity": "sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz", + "integrity": "sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz", + "integrity": "sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.5.tgz", + "integrity": "sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-split-export-declaration": "^7.22.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz", + "integrity": "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz", + "integrity": "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz", + "integrity": "sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz", + "integrity": "sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz", + "integrity": "sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz", + "integrity": "sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz", + "integrity": "sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz", + "integrity": "sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz", + "integrity": "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz", + "integrity": "sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz", + "integrity": "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz", + "integrity": "sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz", + "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz", + "integrity": "sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", + "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz", + "integrity": "sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz", + "integrity": "sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz", + "integrity": "sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz", + "integrity": "sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz", + "integrity": "sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz", + "integrity": "sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.23.3", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz", + "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz", + "integrity": "sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz", + "integrity": "sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz", + "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz", + "integrity": "sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz", + "integrity": "sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz", + "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz", + "integrity": "sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz", + "integrity": "sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz", + "integrity": "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz", + "integrity": "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz", + "integrity": "sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz", + "integrity": "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz", + "integrity": "sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz", + "integrity": "sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz", + "integrity": "sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz", + "integrity": "sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz", + "integrity": "sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.6.tgz", + "integrity": "sha512-2XPn/BqKkZCpzYhUUNZ1ssXw7DcXfKQEjv/uXZUXgaebCMYmkEsfZ2yY+vv+xtXv50WmL5SGhyB6/xsWxIvvOQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.23.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.3", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.23.3", + "@babel/plugin-syntax-import-attributes": "^7.23.3", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.23.3", + "@babel/plugin-transform-async-generator-functions": "^7.23.4", + "@babel/plugin-transform-async-to-generator": "^7.23.3", + "@babel/plugin-transform-block-scoped-functions": "^7.23.3", + "@babel/plugin-transform-block-scoping": "^7.23.4", + "@babel/plugin-transform-class-properties": "^7.23.3", + "@babel/plugin-transform-class-static-block": "^7.23.4", + "@babel/plugin-transform-classes": "^7.23.5", + "@babel/plugin-transform-computed-properties": "^7.23.3", + "@babel/plugin-transform-destructuring": "^7.23.3", + "@babel/plugin-transform-dotall-regex": "^7.23.3", + "@babel/plugin-transform-duplicate-keys": "^7.23.3", + "@babel/plugin-transform-dynamic-import": "^7.23.4", + "@babel/plugin-transform-exponentiation-operator": "^7.23.3", + "@babel/plugin-transform-export-namespace-from": "^7.23.4", + "@babel/plugin-transform-for-of": "^7.23.6", + "@babel/plugin-transform-function-name": "^7.23.3", + "@babel/plugin-transform-json-strings": "^7.23.4", + "@babel/plugin-transform-literals": "^7.23.3", + "@babel/plugin-transform-logical-assignment-operators": "^7.23.4", + "@babel/plugin-transform-member-expression-literals": "^7.23.3", + "@babel/plugin-transform-modules-amd": "^7.23.3", + "@babel/plugin-transform-modules-commonjs": "^7.23.3", + "@babel/plugin-transform-modules-systemjs": "^7.23.3", + "@babel/plugin-transform-modules-umd": "^7.23.3", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.23.3", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4", + "@babel/plugin-transform-numeric-separator": "^7.23.4", + "@babel/plugin-transform-object-rest-spread": "^7.23.4", + "@babel/plugin-transform-object-super": "^7.23.3", + "@babel/plugin-transform-optional-catch-binding": "^7.23.4", + "@babel/plugin-transform-optional-chaining": "^7.23.4", + "@babel/plugin-transform-parameters": "^7.23.3", + "@babel/plugin-transform-private-methods": "^7.23.3", + "@babel/plugin-transform-private-property-in-object": "^7.23.4", + "@babel/plugin-transform-property-literals": "^7.23.3", + "@babel/plugin-transform-regenerator": "^7.23.3", + "@babel/plugin-transform-reserved-words": "^7.23.3", + "@babel/plugin-transform-shorthand-properties": "^7.23.3", + "@babel/plugin-transform-spread": "^7.23.3", + "@babel/plugin-transform-sticky-regex": "^7.23.3", + "@babel/plugin-transform-template-literals": "^7.23.3", + "@babel/plugin-transform-typeof-symbol": "^7.23.3", + "@babel/plugin-transform-unicode-escapes": "^7.23.3", + "@babel/plugin-transform-unicode-property-regex": "^7.23.3", + "@babel/plugin-transform-unicode-regex": "^7.23.3", + "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.6", + "babel-plugin-polyfill-corejs3": "^0.8.5", + "babel-plugin-polyfill-regenerator": "^0.5.3", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "node_modules/@babel/runtime": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.6.tgz", + "integrity": "sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.6.tgz", + "integrity": "sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.6", + "@babel/types": "^7.23.6", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", + "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz", + "integrity": "sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz", + "integrity": "sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@lit-labs/ssr-dom-shim": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.1.2.tgz", + "integrity": "sha512-jnOD+/+dSrfTWYfSXBXlo5l5f0q1UuJo3tkbMDCYA2lKUYq79jaxqtGEvnRoh049nt1vdo1+45RinipU6FGY2g==" + }, + "node_modules/@lit/reactive-element": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.6.3.tgz", + "integrity": "sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.0.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@open-wc/dedupe-mixin": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@open-wc/dedupe-mixin/-/dedupe-mixin-1.4.0.tgz", + "integrity": "sha512-Sj7gKl1TLcDbF7B6KUhtvr+1UCxdhMbNY5KxdU5IfMFWqL8oy1ZeAcCANjoB1TL0AJTcPmcCFsCbHf8X2jGDUA==" + }, + "node_modules/@polymer/iron-flex-layout": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@polymer/iron-flex-layout/-/iron-flex-layout-3.0.1.tgz", + "integrity": "sha512-7gB869czArF+HZcPTVSgvA7tXYFze9EKckvM95NB7SqYF+NnsQyhoXgKnpFwGyo95lUjUW9TFDLUwDXnCYFtkw==", + "dependencies": { + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-icon": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@polymer/iron-icon/-/iron-icon-3.0.1.tgz", + "integrity": "sha512-QLPwirk+UPZNaLnMew9VludXA4CWUCenRewgEcGYwdzVgDPCDbXxy6vRJjmweZobMQv/oVLppT2JZtJFnPxX6g==", + "dependencies": { + "@polymer/iron-flex-layout": "^3.0.0-pre.26", + "@polymer/iron-meta": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-iconset-svg": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@polymer/iron-iconset-svg/-/iron-iconset-svg-3.0.1.tgz", + "integrity": "sha512-XNwURbNHRw6u2fJe05O5fMYye6GSgDlDqCO+q6K1zAnKIrpgZwf2vTkBd5uCcZwsN0FyCB3mvNZx4jkh85dRDw==", + "dependencies": { + "@polymer/iron-meta": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-meta": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@polymer/iron-meta/-/iron-meta-3.0.1.tgz", + "integrity": "sha512-pWguPugiLYmWFV9UWxLWzZ6gm4wBwQdDy4VULKwdHCqR7OP7u98h+XDdGZsSlDPv6qoryV/e3tGHlTIT0mbzJA==", + "dependencies": { + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/polymer": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@polymer/polymer/-/polymer-3.5.1.tgz", + "integrity": "sha512-JlAHuy+1qIC6hL1ojEUfIVD58fzTpJAoCxFwV5yr0mYTXV1H8bz5zy0+rC963Cgr9iNXQ4T9ncSjC2fkF9BQfw==", + "dependencies": { + "@webcomponents/shadycss": "^1.9.1" + } + }, + "node_modules/@rollup/plugin-babel": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", + "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-babel/node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/plugin-babel/node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/plugin-node-resolve/node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/plugin-node-resolve/node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, + "node_modules/@rollup/plugin-replace": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-3.1.0.tgz", + "integrity": "sha512-pA3XRUrSKybVYqmH5TqWNZpGxF+VV+1GrYchKgCNIj2vsSOX7CVm2RCtx8p2nrC7xvkziYyK+lSi74T93MU3YA==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "node_modules/@rollup/plugin-replace/node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/plugin-replace/node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, + "node_modules/@rollup/pluginutils": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.1.0.tgz", + "integrity": "sha512-TrBhfJkFxA+ER+ew2U2/fHbebhLT/l/2pRk0hfj9KusXUuRXd2v0R58AfaZK9VXDQ4TogOSEmICVrQAA3zFnHQ==", + "dev": true, + "dependencies": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@surma/rollup-plugin-off-main-thread": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", + "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", + "dev": true, + "dependencies": { + "ejs": "^3.1.6", + "json5": "^2.2.0", + "magic-string": "^0.25.0", + "string.prototype.matchall": "^4.0.6" + } + }, + "node_modules/@testscope/all": { + "resolved": "../vite-test-assets/packages/@testscope/all", + "link": true + }, + "node_modules/@testscope/button": { + "resolved": "../vite-test-assets/packages/@testscope/button", + "link": true + }, + "node_modules/@testscope/map": { + "resolved": "../vite-test-assets/packages/@testscope/map", + "link": true + }, + "node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.10.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.5.tgz", + "integrity": "sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==" + }, + "node_modules/@vaadin/bundles": { + "resolved": "../vite-test-assets/packages/@vaadin/bundles", + "link": true + }, + "node_modules/@vaadin/button": { + "version": "23.3.29", + "resolved": "https://registry.npmjs.org/@vaadin/button/-/button-23.3.29.tgz", + "integrity": "sha512-ZeYbVM52ly29q/WNrcfNIgVdK9I/NZUF11vR1TDa59v0SeI8ZdUaHAWHL2eQi41w+4zgDxPKNIh7KmfiBW+VUg==", + "dependencies": { + "@open-wc/dedupe-mixin": "^1.3.0", + "@polymer/polymer": "^3.0.0", + "@vaadin/component-base": "~23.3.29", + "@vaadin/vaadin-lumo-styles": "~23.3.29", + "@vaadin/vaadin-material-styles": "~23.3.29", + "@vaadin/vaadin-themable-mixin": "~23.3.29" + } + }, + "node_modules/@vaadin/common-frontend": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/@vaadin/common-frontend/-/common-frontend-0.0.18.tgz", + "integrity": "sha512-RurZlTh30U17LB/LGUOZFtGbPK4uTOZhA9V50cRy0QikcEiwTIbSYSpbEOVcIF+UJ4dLpREs8f1v66dvufPFwA==", + "dependencies": { + "tslib": "^2.3.1" + }, + "peerDependencies": { + "lit": "^2.0.0" + } + }, + "node_modules/@vaadin/component-base": { + "version": "23.3.29", + "resolved": "https://registry.npmjs.org/@vaadin/component-base/-/component-base-23.3.29.tgz", + "integrity": "sha512-GCjb5cblZlkB+UfYR5J5vPQSweU2yNyjyiXe8+u3dXS+CzoSdAMFtVDHl7zJSvQxPNFks7AN3qGQRjdh1aiDxg==", + "dependencies": { + "@open-wc/dedupe-mixin": "^1.3.0", + "@polymer/polymer": "^3.0.0", + "@vaadin/vaadin-development-mode-detector": "^2.0.0", + "@vaadin/vaadin-usage-statistics": "^2.1.0", + "lit": "^2.0.0" + } + }, + "node_modules/@vaadin/email-field": { + "version": "23.3.29", + "resolved": "https://registry.npmjs.org/@vaadin/email-field/-/email-field-23.3.29.tgz", + "integrity": "sha512-BhNc6Sp2EEfbtLcjSgirtAWDRjkIR4xhMu88zBxDkLal5RHqd/a5/7q4cR5jDNoySd5Jm18TEos0SP4o+uNvZQ==", + "dependencies": { + "@polymer/polymer": "^3.0.0", + "@vaadin/component-base": "~23.3.29", + "@vaadin/text-field": "~23.3.29", + "@vaadin/vaadin-lumo-styles": "~23.3.29", + "@vaadin/vaadin-material-styles": "~23.3.29", + "@vaadin/vaadin-themable-mixin": "~23.3.29" + } + }, + "node_modules/@vaadin/field-base": { + "version": "23.3.29", + "resolved": "https://registry.npmjs.org/@vaadin/field-base/-/field-base-23.3.29.tgz", + "integrity": "sha512-j3UKnjysvve2l40xH5jTUs8qj/lLurc9didPSMupLvgkPsObEIfmInZaDWfp+kZT3DAYr0xB19Jexis48hVuYw==", + "dependencies": { + "@open-wc/dedupe-mixin": "^1.3.0", + "@polymer/polymer": "^3.0.0", + "@vaadin/component-base": "~23.3.29", + "lit": "^2.0.0" + } + }, + "node_modules/@vaadin/icon": { + "version": "23.3.29", + "resolved": "https://registry.npmjs.org/@vaadin/icon/-/icon-23.3.29.tgz", + "integrity": "sha512-MfugMu3NgMV4I6Q/leTNCfzQofeIpI1ZNIuYohbQoyTH55LGH28PDH73WgNKLrapD1r1CutqBxzspyjux8SaNA==", + "dependencies": { + "@polymer/polymer": "^3.0.0", + "@vaadin/component-base": "~23.3.29", + "@vaadin/vaadin-lumo-styles": "~23.3.29", + "@vaadin/vaadin-themable-mixin": "~23.3.29", + "lit": "^2.0.0" + } + }, + "node_modules/@vaadin/input-container": { + "version": "23.3.29", + "resolved": "https://registry.npmjs.org/@vaadin/input-container/-/input-container-23.3.29.tgz", + "integrity": "sha512-IbxE1+YT5NUh+jeOf6OlT7GiBgNzAgZyzRxb3AwcNfWFEcFFWrSYY3LT21a+1dawIjpvjd2l0sv3HWX+WIm0cw==", + "dependencies": { + "@polymer/polymer": "^3.0.0", + "@vaadin/component-base": "~23.3.29", + "@vaadin/vaadin-lumo-styles": "~23.3.29", + "@vaadin/vaadin-material-styles": "~23.3.29", + "@vaadin/vaadin-themable-mixin": "~23.3.29" + } + }, + "node_modules/@vaadin/integer-field": { + "version": "23.3.29", + "resolved": "https://registry.npmjs.org/@vaadin/integer-field/-/integer-field-23.3.29.tgz", + "integrity": "sha512-I+kZHq2J0MdX/SlLuPs0Sr32TtybIkjGYE0caLunu/gku+7xW57SR0qtosm17o4tCfmPiMAxOl9/vuSqMhP/oA==", + "dependencies": { + "@polymer/polymer": "^3.0.0", + "@vaadin/component-base": "~23.3.29", + "@vaadin/number-field": "~23.3.29", + "@vaadin/vaadin-lumo-styles": "~23.3.29", + "@vaadin/vaadin-material-styles": "~23.3.29" + } + }, + "node_modules/@vaadin/number-field": { + "version": "23.3.29", + "resolved": "https://registry.npmjs.org/@vaadin/number-field/-/number-field-23.3.29.tgz", + "integrity": "sha512-j1uF9wH0dnBk40PETA8cAiZzOyKvdi+i08vWcU5GKEDMIEAwC3loZGScA+ZxRS4Y+xf0GC4UcHyn4cxNCF/tOg==", + "dependencies": { + "@polymer/polymer": "^3.0.0", + "@vaadin/component-base": "~23.3.29", + "@vaadin/field-base": "~23.3.29", + "@vaadin/input-container": "~23.3.29", + "@vaadin/vaadin-lumo-styles": "~23.3.29", + "@vaadin/vaadin-material-styles": "~23.3.29", + "@vaadin/vaadin-themable-mixin": "~23.3.29" + } + }, + "node_modules/@vaadin/password-field": { + "version": "23.3.29", + "resolved": "https://registry.npmjs.org/@vaadin/password-field/-/password-field-23.3.29.tgz", + "integrity": "sha512-YwQJ8xRurQs2eELGmCyEtZ5VpgnMoTFWnbieycoprw8Q8TZ3oaXCnleULsMpP4viiaiA4LGT+QzGQxQLNp5vcQ==", + "dependencies": { + "@polymer/polymer": "^3.0.0", + "@vaadin/button": "~23.3.29", + "@vaadin/component-base": "~23.3.29", + "@vaadin/text-field": "~23.3.29", + "@vaadin/vaadin-lumo-styles": "~23.3.29", + "@vaadin/vaadin-material-styles": "~23.3.29", + "@vaadin/vaadin-themable-mixin": "~23.3.29" + } + }, + "node_modules/@vaadin/polymer-legacy-adapter": { + "version": "23.1.1", + "resolved": "https://registry.npmjs.org/@vaadin/polymer-legacy-adapter/-/polymer-legacy-adapter-23.1.1.tgz", + "integrity": "sha512-ezZZkfk8LGDC5rgTBlpmVmpF9gVqfN744u6h3I8xhRyTTS4R6GUx37ZAKyG2/YF83XqXTAo28jKin677AYqO5g==", + "dependencies": { + "@polymer/polymer": "^3.0.0", + "@vaadin/vaadin-themable-mixin": "^23.1.1", + "lit": "^2.0.0" + } + }, + "node_modules/@vaadin/router": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/@vaadin/router/-/router-1.7.5.tgz", + "integrity": "sha512-uRN3vd1ihgd596bF/NMZqpgxau0nlvIc0/JDd1EwStFNbZID/xIVse5LXdQhIyUKLmSl4T0GeCQK505xerWX0w==", + "dependencies": { + "@vaadin/vaadin-usage-statistics": "^2.1.0", + "path-to-regexp": "2.4.0" + } + }, + "node_modules/@vaadin/text-area": { + "version": "23.3.29", + "resolved": "https://registry.npmjs.org/@vaadin/text-area/-/text-area-23.3.29.tgz", + "integrity": "sha512-d3WAlmZmeW4lZ3f/87Woh4FM3p4eNGv3YFn2IvzkQJo62Tlwpb5ORx4op1S2kXqCgMHg9qNvhcuXwvbjNb3v+g==", + "dependencies": { + "@polymer/polymer": "^3.0.0", + "@vaadin/component-base": "~23.3.29", + "@vaadin/field-base": "~23.3.29", + "@vaadin/input-container": "~23.3.29", + "@vaadin/vaadin-lumo-styles": "~23.3.29", + "@vaadin/vaadin-material-styles": "~23.3.29", + "@vaadin/vaadin-themable-mixin": "~23.3.29" + } + }, + "node_modules/@vaadin/text-field": { + "version": "23.3.29", + "resolved": "https://registry.npmjs.org/@vaadin/text-field/-/text-field-23.3.29.tgz", + "integrity": "sha512-5FtkLNJF01WWX7epV+76DV83jWDVTttHo5sH6HwsTVj/EEauBqlCOA4rm5b0VcQohqkac2eQsnLuZzeayKvFDw==", + "dependencies": { + "@polymer/polymer": "^3.0.0", + "@vaadin/component-base": "~23.3.29", + "@vaadin/field-base": "~23.3.29", + "@vaadin/input-container": "~23.3.29", + "@vaadin/vaadin-lumo-styles": "~23.3.29", + "@vaadin/vaadin-material-styles": "~23.3.29", + "@vaadin/vaadin-themable-mixin": "~23.3.29" + } + }, + "node_modules/@vaadin/vaadin-development-mode-detector": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vaadin/vaadin-development-mode-detector/-/vaadin-development-mode-detector-2.0.6.tgz", + "integrity": "sha512-N6a5nLT/ytEUlpPo+nvdCKIGoyNjPsj3rzPGvGYK8x9Ceg76OTe1xI/GtN71mRW9e2HUScR0kCNOkl1Z63YDjw==" + }, + "node_modules/@vaadin/vaadin-lumo-styles": { + "version": "23.1.1", + "resolved": "https://registry.npmjs.org/@vaadin/vaadin-lumo-styles/-/vaadin-lumo-styles-23.1.1.tgz", + "integrity": "sha512-c1J7JOGfeiov2afVtONnLarR59JGwioa6tJ4a2ItPsNuRZt8r1WHzWvjgGjZtoVgzU6F/FnPenXiNgNzW0uzuw==", + "dependencies": { + "@polymer/iron-icon": "^3.0.0", + "@polymer/iron-iconset-svg": "^3.0.0", + "@polymer/polymer": "^3.0.0", + "@vaadin/icon": "^23.1.1", + "@vaadin/vaadin-themable-mixin": "^23.1.1" + } + }, + "node_modules/@vaadin/vaadin-material-styles": { + "version": "23.3.29", + "resolved": "https://registry.npmjs.org/@vaadin/vaadin-material-styles/-/vaadin-material-styles-23.3.29.tgz", + "integrity": "sha512-rLjRNVNHiVPgwZDba42HeRb9JjgZQ2m1bUP8tEOwMrc0n8cDSQn31dRFgKMLSbwPEaRiM2BscaaRaaX2KKgUcQ==", + "dependencies": { + "@polymer/polymer": "^3.0.0", + "@vaadin/vaadin-themable-mixin": "~23.3.29" + } + }, + "node_modules/@vaadin/vaadin-text-field": { + "version": "23.1.1", + "resolved": "https://registry.npmjs.org/@vaadin/vaadin-text-field/-/vaadin-text-field-23.1.1.tgz", + "integrity": "sha512-wujYBP13zkcUi7iS3ECcNyWDnxeOnvv8WynLyWl0Xm2n6/e/agFnfuRvdEGKM82ydFWCRMW0wOWV29+f+S2wcA==", + "dependencies": { + "@polymer/polymer": "^3.0.0", + "@vaadin/email-field": "^23.1.1", + "@vaadin/integer-field": "^23.1.1", + "@vaadin/number-field": "^23.1.1", + "@vaadin/password-field": "^23.1.1", + "@vaadin/text-area": "^23.1.1", + "@vaadin/text-field": "^23.1.1" + } + }, + "node_modules/@vaadin/vaadin-themable-mixin": { + "version": "23.1.1", + "resolved": "https://registry.npmjs.org/@vaadin/vaadin-themable-mixin/-/vaadin-themable-mixin-23.1.1.tgz", + "integrity": "sha512-uqmlRVMcHbvkR+iFtKNF3mSaam6hvGtEEJV0g/E/baZ6V4RkV0wqyfSGhshGFcHPeMdRwr/eKJfVMJQVjFMnAQ==", + "dependencies": { + "@open-wc/dedupe-mixin": "^1.3.0", + "lit": "^2.0.0" + } + }, + "node_modules/@vaadin/vaadin-usage-statistics": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@vaadin/vaadin-usage-statistics/-/vaadin-usage-statistics-2.1.2.tgz", + "integrity": "sha512-xKs1PvRfTXsG0eWWcImLXWjv7D+f1vfoIvovppv6pZ5QX8xgcxWUdNgERlOOdGt3CTuxQXukTBW3+Qfva+OXSg==", + "hasInstallScript": true, + "dependencies": { + "@vaadin/vaadin-development-mode-detector": "^2.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/@webcomponents/shadycss": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/@webcomponents/shadycss/-/shadycss-1.11.2.tgz", + "integrity": "sha512-vRq+GniJAYSBmTRnhCYPAPq6THYqovJ/gzGThWbgEZUQaBccndGTi1hdiUP15HzEco0I6t4RCtXyX0rsSmwgPw==" + }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "dependencies": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/async": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.2.tgz", + "integrity": "sha512-H0E+qZaDEfx/FY4t7iLRv1W2fFI6+pyCeTw1uN20AQPiwqwM6ojPxHxdLv4z8hi2DtnW9BOckSspLucW7pIE5g==", + "dev": true + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.7.tgz", + "integrity": "sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.4.4", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.7.tgz", + "integrity": "sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.4", + "core-js-compat": "^3.33.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.4.tgz", + "integrity": "sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.4" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-process-hrtime": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz", + "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==", + "dev": true + }, + "node_modules/browserslist": { + "version": "4.22.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", + "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001565", + "electron-to-chromium": "^1.4.601", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001571", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001571.tgz", + "integrity": "sha512-tYq/6MoXhdezDLFZuCO/TKboTzuQ/xR5cFdgXPfDtM7/kchBO3b4VWghE/OAi/DV7tTdhmLjZiZBZi1fA/GheQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/construct-style-sheets-polyfill": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/construct-style-sheets-polyfill/-/construct-style-sheets-polyfill-3.1.0.tgz", + "integrity": "sha512-HBLKP0chz8BAY6rBdzda11c3wAZeCZ+kIG4weVC2NM3AXzxx09nhe8t0SQNdloAvg5GLuHwq/0SPOOSPvtCcKw==" + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/core-js-compat": { + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.34.0.tgz", + "integrity": "sha512-4ZIyeNbW/Cn1wkMMDy+mvrRUxrwFNjKwbhCfQpDd+eLgYipDqp8oGFGtLmhh18EDPKA0g3VUBYOxQGGwvWLVpA==", + "dev": true, + "dependencies": { + "browserslist": "^4.22.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/dash-ast": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", + "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ejs": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", + "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", + "dev": true, + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.616", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.616.tgz", + "integrity": "sha512-1n7zWYh8eS0L9Uy+GskE0lkBUNK83cXTVJI0pU3mGprFsbfSdAc15VTFbo+A+Bq4pwstmL30AVcEU3Fo463lNg==", + "dev": true + }, + "node_modules/es-abstract": { + "version": "1.22.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", + "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.2", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.5", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.2", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.12", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", + "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.2", + "has-tostringtag": "^1.0.0", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.18.tgz", + "integrity": "sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.15.18", + "@esbuild/linux-loong64": "0.15.18", + "esbuild-android-64": "0.15.18", + "esbuild-android-arm64": "0.15.18", + "esbuild-darwin-64": "0.15.18", + "esbuild-darwin-arm64": "0.15.18", + "esbuild-freebsd-64": "0.15.18", + "esbuild-freebsd-arm64": "0.15.18", + "esbuild-linux-32": "0.15.18", + "esbuild-linux-64": "0.15.18", + "esbuild-linux-arm": "0.15.18", + "esbuild-linux-arm64": "0.15.18", + "esbuild-linux-mips64le": "0.15.18", + "esbuild-linux-ppc64le": "0.15.18", + "esbuild-linux-riscv64": "0.15.18", + "esbuild-linux-s390x": "0.15.18", + "esbuild-netbsd-64": "0.15.18", + "esbuild-openbsd-64": "0.15.18", + "esbuild-sunos-64": "0.15.18", + "esbuild-windows-32": "0.15.18", + "esbuild-windows-64": "0.15.18", + "esbuild-windows-arm64": "0.15.18" + } + }, + "node_modules/esbuild-android-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz", + "integrity": "sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz", + "integrity": "sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz", + "integrity": "sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz", + "integrity": "sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz", + "integrity": "sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz", + "integrity": "sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-32": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz", + "integrity": "sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz", + "integrity": "sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz", + "integrity": "sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz", + "integrity": "sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-mips64le": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz", + "integrity": "sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-ppc64le": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz", + "integrity": "sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-riscv64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz", + "integrity": "sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-s390x": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz", + "integrity": "sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-netbsd-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz", + "integrity": "sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-openbsd-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz", + "integrity": "sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-sunos-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz", + "integrity": "sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-32": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz", + "integrity": "sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz", + "integrity": "sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-arm64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz", + "integrity": "sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", + "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "dev": true + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/idb": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", + "dev": true + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/internal-slot": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", + "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.2", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regexp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-3.1.0.tgz", + "integrity": "sha512-rbku49cWloU5bSMI+zaRaXdQHXnthP6DZ/vLnfdSKyL4zUzuWnomtOEiZZOd+ioQ+avFo/qau3KPTc7Fjy1uPA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/jake": { + "version": "10.8.7", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", + "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", + "dev": true, + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jake/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jake/node_modules/async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", + "dev": true + }, + "node_modules/jake/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jake/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jake/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jake/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jake/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/lit": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/lit/-/lit-2.6.1.tgz", + "integrity": "sha512-DT87LD64f8acR7uVp7kZfhLRrHkfC/N4BVzAtnw9Yg8087mbBJ//qedwdwX0kzDbxgPccWRW6mFwGbRQIxy0pw==", + "dependencies": { + "@lit/reactive-element": "^1.6.0", + "lit-element": "^3.2.0", + "lit-html": "^2.6.0" + } + }, + "node_modules/lit-element": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", + "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.1.0", + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/lit-html": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-2.8.0.tgz", + "integrity": "sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q==", + "dependencies": { + "@types/trusted-types": "^2.0.2" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "node_modules/lodash.pick": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "integrity": "sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==", + "dev": true + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/merge-source-map": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", + "integrity": "sha512-PGSmS0kfnTnMJCzJ16BLLCEe6oeYCamKFFdQKshi4BmM6FUwipjVOcBFGxqtQtirtAG4iZvHlqST9CpZKqlRjA==", + "dev": true, + "dependencies": { + "source-map": "^0.5.6" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/mutexify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/mutexify/-/mutexify-1.4.0.tgz", + "integrity": "sha512-pbYSsOrSB/AKN5h/WzzLRMFgZhClWccf2XIB4RSMC8JbquiB0e0/SH5AIfdQMdyHmYtv4seU7yV/TvAwPLJ1Yg==", + "dev": true, + "dependencies": { + "queue-tick": "^1.0.0" + } + }, + "node_modules/nanobench": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nanobench/-/nanobench-2.1.1.tgz", + "integrity": "sha512-z+Vv7zElcjN+OpzAxAquUayFLGK3JI/ubCl0Oh64YQqsTGG09CGqieJVQw4ui8huDnnAgrvTv93qi5UaOoNj8A==", + "dev": true, + "dependencies": { + "browser-process-hrtime": "^0.1.2", + "chalk": "^1.1.3", + "mutexify": "^1.1.0", + "pretty-hrtime": "^1.0.2" + }, + "bin": { + "nanobench": "run.js", + "nanobench-compare": "compare.js" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-to-regexp": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.4.0.tgz", + "integrity": "sha512-G6zHoVqC6GGTQkZwF4lkuEyMbVOjoBKAEybQUypI1WTkqinCOrq2x6U2+phkJ1XsEMTy4LjtwPI7HW+NVrRR2w==" + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.4.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", + "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/queue-tick": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", + "dev": true + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "set-function-name": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-brotli": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-brotli/-/rollup-plugin-brotli-3.1.0.tgz", + "integrity": "sha512-vXRPVd9B1x+aaXeBdmLKNNsai9AH3o0Qikf4u0m1icKqgi3qVA4UhOfwGaPYoAHML1GLMUnR//PDhiMHXN/M6g==", + "dev": true, + "engines": { + "node": ">=11.7.0" + } + }, + "node_modules/rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", + "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead", + "dev": true + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", + "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "regexp.prototype.flags": "^1.5.0", + "set-function-name": "^2.0.0", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dev": true, + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/stringify-object/node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", + "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/strip-css-comments": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/strip-css-comments/-/strip-css-comments-5.0.0.tgz", + "integrity": "sha512-943vUh0ZxvxO6eK+TzY2F4nVN7a+ZdRK4KIdwHaGMvMrXTrAsJBRudOR3Zi0bLTuVSbF0CQXis4uw04uCabWkg==", + "dev": true, + "dependencies": { + "is-regexp": "^3.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/tempy": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", + "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", + "dev": true, + "dependencies": { + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "5.26.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.26.0.tgz", + "integrity": "sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/acorn": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/tiny-invariant": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", + "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/transform-ast": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/transform-ast/-/transform-ast-2.4.4.tgz", + "integrity": "sha512-AxjeZAcIOUO2lev2GDe3/xZ1Q0cVGjIMk5IsriTy8zbWlsEnjeB025AhkhBJHoy997mXpLd4R+kRbvnnQVuQHQ==", + "dev": true, + "dependencies": { + "acorn-node": "^1.3.0", + "convert-source-map": "^1.5.1", + "dash-ast": "^1.0.0", + "is-buffer": "^2.0.0", + "magic-string": "^0.23.2", + "merge-source-map": "1.0.4", + "nanobench": "^2.1.1" + } + }, + "node_modules/transform-ast/node_modules/magic-string": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.23.2.tgz", + "integrity": "sha512-oIUZaAxbcxYIp4AyLafV6OVKoB3YouZs0UTCJ8mOKBHNyJgGDaMJ4TgA+VylJh6fx7EQCC52XkbURxxG9IoJXA==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.1" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/vite": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.7.tgz", + "integrity": "sha512-29pdXjk49xAP0QBr0xXqu2s5jiQIXNvE/xwd0vUizYT2Hzqe4BksNNoWllFVXJf4eLZ+UlVQmXfB4lWrc+t18g==", + "dev": true, + "dependencies": { + "esbuild": "^0.15.9", + "postcss": "^8.4.18", + "resolve": "^1.22.1", + "rollup": "^2.79.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-plugin-checker": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/vite-plugin-checker/-/vite-plugin-checker-0.5.4.tgz", + "integrity": "sha512-T6y+OHXqwOjGrCErbhzg5x79NQZV46cgLwYTxuMQnDzAfA6skh2i8PIHcKks8ZlxopzbkvMb5vwc2DpNXiHJdg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "ansi-escapes": "^4.3.0", + "chalk": "^4.1.1", + "chokidar": "^3.5.1", + "commander": "^8.0.0", + "fast-glob": "^3.2.7", + "lodash.debounce": "^4.0.8", + "lodash.pick": "^4.4.0", + "npm-run-path": "^4.0.1", + "strip-ansi": "^6.0.0", + "tiny-invariant": "^1.1.0", + "vscode-languageclient": "^7.0.0", + "vscode-languageserver": "^7.0.0", + "vscode-languageserver-textdocument": "^1.0.1", + "vscode-uri": "^3.0.2" + }, + "engines": { + "node": ">=14.16" + }, + "peerDependencies": { + "eslint": ">=7", + "meow": "^9.0.0", + "optionator": "^0.9.1", + "stylelint": ">=13", + "typescript": "*", + "vite": ">=2.0.0", + "vls": "*", + "vti": "*", + "vue-tsc": "*" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + }, + "meow": { + "optional": true + }, + "optionator": { + "optional": true + }, + "stylelint": { + "optional": true + }, + "typescript": { + "optional": true + }, + "vls": { + "optional": true + }, + "vti": { + "optional": true + }, + "vue-tsc": { + "optional": true + } + } + }, + "node_modules/vite-plugin-checker/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/vite-plugin-checker/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/vite-plugin-checker/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/vite-plugin-checker/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/vite-plugin-checker/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/vite-plugin-checker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/vite-plugin-checker/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/vite-plugin-checker/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/vscode-jsonrpc": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", + "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==", + "dev": true, + "engines": { + "node": ">=8.0.0 || >=10.0.0" + } + }, + "node_modules/vscode-languageclient": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-7.0.0.tgz", + "integrity": "sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg==", + "dev": true, + "dependencies": { + "minimatch": "^3.0.4", + "semver": "^7.3.4", + "vscode-languageserver-protocol": "3.16.0" + }, + "engines": { + "vscode": "^1.52.0" + } + }, + "node_modules/vscode-languageserver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz", + "integrity": "sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==", + "dev": true, + "dependencies": { + "vscode-languageserver-protocol": "3.16.0" + }, + "bin": { + "installServerIntoExtension": "bin/installServerIntoExtension" + } + }, + "node_modules/vscode-languageserver-protocol": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", + "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", + "dev": true, + "dependencies": { + "vscode-jsonrpc": "6.0.0", + "vscode-languageserver-types": "3.16.0" + } + }, + "node_modules/vscode-languageserver-textdocument": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.11.tgz", + "integrity": "sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA==", + "dev": true + }, + "node_modules/vscode-languageserver-types": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", + "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==", + "dev": true + }, + "node_modules/vscode-uri": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz", + "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==", + "dev": true + }, + "node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", + "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.4", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/workbox-background-sync": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.5.4.tgz", + "integrity": "sha512-0r4INQZMyPky/lj4Ou98qxcThrETucOde+7mRGJl13MPJugQNKeZQOdIJe/1AchOP23cTqHcN/YVpD6r8E6I8g==", + "dev": true, + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "6.5.4" + } + }, + "node_modules/workbox-broadcast-update": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.5.4.tgz", + "integrity": "sha512-I/lBERoH1u3zyBosnpPEtcAVe5lwykx9Yg1k6f8/BGEPGaMMgZrwVrqL1uA9QZ1NGGFoyE6t9i7lBjOlDhFEEw==", + "dev": true, + "dependencies": { + "workbox-core": "6.5.4" + } + }, + "node_modules/workbox-build": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.5.4.tgz", + "integrity": "sha512-kgRevLXEYvUW9WS4XoziYqZ8Q9j/2ziJYEtTrjdz5/L/cTUa2XfyMP2i7c3p34lgqJ03+mTiz13SdFef2POwbA==", + "dev": true, + "dependencies": { + "@apideck/better-ajv-errors": "^0.3.1", + "@babel/core": "^7.11.1", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.2", + "@rollup/plugin-babel": "^5.2.0", + "@rollup/plugin-node-resolve": "^11.2.1", + "@rollup/plugin-replace": "^2.4.1", + "@surma/rollup-plugin-off-main-thread": "^2.2.3", + "ajv": "^8.6.0", + "common-tags": "^1.8.0", + "fast-json-stable-stringify": "^2.1.0", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "lodash": "^4.17.20", + "pretty-bytes": "^5.3.0", + "rollup": "^2.43.1", + "rollup-plugin-terser": "^7.0.0", + "source-map": "^0.8.0-beta.0", + "stringify-object": "^3.3.0", + "strip-comments": "^2.0.1", + "tempy": "^0.6.0", + "upath": "^1.2.0", + "workbox-background-sync": "6.5.4", + "workbox-broadcast-update": "6.5.4", + "workbox-cacheable-response": "6.5.4", + "workbox-core": "6.5.4", + "workbox-expiration": "6.5.4", + "workbox-google-analytics": "6.5.4", + "workbox-navigation-preload": "6.5.4", + "workbox-precaching": "6.5.4", + "workbox-range-requests": "6.5.4", + "workbox-recipes": "6.5.4", + "workbox-routing": "6.5.4", + "workbox-strategies": "6.5.4", + "workbox-streams": "6.5.4", + "workbox-sw": "6.5.4", + "workbox-window": "6.5.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/workbox-build/node_modules/@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "node_modules/workbox-build/node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/workbox-build/node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, + "node_modules/workbox-build/node_modules/source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "dev": true, + "dependencies": { + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/workbox-cacheable-response": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.5.4.tgz", + "integrity": "sha512-DCR9uD0Fqj8oB2TSWQEm1hbFs/85hXXoayVwFKLVuIuxwJaihBsLsp4y7J9bvZbqtPJ1KlCkmYVGQKrBU4KAug==", + "dev": true, + "dependencies": { + "workbox-core": "6.5.4" + } + }, + "node_modules/workbox-core": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.5.4.tgz", + "integrity": "sha512-OXYb+m9wZm8GrORlV2vBbE5EC1FKu71GGp0H4rjmxmF4/HLbMCoTFws87M3dFwgpmg0v00K++PImpNQ6J5NQ6Q==", + "dev": true + }, + "node_modules/workbox-expiration": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.5.4.tgz", + "integrity": "sha512-jUP5qPOpH1nXtjGGh1fRBa1wJL2QlIb5mGpct3NzepjGG2uFFBn4iiEBiI9GUmfAFR2ApuRhDydjcRmYXddiEQ==", + "dev": true, + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "6.5.4" + } + }, + "node_modules/workbox-google-analytics": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.5.4.tgz", + "integrity": "sha512-8AU1WuaXsD49249Wq0B2zn4a/vvFfHkpcFfqAFHNHwln3jK9QUYmzdkKXGIZl9wyKNP+RRX30vcgcyWMcZ9VAg==", + "dev": true, + "dependencies": { + "workbox-background-sync": "6.5.4", + "workbox-core": "6.5.4", + "workbox-routing": "6.5.4", + "workbox-strategies": "6.5.4" + } + }, + "node_modules/workbox-navigation-preload": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.5.4.tgz", + "integrity": "sha512-IIwf80eO3cr8h6XSQJF+Hxj26rg2RPFVUmJLUlM0+A2GzB4HFbQyKkrgD5y2d84g2IbJzP4B4j5dPBRzamHrng==", + "dev": true, + "dependencies": { + "workbox-core": "6.5.4" + } + }, + "node_modules/workbox-precaching": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.5.4.tgz", + "integrity": "sha512-hSMezMsW6btKnxHB4bFy2Qfwey/8SYdGWvVIKFaUm8vJ4E53JAY+U2JwLTRD8wbLWoP6OVUdFlXsTdKu9yoLTg==", + "dev": true, + "dependencies": { + "workbox-core": "6.5.4", + "workbox-routing": "6.5.4", + "workbox-strategies": "6.5.4" + } + }, + "node_modules/workbox-range-requests": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.5.4.tgz", + "integrity": "sha512-Je2qR1NXCFC8xVJ/Lux6saH6IrQGhMpDrPXWZWWS8n/RD+WZfKa6dSZwU+/QksfEadJEr/NfY+aP/CXFFK5JFg==", + "dev": true, + "dependencies": { + "workbox-core": "6.5.4" + } + }, + "node_modules/workbox-recipes": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.5.4.tgz", + "integrity": "sha512-QZNO8Ez708NNwzLNEXTG4QYSKQ1ochzEtRLGaq+mr2PyoEIC1xFW7MrWxrONUxBFOByksds9Z4//lKAX8tHyUA==", + "dev": true, + "dependencies": { + "workbox-cacheable-response": "6.5.4", + "workbox-core": "6.5.4", + "workbox-expiration": "6.5.4", + "workbox-precaching": "6.5.4", + "workbox-routing": "6.5.4", + "workbox-strategies": "6.5.4" + } + }, + "node_modules/workbox-routing": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.5.4.tgz", + "integrity": "sha512-apQswLsbrrOsBUWtr9Lf80F+P1sHnQdYodRo32SjiByYi36IDyL2r7BH1lJtFX8fwNHDa1QOVY74WKLLS6o5Pg==", + "dev": true, + "dependencies": { + "workbox-core": "6.5.4" + } + }, + "node_modules/workbox-strategies": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.5.4.tgz", + "integrity": "sha512-DEtsxhx0LIYWkJBTQolRxG4EI0setTJkqR4m7r4YpBdxtWJH1Mbg01Cj8ZjNOO8etqfA3IZaOPHUxCs8cBsKLw==", + "dev": true, + "dependencies": { + "workbox-core": "6.5.4" + } + }, + "node_modules/workbox-streams": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.5.4.tgz", + "integrity": "sha512-FXKVh87d2RFXkliAIheBojBELIPnWbQdyDvsH3t74Cwhg0fDheL1T8BqSM86hZvC0ZESLsznSYWw+Va+KVbUzg==", + "dev": true, + "dependencies": { + "workbox-core": "6.5.4", + "workbox-routing": "6.5.4" + } + }, + "node_modules/workbox-sw": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.5.4.tgz", + "integrity": "sha512-vo2RQo7DILVRoH5LjGqw3nphavEjK4Qk+FenXeUsknKn14eCNedHOXWbmnvP4ipKhlE35pvJ4yl4YYf6YsJArA==", + "dev": true + }, + "node_modules/workbox-window": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.5.4.tgz", + "integrity": "sha512-HnLZJDwYBE+hpG25AQBO8RUWBJRaCsI9ksQJEp3aCOFCaG5kqaToAYXFRAHxzRluM2cQbGzdQF5rjKPWPA1fug==", + "dev": true, + "dependencies": { + "@types/trusted-types": "^2.0.2", + "workbox-core": "6.5.4" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } +} diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production/package.json b/vertx-vaadin-tests/test-frontend/vite-production/package.json similarity index 95% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production/package.json rename to vertx-vaadin-tests/test-frontend/vite-production/package.json index 3b49c589..74beb146 100644 --- a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production/package.json +++ b/vertx-vaadin-tests/test-frontend/vite-production/package.json @@ -26,7 +26,7 @@ "strip-css-comments": "5.0.0", "transform-ast": "2.4.4", "typescript": "4.9.5", - "vite": "3.2.6", + "vite": "3.2.7", "vite-plugin-checker": "0.5.4", "workbox-build": "6.5.4", "workbox-core": "6.5.4", @@ -54,13 +54,13 @@ "strip-css-comments": "5.0.0", "transform-ast": "2.4.4", "typescript": "4.9.5", - "vite": "3.2.6", + "vite": "3.2.7", "vite-plugin-checker": "0.5.4", "workbox-build": "6.5.4", "workbox-core": "6.5.4", "workbox-precaching": "6.5.4" }, - "hash": "e61ab9f50b957cd4bdb90695d0a73f0b23f3215d01321a08181543f6442f2916" + "hash": "f0295fae0556e8f8974d8ddfcc8c843a86187d8081f16cbec54bd4023a527d2c" }, "overrides": { "@polymer/polymer": "$@polymer/polymer", diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production/pom.xml b/vertx-vaadin-tests/test-frontend/vite-production/pom.xml similarity index 98% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production/pom.xml rename to vertx-vaadin-tests/test-frontend/vite-production/pom.xml index 20179a31..0f10108d 100644 --- a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production/pom.xml +++ b/vertx-vaadin-tests/test-frontend/vite-production/pom.xml @@ -5,7 +5,7 @@ com.github.mcollovati.vertx.tests test-frontend - 23.3.5-SNAPSHOT + 23.4.0-SNAPSHOT vite-production Vite production mode functionality diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production/src/main/java/com/vaadin/viteapp/AppShell.java b/vertx-vaadin-tests/test-frontend/vite-production/src/main/java/com/vaadin/viteapp/AppShell.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production/src/main/java/com/vaadin/viteapp/AppShell.java rename to vertx-vaadin-tests/test-frontend/vite-production/src/main/java/com/vaadin/viteapp/AppShell.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production/src/main/java/com/vaadin/viteapp/views/empty/MainView.java b/vertx-vaadin-tests/test-frontend/vite-production/src/main/java/com/vaadin/viteapp/views/empty/MainView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production/src/main/java/com/vaadin/viteapp/views/empty/MainView.java rename to vertx-vaadin-tests/test-frontend/vite-production/src/main/java/com/vaadin/viteapp/views/empty/MainView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production/src/test/conf/vertx-vaadin-test.conf b/vertx-vaadin-tests/test-frontend/vite-production/src/test/conf/vertx-vaadin-test.conf similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production/src/test/conf/vertx-vaadin-test.conf rename to vertx-vaadin-tests/test-frontend/vite-production/src/test/conf/vertx-vaadin-test.conf diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production/src/test/java/com/vaadin/viteapp/BundlesIT.java b/vertx-vaadin-tests/test-frontend/vite-production/src/test/java/com/vaadin/viteapp/BundlesIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production/src/test/java/com/vaadin/viteapp/BundlesIT.java rename to vertx-vaadin-tests/test-frontend/vite-production/src/test/java/com/vaadin/viteapp/BundlesIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production/src/test/java/com/vaadin/viteapp/CompressionIT.java b/vertx-vaadin-tests/test-frontend/vite-production/src/test/java/com/vaadin/viteapp/CompressionIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production/src/test/java/com/vaadin/viteapp/CompressionIT.java rename to vertx-vaadin-tests/test-frontend/vite-production/src/test/java/com/vaadin/viteapp/CompressionIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production/src/test/java/com/vaadin/viteapp/ProductionBasicsIT.java b/vertx-vaadin-tests/test-frontend/vite-production/src/test/java/com/vaadin/viteapp/ProductionBasicsIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production/src/test/java/com/vaadin/viteapp/ProductionBasicsIT.java rename to vertx-vaadin-tests/test-frontend/vite-production/src/test/java/com/vaadin/viteapp/ProductionBasicsIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production/tsconfig.json b/vertx-vaadin-tests/test-frontend/vite-production/tsconfig.json similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production/tsconfig.json rename to vertx-vaadin-tests/test-frontend/vite-production/tsconfig.json diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-embedded/types.d.ts b/vertx-vaadin-tests/test-frontend/vite-production/types.d.ts similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-embedded/types.d.ts rename to vertx-vaadin-tests/test-frontend/vite-production/types.d.ts diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-embedded/vite.config.ts b/vertx-vaadin-tests/test-frontend/vite-production/vite.config.ts similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-embedded/vite.config.ts rename to vertx-vaadin-tests/test-frontend/vite-production/vite.config.ts diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/.npmrc b/vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/.npmrc similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/.npmrc rename to vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/.npmrc diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production/.pnpmfile.cjs b/vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/.pnpmfile.cjs similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production/.pnpmfile.cjs rename to vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/.pnpmfile.cjs diff --git a/vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/frontend/index.html b/vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/frontend/index.html new file mode 100644 index 00000000..a5cdd401 --- /dev/null +++ b/vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/frontend/index.html @@ -0,0 +1,23 @@ + + + + + + + + + + + + +
+ + diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/pom-production.xml b/vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/pom-production.xml similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/pom-production.xml rename to vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/pom-production.xml diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/pom.xml b/vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/pom.xml similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/pom.xml rename to vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/pom.xml diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/src/main/java/com/vaadin/viteapp/AppShell.java b/vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/src/main/java/com/vaadin/viteapp/AppShell.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/src/main/java/com/vaadin/viteapp/AppShell.java rename to vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/src/main/java/com/vaadin/viteapp/AppShell.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/src/main/java/com/vaadin/viteapp/MainView.java b/vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/src/main/java/com/vaadin/viteapp/MainView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/src/main/java/com/vaadin/viteapp/MainView.java rename to vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/src/main/java/com/vaadin/viteapp/MainView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/src/main/webapp/offline.html b/vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/src/main/webapp/offline.html similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/src/main/webapp/offline.html rename to vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/src/main/webapp/offline.html diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/src/test/java/com/vaadin/viteapp/MainIT.java b/vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/src/test/java/com/vaadin/viteapp/MainIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/src/test/java/com/vaadin/viteapp/MainIT.java rename to vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/src/test/java/com/vaadin/viteapp/MainIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-embedded/tsconfig.json b/vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/tsconfig.json similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-embedded/tsconfig.json rename to vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/tsconfig.json diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production/types.d.ts b/vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/types.d.ts similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-production/types.d.ts rename to vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/types.d.ts diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/.npmrc b/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/.npmrc similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/.npmrc rename to vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/.npmrc diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/.pnpmfile.cjs b/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/.pnpmfile.cjs similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/.pnpmfile.cjs rename to vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/.pnpmfile.cjs diff --git a/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/frontend/index.html b/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/frontend/index.html new file mode 100644 index 00000000..a5cdd401 --- /dev/null +++ b/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/frontend/index.html @@ -0,0 +1,23 @@ + + + + + + + + + + + + +
+ + diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/pom-production.xml b/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/pom-production.xml similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/pom-production.xml rename to vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/pom-production.xml diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/pom.xml b/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/pom.xml similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/pom.xml rename to vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/pom.xml diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/src/main/java/com/vaadin/viteapp/AppShell.java b/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/src/main/java/com/vaadin/viteapp/AppShell.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/src/main/java/com/vaadin/viteapp/AppShell.java rename to vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/src/main/java/com/vaadin/viteapp/AppShell.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/src/main/java/com/vaadin/viteapp/ApplicationServiceInitListener.java b/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/src/main/java/com/vaadin/viteapp/ApplicationServiceInitListener.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/src/main/java/com/vaadin/viteapp/ApplicationServiceInitListener.java rename to vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/src/main/java/com/vaadin/viteapp/ApplicationServiceInitListener.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/src/main/java/com/vaadin/viteapp/MainView.java b/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/src/main/java/com/vaadin/viteapp/MainView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/src/main/java/com/vaadin/viteapp/MainView.java rename to vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/src/main/java/com/vaadin/viteapp/MainView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/src/main/resources/META-INF/services/com.vaadin.flow.server.VaadinServiceInitListener b/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/src/main/resources/META-INF/services/com.vaadin.flow.server.VaadinServiceInitListener similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/src/main/resources/META-INF/services/com.vaadin.flow.server.VaadinServiceInitListener rename to vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/src/main/resources/META-INF/services/com.vaadin.flow.server.VaadinServiceInitListener diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/src/test/java/com/vaadin/viteapp/MainIT.java b/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/src/test/java/com/vaadin/viteapp/MainIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/src/test/java/com/vaadin/viteapp/MainIT.java rename to vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/src/test/java/com/vaadin/viteapp/MainIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/tsconfig.json b/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/tsconfig.json similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/tsconfig.json rename to vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/tsconfig.json diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/types.d.ts b/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/types.d.ts similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-custom-offline-path/types.d.ts rename to vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/types.d.ts diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-production/.gitignore b/vertx-vaadin-tests/test-frontend/vite-pwa-production/.gitignore similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-production/.gitignore rename to vertx-vaadin-tests/test-frontend/vite-pwa-production/.gitignore diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-production/.npmrc b/vertx-vaadin-tests/test-frontend/vite-pwa-production/.npmrc similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-production/.npmrc rename to vertx-vaadin-tests/test-frontend/vite-pwa-production/.npmrc diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/.pnpmfile.cjs b/vertx-vaadin-tests/test-frontend/vite-pwa-production/.pnpmfile.cjs similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/.pnpmfile.cjs rename to vertx-vaadin-tests/test-frontend/vite-pwa-production/.pnpmfile.cjs diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-production/frontend/about-view.ts b/vertx-vaadin-tests/test-frontend/vite-pwa-production/frontend/about-view.ts similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-production/frontend/about-view.ts rename to vertx-vaadin-tests/test-frontend/vite-pwa-production/frontend/about-view.ts diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-production/frontend/home-view.ts b/vertx-vaadin-tests/test-frontend/vite-pwa-production/frontend/home-view.ts similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-production/frontend/home-view.ts rename to vertx-vaadin-tests/test-frontend/vite-pwa-production/frontend/home-view.ts diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-production/frontend/index.html b/vertx-vaadin-tests/test-frontend/vite-pwa-production/frontend/index.html similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-production/frontend/index.html rename to vertx-vaadin-tests/test-frontend/vite-pwa-production/frontend/index.html diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-production/frontend/index.ts b/vertx-vaadin-tests/test-frontend/vite-pwa-production/frontend/index.ts similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-production/frontend/index.ts rename to vertx-vaadin-tests/test-frontend/vite-pwa-production/frontend/index.ts diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-production/frontend/themes/my-theme/fonts/Roboto-Regular.woff b/vertx-vaadin-tests/test-frontend/vite-pwa-production/frontend/themes/my-theme/fonts/Roboto-Regular.woff similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-production/frontend/themes/my-theme/fonts/Roboto-Regular.woff rename to vertx-vaadin-tests/test-frontend/vite-pwa-production/frontend/themes/my-theme/fonts/Roboto-Regular.woff diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-production/frontend/themes/my-theme/images/bg.jpeg b/vertx-vaadin-tests/test-frontend/vite-pwa-production/frontend/themes/my-theme/images/bg.jpeg similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-production/frontend/themes/my-theme/images/bg.jpeg rename to vertx-vaadin-tests/test-frontend/vite-pwa-production/frontend/themes/my-theme/images/bg.jpeg diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-production/frontend/themes/my-theme/styles.css b/vertx-vaadin-tests/test-frontend/vite-pwa-production/frontend/themes/my-theme/styles.css similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-production/frontend/themes/my-theme/styles.css rename to vertx-vaadin-tests/test-frontend/vite-pwa-production/frontend/themes/my-theme/styles.css diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-production/pom.xml b/vertx-vaadin-tests/test-frontend/vite-pwa-production/pom.xml similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-production/pom.xml rename to vertx-vaadin-tests/test-frontend/vite-pwa-production/pom.xml diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-production/src/main/java/com/vaadin/viteapp/AppShell.java b/vertx-vaadin-tests/test-frontend/vite-pwa-production/src/main/java/com/vaadin/viteapp/AppShell.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-production/src/main/java/com/vaadin/viteapp/AppShell.java rename to vertx-vaadin-tests/test-frontend/vite-pwa-production/src/main/java/com/vaadin/viteapp/AppShell.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-production/src/main/java/com/vaadin/viteapp/MainView.java b/vertx-vaadin-tests/test-frontend/vite-pwa-production/src/main/java/com/vaadin/viteapp/MainView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-production/src/main/java/com/vaadin/viteapp/MainView.java rename to vertx-vaadin-tests/test-frontend/vite-pwa-production/src/main/java/com/vaadin/viteapp/MainView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-production/src/test/java/com/vaadin/viteapp/MainIT.java b/vertx-vaadin-tests/test-frontend/vite-pwa-production/src/test/java/com/vaadin/viteapp/MainIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-production/src/test/java/com/vaadin/viteapp/MainIT.java rename to vertx-vaadin-tests/test-frontend/vite-pwa-production/src/test/java/com/vaadin/viteapp/MainIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/tsconfig.json b/vertx-vaadin-tests/test-frontend/vite-pwa-production/tsconfig.json similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/tsconfig.json rename to vertx-vaadin-tests/test-frontend/vite-pwa-production/tsconfig.json diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/types.d.ts b/vertx-vaadin-tests/test-frontend/vite-pwa-production/types.d.ts similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-disabled-offline/types.d.ts rename to vertx-vaadin-tests/test-frontend/vite-pwa-production/types.d.ts diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa/.gitignore b/vertx-vaadin-tests/test-frontend/vite-pwa/.gitignore similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa/.gitignore rename to vertx-vaadin-tests/test-frontend/vite-pwa/.gitignore diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa/.npmrc b/vertx-vaadin-tests/test-frontend/vite-pwa/.npmrc similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa/.npmrc rename to vertx-vaadin-tests/test-frontend/vite-pwa/.npmrc diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-production/.pnpmfile.cjs b/vertx-vaadin-tests/test-frontend/vite-pwa/.pnpmfile.cjs similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-production/.pnpmfile.cjs rename to vertx-vaadin-tests/test-frontend/vite-pwa/.pnpmfile.cjs diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa/frontend/about-view.ts b/vertx-vaadin-tests/test-frontend/vite-pwa/frontend/about-view.ts similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa/frontend/about-view.ts rename to vertx-vaadin-tests/test-frontend/vite-pwa/frontend/about-view.ts diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa/frontend/home-view.css b/vertx-vaadin-tests/test-frontend/vite-pwa/frontend/home-view.css similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa/frontend/home-view.css rename to vertx-vaadin-tests/test-frontend/vite-pwa/frontend/home-view.css diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa/frontend/home-view.ts b/vertx-vaadin-tests/test-frontend/vite-pwa/frontend/home-view.ts similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa/frontend/home-view.ts rename to vertx-vaadin-tests/test-frontend/vite-pwa/frontend/home-view.ts diff --git a/vertx-vaadin-tests/test-frontend/vite-pwa/frontend/index.html b/vertx-vaadin-tests/test-frontend/vite-pwa/frontend/index.html new file mode 100644 index 00000000..a5cdd401 --- /dev/null +++ b/vertx-vaadin-tests/test-frontend/vite-pwa/frontend/index.html @@ -0,0 +1,23 @@ + + + + + + + + + + + + +
+ + diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa/frontend/index.ts b/vertx-vaadin-tests/test-frontend/vite-pwa/frontend/index.ts similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa/frontend/index.ts rename to vertx-vaadin-tests/test-frontend/vite-pwa/frontend/index.ts diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa/frontend/themes/my-theme/fonts/Roboto-Regular.woff b/vertx-vaadin-tests/test-frontend/vite-pwa/frontend/themes/my-theme/fonts/Roboto-Regular.woff similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa/frontend/themes/my-theme/fonts/Roboto-Regular.woff rename to vertx-vaadin-tests/test-frontend/vite-pwa/frontend/themes/my-theme/fonts/Roboto-Regular.woff diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa/frontend/themes/my-theme/images/bg.jpeg b/vertx-vaadin-tests/test-frontend/vite-pwa/frontend/themes/my-theme/images/bg.jpeg similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa/frontend/themes/my-theme/images/bg.jpeg rename to vertx-vaadin-tests/test-frontend/vite-pwa/frontend/themes/my-theme/images/bg.jpeg diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa/frontend/themes/my-theme/styles.css b/vertx-vaadin-tests/test-frontend/vite-pwa/frontend/themes/my-theme/styles.css similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa/frontend/themes/my-theme/styles.css rename to vertx-vaadin-tests/test-frontend/vite-pwa/frontend/themes/my-theme/styles.css diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa/pom.xml b/vertx-vaadin-tests/test-frontend/vite-pwa/pom.xml similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa/pom.xml rename to vertx-vaadin-tests/test-frontend/vite-pwa/pom.xml diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa/src/main/java/com/vaadin/viteapp/AppShell.java b/vertx-vaadin-tests/test-frontend/vite-pwa/src/main/java/com/vaadin/viteapp/AppShell.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa/src/main/java/com/vaadin/viteapp/AppShell.java rename to vertx-vaadin-tests/test-frontend/vite-pwa/src/main/java/com/vaadin/viteapp/AppShell.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa/src/main/java/com/vaadin/viteapp/MainView.java b/vertx-vaadin-tests/test-frontend/vite-pwa/src/main/java/com/vaadin/viteapp/MainView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa/src/main/java/com/vaadin/viteapp/MainView.java rename to vertx-vaadin-tests/test-frontend/vite-pwa/src/main/java/com/vaadin/viteapp/MainView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa/src/test/java/com/vaadin/viteapp/MainIT.java b/vertx-vaadin-tests/test-frontend/vite-pwa/src/test/java/com/vaadin/viteapp/MainIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa/src/test/java/com/vaadin/viteapp/MainIT.java rename to vertx-vaadin-tests/test-frontend/vite-pwa/src/test/java/com/vaadin/viteapp/MainIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-production/tsconfig.json b/vertx-vaadin-tests/test-frontend/vite-pwa/tsconfig.json similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-production/tsconfig.json rename to vertx-vaadin-tests/test-frontend/vite-pwa/tsconfig.json diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-production/types.d.ts b/vertx-vaadin-tests/test-frontend/vite-pwa/types.d.ts similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-pwa-production/types.d.ts rename to vertx-vaadin-tests/test-frontend/vite-pwa/types.d.ts diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/.gitignore b/vertx-vaadin-tests/test-frontend/vite-test-assets/.gitignore similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/.gitignore rename to vertx-vaadin-tests/test-frontend/vite-test-assets/.gitignore diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@testscope/all/all.js b/vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@testscope/all/all.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@testscope/all/all.js rename to vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@testscope/all/all.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@testscope/all/package.json b/vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@testscope/all/package.json similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@testscope/all/package.json rename to vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@testscope/all/package.json diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@testscope/button/package.json b/vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@testscope/button/package.json similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@testscope/button/package.json rename to vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@testscope/button/package.json diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@testscope/button/src/testscope-button.js b/vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@testscope/button/src/testscope-button.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@testscope/button/src/testscope-button.js rename to vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@testscope/button/src/testscope-button.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@testscope/button/testscope-button.js b/vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@testscope/button/testscope-button.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@testscope/button/testscope-button.js rename to vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@testscope/button/testscope-button.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@testscope/map/package.json b/vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@testscope/map/package.json similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@testscope/map/package.json rename to vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@testscope/map/package.json diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@testscope/map/src/lib.js b/vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@testscope/map/src/lib.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@testscope/map/src/lib.js rename to vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@testscope/map/src/lib.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@testscope/map/src/testscope-map.js b/vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@testscope/map/src/testscope-map.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@testscope/map/src/testscope-map.js rename to vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@testscope/map/src/testscope-map.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@testscope/map/testscope-map.js b/vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@testscope/map/testscope-map.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@testscope/map/testscope-map.js rename to vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@testscope/map/testscope-map.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@vaadin/bundles-old/package.json b/vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@vaadin/bundles-old/package.json similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@vaadin/bundles-old/package.json rename to vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@vaadin/bundles-old/package.json diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@vaadin/bundles-old/vaadin-bundle.json b/vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@vaadin/bundles-old/vaadin-bundle.json similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@vaadin/bundles-old/vaadin-bundle.json rename to vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@vaadin/bundles-old/vaadin-bundle.json diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@vaadin/bundles-old/vaadin.js b/vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@vaadin/bundles-old/vaadin.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@vaadin/bundles-old/vaadin.js rename to vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@vaadin/bundles-old/vaadin.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@vaadin/bundles/package.json b/vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@vaadin/bundles/package.json similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@vaadin/bundles/package.json rename to vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@vaadin/bundles/package.json diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@vaadin/bundles/vaadin-bundle.json b/vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@vaadin/bundles/vaadin-bundle.json similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@vaadin/bundles/vaadin-bundle.json rename to vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@vaadin/bundles/vaadin-bundle.json diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@vaadin/bundles/vaadin.js b/vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@vaadin/bundles/vaadin.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@vaadin/bundles/vaadin.js rename to vertx-vaadin-tests/test-frontend/vite-test-assets/packages/@vaadin/bundles/vaadin.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/pom.xml b/vertx-vaadin-tests/test-frontend/vite-test-assets/pom.xml similarity index 98% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/pom.xml rename to vertx-vaadin-tests/test-frontend/vite-test-assets/pom.xml index 8f2d6f67..e86eb00f 100644 --- a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/pom.xml +++ b/vertx-vaadin-tests/test-frontend/vite-test-assets/pom.xml @@ -21,7 +21,7 @@ com.github.mcollovati.vertx.tests test-frontend - 23.3.5-SNAPSHOT + 23.4.0-SNAPSHOT 4.0.0 diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/src/main/java/com/vaadin/flow/uitest/vertx/TestBootVerticle.java b/vertx-vaadin-tests/test-frontend/vite-test-assets/src/main/java/com/vaadin/flow/uitest/vertx/TestBootVerticle.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/src/main/java/com/vaadin/flow/uitest/vertx/TestBootVerticle.java rename to vertx-vaadin-tests/test-frontend/vite-test-assets/src/main/java/com/vaadin/flow/uitest/vertx/TestBootVerticle.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/src/main/java/com/vaadin/viteapp/views/template/LitComponent.java b/vertx-vaadin-tests/test-frontend/vite-test-assets/src/main/java/com/vaadin/viteapp/views/template/LitComponent.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/src/main/java/com/vaadin/viteapp/views/template/LitComponent.java rename to vertx-vaadin-tests/test-frontend/vite-test-assets/src/main/java/com/vaadin/viteapp/views/template/LitComponent.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/src/main/java/com/vaadin/viteapp/views/template/PolymerComponent.java b/vertx-vaadin-tests/test-frontend/vite-test-assets/src/main/java/com/vaadin/viteapp/views/template/PolymerComponent.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/src/main/java/com/vaadin/viteapp/views/template/PolymerComponent.java rename to vertx-vaadin-tests/test-frontend/vite-test-assets/src/main/java/com/vaadin/viteapp/views/template/PolymerComponent.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/src/main/java/com/vaadin/viteapp/views/template/ReflectivelyReferencedComponent.java b/vertx-vaadin-tests/test-frontend/vite-test-assets/src/main/java/com/vaadin/viteapp/views/template/ReflectivelyReferencedComponent.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/src/main/java/com/vaadin/viteapp/views/template/ReflectivelyReferencedComponent.java rename to vertx-vaadin-tests/test-frontend/vite-test-assets/src/main/java/com/vaadin/viteapp/views/template/ReflectivelyReferencedComponent.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/src/main/java/com/vaadin/viteapp/views/template/TemplateView.java b/vertx-vaadin-tests/test-frontend/vite-test-assets/src/main/java/com/vaadin/viteapp/views/template/TemplateView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/src/main/java/com/vaadin/viteapp/views/template/TemplateView.java rename to vertx-vaadin-tests/test-frontend/vite-test-assets/src/main/java/com/vaadin/viteapp/views/template/TemplateView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/src/main/resources/META-INF/frontend/bad.ts b/vertx-vaadin-tests/test-frontend/vite-test-assets/src/main/resources/META-INF/frontend/bad.ts similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/src/main/resources/META-INF/frontend/bad.ts rename to vertx-vaadin-tests/test-frontend/vite-test-assets/src/main/resources/META-INF/frontend/bad.ts diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/src/main/resources/META-INF/frontend/templates/LitComponent.ts b/vertx-vaadin-tests/test-frontend/vite-test-assets/src/main/resources/META-INF/frontend/templates/LitComponent.ts similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/src/main/resources/META-INF/frontend/templates/LitComponent.ts rename to vertx-vaadin-tests/test-frontend/vite-test-assets/src/main/resources/META-INF/frontend/templates/LitComponent.ts diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/src/main/resources/META-INF/frontend/templates/PolymerComponent.ts b/vertx-vaadin-tests/test-frontend/vite-test-assets/src/main/resources/META-INF/frontend/templates/PolymerComponent.ts similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/src/main/resources/META-INF/frontend/templates/PolymerComponent.ts rename to vertx-vaadin-tests/test-frontend/vite-test-assets/src/main/resources/META-INF/frontend/templates/PolymerComponent.ts diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/src/main/resources/META-INF/frontend/templates/ReflectivelyReferencedComponent.ts b/vertx-vaadin-tests/test-frontend/vite-test-assets/src/main/resources/META-INF/frontend/templates/ReflectivelyReferencedComponent.ts similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/src/main/resources/META-INF/frontend/templates/ReflectivelyReferencedComponent.ts rename to vertx-vaadin-tests/test-frontend/vite-test-assets/src/main/resources/META-INF/frontend/templates/ReflectivelyReferencedComponent.ts diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/src/test/java/com/vaadin/viteapp/TemplateIT.java b/vertx-vaadin-tests/test-frontend/vite-test-assets/src/test/java/com/vaadin/viteapp/TemplateIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-frontend/vite-test-assets/src/test/java/com/vaadin/viteapp/TemplateIT.java rename to vertx-vaadin-tests/test-frontend/vite-test-assets/src/test/java/com/vaadin/viteapp/TemplateIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-lumo/pom.xml b/vertx-vaadin-tests/test-lumo/pom.xml similarity index 95% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-lumo/pom.xml rename to vertx-vaadin-tests/test-lumo/pom.xml index 70e3a038..ae6c2f68 100644 --- a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-lumo/pom.xml +++ b/vertx-vaadin-tests/test-lumo/pom.xml @@ -6,7 +6,7 @@ com.github.mcollovati.vertx.tests vertx-vaadin-test - 23.3.5-SNAPSHOT + 23.4.0-SNAPSHOT flow-test-lumo Lumo class for use in test modules requiring LUMO diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-lumo/src/main/java/com/vaadin/flow/theme/lumo/Lumo.java b/vertx-vaadin-tests/test-lumo/src/main/java/com/vaadin/flow/theme/lumo/Lumo.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-lumo/src/main/java/com/vaadin/flow/theme/lumo/Lumo.java rename to vertx-vaadin-tests/test-lumo/src/main/java/com/vaadin/flow/theme/lumo/Lumo.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-lumo/src/main/resources/META-INF/resources/frontend/lumo-includes.ts b/vertx-vaadin-tests/test-lumo/src/main/resources/META-INF/resources/frontend/lumo-includes.ts similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-lumo/src/main/resources/META-INF/resources/frontend/lumo-includes.ts rename to vertx-vaadin-tests/test-lumo/src/main/resources/META-INF/resources/frontend/lumo-includes.ts diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-resources/pom.xml b/vertx-vaadin-tests/test-resources/pom.xml similarity index 94% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-resources/pom.xml rename to vertx-vaadin-tests/test-resources/pom.xml index 3591dbf2..37037444 100644 --- a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-resources/pom.xml +++ b/vertx-vaadin-tests/test-resources/pom.xml @@ -5,7 +5,7 @@ com.github.mcollovati.vertx.tests vertx-vaadin-test - 23.3.5-SNAPSHOT + 23.4.0-SNAPSHOT ../pom.xml vertx-vaadin-test-resources diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-resources/src/main/java/com/vaadin/flow/uitest/ui/dependencies/TestVersion.java b/vertx-vaadin-tests/test-resources/src/main/java/com/vaadin/flow/uitest/ui/dependencies/TestVersion.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-resources/src/main/java/com/vaadin/flow/uitest/ui/dependencies/TestVersion.java rename to vertx-vaadin-tests/test-resources/src/main/java/com/vaadin/flow/uitest/ui/dependencies/TestVersion.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-resources/src/main/java/com/vaadin/flow/uitest/ui/dependencies/ThemableTextField.java b/vertx-vaadin-tests/test-resources/src/main/java/com/vaadin/flow/uitest/ui/dependencies/ThemableTextField.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-resources/src/main/java/com/vaadin/flow/uitest/ui/dependencies/ThemableTextField.java rename to vertx-vaadin-tests/test-resources/src/main/java/com/vaadin/flow/uitest/ui/dependencies/ThemableTextField.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/css/allblueimportant.css b/vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/css/allblueimportant.css similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/css/allblueimportant.css rename to vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/css/allblueimportant.css diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/css/allred.css b/vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/css/allred.css similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/css/allred.css rename to vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/css/allred.css diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/html/combinedMixed.html b/vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/html/combinedMixed.html similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/html/combinedMixed.html rename to vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/html/combinedMixed.html diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/html/htmlimport1.html b/vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/html/htmlimport1.html similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/html/htmlimport1.html rename to vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/html/htmlimport1.html diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/html/htmlimport2.html b/vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/html/htmlimport2.html similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/html/htmlimport2.html rename to vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/html/htmlimport2.html diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/html/htmlimport4-js.js b/vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/html/htmlimport4-js.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/html/htmlimport4-js.js rename to vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/html/htmlimport4-js.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/html/htmlimport4.html b/vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/html/htmlimport4.html similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/html/htmlimport4.html rename to vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/html/htmlimport4.html diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/html/mixedImport1.html b/vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/html/mixedImport1.html similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/html/mixedImport1.html rename to vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/html/mixedImport1.html diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/html/mixedImport2.html b/vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/html/mixedImport2.html similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/html/mixedImport2.html rename to vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/html/mixedImport2.html diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/html/orderedHtmlImport.html b/vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/html/orderedHtmlImport.html similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/html/orderedHtmlImport.html rename to vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/html/orderedHtmlImport.html diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/js/body-click-listener.js b/vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/js/body-click-listener.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/js/body-click-listener.js rename to vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/js/body-click-listener.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/js/read-global-var.js b/vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/js/read-global-var.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/js/read-global-var.js rename to vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/js/read-global-var.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/js/script1.js b/vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/js/script1.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/js/script1.js rename to vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/js/script1.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/js/script2.js b/vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/js/script2.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/js/script2.js rename to vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/js/script2.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/js/set-global-var.js b/vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/js/set-global-var.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/js/set-global-var.js rename to vertx-vaadin-tests/test-resources/src/main/resources/META-INF/resources/test-files/js/set-global-var.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-resources/src/main/resources/simplelogger.properties b/vertx-vaadin-tests/test-resources/src/main/resources/simplelogger.properties similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-resources/src/main/resources/simplelogger.properties rename to vertx-vaadin-tests/test-resources/src/main/resources/simplelogger.properties diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/.gitignore b/vertx-vaadin-tests/test-root-context/.gitignore similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/.gitignore rename to vertx-vaadin-tests/test-root-context/.gitignore diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/AfterServerChanges.js b/vertx-vaadin-tests/test-root-context/frontend/AfterServerChanges.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/AfterServerChanges.js rename to vertx-vaadin-tests/test-root-context/frontend/AfterServerChanges.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/AttachExistingDomElementById.js b/vertx-vaadin-tests/test-root-context/frontend/AttachExistingDomElementById.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/AttachExistingDomElementById.js rename to vertx-vaadin-tests/test-root-context/frontend/AttachExistingDomElementById.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/BasicTypeList.js b/vertx-vaadin-tests/test-root-context/frontend/BasicTypeList.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/BasicTypeList.js rename to vertx-vaadin-tests/test-root-context/frontend/BasicTypeList.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/BeanInListing.js b/vertx-vaadin-tests/test-root-context/frontend/BeanInListing.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/BeanInListing.js rename to vertx-vaadin-tests/test-root-context/frontend/BeanInListing.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/ChangeInjectedComponentTextView.js b/vertx-vaadin-tests/test-root-context/frontend/ChangeInjectedComponentTextView.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/ChangeInjectedComponentTextView.js rename to vertx-vaadin-tests/test-root-context/frontend/ChangeInjectedComponentTextView.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/ChildIdTemplate.js b/vertx-vaadin-tests/test-root-context/frontend/ChildIdTemplate.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/ChildIdTemplate.js rename to vertx-vaadin-tests/test-root-context/frontend/ChildIdTemplate.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/ChildOrderTemplate.js b/vertx-vaadin-tests/test-root-context/frontend/ChildOrderTemplate.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/ChildOrderTemplate.js rename to vertx-vaadin-tests/test-root-context/frontend/ChildOrderTemplate.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/ChildTemplate.js b/vertx-vaadin-tests/test-root-context/frontend/ChildTemplate.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/ChildTemplate.js rename to vertx-vaadin-tests/test-root-context/frontend/ChildTemplate.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/ClearList.js b/vertx-vaadin-tests/test-root-context/frontend/ClearList.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/ClearList.js rename to vertx-vaadin-tests/test-root-context/frontend/ClearList.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/ClearNodeChildren.js b/vertx-vaadin-tests/test-root-context/frontend/ClearNodeChildren.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/ClearNodeChildren.js rename to vertx-vaadin-tests/test-root-context/frontend/ClearNodeChildren.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/ClientUpdateMode.js b/vertx-vaadin-tests/test-root-context/frontend/ClientUpdateMode.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/ClientUpdateMode.js rename to vertx-vaadin-tests/test-root-context/frontend/ClientUpdateMode.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/ConvertToBean.js b/vertx-vaadin-tests/test-root-context/frontend/ConvertToBean.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/ConvertToBean.js rename to vertx-vaadin-tests/test-root-context/frontend/ConvertToBean.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/DomListenerOnAttach.js b/vertx-vaadin-tests/test-root-context/frontend/DomListenerOnAttach.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/DomListenerOnAttach.js rename to vertx-vaadin-tests/test-root-context/frontend/DomListenerOnAttach.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/DomRepeatPolymerTemplate.js b/vertx-vaadin-tests/test-root-context/frontend/DomRepeatPolymerTemplate.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/DomRepeatPolymerTemplate.js rename to vertx-vaadin-tests/test-root-context/frontend/DomRepeatPolymerTemplate.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/ElementInitOrder.js b/vertx-vaadin-tests/test-root-context/frontend/ElementInitOrder.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/ElementInitOrder.js rename to vertx-vaadin-tests/test-root-context/frontend/ElementInitOrder.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/EmptyLists.js b/vertx-vaadin-tests/test-root-context/frontend/EmptyLists.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/EmptyLists.js rename to vertx-vaadin-tests/test-root-context/frontend/EmptyLists.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/EventHandler.js b/vertx-vaadin-tests/test-root-context/frontend/EventHandler.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/EventHandler.js rename to vertx-vaadin-tests/test-root-context/frontend/EventHandler.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/ExceptionsDuringPropertyUpdates.js b/vertx-vaadin-tests/test-root-context/frontend/ExceptionsDuringPropertyUpdates.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/ExceptionsDuringPropertyUpdates.js rename to vertx-vaadin-tests/test-root-context/frontend/ExceptionsDuringPropertyUpdates.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/HiddenTemplate.js b/vertx-vaadin-tests/test-root-context/frontend/HiddenTemplate.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/HiddenTemplate.js rename to vertx-vaadin-tests/test-root-context/frontend/HiddenTemplate.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/InjectScriptTagTemplate.js b/vertx-vaadin-tests/test-root-context/frontend/InjectScriptTagTemplate.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/InjectScriptTagTemplate.js rename to vertx-vaadin-tests/test-root-context/frontend/InjectScriptTagTemplate.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/InjectedChild.js b/vertx-vaadin-tests/test-root-context/frontend/InjectedChild.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/InjectedChild.js rename to vertx-vaadin-tests/test-root-context/frontend/InjectedChild.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/InjectsJsTemplate.js b/vertx-vaadin-tests/test-root-context/frontend/InjectsJsTemplate.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/InjectsJsTemplate.js rename to vertx-vaadin-tests/test-root-context/frontend/InjectsJsTemplate.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/JsGrandParent.js b/vertx-vaadin-tests/test-root-context/frontend/JsGrandParent.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/JsGrandParent.js rename to vertx-vaadin-tests/test-root-context/frontend/JsGrandParent.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/JsInjectedElement.js b/vertx-vaadin-tests/test-root-context/frontend/JsInjectedElement.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/JsInjectedElement.js rename to vertx-vaadin-tests/test-root-context/frontend/JsInjectedElement.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/JsInjectedGrandChild.js b/vertx-vaadin-tests/test-root-context/frontend/JsInjectedGrandChild.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/JsInjectedGrandChild.js rename to vertx-vaadin-tests/test-root-context/frontend/JsInjectedGrandChild.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/JsSubTemplate.js b/vertx-vaadin-tests/test-root-context/frontend/JsSubTemplate.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/JsSubTemplate.js rename to vertx-vaadin-tests/test-root-context/frontend/JsSubTemplate.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/ListBinding.js b/vertx-vaadin-tests/test-root-context/frontend/ListBinding.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/ListBinding.js rename to vertx-vaadin-tests/test-root-context/frontend/ListBinding.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/ListInsideListBinding.js b/vertx-vaadin-tests/test-root-context/frontend/ListInsideListBinding.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/ListInsideListBinding.js rename to vertx-vaadin-tests/test-root-context/frontend/ListInsideListBinding.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/MixinInjectsElement.js b/vertx-vaadin-tests/test-root-context/frontend/MixinInjectsElement.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/MixinInjectsElement.js rename to vertx-vaadin-tests/test-root-context/frontend/MixinInjectsElement.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/ModelList.js b/vertx-vaadin-tests/test-root-context/frontend/ModelList.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/ModelList.js rename to vertx-vaadin-tests/test-root-context/frontend/ModelList.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/MultiplePropsMutation.js b/vertx-vaadin-tests/test-root-context/frontend/MultiplePropsMutation.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/MultiplePropsMutation.js rename to vertx-vaadin-tests/test-root-context/frontend/MultiplePropsMutation.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/OneWayPolymerBinding.js b/vertx-vaadin-tests/test-root-context/frontend/OneWayPolymerBinding.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/OneWayPolymerBinding.js rename to vertx-vaadin-tests/test-root-context/frontend/OneWayPolymerBinding.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/ParentIdTemplate.js b/vertx-vaadin-tests/test-root-context/frontend/ParentIdTemplate.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/ParentIdTemplate.js rename to vertx-vaadin-tests/test-root-context/frontend/ParentIdTemplate.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/ParentTemplate.js b/vertx-vaadin-tests/test-root-context/frontend/ParentTemplate.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/ParentTemplate.js rename to vertx-vaadin-tests/test-root-context/frontend/ParentTemplate.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/ParentTemplateInjectChild.js b/vertx-vaadin-tests/test-root-context/frontend/ParentTemplateInjectChild.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/ParentTemplateInjectChild.js rename to vertx-vaadin-tests/test-root-context/frontend/ParentTemplateInjectChild.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/PolymerDefaultPropertyValue.js b/vertx-vaadin-tests/test-root-context/frontend/PolymerDefaultPropertyValue.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/PolymerDefaultPropertyValue.js rename to vertx-vaadin-tests/test-root-context/frontend/PolymerDefaultPropertyValue.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/PolymerModelProperties.js b/vertx-vaadin-tests/test-root-context/frontend/PolymerModelProperties.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/PolymerModelProperties.js rename to vertx-vaadin-tests/test-root-context/frontend/PolymerModelProperties.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/PolymerPropertyChange.js b/vertx-vaadin-tests/test-root-context/frontend/PolymerPropertyChange.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/PolymerPropertyChange.js rename to vertx-vaadin-tests/test-root-context/frontend/PolymerPropertyChange.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/PolymerPropertyMutationInObserver.js b/vertx-vaadin-tests/test-root-context/frontend/PolymerPropertyMutationInObserver.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/PolymerPropertyMutationInObserver.js rename to vertx-vaadin-tests/test-root-context/frontend/PolymerPropertyMutationInObserver.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/PropertiesUpdatedBeforeChangeEvents.js b/vertx-vaadin-tests/test-root-context/frontend/PropertiesUpdatedBeforeChangeEvents.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/PropertiesUpdatedBeforeChangeEvents.js rename to vertx-vaadin-tests/test-root-context/frontend/PropertiesUpdatedBeforeChangeEvents.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/ServerModelNullList.js b/vertx-vaadin-tests/test-root-context/frontend/ServerModelNullList.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/ServerModelNullList.js rename to vertx-vaadin-tests/test-root-context/frontend/ServerModelNullList.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/ServerRequest.js b/vertx-vaadin-tests/test-root-context/frontend/ServerRequest.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/ServerRequest.js rename to vertx-vaadin-tests/test-root-context/frontend/ServerRequest.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/SubPropertyModel.js b/vertx-vaadin-tests/test-root-context/frontend/SubPropertyModel.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/SubPropertyModel.js rename to vertx-vaadin-tests/test-root-context/frontend/SubPropertyModel.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/TemplateMappingDetector.js b/vertx-vaadin-tests/test-root-context/frontend/TemplateMappingDetector.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/TemplateMappingDetector.js rename to vertx-vaadin-tests/test-root-context/frontend/TemplateMappingDetector.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/TemplateMappingDetectorParent.js b/vertx-vaadin-tests/test-root-context/frontend/TemplateMappingDetectorParent.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/TemplateMappingDetectorParent.js rename to vertx-vaadin-tests/test-root-context/frontend/TemplateMappingDetectorParent.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/TemplateProperties.js b/vertx-vaadin-tests/test-root-context/frontend/TemplateProperties.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/TemplateProperties.js rename to vertx-vaadin-tests/test-root-context/frontend/TemplateProperties.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/TemplateWithConnectedCallbacks.js b/vertx-vaadin-tests/test-root-context/frontend/TemplateWithConnectedCallbacks.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/TemplateWithConnectedCallbacks.js rename to vertx-vaadin-tests/test-root-context/frontend/TemplateWithConnectedCallbacks.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/TemplateWithInjectedId.js b/vertx-vaadin-tests/test-root-context/frontend/TemplateWithInjectedId.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/TemplateWithInjectedId.js rename to vertx-vaadin-tests/test-root-context/frontend/TemplateWithInjectedId.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/TwoWayListBinding.js b/vertx-vaadin-tests/test-root-context/frontend/TwoWayListBinding.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/TwoWayListBinding.js rename to vertx-vaadin-tests/test-root-context/frontend/TwoWayListBinding.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/TwoWayPolymerBinding.js b/vertx-vaadin-tests/test-root-context/frontend/TwoWayPolymerBinding.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/TwoWayPolymerBinding.js rename to vertx-vaadin-tests/test-root-context/frontend/TwoWayPolymerBinding.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/UpdatableModelProperties.js b/vertx-vaadin-tests/test-root-context/frontend/UpdatableModelProperties.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/UpdatableModelProperties.js rename to vertx-vaadin-tests/test-root-context/frontend/UpdatableModelProperties.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/UpgradeElement.js b/vertx-vaadin-tests/test-root-context/frontend/UpgradeElement.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/UpgradeElement.js rename to vertx-vaadin-tests/test-root-context/frontend/UpgradeElement.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/com/vaadin/flow/uitest/ui/CustomCustomElement.js b/vertx-vaadin-tests/test-root-context/frontend/com/vaadin/flow/uitest/ui/CustomCustomElement.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/com/vaadin/flow/uitest/ui/CustomCustomElement.js rename to vertx-vaadin-tests/test-root-context/frontend/com/vaadin/flow/uitest/ui/CustomCustomElement.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/com/vaadin/flow/uitest/ui/dependencies/eager.js b/vertx-vaadin-tests/test-root-context/frontend/com/vaadin/flow/uitest/ui/dependencies/eager.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/com/vaadin/flow/uitest/ui/dependencies/eager.js rename to vertx-vaadin-tests/test-root-context/frontend/com/vaadin/flow/uitest/ui/dependencies/eager.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/com/vaadin/flow/uitest/ui/dependencies/inline.js b/vertx-vaadin-tests/test-root-context/frontend/com/vaadin/flow/uitest/ui/dependencies/inline.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/com/vaadin/flow/uitest/ui/dependencies/inline.js rename to vertx-vaadin-tests/test-root-context/frontend/com/vaadin/flow/uitest/ui/dependencies/inline.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/com/vaadin/flow/uitest/ui/dependencies/lazy.js b/vertx-vaadin-tests/test-root-context/frontend/com/vaadin/flow/uitest/ui/dependencies/lazy.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/com/vaadin/flow/uitest/ui/dependencies/lazy.js rename to vertx-vaadin-tests/test-root-context/frontend/com/vaadin/flow/uitest/ui/dependencies/lazy.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/components/context-inline.js b/vertx-vaadin-tests/test-root-context/frontend/components/context-inline.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/components/context-inline.js rename to vertx-vaadin-tests/test-root-context/frontend/components/context-inline.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/components/frontend-inline.js b/vertx-vaadin-tests/test-root-context/frontend/components/frontend-inline.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/components/frontend-inline.js rename to vertx-vaadin-tests/test-root-context/frontend/components/frontend-inline.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/dependencies/eager-module.js b/vertx-vaadin-tests/test-root-context/frontend/dependencies/eager-module.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/dependencies/eager-module.js rename to vertx-vaadin-tests/test-root-context/frontend/dependencies/eager-module.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/dependencies/eager.css b/vertx-vaadin-tests/test-root-context/frontend/dependencies/eager.css similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/dependencies/eager.css rename to vertx-vaadin-tests/test-root-context/frontend/dependencies/eager.css diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/dependencies/eager.js b/vertx-vaadin-tests/test-root-context/frontend/dependencies/eager.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/dependencies/eager.js rename to vertx-vaadin-tests/test-root-context/frontend/dependencies/eager.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/dependencies/inline.css b/vertx-vaadin-tests/test-root-context/frontend/dependencies/inline.css similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/dependencies/inline.css rename to vertx-vaadin-tests/test-root-context/frontend/dependencies/inline.css diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/dependencies/inline.js b/vertx-vaadin-tests/test-root-context/frontend/dependencies/inline.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/dependencies/inline.js rename to vertx-vaadin-tests/test-root-context/frontend/dependencies/inline.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/dependencies/lazy.css b/vertx-vaadin-tests/test-root-context/frontend/dependencies/lazy.css similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/dependencies/lazy.css rename to vertx-vaadin-tests/test-root-context/frontend/dependencies/lazy.css diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/dependencies/lazy.js b/vertx-vaadin-tests/test-root-context/frontend/dependencies/lazy.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/dependencies/lazy.js rename to vertx-vaadin-tests/test-root-context/frontend/dependencies/lazy.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/divConnector.js b/vertx-vaadin-tests/test-root-context/frontend/divConnector.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/divConnector.js rename to vertx-vaadin-tests/test-root-context/frontend/divConnector.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/in-memory-connector.js b/vertx-vaadin-tests/test-root-context/frontend/in-memory-connector.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/in-memory-connector.js rename to vertx-vaadin-tests/test-root-context/frontend/in-memory-connector.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/index.html b/vertx-vaadin-tests/test-root-context/frontend/index.html similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/index.html rename to vertx-vaadin-tests/test-root-context/frontend/index.html diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/index.ts b/vertx-vaadin-tests/test-root-context/frontend/index.ts similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/index.ts rename to vertx-vaadin-tests/test-root-context/frontend/index.ts diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/js-get-by-id.js b/vertx-vaadin-tests/test-root-context/frontend/js-get-by-id.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/js-get-by-id.js rename to vertx-vaadin-tests/test-root-context/frontend/js-get-by-id.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/template-scalability-panel.js b/vertx-vaadin-tests/test-root-context/frontend/template-scalability-panel.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/template-scalability-panel.js rename to vertx-vaadin-tests/test-root-context/frontend/template-scalability-panel.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/template-scalability-view.js b/vertx-vaadin-tests/test-root-context/frontend/template-scalability-view.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/template-scalability-view.js rename to vertx-vaadin-tests/test-root-context/frontend/template-scalability-view.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/template-without-shadow-root-view.js b/vertx-vaadin-tests/test-root-context/frontend/template-without-shadow-root-view.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/template-without-shadow-root-view.js rename to vertx-vaadin-tests/test-root-context/frontend/template-without-shadow-root-view.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/x-lazy-widget.js b/vertx-vaadin-tests/test-root-context/frontend/x-lazy-widget.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/frontend/x-lazy-widget.js rename to vertx-vaadin-tests/test-root-context/frontend/x-lazy-widget.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/pom.xml b/vertx-vaadin-tests/test-root-context/pom.xml similarity index 90% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/pom.xml rename to vertx-vaadin-tests/test-root-context/pom.xml index df486330..6e076504 100644 --- a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/pom.xml +++ b/vertx-vaadin-tests/test-root-context/pom.xml @@ -6,7 +6,7 @@ com.github.mcollovati.vertx.tests vertx-vaadin-test - 23.3.5-SNAPSHOT + 23.4.0-SNAPSHOT ../pom.xml vertx-vaadin-test-root-context @@ -265,7 +265,6 @@ - true false @@ -296,27 +295,5 @@
- - circleci - - - - org.apache.maven.plugins - maven-failsafe-plugin - - none - 3 - 1 - - 1 - - 2 - - - - - - -
diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/reference-screenshots/.gitkeep b/vertx-vaadin-tests/test-root-context/reference-screenshots/.gitkeep similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/reference-screenshots/.gitkeep rename to vertx-vaadin-tests/test-root-context/reference-screenshots/.gitkeep diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/InitialExtendedClientDetailsView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/InitialExtendedClientDetailsView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/InitialExtendedClientDetailsView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/InitialExtendedClientDetailsView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/TestAppShell.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/TestAppShell.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/TestAppShell.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/TestAppShell.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/TestPush.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/TestPush.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/TestPush.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/TestPush.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/VerifyBrowserVersionView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/VerifyBrowserVersionView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/VerifyBrowserVersionView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/VerifyBrowserVersionView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/MyException.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/MyException.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/MyException.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/MyException.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/AbstractDebounceSynchronizeView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/AbstractDebounceSynchronizeView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/AbstractDebounceSynchronizeView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/AbstractDebounceSynchronizeView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/AbstractErrorHandlerView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/AbstractErrorHandlerView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/AbstractErrorHandlerView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/AbstractErrorHandlerView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/AbstractPushUpdateDivView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/AbstractPushUpdateDivView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/AbstractPushUpdateDivView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/AbstractPushUpdateDivView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/AttachExistingElementView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/AttachExistingElementView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/AttachExistingElementView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/AttachExistingElementView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/AttachListenerView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/AttachListenerView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/AttachListenerView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/AttachListenerView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/BackButtonServerRoundTripView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/BackButtonServerRoundTripView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/BackButtonServerRoundTripView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/BackButtonServerRoundTripView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/BaseHrefView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/BaseHrefView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/BaseHrefView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/BaseHrefView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/BasicComponentView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/BasicComponentView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/BasicComponentView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/BasicComponentView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/BasicElementView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/BasicElementView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/BasicElementView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/BasicElementView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/BodyScrollView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/BodyScrollView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/BodyScrollView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/BodyScrollView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/BrowserWindowResizeView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/BrowserWindowResizeView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/BrowserWindowResizeView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/BrowserWindowResizeView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/CallFunctionBeforeRemoveView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/CallFunctionBeforeRemoveView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/CallFunctionBeforeRemoveView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/CallFunctionBeforeRemoveView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/CompositeNestedView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/CompositeNestedView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/CompositeNestedView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/CompositeNestedView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/CompositeView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/CompositeView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/CompositeView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/CompositeView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/CountUIsView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/CountUIsView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/CountUIsView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/CountUIsView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/CustomCustomElementView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/CustomCustomElementView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/CustomCustomElementView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/CustomCustomElementView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/DebounceSynchronizePropertyView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/DebounceSynchronizePropertyView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/DebounceSynchronizePropertyView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/DebounceSynchronizePropertyView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/DnDAttachDetachView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/DnDAttachDetachView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/DnDAttachDetachView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/DnDAttachDetachView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/DnDCustomComponentView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/DnDCustomComponentView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/DnDCustomComponentView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/DnDCustomComponentView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/DnDView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/DnDView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/DnDView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/DnDView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/DomEventFilterView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/DomEventFilterView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/DomEventFilterView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/DomEventFilterView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/DomListenerOnAttachView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/DomListenerOnAttachView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/DomListenerOnAttachView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/DomListenerOnAttachView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/DynamicTitleView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/DynamicTitleView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/DynamicTitleView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/DynamicTitleView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/DynamicallyRegisteredRoute.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/DynamicallyRegisteredRoute.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/DynamicallyRegisteredRoute.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/DynamicallyRegisteredRoute.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ElementInitOrderView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ElementInitOrderView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ElementInitOrderView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ElementInitOrderView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ElementInnerHtmlView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ElementInnerHtmlView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ElementInnerHtmlView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ElementInnerHtmlView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ElementRemoveItselfView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ElementRemoveItselfView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ElementRemoveItselfView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ElementRemoveItselfView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ElementStyleView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ElementStyleView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ElementStyleView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ElementStyleView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/EnabledView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/EnabledView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/EnabledView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/EnabledView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ErrorHandlingView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ErrorHandlingView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ErrorHandlingView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ErrorHandlingView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/EventListenersView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/EventListenersView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/EventListenersView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/EventListenersView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ExceptionDuringMapSyncView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ExceptionDuringMapSyncView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ExceptionDuringMapSyncView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ExceptionDuringMapSyncView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ExecJavaScriptView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ExecJavaScriptView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ExecJavaScriptView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ExecJavaScriptView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ExtendedClientDetailsView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ExtendedClientDetailsView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ExtendedClientDetailsView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ExtendedClientDetailsView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ForwardToView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ForwardToView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ForwardToView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ForwardToView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/FragmentLinkView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/FragmentLinkView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/FragmentLinkView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/FragmentLinkView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/FragmentLinkView2.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/FragmentLinkView2.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/FragmentLinkView2.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/FragmentLinkView2.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/HasUrlParameterErrorView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/HasUrlParameterErrorView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/HasUrlParameterErrorView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/HasUrlParameterErrorView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/HistoryView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/HistoryView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/HistoryView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/HistoryView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ImageClickView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ImageClickView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ImageClickView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ImageClickView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/InMemoryChildrenView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/InMemoryChildrenView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/InMemoryChildrenView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/InMemoryChildrenView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/InternalErrorView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/InternalErrorView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/InternalErrorView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/InternalErrorView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/JavaScriptReturnValueView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/JavaScriptReturnValueView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/JavaScriptReturnValueView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/JavaScriptReturnValueView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/JsApiGetByIdView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/JsApiGetByIdView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/JsApiGetByIdView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/JsApiGetByIdView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/KeyboardEventView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/KeyboardEventView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/KeyboardEventView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/KeyboardEventView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/LoadingIndicatorView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/LoadingIndicatorView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/LoadingIndicatorView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/LoadingIndicatorView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/LongPollingMultipleThreadsView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/LongPollingMultipleThreadsView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/LongPollingMultipleThreadsView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/LongPollingMultipleThreadsView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/LongPollingPushView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/LongPollingPushView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/LongPollingPushView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/LongPollingPushView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/MyExceptionHandler.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/MyExceptionHandler.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/MyExceptionHandler.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/MyExceptionHandler.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/NavigationTriggerView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/NavigationTriggerView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/NavigationTriggerView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/NavigationTriggerView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/PageView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/PageView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/PageView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/PageView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/PopStateHandlerView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/PopStateHandlerView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/PopStateHandlerView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/PopStateHandlerView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/PostponeProceedView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/PostponeProceedView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/PostponeProceedView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/PostponeProceedView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/PreserveOnRefreshView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/PreserveOnRefreshView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/PreserveOnRefreshView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/PreserveOnRefreshView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/PushLongPollingUpdateDivView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/PushLongPollingUpdateDivView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/PushLongPollingUpdateDivView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/PushLongPollingUpdateDivView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/PushSettingsView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/PushSettingsView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/PushSettingsView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/PushSettingsView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/PushWSUpdateDivView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/PushWSUpdateDivView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/PushWSUpdateDivView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/PushWSUpdateDivView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/RequestParametersHistoryView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/RequestParametersHistoryView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/RequestParametersHistoryView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/RequestParametersHistoryView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/RequestParametersView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/RequestParametersView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/RequestParametersView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/RequestParametersView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/RerouteView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/RerouteView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/RerouteView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/RerouteView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ResynchronizationView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ResynchronizationView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ResynchronizationView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ResynchronizationView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ReturnChannelView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ReturnChannelView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ReturnChannelView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ReturnChannelView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/RouterLinkView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/RouterLinkView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/RouterLinkView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/RouterLinkView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ScriptInjectView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ScriptInjectView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ScriptInjectView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ScriptInjectView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/SerializeUIView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/SerializeUIView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/SerializeUIView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/SerializeUIView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ServiceInitListenersView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ServiceInitListenersView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ServiceInitListenersView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ServiceInitListenersView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/SessionCloseLogoutView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/SessionCloseLogoutView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/SessionCloseLogoutView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/SessionCloseLogoutView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/SetParameterForwardToView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/SetParameterForwardToView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/SetParameterForwardToView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/SetParameterForwardToView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ShadowRootView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ShadowRootView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ShadowRootView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ShadowRootView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ShortcutsView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ShortcutsView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ShortcutsView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ShortcutsView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/StaticHtmlView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/StaticHtmlView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/StaticHtmlView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/StaticHtmlView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/StreamResourceView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/StreamResourceView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/StreamResourceView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/StreamResourceView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/SynchronizedPropertyView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/SynchronizedPropertyView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/SynchronizedPropertyView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/SynchronizedPropertyView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/TestingServiceInitListener.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/TestingServiceInitListener.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/TestingServiceInitListener.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/TestingServiceInitListener.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/TimingInfoReportedView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/TimingInfoReportedView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/TimingInfoReportedView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/TimingInfoReportedView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/TitleView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/TitleView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/TitleView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/TitleView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/UIElementView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/UIElementView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/UIElementView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/UIElementView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ValueChangeModeView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ValueChangeModeView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ValueChangeModeView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/ValueChangeModeView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/VisibilityView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/VisibilityView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/VisibilityView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/VisibilityView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/WaitForVaadinView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/WaitForVaadinView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/WaitForVaadinView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/WaitForVaadinView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/WebComponentsView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/WebComponentsView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/WebComponentsView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/WebComponentsView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/dependencies/AnnotatedFrontendInlineView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/dependencies/AnnotatedFrontendInlineView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/dependencies/AnnotatedFrontendInlineView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/dependencies/AnnotatedFrontendInlineView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/dependencies/ComponentWithExternalJavaScript.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/dependencies/ComponentWithExternalJavaScript.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/dependencies/ComponentWithExternalJavaScript.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/dependencies/ComponentWithExternalJavaScript.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/dependencies/DependenciesLoadingAnnotationsView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/dependencies/DependenciesLoadingAnnotationsView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/dependencies/DependenciesLoadingAnnotationsView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/dependencies/DependenciesLoadingAnnotationsView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/dependencies/DependenciesLoadingPageApiView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/dependencies/DependenciesLoadingPageApiView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/dependencies/DependenciesLoadingPageApiView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/dependencies/DependenciesLoadingPageApiView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/dependencies/DynamicDependencyView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/dependencies/DynamicDependencyView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/dependencies/DynamicDependencyView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/dependencies/DynamicDependencyView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/dependencies/ExternalJavaScriptView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/dependencies/ExternalJavaScriptView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/dependencies/ExternalJavaScriptView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/dependencies/ExternalJavaScriptView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/frontend/UsageStatisticsView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/frontend/UsageStatisticsView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/frontend/UsageStatisticsView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/frontend/UsageStatisticsView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/routing/ForwardPage.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/routing/ForwardPage.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/routing/ForwardPage.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/routing/ForwardPage.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/routing/ISEHandler.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/routing/ISEHandler.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/routing/ISEHandler.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/routing/ISEHandler.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/routing/ISELayout.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/routing/ISELayout.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/routing/ISELayout.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/routing/ISELayout.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/routing/ISETargetView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/routing/ISETargetView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/routing/ISETargetView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/routing/ISETargetView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/routing/NPEHandler.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/routing/NPEHandler.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/routing/NPEHandler.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/routing/NPEHandler.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/routing/NPETargetView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/routing/NPETargetView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/routing/NPETargetView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/routing/NPETargetView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/routing/PushLayout.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/routing/PushLayout.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/routing/PushLayout.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/routing/PushLayout.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/routing/PushRouteNotFoundView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/routing/PushRouteNotFoundView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/routing/PushRouteNotFoundView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/routing/PushRouteNotFoundView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/scroll/CustomScrollCallbacksView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/scroll/CustomScrollCallbacksView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/scroll/CustomScrollCallbacksView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/scroll/CustomScrollCallbacksView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/scroll/LongToOpenView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/scroll/LongToOpenView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/scroll/LongToOpenView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/scroll/LongToOpenView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/scroll/MultipleAnchorsView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/scroll/MultipleAnchorsView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/scroll/MultipleAnchorsView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/scroll/MultipleAnchorsView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/scroll/PushStateScrollView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/scroll/PushStateScrollView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/scroll/PushStateScrollView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/scroll/PushStateScrollView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/scroll/ScrollView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/scroll/ScrollView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/scroll/ScrollView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/scroll/ScrollView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/scroll/ServerRequestScrollView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/scroll/ServerRequestScrollView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/scroll/ServerRequestScrollView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/scroll/ServerRequestScrollView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/AfterServerChangesView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/AfterServerChangesView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/AfterServerChangesView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/AfterServerChangesView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/AttachExistingDomElementByIdView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/AttachExistingDomElementByIdView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/AttachExistingDomElementByIdView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/AttachExistingDomElementByIdView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/BasicTypeInListView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/BasicTypeInListView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/BasicTypeInListView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/BasicTypeInListView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/BeanInListingView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/BeanInListingView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/BeanInListingView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/BeanInListingView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/ChangeInjectedComponentTextView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/ChangeInjectedComponentTextView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/ChangeInjectedComponentTextView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/ChangeInjectedComponentTextView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/ChildOrderView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/ChildOrderView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/ChildOrderView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/ChildOrderView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/ClearNodeChildrenView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/ClearNodeChildrenView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/ClearNodeChildrenView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/ClearNodeChildrenView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/ClientUpdateModeView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/ClientUpdateModeView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/ClientUpdateModeView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/ClientUpdateModeView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/ConvertToBeanView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/ConvertToBeanView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/ConvertToBeanView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/ConvertToBeanView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/DomRepeatView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/DomRepeatView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/DomRepeatView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/DomRepeatView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/EmptyListsView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/EmptyListsView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/EmptyListsView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/EmptyListsView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/EventHandlerView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/EventHandlerView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/EventHandlerView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/EventHandlerView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/ExceptionsDuringPropertyUpdatesView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/ExceptionsDuringPropertyUpdatesView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/ExceptionsDuringPropertyUpdatesView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/ExceptionsDuringPropertyUpdatesView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/HiddenTemplateView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/HiddenTemplateView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/HiddenTemplateView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/HiddenTemplateView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/InjectScriptTagView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/InjectScriptTagView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/InjectScriptTagView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/InjectScriptTagView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/InjectedElementInsideMixinBehaviorView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/InjectedElementInsideMixinBehaviorView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/InjectedElementInsideMixinBehaviorView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/InjectedElementInsideMixinBehaviorView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/InjectsJsTemplateView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/InjectsJsTemplateView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/InjectsJsTemplateView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/InjectsJsTemplateView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/InvisibleDefaultPropertyValueView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/InvisibleDefaultPropertyValueView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/InvisibleDefaultPropertyValueView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/InvisibleDefaultPropertyValueView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/JsGrandParentView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/JsGrandParentView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/JsGrandParentView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/JsGrandParentView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/JsInjectedDiv.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/JsInjectedDiv.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/JsInjectedDiv.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/JsInjectedDiv.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/JsInjectedElement.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/JsInjectedElement.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/JsInjectedElement.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/JsInjectedElement.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/JsInjectedGrandChild.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/JsInjectedGrandChild.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/JsInjectedGrandChild.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/JsInjectedGrandChild.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/JsSubTemplate.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/JsSubTemplate.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/JsSubTemplate.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/JsSubTemplate.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/Message.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/Message.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/Message.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/Message.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/MutationSeveralSyncedPropsView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/MutationSeveralSyncedPropsView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/MutationSeveralSyncedPropsView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/MutationSeveralSyncedPropsView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/OneWayPolymerBindingView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/OneWayPolymerBindingView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/OneWayPolymerBindingView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/OneWayPolymerBindingView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/Person.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/Person.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/Person.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/Person.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/PolymerDefaultPropertyValue.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/PolymerDefaultPropertyValue.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/PolymerDefaultPropertyValue.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/PolymerDefaultPropertyValue.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/PolymerDefaultPropertyValueView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/PolymerDefaultPropertyValueView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/PolymerDefaultPropertyValueView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/PolymerDefaultPropertyValueView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/PolymerModelPropertiesView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/PolymerModelPropertiesView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/PolymerModelPropertiesView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/PolymerModelPropertiesView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/PolymerPropertiesView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/PolymerPropertiesView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/PolymerPropertiesView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/PolymerPropertiesView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/PolymerPropertyChangeEventView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/PolymerPropertyChangeEventView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/PolymerPropertyChangeEventView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/PolymerPropertyChangeEventView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/PolymerPropertyMutationInObserverView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/PolymerPropertyMutationInObserverView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/PolymerPropertyMutationInObserverView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/PolymerPropertyMutationInObserverView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/PropertiesUpdatedBeforeChangeEventsView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/PropertiesUpdatedBeforeChangeEventsView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/PropertiesUpdatedBeforeChangeEventsView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/PropertiesUpdatedBeforeChangeEventsView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/RestoreViewWithAttachedByIdView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/RestoreViewWithAttachedByIdView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/RestoreViewWithAttachedByIdView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/RestoreViewWithAttachedByIdView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/SubPropertyModelTemplate.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/SubPropertyModelTemplate.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/SubPropertyModelTemplate.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/SubPropertyModelTemplate.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/SubPropertyModelView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/SubPropertyModelView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/SubPropertyModelView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/SubPropertyModelView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TemplateHasInjectedSubTemplateView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TemplateHasInjectedSubTemplateView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TemplateHasInjectedSubTemplateView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TemplateHasInjectedSubTemplateView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TemplateInTemplateView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TemplateInTemplateView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TemplateInTemplateView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TemplateInTemplateView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TemplateInTemplateWithIdView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TemplateInTemplateWithIdView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TemplateInTemplateWithIdView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TemplateInTemplateWithIdView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TemplateMappingDetectorView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TemplateMappingDetectorView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TemplateMappingDetectorView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TemplateMappingDetectorView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TemplateScalabilityPanel.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TemplateScalabilityPanel.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TemplateScalabilityPanel.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TemplateScalabilityPanel.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TemplateScalabilityView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TemplateScalabilityView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TemplateScalabilityView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TemplateScalabilityView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TemplateWithConnectedCallbacks.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TemplateWithConnectedCallbacks.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TemplateWithConnectedCallbacks.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TemplateWithConnectedCallbacks.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TemplateWithConnectedCallbacksView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TemplateWithConnectedCallbacksView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TemplateWithConnectedCallbacksView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TemplateWithConnectedCallbacksView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TemplatesVisibilityView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TemplatesVisibilityView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TemplatesVisibilityView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TemplatesVisibilityView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TwoWayPolymerBindingView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TwoWayPolymerBindingView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TwoWayPolymerBindingView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/TwoWayPolymerBindingView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/UpdatableModelPropertiesView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/UpdatableModelPropertiesView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/UpdatableModelPropertiesView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/UpdatableModelPropertiesView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/UpgradeElementView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/UpgradeElementView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/UpgradeElementView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/UpgradeElementView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/collections/ClearListView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/collections/ClearListView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/collections/ClearListView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/collections/ClearListView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/collections/ListBindingView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/collections/ListBindingView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/collections/ListBindingView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/collections/ListBindingView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/collections/ListInsideListBindingView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/collections/ListInsideListBindingView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/collections/ListInsideListBindingView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/collections/ListInsideListBindingView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/collections/Message.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/collections/Message.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/collections/Message.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/collections/Message.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/collections/ModelListView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/collections/ModelListView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/collections/ModelListView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/collections/ModelListView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/collections/ToggleNullListView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/collections/ToggleNullListView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/collections/ToggleNullListView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/collections/ToggleNullListView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/collections/TwoWayListBindingView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/collections/TwoWayListBindingView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/collections/TwoWayListBindingView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/collections/TwoWayListBindingView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/imports/LazyWidgetView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/imports/LazyWidgetView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/imports/LazyWidgetView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/template/imports/LazyWidgetView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/webcomponent/HasMax.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/webcomponent/HasMax.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/webcomponent/HasMax.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/webcomponent/HasMax.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/webcomponent/HasValue.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/webcomponent/HasValue.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/webcomponent/HasValue.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/webcomponent/HasValue.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/webcomponent/PaperInput.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/webcomponent/PaperInput.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/webcomponent/PaperInput.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/webcomponent/PaperInput.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/webcomponent/PaperInputView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/webcomponent/PaperInputView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/webcomponent/PaperInputView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/webcomponent/PaperInputView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/webcomponent/PaperSlider.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/webcomponent/PaperSlider.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/webcomponent/PaperSlider.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/webcomponent/PaperSlider.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/webcomponent/PaperSliderView.java b/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/webcomponent/PaperSliderView.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/webcomponent/PaperSliderView.java rename to vertx-vaadin-tests/test-root-context/src/main/java/com/vaadin/flow/uitest/ui/webcomponent/PaperSliderView.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/resources/META-INF/services/com.vaadin.flow.server.VaadinServiceInitListener b/vertx-vaadin-tests/test-root-context/src/main/resources/META-INF/services/com.vaadin.flow.server.VaadinServiceInitListener similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/resources/META-INF/services/com.vaadin.flow.server.VaadinServiceInitListener rename to vertx-vaadin-tests/test-root-context/src/main/resources/META-INF/services/com.vaadin.flow.server.VaadinServiceInitListener diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/resources/com/vaadin/flow/uitest/ui/StaticHtmlView.html b/vertx-vaadin-tests/test-root-context/src/main/resources/com/vaadin/flow/uitest/ui/StaticHtmlView.html similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/resources/com/vaadin/flow/uitest/ui/StaticHtmlView.html rename to vertx-vaadin-tests/test-root-context/src/main/resources/com/vaadin/flow/uitest/ui/StaticHtmlView.html diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/webapp/include.js b/vertx-vaadin-tests/test-root-context/src/main/webapp/include.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/webapp/include.js rename to vertx-vaadin-tests/test-root-context/src/main/webapp/include.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/webapp/loading-indicator.css b/vertx-vaadin-tests/test-root-context/src/main/webapp/loading-indicator.css similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/webapp/loading-indicator.css rename to vertx-vaadin-tests/test-root-context/src/main/webapp/loading-indicator.css diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/webapp/plain-script.js b/vertx-vaadin-tests/test-root-context/src/main/webapp/plain-script.js similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/main/webapp/plain-script.js rename to vertx-vaadin-tests/test-root-context/src/main/webapp/plain-script.js diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/conf/vertx-vaadin-test-prod.conf b/vertx-vaadin-tests/test-root-context/src/test/conf/vertx-vaadin-test-prod.conf similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/conf/vertx-vaadin-test-prod.conf rename to vertx-vaadin-tests/test-root-context/src/test/conf/vertx-vaadin-test-prod.conf diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/conf/vertx-vaadin-test.conf b/vertx-vaadin-tests/test-root-context/src/test/conf/vertx-vaadin-test.conf similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/conf/vertx-vaadin-test.conf rename to vertx-vaadin-tests/test-root-context/src/test/conf/vertx-vaadin-test.conf diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/AssertionTest.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/AssertionTest.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/AssertionTest.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/AssertionTest.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/DevModeOnly.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/DevModeOnly.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/DevModeOnly.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/DevModeOnly.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/DevModeRule.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/DevModeRule.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/DevModeRule.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/DevModeRule.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/FaultyLocationIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/FaultyLocationIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/FaultyLocationIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/FaultyLocationIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/InitialExtendedClientDetailsIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/InitialExtendedClientDetailsIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/InitialExtendedClientDetailsIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/InitialExtendedClientDetailsIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/VerifyBrowserVersionIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/VerifyBrowserVersionIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/VerifyBrowserVersionIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/VerifyBrowserVersionIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/testutil/ChromeBrowserTest.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/testutil/ChromeBrowserTest.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/testutil/ChromeBrowserTest.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/testutil/ChromeBrowserTest.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/AbstractBasicElementComponentIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/AbstractBasicElementComponentIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/AbstractBasicElementComponentIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/AbstractBasicElementComponentIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/AbstractDebounceSynchronizeIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/AbstractDebounceSynchronizeIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/AbstractDebounceSynchronizeIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/AbstractDebounceSynchronizeIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/AbstractErrorIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/AbstractErrorIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/AbstractErrorIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/AbstractErrorIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/AbstractStreamResourceIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/AbstractStreamResourceIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/AbstractStreamResourceIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/AbstractStreamResourceIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/AbstractUpdateDivIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/AbstractUpdateDivIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/AbstractUpdateDivIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/AbstractUpdateDivIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/AttachExistingElementIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/AttachExistingElementIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/AttachExistingElementIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/AttachExistingElementIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/AttachListenerIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/AttachListenerIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/AttachListenerIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/AttachListenerIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/BackButtonServerRoundTripIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/BackButtonServerRoundTripIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/BackButtonServerRoundTripIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/BackButtonServerRoundTripIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/BaseHrefIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/BaseHrefIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/BaseHrefIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/BaseHrefIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/BasicComponentIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/BasicComponentIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/BasicComponentIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/BasicComponentIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/BasicElementIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/BasicElementIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/BasicElementIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/BasicElementIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/BodyScrollIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/BodyScrollIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/BodyScrollIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/BodyScrollIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/BrowserWindowResizeIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/BrowserWindowResizeIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/BrowserWindowResizeIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/BrowserWindowResizeIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/CallFunctionBeforeRemoveIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/CallFunctionBeforeRemoveIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/CallFunctionBeforeRemoveIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/CallFunctionBeforeRemoveIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/CompositeIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/CompositeIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/CompositeIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/CompositeIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/CompositeNestedIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/CompositeNestedIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/CompositeNestedIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/CompositeNestedIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/CountUIsIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/CountUIsIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/CountUIsIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/CountUIsIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/CustomCustomElementIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/CustomCustomElementIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/CustomCustomElementIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/CustomCustomElementIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/DebounceSynchronizePropertyIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/DebounceSynchronizePropertyIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/DebounceSynchronizePropertyIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/DebounceSynchronizePropertyIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/DnDAttachDetachIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/DnDAttachDetachIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/DnDAttachDetachIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/DnDAttachDetachIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/DnDIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/DnDIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/DnDIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/DnDIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/DomEventFilterIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/DomEventFilterIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/DomEventFilterIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/DomEventFilterIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/DomListenerOnAttachIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/DomListenerOnAttachIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/DomListenerOnAttachIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/DomListenerOnAttachIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/DynamicallyRegisteredRouteIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/DynamicallyRegisteredRouteIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/DynamicallyRegisteredRouteIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/DynamicallyRegisteredRouteIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ElementInitOrderIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ElementInitOrderIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ElementInitOrderIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ElementInitOrderIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ElementInnerHtmlIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ElementInnerHtmlIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ElementInnerHtmlIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ElementInnerHtmlIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ElementRemoveItselfIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ElementRemoveItselfIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ElementRemoveItselfIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ElementRemoveItselfIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ElementStyleIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ElementStyleIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ElementStyleIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ElementStyleIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/EnabledIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/EnabledIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/EnabledIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/EnabledIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ErrorHandlingIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ErrorHandlingIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ErrorHandlingIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ErrorHandlingIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ErrorPageIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ErrorPageIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ErrorPageIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ErrorPageIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/EventListenersIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/EventListenersIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/EventListenersIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/EventListenersIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ExceptionDuringMapSyncIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ExceptionDuringMapSyncIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ExceptionDuringMapSyncIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ExceptionDuringMapSyncIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ExecJavaScriptIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ExecJavaScriptIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ExecJavaScriptIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ExecJavaScriptIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ExtendedClientDetailsIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ExtendedClientDetailsIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ExtendedClientDetailsIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ExtendedClientDetailsIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ForwardToIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ForwardToIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ForwardToIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ForwardToIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/FragmentLinkIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/FragmentLinkIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/FragmentLinkIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/FragmentLinkIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/HasUrlParameterErrorIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/HasUrlParameterErrorIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/HasUrlParameterErrorIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/HasUrlParameterErrorIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/HistoryIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/HistoryIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/HistoryIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/HistoryIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ImageClickIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ImageClickIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ImageClickIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ImageClickIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/InMemoryChildrenIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/InMemoryChildrenIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/InMemoryChildrenIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/InMemoryChildrenIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/InternalErrorIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/InternalErrorIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/InternalErrorIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/InternalErrorIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/JavaScriptReturnValueIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/JavaScriptReturnValueIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/JavaScriptReturnValueIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/JavaScriptReturnValueIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/JsApiGetByIdIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/JsApiGetByIdIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/JsApiGetByIdIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/JsApiGetByIdIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/KeyboardEventIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/KeyboardEventIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/KeyboardEventIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/KeyboardEventIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/LoadingIndicatorIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/LoadingIndicatorIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/LoadingIndicatorIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/LoadingIndicatorIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/LongPollingMultipleThreadsIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/LongPollingMultipleThreadsIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/LongPollingMultipleThreadsIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/LongPollingMultipleThreadsIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/LongPollingPushIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/LongPollingPushIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/LongPollingPushIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/LongPollingPushIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/NavigationTriggerIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/NavigationTriggerIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/NavigationTriggerIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/NavigationTriggerIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/PageIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/PageIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/PageIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/PageIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/PopStateHandlerIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/PopStateHandlerIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/PopStateHandlerIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/PopStateHandlerIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/PostponeProceedIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/PostponeProceedIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/PostponeProceedIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/PostponeProceedIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/PreserveOnRefreshIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/PreserveOnRefreshIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/PreserveOnRefreshIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/PreserveOnRefreshIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/PushLongPollingUpdateDivIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/PushLongPollingUpdateDivIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/PushLongPollingUpdateDivIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/PushLongPollingUpdateDivIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/PushSettingsIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/PushSettingsIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/PushSettingsIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/PushSettingsIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/PushWSUpdateDivIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/PushWSUpdateDivIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/PushWSUpdateDivIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/PushWSUpdateDivIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RequestParametersHistoryIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RequestParametersHistoryIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RequestParametersHistoryIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RequestParametersHistoryIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RequestParametersIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RequestParametersIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RequestParametersIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RequestParametersIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RerouteIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RerouteIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RerouteIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RerouteIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ResynchronizationIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ResynchronizationIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ResynchronizationIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ResynchronizationIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ReturnChannelIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ReturnChannelIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ReturnChannelIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ReturnChannelIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RouteNotFoundDevModeIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RouteNotFoundDevModeIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RouteNotFoundDevModeIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RouteNotFoundDevModeIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RouteNotFoundIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RouteNotFoundIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RouteNotFoundIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RouteNotFoundIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RouteNotFoundProdModeIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RouteNotFoundProdModeIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RouteNotFoundProdModeIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RouteNotFoundProdModeIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RouterIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RouterIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RouterIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RouterIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RouterLinkIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RouterLinkIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RouterLinkIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RouterLinkIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RouterParallelIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RouterParallelIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RouterParallelIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RouterParallelIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RouterSessionExpirationIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RouterSessionExpirationIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RouterSessionExpirationIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/RouterSessionExpirationIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ScriptInjectIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ScriptInjectIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ScriptInjectIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ScriptInjectIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/SerializeUIIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/SerializeUIIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/SerializeUIIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/SerializeUIIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ServiceInitListenersIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ServiceInitListenersIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ServiceInitListenersIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ServiceInitListenersIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/SessionCloseLogoutIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/SessionCloseLogoutIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/SessionCloseLogoutIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/SessionCloseLogoutIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/SetParameterForwardToIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/SetParameterForwardToIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/SetParameterForwardToIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/SetParameterForwardToIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ShadowRootIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ShadowRootIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ShadowRootIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ShadowRootIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ShortcutsIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ShortcutsIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ShortcutsIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ShortcutsIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/StaticHtmlIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/StaticHtmlIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/StaticHtmlIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/StaticHtmlIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/StreamResourceIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/StreamResourceIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/StreamResourceIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/StreamResourceIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/SynchronizedPropertyIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/SynchronizedPropertyIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/SynchronizedPropertyIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/SynchronizedPropertyIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/TimingInfoReportedIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/TimingInfoReportedIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/TimingInfoReportedIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/TimingInfoReportedIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/UIElementIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/UIElementIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/UIElementIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/UIElementIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ValueChangeModeIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ValueChangeModeIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ValueChangeModeIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ValueChangeModeIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ViewTitleIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ViewTitleIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ViewTitleIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/ViewTitleIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/VisibilityIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/VisibilityIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/VisibilityIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/VisibilityIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/WaitForVaadinIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/WaitForVaadinIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/WaitForVaadinIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/WaitForVaadinIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/WebComponentsIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/WebComponentsIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/WebComponentsIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/WebComponentsIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/dependencies/AbstractFrontendInlineIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/dependencies/AbstractFrontendInlineIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/dependencies/AbstractFrontendInlineIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/dependencies/AbstractFrontendInlineIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/dependencies/DependenciesLoadingAnnotationsIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/dependencies/DependenciesLoadingAnnotationsIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/dependencies/DependenciesLoadingAnnotationsIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/dependencies/DependenciesLoadingAnnotationsIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/dependencies/DependenciesLoadingPageApiIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/dependencies/DependenciesLoadingPageApiIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/dependencies/DependenciesLoadingPageApiIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/dependencies/DependenciesLoadingPageApiIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/dependencies/DynamicDependencyIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/dependencies/DynamicDependencyIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/dependencies/DynamicDependencyIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/dependencies/DynamicDependencyIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/dependencies/ExternalJavaScriptIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/dependencies/ExternalJavaScriptIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/dependencies/ExternalJavaScriptIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/dependencies/ExternalJavaScriptIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/routing/InfiniteRerouteLoopIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/routing/InfiniteRerouteLoopIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/routing/InfiniteRerouteLoopIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/routing/InfiniteRerouteLoopIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/routing/PushRouteNotFoundIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/routing/PushRouteNotFoundIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/routing/PushRouteNotFoundIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/routing/PushRouteNotFoundIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/scroll/AbstractScrollIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/scroll/AbstractScrollIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/scroll/AbstractScrollIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/scroll/AbstractScrollIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/scroll/MultipleAnchorsIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/scroll/MultipleAnchorsIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/scroll/MultipleAnchorsIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/scroll/MultipleAnchorsIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/scroll/PushStateScrollIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/scroll/PushStateScrollIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/scroll/PushStateScrollIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/scroll/PushStateScrollIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/scroll/ScrollIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/scroll/ScrollIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/scroll/ScrollIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/scroll/ScrollIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/scroll/ServerRequestScrollIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/scroll/ServerRequestScrollIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/scroll/ServerRequestScrollIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/scroll/ServerRequestScrollIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/AfterServerChangesIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/AfterServerChangesIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/AfterServerChangesIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/AfterServerChangesIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/AttachExistingDomElementByIdIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/AttachExistingDomElementByIdIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/AttachExistingDomElementByIdIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/AttachExistingDomElementByIdIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/BasicTypeInListIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/BasicTypeInListIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/BasicTypeInListIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/BasicTypeInListIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/BeanInListingIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/BeanInListingIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/BeanInListingIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/BeanInListingIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/ChangeInjectedComponentTextIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/ChangeInjectedComponentTextIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/ChangeInjectedComponentTextIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/ChangeInjectedComponentTextIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/ChildOrderIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/ChildOrderIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/ChildOrderIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/ChildOrderIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/ClearNodeChildrenIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/ClearNodeChildrenIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/ClearNodeChildrenIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/ClearNodeChildrenIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/ConvertToBeanIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/ConvertToBeanIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/ConvertToBeanIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/ConvertToBeanIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/DomRepeatIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/DomRepeatIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/DomRepeatIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/DomRepeatIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/EmptyListsIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/EmptyListsIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/EmptyListsIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/EmptyListsIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/EventHandlerIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/EventHandlerIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/EventHandlerIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/EventHandlerIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/ExceptionsDuringPropertyUpdatesIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/ExceptionsDuringPropertyUpdatesIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/ExceptionsDuringPropertyUpdatesIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/ExceptionsDuringPropertyUpdatesIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/HiddenTemplateIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/HiddenTemplateIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/HiddenTemplateIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/HiddenTemplateIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/InjectScriptTagIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/InjectScriptTagIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/InjectScriptTagIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/InjectScriptTagIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/InjectedElementInsideMixinBehaviorIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/InjectedElementInsideMixinBehaviorIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/InjectedElementInsideMixinBehaviorIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/InjectedElementInsideMixinBehaviorIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/InjectsJsTemplateIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/InjectsJsTemplateIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/InjectsJsTemplateIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/InjectsJsTemplateIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/InvisibleDefaultPropertyValueIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/InvisibleDefaultPropertyValueIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/InvisibleDefaultPropertyValueIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/InvisibleDefaultPropertyValueIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/JsGrandParentIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/JsGrandParentIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/JsGrandParentIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/JsGrandParentIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/MutationSeveralSyncedPropsIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/MutationSeveralSyncedPropsIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/MutationSeveralSyncedPropsIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/MutationSeveralSyncedPropsIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/OneWayPolymerBindingIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/OneWayPolymerBindingIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/OneWayPolymerBindingIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/OneWayPolymerBindingIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/PolymerDefaultPropertyValueIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/PolymerDefaultPropertyValueIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/PolymerDefaultPropertyValueIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/PolymerDefaultPropertyValueIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/PolymerModelPropertiesIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/PolymerModelPropertiesIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/PolymerModelPropertiesIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/PolymerModelPropertiesIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/PolymerPropertiesIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/PolymerPropertiesIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/PolymerPropertiesIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/PolymerPropertiesIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/PolymerPropertyChangeEventIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/PolymerPropertyChangeEventIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/PolymerPropertyChangeEventIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/PolymerPropertyChangeEventIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/PolymerPropertyMutationInObserverIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/PolymerPropertyMutationInObserverIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/PolymerPropertyMutationInObserverIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/PolymerPropertyMutationInObserverIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/PropertiesUpdatedBeforeChangeEventsIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/PropertiesUpdatedBeforeChangeEventsIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/PropertiesUpdatedBeforeChangeEventsIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/PropertiesUpdatedBeforeChangeEventsIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/RestoreViewWithAttachedByIdIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/RestoreViewWithAttachedByIdIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/RestoreViewWithAttachedByIdIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/RestoreViewWithAttachedByIdIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/SubPropertyModelIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/SubPropertyModelIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/SubPropertyModelIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/SubPropertyModelIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/TemplateHasInjectedSubTemplateIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/TemplateHasInjectedSubTemplateIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/TemplateHasInjectedSubTemplateIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/TemplateHasInjectedSubTemplateIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/TemplateInTemplateIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/TemplateInTemplateIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/TemplateInTemplateIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/TemplateInTemplateIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/TemplateInTemplateWithIdIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/TemplateInTemplateWithIdIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/TemplateInTemplateWithIdIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/TemplateInTemplateWithIdIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/TemplateMappingDetectorIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/TemplateMappingDetectorIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/TemplateMappingDetectorIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/TemplateMappingDetectorIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/TemplateScalabilityIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/TemplateScalabilityIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/TemplateScalabilityIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/TemplateScalabilityIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/TemplateWithConnectedCallbacksIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/TemplateWithConnectedCallbacksIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/TemplateWithConnectedCallbacksIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/TemplateWithConnectedCallbacksIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/TemplatesVisibilityIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/TemplatesVisibilityIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/TemplatesVisibilityIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/TemplatesVisibilityIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/TwoWayPolymerBindingIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/TwoWayPolymerBindingIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/TwoWayPolymerBindingIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/TwoWayPolymerBindingIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/UpdatableModelPropertiesIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/UpdatableModelPropertiesIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/UpdatableModelPropertiesIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/UpdatableModelPropertiesIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/UpgradeElementIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/UpgradeElementIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/UpgradeElementIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/UpgradeElementIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/collections/ClearListIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/collections/ClearListIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/collections/ClearListIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/collections/ClearListIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/collections/ListBindingIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/collections/ListBindingIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/collections/ListBindingIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/collections/ListBindingIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/collections/ListInsideListBindingIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/collections/ListInsideListBindingIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/collections/ListInsideListBindingIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/collections/ListInsideListBindingIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/collections/ModelListIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/collections/ModelListIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/collections/ModelListIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/collections/ModelListIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/collections/ToggleNullListIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/collections/ToggleNullListIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/collections/ToggleNullListIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/collections/ToggleNullListIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/collections/TwoWayListBindingIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/collections/TwoWayListBindingIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/collections/TwoWayListBindingIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/collections/TwoWayListBindingIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/imports/LazyWidgetIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/imports/LazyWidgetIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/imports/LazyWidgetIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/template/imports/LazyWidgetIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/webcomponent/PaperInputIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/webcomponent/PaperInputIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/webcomponent/PaperInputIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/webcomponent/PaperInputIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/webcomponent/PaperSliderIT.java b/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/webcomponent/PaperSliderIT.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/webcomponent/PaperSliderIT.java rename to vertx-vaadin-tests/test-root-context/src/test/java/com/vaadin/flow/uitest/ui/webcomponent/PaperSliderIT.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-scalability/.gitignore b/vertx-vaadin-tests/test-scalability/.gitignore similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-scalability/.gitignore rename to vertx-vaadin-tests/test-scalability/.gitignore diff --git a/vertx-vaadin-tests/test-scalability/frontend/index.html b/vertx-vaadin-tests/test-scalability/frontend/index.html new file mode 100644 index 00000000..a5cdd401 --- /dev/null +++ b/vertx-vaadin-tests/test-scalability/frontend/index.html @@ -0,0 +1,23 @@ + + + + + + + + + + + + +
+ + diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-scalability/pom.xml b/vertx-vaadin-tests/test-scalability/pom.xml similarity index 99% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-scalability/pom.xml rename to vertx-vaadin-tests/test-scalability/pom.xml index 5ef72922..3cee0e7b 100644 --- a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-scalability/pom.xml +++ b/vertx-vaadin-tests/test-scalability/pom.xml @@ -5,7 +5,7 @@ com.github.mcollovati.vertx.tests vertx-vaadin-test - 23.3.5-SNAPSHOT + 23.4.0-SNAPSHOT ../pom.xml vertx-vaadin-test-scalability diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-scalability/src/main/java/com/github/mcollovati/vertx/vaadin/test/scalability/HelloWorldUI.java b/vertx-vaadin-tests/test-scalability/src/main/java/com/github/mcollovati/vertx/vaadin/test/scalability/HelloWorldUI.java similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-scalability/src/main/java/com/github/mcollovati/vertx/vaadin/test/scalability/HelloWorldUI.java rename to vertx-vaadin-tests/test-scalability/src/main/java/com/github/mcollovati/vertx/vaadin/test/scalability/HelloWorldUI.java diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-scalability/src/test/conf/vertx-vaadin-test.conf b/vertx-vaadin-tests/test-scalability/src/test/conf/vertx-vaadin-test.conf similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-scalability/src/test/conf/vertx-vaadin-test.conf rename to vertx-vaadin-tests/test-scalability/src/test/conf/vertx-vaadin-test.conf diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-scalability/src/test/resources/bodies/HelloWorld_0001_request.json b/vertx-vaadin-tests/test-scalability/src/test/resources/bodies/HelloWorld_0001_request.json similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-scalability/src/test/resources/bodies/HelloWorld_0001_request.json rename to vertx-vaadin-tests/test-scalability/src/test/resources/bodies/HelloWorld_0001_request.json diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-scalability/src/test/resources/bodies/clickButton.json b/vertx-vaadin-tests/test-scalability/src/test/resources/bodies/clickButton.json similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-scalability/src/test/resources/bodies/clickButton.json rename to vertx-vaadin-tests/test-scalability/src/test/resources/bodies/clickButton.json diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-scalability/src/test/resources/logback-test.xml b/vertx-vaadin-tests/test-scalability/src/test/resources/logback-test.xml similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-scalability/src/test/resources/logback-test.xml rename to vertx-vaadin-tests/test-scalability/src/test/resources/logback-test.xml diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-scalability/src/test/scala/com/vaadin/flow/test/scalability/HelloWorld.scala b/vertx-vaadin-tests/test-scalability/src/test/scala/com/vaadin/flow/test/scalability/HelloWorld.scala similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-scalability/src/test/scala/com/vaadin/flow/test/scalability/HelloWorld.scala rename to vertx-vaadin-tests/test-scalability/src/test/scala/com/vaadin/flow/test/scalability/HelloWorld.scala diff --git a/vertx-vaadin-flow-parent/vertx-vaadin-tests/test-scalability/src/test/scala/com/vaadin/flow/test/scalability/WarmupFlow.scala b/vertx-vaadin-tests/test-scalability/src/test/scala/com/vaadin/flow/test/scalability/WarmupFlow.scala similarity index 100% rename from vertx-vaadin-flow-parent/vertx-vaadin-tests/test-scalability/src/test/scala/com/vaadin/flow/test/scalability/WarmupFlow.scala rename to vertx-vaadin-tests/test-scalability/src/test/scala/com/vaadin/flow/test/scalability/WarmupFlow.scala