release: WRNexusJS 0.5.14
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@wrnexus/dev-server",
|
||||
"version": "0.5.13",
|
||||
"version": "0.5.14",
|
||||
"type": "module",
|
||||
"main": "src/index.ts",
|
||||
"exports": {
|
||||
|
||||
@@ -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"');
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user