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
JavaScript
;
/**
* 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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