resig.js
Version:
Universal reactive signal library with complete platform features: signals, animations, CRDTs, scheduling, DOM integration. Works identically across React, SolidJS, Svelte, Vue, and Qwik.
195 lines • 15.2 kB
JavaScript
;
/**
* Framework Adapters for Router
* Universal router integration with React, Svelte, Vue, etc.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.createTestRouter = exports.createSSRRouter = exports.useRouter = exports.useSolidRouter = exports.useVueRouter = exports.useSvelteRouter = exports.useReactTreeRouter = exports.useReactRouter = void 0;
const router_1 = require("./router");
const navigation_1 = require("./navigation");
/**
* React Router Adapter
*/
const useReactRouter = (routes) => {
const React = require('react');
const routerSignal = (0, router_1.router)(routes, (0, navigation_1.createBrowserNav)());
// Force re-renders when route changes
const [, forceUpdate] = React.useReducer((x) => x + 1, 0);
React.useEffect(() => {
const unsubscribe = routerSignal.subscribe(() => forceUpdate());
return unsubscribe;
}, []);
return {
route: routerSignal.route.value(),
params: routerSignal.params.value(),
navigate: (to) => {
routerSignal.navigate(to);
},
back: () => routerSignal.back(),
forward: () => routerSignal.forward(),
replace: (to) => routerSignal.replace(to)
};
};
exports.useReactRouter = useReactRouter;
/**
* React Tree Router Adapter
*/
const useReactTreeRouter = (tree) => {
const React = require('react');
const routerSignal = (0, router_1.treeRouter)(tree, (0, navigation_1.createBrowserNav)());
const [, forceUpdate] = React.useReducer((x) => x + 1, 0);
React.useEffect(() => {
const unsubscribe = routerSignal.subscribe(() => forceUpdate());
return unsubscribe;
}, []);
return {
route: routerSignal.route.value(),
params: routerSignal.params.value(),
navigate: (to) => routerSignal.navigate(to),
back: () => routerSignal.back(),
forward: () => routerSignal.forward(),
replace: (to) => routerSignal.replace(to)
};
};
exports.useReactTreeRouter = useReactTreeRouter;
/**
* Svelte Router Adapter
*/
const useSvelteRouter = (routes) => {
const routerSignal = (0, router_1.router)(routes, (0, navigation_1.createBrowserNav)());
// In Svelte 5, we can use $effect for reactivity
if (typeof globalThis !== 'undefined' && globalThis.$effect) {
globalThis.$effect(() => {
// This will automatically track the router signal
routerSignal.value();
});
}
return {
route: routerSignal.route,
params: routerSignal.params,
navigate: (to) => routerSignal.navigate(to),
back: () => routerSignal.back(),
forward: () => routerSignal.forward(),
replace: (to) => routerSignal.replace(to)
};
};
exports.useSvelteRouter = useSvelteRouter;
/**
* Vue Router Adapter
*/
const useVueRouter = (routes) => {
const vue = require('vue');
const routerSignal = (0, router_1.router)(routes, (0, navigation_1.createBrowserNav)());
const route = vue.ref(routerSignal.route.value());
const params = vue.ref(routerSignal.params.value());
// Watch for changes
routerSignal.subscribe(() => {
route.value = routerSignal.route.value();
params.value = routerSignal.params.value();
});
return {
route,
params,
navigate: (to) => routerSignal.navigate(to),
back: () => routerSignal.back(),
forward: () => routerSignal.forward(),
replace: (to) => routerSignal.replace(to)
};
};
exports.useVueRouter = useVueRouter;
/**
* SolidJS Router Adapter
*/
const useSolidRouter = (routes) => {
const solid = require('solid-js');
const routerSignal = (0, router_1.router)(routes, (0, navigation_1.createBrowserNav)());
const [route, setRoute] = solid.createSignal(routerSignal.route.value());
const [params, setParams] = solid.createSignal(routerSignal.params.value());
// Subscribe to changes
routerSignal.subscribe(() => {
setRoute(routerSignal.route.value());
setParams(routerSignal.params.value());
});
return {
route,
params,
navigate: (to) => routerSignal.navigate(to),
back: () => routerSignal.back(),
forward: () => routerSignal.forward(),
replace: (to) => routerSignal.replace(to)
};
};
exports.useSolidRouter = useSolidRouter;
/**
* Universal Router Hook
* Automatically detects framework and returns appropriate adapter
*/
const useRouter = (routes) => {
// Framework detection
if (typeof window !== 'undefined') {
// Check for React
if (globalThis.React || window.React) {
return (0, exports.useReactRouter)(routes);
}
// Check for Vue
if (globalThis.Vue || window.Vue) {
return (0, exports.useVueRouter)(routes);
}
// Check for SolidJS
if (globalThis.solid || window.solid) {
return (0, exports.useSolidRouter)(routes);
}
// Default to Svelte
return (0, exports.useSvelteRouter)(routes);
}
// SSR fallback
return {
route: { tag: 'None' },
params: null,
navigate: (_to) => { },
back: () => { },
forward: () => { },
replace: (_to) => { }
};
};
exports.useRouter = useRouter;
/**
* Server-Side Rendering Adapter
*/
const createSSRRouter = (routes, initialPath) => {
const env = (0, navigation_1.createNodeNav)(initialPath);
const routerSignal = (0, router_1.router)(routes, env);
return {
getRoute: () => routerSignal.route.value(),
getParams: () => routerSignal.params.value(),
setPath: (path) => env.setPath(path),
render: () => {
const route = routerSignal.route.value();
const params = routerSignal.params.value();
return {
route,
params,
path: env.getCurrentPath()
};
}
};
};
exports.createSSRRouter = createSSRRouter;
/**
* Testing Adapter
*/
const createTestRouter = (routes, initialPath = '/') => {
const { createMemoryNav } = require('./navigation');
const env = createMemoryNav(initialPath);
const routerSignal = (0, router_1.router)(routes, env);
return {
router: routerSignal,
navigate: (to) => routerSignal.navigate(to),
getPath: () => env.getCurrentPath(),
setPath: (path) => env.setPath(path),
back: () => routerSignal.back(),
forward: () => routerSignal.forward()
};
};
exports.createTestRouter = createTestRouter;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRhcHRlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcm91dGVyL2FkYXB0ZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O0dBR0c7OztBQUdILHFDQUE4QztBQUM5Qyw2Q0FBK0Q7QUFFL0Q7O0dBRUc7QUFDSSxNQUFNLGNBQWMsR0FBRyxDQUFJLE1BQWtCLEVBQUUsRUFBRTtJQUN0RCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDL0IsTUFBTSxZQUFZLEdBQUcsSUFBQSxlQUFNLEVBQUMsTUFBTSxFQUFFLElBQUEsNkJBQWdCLEdBQUUsQ0FBQyxDQUFDO0lBRXhELHNDQUFzQztJQUN0QyxNQUFNLENBQUMsRUFBRSxXQUFXLENBQUMsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRWxFLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ25CLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUNoRSxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFUCxPQUFPO1FBQ0wsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFO1FBQ2pDLE1BQU0sRUFBRSxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtRQUNuQyxRQUFRLEVBQUUsQ0FBQyxFQUFVLEVBQUUsRUFBRTtZQUN2QixZQUFZLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVCLENBQUM7UUFDRCxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRTtRQUMvQixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsWUFBWSxD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