@ozmos/viper-vue
Version:
Vue plugin for Viper
33 lines • 1.16 kB
JavaScript
import { Page } from "./page";
export const ViperPlugin = {
install(app, { formatTitle, router, queryClient, }) {
const page = new Page({
formatTitle,
queryClient,
});
app.provide("viperPage", page);
const pageJson = JSON.parse(document.getElementById("app")?.dataset.page ?? "{}");
page.updateFromPageJson(pageJson);
router.beforeEach(async (to, from, next) => {
const res = await fetch(to.fullPath, {
headers: {
"Content-Type": "application/json",
Accept: "application/json",
"X-Viper-Request": "true",
},
});
const redirectUrl = res.headers.get("x-viper-location");
if (redirectUrl) {
const url = new URL(redirectUrl);
return next(url.pathname);
}
if (!res.ok) {
return next(false);
}
page.updateFromPageJson(await res.json());
return next();
});
},
};
export { usePage } from "./page";
//# sourceMappingURL=index.js.map