UNPKG

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.

199 lines 14.2 kB
"use strict"; /** * Navigation Monad Implementation * Monadic composition for route changes */ Object.defineProperty(exports, "__esModule", { value: true }); exports.navigation = exports.createNavigationEffects = exports.createMemoryNav = exports.createNodeNav = exports.createBrowserNav = exports.pureNavigation = void 0; const effect_1 = require("../core/effect"); /** * Creates a Navigation monad that follows monadic laws */ const createNavigation = (route, env) => { const navigationInstance = { ...route, bind: (f) => { // Monadic bind - composition of navigations const currentParams = route.parse(env.getCurrentPath()); if (!currentParams) { // If current route doesn't match, return a failed navigation return createNavigation({ path: '', params: {}, map: (_g) => createNavigation(route, env), matches: () => false, parse: () => null, generate: () => '' }, env); } return f(currentParams); }, navigate: () => { return (0, effect_1.pureEffect)((() => { const currentPath = env.getCurrentPath(); const params = route.parse(currentPath); if (params) { return params; } else { // Navigate to this route const newPath = route.generate({}); // Need params for generation env.setPath(newPath); return route.parse(newPath); } })()); } }; return navigationInstance; }; /** * Pure function for Navigation monad - left identity law */ const pureNavigation = (value, env) => { // Create a synthetic route that always matches and returns the value const syntheticRoute = { path: env.getCurrentPath(), params: value, map: (f) => ({ path: env.getCurrentPath(), params: f(value), map: (g) => (0, exports.pureNavigation)(g(f(value)), env), matches: () => true, parse: () => f(value), generate: () => env.getCurrentPath() }), matches: () => true, parse: () => value, generate: () => env.getCurrentPath() }; return createNavigation(syntheticRoute, env); }; exports.pureNavigation = pureNavigation; /** * Navigation Environment Implementations */ /** * Browser Navigation Environment */ const createBrowserNav = () => ({ getCurrentPath: () => { if (typeof window === 'undefined') return '/'; return window.location.pathname + window.location.search + window.location.hash; }, setPath: (path, replace = false) => { if (typeof window === 'undefined') return; if (replace) { window.history.replaceState({}, '', path); } else { window.history.pushState({}, '', path); } // Dispatch a custom event for listeners window.dispatchEvent(new PopStateEvent('popstate')); }, onPathChange: (fn) => { if (typeof window === 'undefined') return () => { }; const handler = () => { fn(window.location.pathname + window.location.search + window.location.hash); }; window.addEventListener('popstate', handler); return () => window.removeEventListener('popstate', handler); } }); exports.createBrowserNav = createBrowserNav; /** * Node.js Navigation Environment (for SSR) */ const createNodeNav = (initialPath = '/') => { let currentPath = initialPath; const listeners = []; return { getCurrentPath: () => currentPath, setPath: (path) => { currentPath = path; listeners.forEach(fn => fn(path)); }, onPathChange: (fn) => { listeners.push(fn); return () => { const index = listeners.indexOf(fn); if (index > -1) listeners.splice(index, 1); }; } }; }; exports.createNodeNav = createNodeNav; /** * Memory Navigation Environment (for testing) */ const createMemoryNav = (initialPath = '/') => { let currentPath = initialPath; const history = [initialPath]; let currentIndex = 0; const listeners = []; const notifyListeners = () => { listeners.forEach(fn => fn(currentPath)); }; return { getCurrentPath: () => currentPath, setPath: (path, replace = false) => { if (replace) { history[currentIndex] = path; } else { // Remove any forward history history.splice(currentIndex + 1); history.push(path); currentIndex = history.length - 1; } currentPath = path; notifyListeners(); }, onPathChange: (fn) => { listeners.push(fn); return () => { const index = listeners.indexOf(fn); if (index > -1) listeners.splice(index, 1); }; } }; }; exports.createMemoryNav = createMemoryNav; /** * Navigation Effects - additional navigation operations */ const createNavigationEffects = (env) => ({ back: () => (0, effect_1.pureEffect)((() => { if (typeof window !== 'undefined') { window.history.back(); } })()), forward: () => (0, effect_1.pureEffect)((() => { if (typeof window !== 'undefined') { window.history.forward(); } })()), go: (delta) => (0, effect_1.pureEffect)((() => { if (typeof window !== 'undefined') { window.history.go(delta); } })()), replace: (path) => (0, effect_1.pureEffect)((() => { env.setPath(path, true); })()), push: (path) => (0, effect_1.pureEffect)((() => { env.setPath(path, false); })()) }); exports.createNavigationEffects = createNavigationEffects; /** * Export navigation constructor */ const navigation = (route, env) => createNavigation(route, env); exports.navigation = navigation; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yb3V0ZXIvbmF2aWdhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7QUFHSCwyQ0FBb0Q7QUFFcEQ7O0dBRUc7QUFDSCxNQUFNLGdCQUFnQixHQUFHLENBQ3ZCLEtBQWUsRUFDZixHQUFrQixFQUNILEVBQUU7SUFDakIsTUFBTSxrQkFBa0IsR0FBa0I7UUFDeEMsR0FBRyxLQUFLO1FBRVIsSUFBSSxFQUFFLENBQUksQ0FBMEIsRUFBaUIsRUFBRTtZQUNyRCw0Q0FBNEM7WUFDNUMsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztZQUN4RCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ25CLDZEQUE2RDtnQkFDN0QsT0FBTyxnQkFBZ0IsQ0FDckI7b0JBQ0UsSUFBSSxFQUFFLEVBQUU7b0JBQ1IsTUFBTSxFQUFFLEVBQU87b0JBQ2YsR0FBRyxFQUFFLENBQUksRUFBZSxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFZLEVBQUUsR0FBRyxDQUFRO29CQUN2RSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSztvQkFDcEIsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUk7b0JBQ2pCLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFO2lCQUNuQixFQUNELEdBQUcsQ0FDSixDQUFDO1lBQ0osQ0FBQztZQUVELE9BQU8sQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzFCLENBQUM7UUFFRCxRQUFRLEVBQUUsR0FBYyxFQUFFO1lBQ3hCLE9BQU8sSUFBQSxtQkFBVSxFQUFDLENBQUMsR0FBRyxFQUFFO2dCQUN0QixNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3pDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FB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