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.

136 lines 9.33 kB
/** * Route Guards Implementation * Access control and navigation guards */ import { effect } from '../core/effect'; /** * Creates a guarded route that checks permissions before navigation */ export const withGuard = (route, _guard) => { return { ...route, map: (f) => { const mappedRoute = route.map(f); const mappedGuard = { canActivate: (_params) => { // We need to reverse the mapping to check the original guard // This is a limitation of the current design // In practice, guards would be applied after mapping return effect(true); // Simplified for now }, canDeactivate: (_params) => { return effect(true); // Simplified for now } }; return withGuard(mappedRoute, mappedGuard); }, parse: (path) => { const params = route.parse(path); if (!params) return null; // Note: In a real implementation, we'd need to handle async guards // For now, we'll assume guards are checked elsewhere in the navigation flow return params; } }; }; /** * Multiple guards combinator */ export const withGuards = (route, guards) => { return guards.reduce((guardedRoute, guard) => withGuard(guardedRoute, guard), route); }; /** * Authentication guard */ export const authGuard = (isAuthenticated) => ({ canActivate: (_params) => isAuthenticated(), canDeactivate: (_params) => effect(true) }); /** * Role-based guard */ export const roleGuard = (requiredRole, getUserRole) => ({ canActivate: (_params) => getUserRole().bind(role => effect(role === requiredRole)), canDeactivate: (_params) => effect(true) }); /** * Confirmation guard */ export const confirmGuard = (message) => ({ canActivate: (_params) => effect(true), canDeactivate: (_params) => effect(typeof window !== 'undefined' ? window.confirm(message) : true) }); /** * Navigation guard executor * Checks all guards before allowing navigation */ export const executeGuards = async (guards, params, type) => { for (const guard of guards) { const check = type === 'activate' ? guard.canActivate : guard.canDeactivate; const result = await new Promise(resolve => { const guardEffect = check(params); // Execute the effect const value = guardEffect.value(); if (typeof value === 'boolean') { resolve(value); } else if (typeof value === 'function') { resolve(Boolean(value)); } else { resolve(true); } }); if (!result) { return false; } } return true; }; /** * Guarded navigation wrapper */ export const createGuardedNavigation = (navigation, _guards) => { return { ...navigation, navigate: () => { // const currentParams = navigation.params; // For now, simplified guard checking // In a real implementation, this would be async return navigation.navigate(); }, bind: (f) => { return navigation.bind((params) => { const nextNav = f(params); // Guards would need to be propagated or checked here return nextNav; }); } }; }; /** * Guard composition utilities */ export const composeGuards = (..._guards) => ({ canActivate: (_params) => { // Simplified for now - would be async in real implementation return effect(true); }, canDeactivate: (_params) => { // Simplified for now - would be async in real implementation return effect(true); } }); /** * Conditional guard */ export const conditionalGuard = (condition, guard) => ({ canActivate: (params) => { return condition(params) ? guard.canActivate(params) : effect(true); }, canDeactivate: (params) => { return condition(params) ? guard.canDeactivate(params) : effect(true); } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3VhcmRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JvdXRlci9ndWFyZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBR0gsT0FBTyxFQUFVLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWhEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQ3ZCLEtBQWUsRUFDZixNQUFxQixFQUNYLEVBQUU7SUFDWixPQUFPO1FBQ0wsR0FBRyxLQUFLO1FBRVIsR0FBRyxFQUFFLENBQUksQ0FBYyxFQUFZLEVBQUU7WUFDbkMsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqQyxNQUFNLFdBQVcsR0FBa0I7Z0JBQ2pDLFdBQVcsRUFBRSxDQUFDLE9BQVUsRUFBRSxFQUFFO29CQUMxQiw2REFBNkQ7b0JBQzdELDZDQUE2QztvQkFDN0MscURBQXFEO29CQUNyRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLHFCQUFxQjtnQkFDNUMsQ0FBQztnQkFDRCxhQUFhLEVBQUUsQ0FBQyxPQUFVLEVBQUUsRUFBRTtvQkFDNUIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxxQkFBcUI7Z0JBQzVDLENBQUM7YUFDRixDQUFDO1lBQ0YsT0FBTyxTQUFTLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFFRCxLQUFLLEVBQUUsQ0FBQyxJQUFZLEVBQVksRUFBRTtZQUNoQyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxNQUFNO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBRXpCLG1FQUFtRTtZQUNuRSw0RUFBNEU7WUFDNUUsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDLENBQUM7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