diff --git a/changelog/core/0.7.45.md b/changelog/core/0.7.45.md new file mode 100644 index 000000000..ab710ab3b --- /dev/null +++ b/changelog/core/0.7.45.md @@ -0,0 +1,19 @@ +--- +package: "@webjsdev/core" +version: 0.7.45 +date: 2026-07-26T17:42:19.247Z +commit_count: 1 +--- +## Fixes + +- **a stale hover prefetch no longer degrades a click to a full page load** ([#1115](https://github.com/webjsdev/webjs/pull/1115)) [`f34fa5c9`](https://github.com/webjsdev/webjs/commit/f34fa5c9) + + Clicking a link could intermittently reload the whole document instead of soft-navigating, showing a loading spinner in the browser tab and flashing the entire page including preserved layout chrome. + + A prefetched fragment is a reduced response, anchored at the deepest layout boundary the server short-circuited on, and it can only be applied to a DOM that still offers that boundary. Prefetching any page under a layout while the client already holds that layout therefore yields a fragment that applies from a sibling page but nowhere outside the section. Two ordinary interactions left one cached at the wrong moment: a hover's intent timer resolving after the click it belonged to had already swapped, and a hover on a link that was never clicked before navigating away. Consuming such an entry left the router nothing to swap into, so it correctly degraded to a full page load. + + The prefetch cache now validates a fragment's anchor against the live boundaries and discards it when the anchor is gone, costing one network round-trip instead of a document load. Validation runs against the boundaries captured before the optimistic loading skeleton clears them, so an app with a root-level `loading.{js,ts}` keeps a usable prefetch cache. The router also no longer prefetches the page it is already on, which never helped a later navigation and only occupied a capped cache slot. + +- **client-router degradations are now observable in production** ([#1115](https://github.com/webjsdev/webjs/pull/1115)) [`f34fa5c9`](https://github.com/webjsdev/webjs/commit/f34fa5c9) + + When a soft navigation is not safely possible the router degrades to a full page load, which is correct but was previously reported only by a development-mode console warning, leaving deployed apps with no signal at all. Every such path now dispatches a `webjs:navigation-fallback` event on `document` in all environments, with detail `{ cause, href, willReload }`. `willReload` is true only when a document load actually follows, so a listener can count real full loads without also counting the degradations that resolve in place (a dropped background revalidation, or a suppressed cross-deploy reload that proceeds on the stale importmap). The event is not cancelable, and a listener that throws cannot affect the navigation. diff --git a/changelog/nvim/0.2.3.md b/changelog/nvim/0.2.3.md new file mode 100644 index 000000000..f5800f308 --- /dev/null +++ b/changelog/nvim/0.2.3.md @@ -0,0 +1,14 @@ +--- +package: "webjs.nvim" +version: 0.2.3 +date: 2026-07-26T17:55:00.000Z +commit_count: 2 +npm: false +--- +## Fixes + +- **the vendored `@webjsdev/intellisense` bundle reported the wrong version** ([#1117](https://github.com/webjsdev/webjs/pull/1117)) + + The plugin ships a committed copy of `@webjsdev/intellisense` rather than resolving it at install time. That copy still declared 0.5.1 in its own `package.json`, so the published plugin misreported which language-service version it carried. Re-vendored, so the shipped bundle and its stated version agree. + + There is no change to the plugin's own Lua surface. The only other commit touching this package since 0.2.2 was a JSDoc brand-casing pass inside the vendored copy ([#855](https://github.com/webjsdev/webjs/pull/855)) [`f41d105b`](https://github.com/webjsdev/webjs/commit/f41d105b), with no behaviour change. diff --git a/changelog/vscode/0.2.3.md b/changelog/vscode/0.2.3.md new file mode 100644 index 000000000..927e12533 --- /dev/null +++ b/changelog/vscode/0.2.3.md @@ -0,0 +1,18 @@ +--- +package: "webjs (VS Code extension)" +version: 0.2.3 +date: 2026-07-26T17:55:00.000Z +commit_count: 3 +npm: false +--- +## Fixes + +- **the "open documentation" command points at the current docs host** ([#1101](https://github.com/webjsdev/webjs/pull/1101)) [`e07ea3a1`](https://github.com/webjsdev/webjs/commit/e07ea3a1) + + The documentation moved from `docs.webjs.dev` onto the main domain, and the command shipped in the extension still opened the old host. This is the extension-side counterpart of the same fix released in `@webjsdev/core` 0.7.44. + +- **brand casing corrected in the Marketplace listing** ([#851](https://github.com/webjsdev/webjs/pull/851)) [`28e5be9a`](https://github.com/webjsdev/webjs/commit/28e5be9a) + + The extension README is packaged into the vsix and rendered as the Marketplace listing page, so this is the visible description text. + +Also includes a JSDoc-only brand-casing pass over the extension source ([#855](https://github.com/webjsdev/webjs/pull/855)) [`f41d105b`](https://github.com/webjsdev/webjs/commit/f41d105b), with no behaviour change. diff --git a/package-lock.json b/package-lock.json index 89ae1a207..66d43ab82 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6991,7 +6991,7 @@ }, "packages/core": { "name": "@webjsdev/core", - "version": "0.7.44", + "version": "0.7.45", "license": "MIT", "devDependencies": { "esbuild": "^0.25.0" @@ -7007,11 +7007,11 @@ }, "packages/editors/nvim": { "name": "webjs.nvim", - "version": "0.2.2" + "version": "0.2.3" }, "packages/editors/vscode": { "name": "webjs", - "version": "0.2.2", + "version": "0.2.3", "license": "MIT", "dependencies": { "@webjsdev/intellisense": "^0.5.0" diff --git a/packages/core/package.json b/packages/core/package.json index 7dba0e599..d648ec858 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@webjsdev/core", - "version": "0.7.44", + "version": "0.7.45", "type": "module", "description": "webjs core runtime - html/css tags, WebComponent base, isomorphic renderers", "types": "./index.d.ts", diff --git a/packages/editors/nvim/package.json b/packages/editors/nvim/package.json index 8a71d1e1e..a4bb25fbe 100644 --- a/packages/editors/nvim/package.json +++ b/packages/editors/nvim/package.json @@ -1,6 +1,6 @@ { "name": "webjs.nvim", - "version": "0.2.2", + "version": "0.2.3", "private": true, "description": "Neovim editor support for webjs apps (html/css/svg template highlighting + in-template intelligence via the bundled @webjsdev/intellisense). NOT an npm package: ships to the webjsdev/webjs.nvim git repo via subtree split, installed by lazy.nvim. This manifest exists only as the version source for the unified changelog (changelog/nvim/.md); see PUBLISHING.md." } diff --git a/packages/editors/nvim/vendor/node_modules/@webjsdev/intellisense/package.json b/packages/editors/nvim/vendor/node_modules/@webjsdev/intellisense/package.json index 5fbe010fa..7f21fcc8a 100644 --- a/packages/editors/nvim/vendor/node_modules/@webjsdev/intellisense/package.json +++ b/packages/editors/nvim/vendor/node_modules/@webjsdev/intellisense/package.json @@ -1,6 +1,6 @@ { "name": "@webjsdev/intellisense", - "version": "0.5.1", + "version": "0.5.4", "type": "commonjs", "description": "Standalone TypeScript language-service plugin for webjs (no Lit dependency). Adds in-template intelligence inside html`` templates: go-to-definition on tags / attributes / CSS classes, binding-aware completions, value/binding diagnostics, and hover, all driven by its own template parser and gated on import-graph reachability.", "main": "src/index.js", diff --git a/packages/editors/vscode/PUBLISHING.md b/packages/editors/vscode/PUBLISHING.md index 79948e229..3f0b47f17 100644 --- a/packages/editors/vscode/PUBLISHING.md +++ b/packages/editors/vscode/PUBLISHING.md @@ -43,8 +43,11 @@ dependencies. ## Releasing a version -1. Bump `version` in `packages/editors/vscode/package.json` (the pre-commit hook - skips this package's changelog, so no changelog file is generated). +1. Bump `version` in `packages/editors/vscode/package.json`. The pre-commit hook + TRACKS this package (#413), so the bump DOES require a `changelog/vscode/.md` + and `scripts/backfill-changelog.js` generates one. The entry carries + `npm: false`, which makes every publish script skip it, so nothing is + published automatically: the `vsce` / `ovsx` steps below are still manual. 2. Build + package + publish to both registries: ```sh cd packages/editors/vscode diff --git a/packages/editors/vscode/package.json b/packages/editors/vscode/package.json index 09c6845cf..26360f246 100644 --- a/packages/editors/vscode/package.json +++ b/packages/editors/vscode/package.json @@ -1,7 +1,7 @@ { "name": "webjs", "displayName": "webjs", - "version": "0.2.2", + "version": "0.2.3", "description": "All-in-one webjs support: html/css template highlighting, language-service intelligence, snippets, and commands. No Lit extension required.", "publisher": "webjsdev", "private": true,