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.

148 lines 10.3 kB
"use strict"; /** * Route Guards Implementation * Access control and navigation guards */ Object.defineProperty(exports, "__esModule", { value: true }); exports.conditionalGuard = exports.composeGuards = exports.createGuardedNavigation = exports.executeGuards = exports.confirmGuard = exports.roleGuard = exports.authGuard = exports.withGuards = exports.withGuard = void 0; const effect_1 = require("../core/effect"); /** * Creates a guarded route that checks permissions before navigation */ 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 (0, effect_1.effect)(true); // Simplified for now }, canDeactivate: (_params) => { return (0, effect_1.effect)(true); // Simplified for now } }; return (0, exports.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; } }; }; exports.withGuard = withGuard; /** * Multiple guards combinator */ const withGuards = (route, guards) => { return guards.reduce((guardedRoute, guard) => (0, exports.withGuard)(guardedRoute, guard), route); }; exports.withGuards = withGuards; /** * Authentication guard */ const authGuard = (isAuthenticated) => ({ canActivate: (_params) => isAuthenticated(), canDeactivate: (_params) => (0, effect_1.effect)(true) }); exports.authGuard = authGuard; /** * Role-based guard */ const roleGuard = (requiredRole, getUserRole) => ({ canActivate: (_params) => getUserRole().bind(role => (0, effect_1.effect)(role === requiredRole)), canDeactivate: (_params) => (0, effect_1.effect)(true) }); exports.roleGuard = roleGuard; /** * Confirmation guard */ const confirmGuard = (message) => ({ canActivate: (_params) => (0, effect_1.effect)(true), canDeactivate: (_params) => (0, effect_1.effect)(typeof window !== 'undefined' ? window.confirm(message) : true) }); exports.confirmGuard = confirmGuard; /** * Navigation guard executor * Checks all guards before allowing navigation */ 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; }; exports.executeGuards = executeGuards; /** * Guarded navigation wrapper */ 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; }); } }; }; exports.createGuardedNavigation = createGuardedNavigation; /** * Guard composition utilities */ const composeGuards = (..._guards) => ({ canActivate: (_params) => { // Simplified for now - would be async in real implementation return (0, effect_1.effect)(true); }, canDeactivate: (_params) => { // Simplified for now - would be async in real implementation return (0, effect_1.effect)(true); } }); exports.composeGuards = composeGuards; /** * Conditional guard */ const conditionalGuard = (condition, guard) => ({ canActivate: (params) => { return condition(params) ? guard.canActivate(params) : (0, effect_1.effect)(true); }, canDeactivate: (params) => { return condition(params) ? guard.canDeactivate(params) : (0, effect_1.effect)(true); } }); exports.conditionalGuard = conditionalGuard; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3VhcmRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JvdXRlci9ndWFyZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7R0FHRzs7O0FBR0gsMkNBQWdEO0FBRWhEOztHQUVHO0FBQ0ksTUFBTSxTQUFTLEdBQUcsQ0FDdkIsS0FBZSxFQUNmLE1BQXFCLEVBQ1gsRUFBRTtJQUNaLE9BQU87UUFDTCxHQUFHLEtBQUs7UUFFUixHQUFHLEVBQUUsQ0FBSSxDQUFjLEVBQVksRUFBRTtZQUNuQyxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pDLE1BQU0sV0FBVyxHQUFrQjtnQkFDakMsV0FBVyxFQUFFLENBQUMsT0FBVSxFQUFFLEVBQUU7b0JBQzFCLDZEQUE2RDtvQkFDN0QsNkNBQTZDO29CQUM3QyxxREFBcUQ7b0JBQ3JELE9BQU8sSUFBQSxlQUFNLEVBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxxQkFBcUI7Z0JBQzVDLENBQUM7Z0JBQ0QsYUFBYSxFQUFFLENBQUMsT0FBVSxFQUFFLEVBQUU7b0JBQzVCLE9BQU8sSUFBQSxlQUFNLEVBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxxQkFBcUI7Z0JBQzVDLENBQUM7YUFDRixDQUFDO1lBQ0YsT0FBTyxJQUFBLGlCQUFTLEVBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFFRCxLQUFLLEVBQUUsQ0FBQyxJQUFZLEVBQVksRUFBRTtZQUNoQyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxNQUFNO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBRXpCLG1FQUFtRTtZQUNuRSw0RUFBNEU7WUFDNUUsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDLENBQUM7QUFoQ1csUUFBQSxTQUFTLGFBZ0Nw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