chore: document architecture gaps and add dev hot reload
- add npm dev:hot wrapper using cargo-watch and page reload polling - add mnote-web dev hot reload endpoint and coverage - record current architecture review and tracked bug findings across realtime, tree, editor, and AI runtimes Verification: - node scripts/task-dev-hot-plan-test.js - node --check scripts/dev-hot.js - cargo test -p mnote-web dev_hot -- --nocapture
This commit is contained in:
@@ -6745,6 +6745,36 @@ const SIDEBAR_TREE_JS: &str = r##"
|
||||
}
|
||||
scheduleInitializePageUiSurfaces();
|
||||
|
||||
function installMnoteDevHotReload() {
|
||||
var bootId = '';
|
||||
var failedOnce = false;
|
||||
var timer = 0;
|
||||
function tick() {
|
||||
fetch('/api/dev/hot-reload', { cache: 'no-store', headers: { accept: 'application/json' } })
|
||||
.then(function(response) { return response.ok ? response.json() : null; })
|
||||
.then(function(payload) {
|
||||
if (!payload || payload.enabled !== true || !payload.bootId) {
|
||||
if (!bootId && timer) window.clearInterval(timer);
|
||||
return;
|
||||
}
|
||||
document.documentElement.setAttribute('data-mnote-dev-hot-reload', 'enabled');
|
||||
if (!bootId) {
|
||||
bootId = String(payload.bootId);
|
||||
return;
|
||||
}
|
||||
if (failedOnce || String(payload.bootId) !== bootId) {
|
||||
window.location.assign(window.location.href);
|
||||
}
|
||||
})
|
||||
.catch(function() {
|
||||
if (bootId) failedOnce = true;
|
||||
});
|
||||
}
|
||||
tick();
|
||||
timer = window.setInterval(tick, 1000);
|
||||
}
|
||||
installMnoteDevHotReload();
|
||||
|
||||
function readPageDragNodeId(event) {
|
||||
var fromTransfer = event.dataTransfer ? event.dataTransfer.getData(PAGE_DRAG_MIME) || event.dataTransfer.getData('text/plain') : '';
|
||||
return (fromTransfer || draggingPageNodeId || '').trim();
|
||||
@@ -7437,6 +7467,14 @@ mod tests {
|
||||
assert!(!SIDEBAR_TREE_JS.contains("window.location.reload"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn sidebar_tree_runtime_contains_dev_hot_reload_client() {
|
||||
assert!(SIDEBAR_TREE_JS.contains("installMnoteDevHotReload"));
|
||||
assert!(SIDEBAR_TREE_JS.contains("/api/dev/hot-reload"));
|
||||
assert!(SIDEBAR_TREE_JS.contains("data-mnote-dev-hot-reload"));
|
||||
assert!(SIDEBAR_TREE_JS.contains("window.clearInterval(timer)"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn sidebar_tree_runtime_renders_context_menu_and_scoped_title_updates() {
|
||||
assert!(SIDEBAR_TREE_JS.contains("openTreeContextMenu"));
|
||||
|
||||
Reference in New Issue
Block a user