UNPKG

@westacks/vortex

Version:

Server-based routing for SPAs

76 lines (75 loc) 2.58 kB
"use strict"; const page = require("./page-DiCE-s9S.cjs"); const http = require("axios"); exports.axios = void 0; const popstate = (event) => { if (!event.state) return; page.setPage(event.state.page); }; function install(...extensions) { if (!exports.axios) throw new Error("Router not initialized!"); const uninstall = extensions.reduce((acc, x) => { const extension = x(exports.axios.interceptors); if ((extension == null ? void 0 : extension.name) && typeof window !== "undefined") { window.dispatchEvent(new CustomEvent(`vortex:extension-installed`, { detail: extension.name })); } acc.request = [...acc.request, ...(extension == null ? void 0 : extension.request) ? [extension.request] : []]; acc.response = [...acc.response, ...(extension == null ? void 0 : extension.response) ? [extension.response] : []]; return acc; }, { request: [], response: [] }); return () => { uninstall.request.forEach((x) => { var _a; return (_a = exports.axios) == null ? void 0 : _a.interceptors.request.eject(x); }); uninstall.response.forEach((x) => { var _a; return (_a = exports.axios) == null ? void 0 : _a.interceptors.response.eject(x); }); }; } function createRouter() { var _a; exports.axios = http.create(); exports.axios.reload = function(config) { var _a2; return this({ url: (_a2 = page.getPage()) == null ? void 0 : _a2.url, ...config }); }; window.history.replaceState({ page: page.getPage() }, "", (_a = page.getPage()) == null ? void 0 : _a.url); window.addEventListener("popstate", popstate); exports.axios.defaults.withCredentials = true; exports.axios.defaults.vortex = true; } function destroyRouter() { window.removeEventListener("popstate", popstate); exports.axios = void 0; } function link(node, options = {}) { function mergeOptions(options2) { options2.method = options2.method || "get"; options2.url = options2.url || node.href || ""; options2.data = options2.data || {}; if (node instanceof HTMLAnchorElement) { node.href = options2.url; } return options2; } function navigate(event) { event.preventDefault(); exports.axios(options); } options = mergeOptions(options); node.addEventListener("click", navigate); return { update(newOptions) { options = mergeOptions(newOptions); }, destroy() { node.removeEventListener("click", navigate); } }; } exports.createRouter = createRouter; exports.destroyRouter = destroyRouter; exports.install = install; exports.link = link;