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
JavaScript
/**
* 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3VhcmRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JvdXRlci9ndWFyZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBR0gsT0FBTyxFQUFVLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWhEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQ3ZCLEtBQWUsRUFDZixNQUFxQixFQUNYLEVBQUU7SUFDWixPQUFPO1FBQ0wsR0FBRyxLQUFLO1FBRVIsR0FBRyxFQUFFLENBQUksQ0FBYyxFQUFZLEVBQUU7WUFDbkMsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqQyxNQUFNLFdBQVcsR0FBa0I7Z0JBQ2pDLFdBQVcsRUFBRSxDQUFDLE9BQVUsRUFBRSxFQUFFO29CQUMxQiw2REFBNkQ7b0JBQzdELDZDQUE2QztvQkFDN0MscURBQXFEO29CQUNyRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLHFCQUFxQjtnQkFDNUMsQ0FBQztnQkFDRCxhQUFhLEVBQUUsQ0FBQyxPQUFVLEVBQUUsRUFBRTtvQkFDNUIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxxQkFBcUI7Z0JBQzVDLENBQUM7YUFDRixDQUFDO1lBQ0YsT0FBTyxTQUFTLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFFRCxLQUFLLEVBQUUsQ0FBQyxJQUFZLEVBQVksRUFBRTtZQUNoQyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxNQUFNO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBRXpCLG1FQUFtRTtZQUNuRSw0RUFBNEU7WUFDNUUsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUN4QixLQUFlLEVBQ2YsTUFBdUIsRUFDYixFQUFFO0lBQ1osT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN2RixDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUN2QixlQUFzQyxFQUN2QixFQUFFLENBQUMsQ0FBQztJQUNuQixXQUFXLEVBQUUsQ0FBQyxPQUFVLEVBQUUsRUFBRSxDQUFDLGVBQWUsRUFBRTtJQUM5QyxhQUFhLEVBQUUsQ0FBQyxPQUFVLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7Q0FDNUMsQ0FBQyxDQUFDO0FBRUg7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FDdkIsWUFBb0IsRUFDcEIsV0FBd0MsRUFDekIsRUFBRSxDQUFDLENBQUM7SUFDbkIsV0FBVyxFQUFFLENBQUMsT0FBVSxFQUFFLEVBQUUsQ0FDMUIsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxZQUFZLENBQUMsQ0FBQztJQUMzRCxhQUFhLEVBQUUsQ0FBQyxPQUFVLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7Q0FDNUMsQ0FBQyxDQUFDO0FBRUg7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FDMUIsT0FBZSxFQUNBLEVBQUUsQ0FBQyxDQUFDO0lBQ25CLFdBQVcsRUFBRSxDQUFDLE9BQVUsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztJQUN6QyxhQUFhLEVBQUUsQ0FBQyxPQUFVLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FDbkMsT0FBTyxNQUFNLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQy9EO0NBQ0YsQ0FBQyxDQUFDO0FBRUg7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLEtBQUssRUFDaEMsTUFBdUIsRUFDdkIsTUFBUyxFQUNULElBQStCLEVBQ2IsRUFBRTtJQUNwQixLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQzNCLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUM7UUFDNUUsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLE9BQU8sQ0FBVSxPQUFPLENBQUMsRUFBRTtZQUNsRCxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEMscUJBQXFCO1lBQ3JCLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNsQyxJQUFJLE9BQU8sS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUMvQixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakIsQ0FBQztpQkFBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUN2QyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDMUIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNoQixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLENBQ3JDLFVBQXlCLEVBQ3pCLE9BQXdCLEVBQ1QsRUFBRTtJQUNqQixPQUFPO1FBQ0wsR0FBRyxVQUFVO1FBRWIsUUFBUSxFQUFFLEdBQWMsRUFBRTtZQUN4QiwyQ0FBMkM7WUFFM0MscUNBQXFDO1lBQ3JDLGdEQUFnRDtZQUNoRCxPQUFPLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMvQixDQUFDO1FBRUQsSUFBSSxFQUFFLENBQUksQ0FBMEIsRUFBaUIsRUFBRTtZQUNyRCxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFTLEVBQUUsRUFBRTtnQkFDbkMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUMxQixxREFBcUQ7Z0JBQ3JELE9BQU8sT0FBTyxDQUFDO1lBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFJLEdBQUcsT0FBd0IsRUFBaUIsRUFBRSxDQUFDLENBQUM7SUFDL0UsV0FBVyxFQUFFLENBQUMsT0FBVSxFQUFFLEVBQUU7UUFDMUIsNkRBQTZEO1FBQzdELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RCLENBQUM7SUFDRCxhQUFhLEVBQUUsQ0FBQyxPQUFVLEVBQUUsRUFBRTtRQUM1Qiw2REFBNkQ7UUFDN0QsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEIsQ0FBQztDQUNGLENBQUMsQ0FBQztBQUVIOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FDOUIsU0FBaUMsRUFDakMsS0FBb0IsRUFDTCxFQUFFLENBQUMsQ0FBQztJQUNuQixXQUFXLEVBQUUsQ0FBQyxNQUFTLEVBQUUsRUFBRTtRQUN6QixPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFDRCxhQUFhLEVBQUUsQ0FBQyxNQUFTLEVBQUUsRUFBRTtRQUMzQixPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hFLENBQUM7Q0FDRixDQUFDLENBQUMifQ==