Changes since 24.9.18
New features
-
Expose application properties via
OptionsforTypeScriptBootstrapModifierconsumers (#24073) (CP: 24.10) (#24267) (CP: 24.9)
Commit · Pull requestTypeScriptBootstrapModifierimplementations (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 #24055
Fixes
-
Load Image/IFrame sources when disabled (CP: 24.10) (#24365) (CP: 24.9)
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) (#24311) (CP: 24.9)
Commit · Pull requestWhen 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.
Fixes #24306 -
Install pnpm deps in hoisted mode + declare @babel/types (#24288) (CP: 24.9)
Commit · Pull requestSwitches 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. -
Wrong existence check in getStaticResource (CP: 25.0) (#24285) (CP: 24.9)
Commit · Pull requestOn Jetty 12.1.9, requests for static resources packaged inside a JAR (e.g.
vaadinPush.jsfromflow-push) fail withFileSystemNotFoundException.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.