- vm_api.py: pure FastAPI JSON API on :8098 with CORS - vm-api.service: systemd unit for API (replaces inline HTML vm_web.py for frontend) - vm_web.py: kept intact as fallback; Apache now proxies /api/ -> :8098 - frontend/: Vite + React + TanStack Query scaffold - Apache vhost updated: DocumentRoot -> frontend/dist, /api/ proxy, SPA fallback - All original HTML pages still functional via :8099 during transition
70 lines
2.4 KiB
JavaScript
70 lines
2.4 KiB
JavaScript
"use client";
|
|
const require_runtime = require("./_virtual/_rolldown/runtime.cjs");
|
|
const require_utils = require("./utils.cjs");
|
|
const require_useRouter = require("./useRouter.cjs");
|
|
let _tanstack_router_core = require("@tanstack/router-core");
|
|
let react = require("react");
|
|
react = require_runtime.__toESM(react, 1);
|
|
//#region src/Transitioner.tsx
|
|
function settleOwner(owner, rendered) {
|
|
const settle = owner[1];
|
|
owner.length = 0;
|
|
settle?.(rendered);
|
|
}
|
|
function Transitioner({ t }) {
|
|
const router = require_useRouter.useRouter();
|
|
const acknowledgement = router._rendered ??= [];
|
|
const mounted = process.env.NODE_ENV !== "production" ? react.useRef(false) : void 0;
|
|
router.startTransition = (fn, expected) => new Promise((resolve, reject) => {
|
|
settleOwner(acknowledgement, false);
|
|
acknowledgement.push(expected, resolve);
|
|
t(router);
|
|
react.startTransition(() => {
|
|
try {
|
|
fn();
|
|
} catch (cause) {
|
|
if (acknowledgement[1] === resolve) acknowledgement.length = 0;
|
|
reject(cause);
|
|
}
|
|
});
|
|
});
|
|
if (process.env.NODE_ENV !== "production") router._cancelTransition = () => settleOwner(acknowledgement, false);
|
|
require_utils.useLayoutEffect(() => {
|
|
const unsub = router.history.subscribe(router.load);
|
|
if (mounted?.current) return unsub;
|
|
if (mounted) mounted.current = true;
|
|
router.updateLatestLocation();
|
|
const location = router.latestLocation;
|
|
const nextLocation = router.buildLocation({
|
|
to: location.pathname,
|
|
search: true,
|
|
params: true,
|
|
hash: true,
|
|
state: true,
|
|
_includeValidateSearch: true
|
|
});
|
|
if ((0, _tanstack_router_core.trimPathRight)(location.publicHref) !== (0, _tanstack_router_core.trimPathRight)(nextLocation.publicHref)) {
|
|
router.commitLocation({
|
|
...nextLocation,
|
|
replace: true,
|
|
ignoreBlocker: true
|
|
});
|
|
return unsub;
|
|
}
|
|
const resolvedLocation = router.stores.resolvedLocation.get();
|
|
if (resolvedLocation?.href === location.href && resolvedLocation.state.__TSR_key === location.state.__TSR_key) acknowledgement.push(router.stores.matches.get(), (rendered) => {
|
|
if (rendered) router.emit({
|
|
type: "onRendered",
|
|
...(0, _tanstack_router_core.getLocationChangeInfo)(resolvedLocation, resolvedLocation)
|
|
});
|
|
});
|
|
else if (!router._tx) router.load().catch(console.error);
|
|
return unsub;
|
|
}, [router, router.history]);
|
|
return null;
|
|
}
|
|
//#endregion
|
|
exports.Transitioner = Transitioner;
|
|
exports.settleOwner = settleOwner;
|
|
|
|
//# sourceMappingURL=Transitioner.cjs.map
|