Changes since 24.10.4
New features
-
Expose application properties via
OptionsforTypeScriptBootstrapModifierconsumers (#24073) (CP: 24.10)
Commit · Pull request · IssueTypeScriptBootstrapModifierimplementations (e.g., Copilot) need access to application properties to conditionally modify bootstrap TypeScript. Currently, the Copilot script is injected in dev mode regardless of whether Copilot is enabled in the project configuration. AddwithApplicationConfigurationtoOptionsand property accessor methods (getApplicationStringProperty,getApplicationBooleanProperty) that returnOptional.empty()when configuration is unavailable (build time). WireApplicationConfigurationfromDevModeInitializer.
Fixes
-
Load Image/IFrame sources when disabled (CP: 24.10)
Commit · Pull request · IssueWhen an Image or IFrame backed by a DownloadHandler lives inside a disabled component, the browser receives a 403 and the resource never loads. Image.setSrc(DownloadHandler) and IFrame.setSrc(DownloadHandler) now allow the resource to be served regardless of the owner's enabled state, since these sources are fetched passively as part of rendering rather than as a user action.
-
NPE when web push subscription is expired (CP: 24.10)
Commit · Pull request · IssueWhen the push service reports a subscription as expired,
WebPush.sendNotificationthrewNullPointerExceptioninstead of the intendedWebPushException. Remove a leftover reference to an unassignedHttpResponselocal variable that was no longer populated after the migration tocom.interaso.webpush. -
Install pnpm deps in hoisted mode + declare @babel/types (#24288) (CP: 24.10)
Commit · Pull requestCherry-pick of #24288 (commit d9290f8) from main to 24.10. ## Summary Same fix as #24288: switches pnpm install to hoisted (flat npm-style) layout so transitive npm deps (
@babel/types,@lit/reactive-element,cookie,set-cookie-parser,@preact/signals-react/runtime) are always reachable from project root, eliminating thevite-basicsIT hang and similar symptoms. ## Adjustments for 24.10 24.10 is pre-flow-build-toolsrefactor (#23161), so all the Java files the original commit touches (FrontendTools.java,FrontendToolsTest.java,NodeUpdaterTest.java,TaskRunPnpmInstallTest.java) live underflow-server/here. The edits are otherwise identical. Two version adjustments to match this branch's dep graph: 1.@babel/typespinned to7.28.5(matching@babel/preset-react) instead of main's7.29.0. 24.10 does not declare@babel/core, so version coherence is anchored topreset-react. 2. Skipped@babel/coreand@babel/plugin-transform-react-jsx-developmentdeclarations from the main commit — not declared as direct deps on 24.10, and the React function location plugin only imports@babel/types. ## Supersedes #24289 This PR replaces #24289 (the narrower @babel/types-only fix). Once this lands, #24289 should be closed. ## Test plan - [ ] CI on this PR passes (specificallyit-tests (1)andit-tests (2)). - [ ]mvn -pl flow-server test -Dtest=NodeUpdaterTest,TaskRunPnpmInstallTest,FrontendToolsTestpasses. - [ ] After install in any vite-using IT module,node_modules/.pnpm/does not exist (or is empty);node_modules/@babel/types/andnode_modules/@lit/reactive-element/exist as real directories at the project root. 🤖 Generated with Claude Code -
Wrong existence check in getStaticResource (CP: 25.0) (#24285) (CP: 24.10)
Commit · Pull requestThis PR cherry-picks changes from the original PR #24285 to branch 24.10. --- #### Original PR description > This PR cherry-picks changes from the original PR #24283 to branch 25.0. > > A conflict in
flow-server/src/test/java/com/vaadin/flow/server/VaadinServletServiceTest.javawas resolved manually: the newgetStaticResource_jarUrlOnJetty12_returnsUrlInsteadOfThrowingtest was rewritten in JUnit 4 idioms (@Rule TemporaryFolder,Assert.*) since 25.0 has not adopted the JUnit 5 migration that landed onmain. > > --- > > > On Jetty 12.1.9, requests for static resources packaged inside a JAR (e.g.vaadinPush.jsfromflow-push) fail with > >FileSystemNotFoundException.VaadinServletService.getStaticResourceverifies the URL returned byServletContext.getResourceviaPath.of(url.toURI()), which for ajar:file:...!/entryURI requires the JAR's NIOFileSystemto already be mounted in the JVM-wide cache. Jetty 12.1.8 incidentally kept those filesystems mounted during resource resolution; 12.1.9 no longer does, sogetFileSystemthrows and the existingcatch (URISyntaxException)lets the unchecked exception escape, producing HTTP 500. > > > > Probe the URL withURL.openStream()instead.JarURLConnectionandFileURLConnectionusejava.util.jar.JarFile/java.io.Filedirectly and are independent of the NIOFileSystemscache, so the check works uniformly forfile:andjar:file:URLs and on every Jetty 12 build. The catch is broadened toIOException, covering both missing files (the original Jetty 12 workaround) and missing JAR entries.