release: WRNexusJS 0.5.14

This commit is contained in:
2026-07-30 21:29:25 +05:30
parent 9dffe83f32
commit 358a520bc5
123 changed files with 11646 additions and 461 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/dev-server",
"version": "0.5.13",
"version": "0.5.14",
"type": "module",
"main": "src/index.ts",
"exports": {
+24 -8
View File
@@ -594,15 +594,15 @@ export const HMR_CLIENT_JS = `
document.title = doc.title;
}
["data-theme", "data-accent", "lang"].forEach(function (name) {
var value = doc.documentElement.getAttribute(name);
// HMR morphs only #app. Keep the live browser theme and accent because
// they represent the user's current selection. Language remains SSR-owned.
var nextLang = doc.documentElement.getAttribute("lang");
if (value == null) {
document.documentElement.removeAttribute(name);
} else {
document.documentElement.setAttribute(name, value);
}
});
if (nextLang == null) {
document.documentElement.removeAttribute("lang");
} else {
document.documentElement.setAttribute("lang", nextLang);
}
var from = document.getElementById("app");
var to = doc.getElementById("app");
@@ -620,6 +620,22 @@ export const HMR_CLIENT_JS = `
if (window.__wrnexusHydrateCsrFetches) {
window.__wrnexusHydrateCsrFetches(document);
}
if (
window.wireTheme &&
typeof window.wireTheme.bind === "function"
) {
window.wireTheme.bind(document);
}
window.dispatchEvent(
new CustomEvent("wrnexus:hmr-updated", {
detail: {
theme: document.documentElement.getAttribute("data-theme"),
accent: document.documentElement.getAttribute("data-accent"),
},
}),
);
}
// Minimal index-based DOM morph: preserve matching nodes (keeps state/focus),
@@ -1,5 +1,5 @@
import { expect, test } from "bun:test";
import { collectScripts } from "../src/runtime.ts";
import { HMR_CLIENT_JS, collectScripts } from "../src/runtime.ts";
test("accent controls load the shared theme runtime", () => {
expect(collectScripts('<button data-wire-accent-set="rose">Rose</button>')).toContain(
@@ -12,3 +12,17 @@ test("accent clear controls load the shared theme runtime", () => {
"/__wrnexus/theme.js",
);
});
test("HMR preserves the active browser theme and accent", () => {
expect(HMR_CLIENT_JS).not.toContain('["data-theme", "data-accent", "lang"]');
expect(HMR_CLIENT_JS).not.toContain("document.documentElement.setAttribute(name, value)");
expect(HMR_CLIENT_JS).toMatch(/var nextLang\s*=\s*doc\.documentElement\.getAttribute\("lang"\)/);
expect(HMR_CLIENT_JS).toMatch(/typeof\s+window\.wireTheme\.bind\s*===\s*"function"/);
expect(HMR_CLIENT_JS).toMatch(/window\.wireTheme\.bind\(document\)/);
expect(HMR_CLIENT_JS).toContain('new CustomEvent("wrnexus:hmr-updated"');
});