Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
83 commits
Select commit Hold shift + click to select a range
fddbbf8
feat(flow-client): port leaf client utilities to TypeScript
Artur- Jul 8, 2026
c9b8361
test(flow-client): align SharedUtil TS behavior and coverage with Java
Copilot Jul 8, 2026
1dec969
test(flow-client): document fragment edge case in SharedUtil parity test
Copilot Jul 8, 2026
4db7643
test(flow-client): clarify non-applicable fragment matrix case
Copilot Jul 8, 2026
f75aa23
feat(flow-client): port reactive core + node features to TypeScript
Artur- Jul 8, 2026
7103921
feat(flow-client): port state tree + JSON codec to TypeScript
Artur- Jul 8, 2026
ee8e64e
test(flow-client): port remaining MapPropertyTest cases (review)
Artur- Jul 8, 2026
d1a7829
test/fix(flow-client): port StateTree/TreeChangeProcessor cases + res…
Artur- Jul 8, 2026
96dd933
feat(flow-client): port DOM binding cluster to TypeScript
Artur- Jul 8, 2026
8f736b2
test/docs(flow-client): port binding-cluster GWT tests + document Deb…
Artur- Jul 8, 2026
45d7f76
feat(flow-client): port resource loading, execute-JS, config + lifecy…
Artur- Jul 8, 2026
41da854
feat(flow-client): port the network layer to TypeScript
Artur- Jul 8, 2026
2e348da
feat(flow-client): port the engine assembly to TypeScript
Artur- Jul 8, 2026
4f5d7f2
chore(flow-client): remove the GWT client engine and build wiring
Artur- Jul 8, 2026
c8db67a
fix(flow-client): restore ResourceLoader empty-stylesheet error detec…
Artur- Jul 8, 2026
6244dc5
test(flow-client): full ReconnectConfiguration parity + strengthen Po…
Artur- Jul 8, 2026
760dd0a
docs(flow-client): document onModuleLoad already-bootstrapped deviati…
Artur- Jul 8, 2026
fc90354
feat(flow-client): switch the live client bootstrap from GWT to TypeS…
Artur- Jul 8, 2026
2dc98c3
chore(flow-server): remove the dead GWT client-engine bootstrap emission
Artur- Jul 8, 2026
cd4287f
chore: drop the deleted ClientEngineLinker from the serialization-tes…
Artur- Jul 8, 2026
057c9fb
chore(flow-server): remove the dead compile.properties client-engine …
Artur- Jul 8, 2026
081bfae
Merge branch 'main' into flow-client-ts-leaf-utils
Artur- Jul 9, 2026
cfeeacb
Merge origin/main into flow-client-ts-leaf-utils
Artur- Jul 13, 2026
e7f6a11
Merge branch 'flow-client-ts-leaf-utils' into flow-client-ts-reactive…
Artur- Jul 13, 2026
f400236
Merge branch 'flow-client-ts-reactive-nodefeature' into flow-client-t…
Artur- Jul 13, 2026
26c8ca6
Merge branch 'flow-client-ts-state-tree' into flow-client-ts-binding
Artur- Jul 13, 2026
6801bbd
Merge branch 'flow-client-ts-binding' into flow-client-ts-support-ser…
Artur- Jul 13, 2026
738bb56
Merge branch 'flow-client-ts-support-services' into flow-client-ts-ne…
Artur- Jul 13, 2026
fd54321
Merge branch 'flow-client-ts-network' into flow-client-ts-engine
Artur- Jul 13, 2026
867e8cf
Merge branch 'flow-client-ts-engine' into flow-client-ts-cutover
Artur- Jul 13, 2026
c66e1f2
Merge branch 'flow-client-ts-cutover' into flow-client-ts-remove-gwt
Artur- Jul 13, 2026
1a9d406
Merge branch 'flow-client-ts-remove-gwt' into flow-server-remove-clie…
Artur- Jul 13, 2026
4aefa72
Merge remote flow-client-ts-leaf-utils (main update) into local
Artur- Jul 13, 2026
d965dc0
Merge branch 'flow-client-ts-leaf-utils' into flow-client-ts-reactive…
Artur- Jul 13, 2026
0de444e
Merge branch 'flow-client-ts-reactive-nodefeature' into flow-client-t…
Artur- Jul 13, 2026
19c172e
Merge branch 'flow-client-ts-state-tree' into flow-client-ts-binding
Artur- Jul 13, 2026
ff53ada
Merge branch 'flow-client-ts-remove-gwt' into flow-server-remove-clie…
Artur- Jul 13, 2026
4d0e580
Merge branch 'flow-client-ts-binding' into flow-client-ts-support-ser…
Artur- Jul 13, 2026
14583d3
Merge branch 'flow-client-ts-support-services' into flow-client-ts-ne…
Artur- Jul 13, 2026
90d3fec
Merge branch 'flow-client-ts-network' into flow-client-ts-engine
Artur- Jul 13, 2026
76c5275
Merge branch 'flow-client-ts-engine' into flow-client-ts-cutover
Artur- Jul 13, 2026
b59b3b1
Merge branch 'flow-client-ts-cutover' into flow-client-ts-remove-gwt
Artur- Jul 13, 2026
320a005
chore(flow-client): rename eslint config to .mjs and quiet the Lit de…
totally-not-ai[bot] Jul 20, 2026
02dc11a
feat(flow-client): port leaf client utilities to TypeScript
Artur- Jul 8, 2026
360b55e
test(flow-client): align SharedUtil TS behavior and coverage with Java
Copilot Jul 8, 2026
620d6e5
test(flow-client): document fragment edge case in SharedUtil parity test
Copilot Jul 8, 2026
e637f95
test(flow-client): clarify non-applicable fragment matrix case
Copilot Jul 8, 2026
9c1252a
feat(flow-client): port reactive core + node features to TypeScript
Artur- Jul 8, 2026
54ba363
test(flow-client): port remaining MapPropertyTest cases (review)
Artur- Jul 8, 2026
c5010c2
Merge commit '9b627a7d108a1668d17711ed0420a0a10bac5980' into flow-cli…
Artur- Aug 11, 2026
b904e90
Merge branch 'flow-client-ts-leaf-utils' into flow-client-ts-reactive…
Artur- Aug 11, 2026
aa22bdc
Merge branch 'flow-client-ts-reactive-nodefeature' into flow-client-t…
Artur- Aug 11, 2026
5540b91
Merge branch 'flow-client-ts-state-tree' into flow-client-ts-binding
Artur- Aug 11, 2026
afa2b54
Merge branch 'flow-client-ts-binding' into flow-client-ts-support-ser…
Artur- Aug 11, 2026
619b110
Merge branch 'flow-client-ts-support-services' into flow-client-ts-ne…
Artur- Aug 11, 2026
4043736
Merge branch 'flow-client-ts-network' into flow-client-ts-engine
Artur- Aug 11, 2026
2037757
Merge branch 'flow-client-ts-engine' into flow-client-ts-cutover
Artur- Aug 11, 2026
c517030
Merge branch 'flow-client-ts-cutover' into flow-client-ts-remove-gwt
Artur- Aug 11, 2026
53249d2
Merge branch 'flow-client-ts-remove-gwt' into flow-server-remove-clie…
Artur- Aug 11, 2026
79f7d9b
refactor(flow-client): drop DomApi abstraction + Polymer/HTML-import …
Artur- Aug 11, 2026
b33d2a2
Merge branch 'flow-client-ts-leaf-utils' into flow-client-ts-reactive…
Artur- Aug 11, 2026
7a68a69
Merge branch 'flow-client-ts-reactive-nodefeature' into flow-client-t…
Artur- Aug 11, 2026
346651b
Merge branch 'flow-client-ts-state-tree' into flow-client-ts-binding
Artur- Aug 11, 2026
7ce8981
Merge branch 'flow-client-ts-binding' into flow-client-ts-support-ser…
Artur- Aug 11, 2026
1122e47
refactor(flow-client): use native DOM directly in the binding layer (…
Artur- Aug 11, 2026
5dbab65
Merge branch 'flow-client-ts-support-services' into flow-client-ts-ne…
Artur- Aug 11, 2026
a6b3846
Merge branch 'flow-client-ts-network' into flow-client-ts-engine
Artur- Aug 11, 2026
1d75d61
refactor(flow-client): remove HTML-import loading + use native DOM (#…
Artur- Aug 11, 2026
3b8ac37
refactor(flow-client): drop HTML-imports-ready bootstrap gating (#25145)
Artur- Aug 11, 2026
ef4d429
refactor(flow-client): use native DOM in ApplicationConnection (#25146)
Artur- Aug 11, 2026
d020a3e
Merge branch 'flow-client-ts-engine' into flow-client-ts-cutover
Artur- Aug 11, 2026
e719868
Merge branch 'flow-client-ts-cutover' into flow-client-ts-remove-gwt
Artur- Aug 11, 2026
24bb7ec
Merge branch 'flow-client-ts-remove-gwt' into flow-server-remove-clie…
Artur- Aug 11, 2026
ef89169
fix(flow-client): keep replaced children until the new ones are in place
Artur- Aug 11, 2026
e29a2b7
Merge branch 'flow-client-ts-binding' into flow-client-ts-support-ser…
Artur- Aug 11, 2026
c9e953d
Merge branch 'flow-client-ts-support-services' into flow-client-ts-ne…
Artur- Aug 11, 2026
ad85b88
Merge branch 'flow-client-ts-network' into flow-client-ts-engine
Artur- Aug 11, 2026
c6c12f9
Merge branch 'flow-client-ts-engine' into flow-client-ts-cutover
Artur- Aug 11, 2026
9d706b9
Merge branch 'flow-client-ts-cutover' into flow-client-ts-remove-gwt
Artur- Aug 11, 2026
e31f52c
Merge branch 'flow-client-ts-remove-gwt' into flow-server-remove-clie…
Artur- Aug 11, 2026
3c839b9
fix(flow-client): restore production-mode console log gating
totally-not-ai[bot] Aug 13, 2026
30a362a
fix(flow-client): import the engine statically in the bootstrap
totally-not-ai[bot] Aug 13, 2026
044fcef
fix(flow-client): read the Java class name from the right node property
totally-not-ai[bot] Aug 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
17 changes: 16 additions & 1 deletion flow-client/eslint.config.js → flow-client/eslint.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,11 @@ export default [
languageOptions: {
parserOptions: {
projectService: {
allowDefaultProject: ['src/test/frontend/*']
allowDefaultProject: ['src/test/frontend/*'],
// The migration adds a *Tests.ts per converted module; raise the
// default-project cap (default 8) so linting keeps working as the
// test suite grows.
maximumDefaultProjectFileMatchCount_THIS_WILL_SLOW_DOWN_LINTING: 100
}
}
},
Expand All @@ -28,6 +32,17 @@ export default [
'@typescript-eslint/no-use-before-define': 'off',
}
},
{
// Engine code must log through internal/Console, which suppresses browser
// logging in production mode (unless the vaadin.browserLog localStorage flag
// is set). Calling `console` directly bypasses that, so it is an error here;
// the few deliberately ungated sites carry an inline disable comment.
files: ['src/main/frontend/internal/**/*.ts'],
ignores: ['src/main/frontend/internal/Console.ts'],
rules: {
'no-console': 'error'
}
},
{
files: ['src/**/frontend/**/*'],
languageOptions: {
Expand Down
120 changes: 1 addition & 119 deletions flow-client/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,6 @@
<description>${project.name}</description>

<properties>
<gwt.module>com.vaadin.ClientEngine</gwt.module>
<gwt.module.output>${project.build.outputDirectory}/META-INF/resources/VAADIN/static/</gwt.module.output>
<gwt.module.style>OBF</gwt.module.style>
<gwt.sdm.bindAddress>0.0.0.0</gwt.sdm.bindAddress>
<skipTsTests>${skipTests}</skipTsTests>
<org.eclipse.equinox.common.version>3.19.100</org.eclipse.equinox.common.version>
<org.eclipse.core.runtime.version>3.31.100</org.eclipse.core.runtime.version>
Expand All @@ -28,13 +24,6 @@

<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.gwt</groupId>
<artifactId>gwt</artifactId>
<version>${gwt.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.eclipse.platform</groupId>
<artifactId>org.eclipse.equinox.common</artifactId>
Expand Down Expand Up @@ -96,21 +85,6 @@
<version>1.22.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.google.gwt</groupId>
<artifactId>gwt-user</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.google.gwt</groupId>
<artifactId>gwt-dev</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.google.gwt</groupId>
<artifactId>gwt-elemental</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm</artifactId>
Expand Down Expand Up @@ -196,9 +170,6 @@
</resource>
</resources>

<!-- Output classes directly into the webapp, so that IDEs and "mvn
process-classes" update them in DevMode -->
<!-- <outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF/classes</outputDirectory> -->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
Expand All @@ -225,9 +196,6 @@
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven.surefire.plugin.version}</version>
<configuration>
<excludes>
<exclude>**/Gwt*.java</exclude>
</excludes>
<enableAssertions>true</enableAssertions>
</configuration>
</plugin>
Expand All @@ -243,91 +211,12 @@
</execution>
</executions>
</plugin>

<!-- GWT Maven Plugin -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>gwt-maven-plugin</artifactId>
<version>${gwt.version}</version>
<configuration>
<!-- Assertions should be disabled once we introduce
a separate production build -->
<enableAssertions>true</enableAssertions>
<failOnError>true</failOnError>
<gwtSdkFirstInClasspath/>
<persistentunitcache>false</persistentunitcache>
<webappDirectory>${gwt.module.output}</webappDirectory>
<launcherDir>${gwt.module.output}</launcherDir>
<compileReport>true</compileReport>
<bindAddress>${gwt.sdm.bindAddress}</bindAddress>
<modules>
<module>${gwt.module}</module>
</modules>
<webMode>true</webMode>
<style>${gwt.module.style}</style>
<htmlunit>FF38</htmlunit>
<testTimeOut>300</testTimeOut>
<extraJvmArgs>-Xmx512m -Dvaadin.frontend.hotdeploy=false</extraJvmArgs>
<includes>${gwt.test.pattern}</includes>
</configuration>

<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>generateAsync</goal>
</goals>
<phase>compile</phase>
</execution>
<execution>
<id>gwt-test</id>
<goals>
<goal>test</goal>
</goals>
<phase>test</phase>
</execution>
</executions>
</plugin>

<!-- Include separate source dir for GWT tests -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<dependencies>
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-testbench-core</artifactId>
<version>${testbench.version}</version>
</dependency>
</dependencies>
<executions>
<execution>
<id>add-gwt-test-sources-as-test-sources</id>
<goals>
<goal>add-test-source</goal>
</goals>
<phase>generate-test-sources</phase>
<configuration>
<sources>
<source>src/test-gwt/java</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.diffplug.spotless</groupId>
<artifactId>spotless-maven-plugin</artifactId>
<configuration>
<java>
<excludes>
<exclude>src/main/java/com/vaadin/client/gwt/**</exclude>
</excludes>
</java>
<typescript>
<excludes>
<exclude>src/main/java/com/vaadin/client/gwt</exclude>
<exclude>src/main/resources/com/vaadin/flow/linker/ClientEngineSingleScriptTemplate.js</exclude>
<exclude>src/main/frontend/FlowClient.js</exclude>
</excludes>
</typescript>
Expand Down Expand Up @@ -397,18 +286,11 @@
</plugins>
</build>
<profiles>
<profile>
<id>sdm</id>
<properties>
<gwt.module>com.vaadin.ClientEngineXSI</gwt.module>
</properties>
</profile>
<profile>
<id>slow-tests</id>
<properties>
<!-- There are no slowTests in this module, we disable surefire, gwt and Ts -->
<!-- There are no slowTests in this module, we disable surefire and Ts -->
<groups>none</groups>
<gwt.test.pattern>none</gwt.test.pattern>
<skipTsTests>true</skipTsTests>
</properties>
</profile>
Expand Down
23 changes: 11 additions & 12 deletions flow-client/scripts/client.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,22 +16,21 @@

const fs = require('fs');

const fromDir = 'target/classes/META-INF/resources/VAADIN/static/client/';
const fromFileRegex = /^client-.*\.cache\.js$/u;

const sourceDir = 'src/main/frontend/';
const targetDir = 'target/classes/META-INF/frontend/';
const toFile = 'FlowClient.js';

const fromFileName = fs.readdirSync(fromDir).find((filename) => fromFileRegex.exec(filename));

// Read from target
let clientSource = fs.readFileSync(fromDir + fromFileName, 'utf8');

// Wrap with ES module export
clientSource = `export function init() {
${clientSource}
};`;
// FlowClient.init() is the client entry point that Flow.ts imports and calls. It
// runs the TypeScript bootstrap (onModuleLoad): it registers the widgetset start
// callback so the server bootstrap can start the application, which assembles and
// starts the TypeScript engine (ApplicationConnection). This replaces the former
// GWT engine bundle that used to be inlined here.
const clientSource = `import { onModuleLoad } from './internal/Bootstrapper';

export function init() {
onModuleLoad();
}
`;

// Write to source
fs.writeFileSync(sourceDir + toFile, clientSource, 'utf8');
Expand Down
Loading