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.

101 lines 4.08 kB
/** * Signal-Σ Router - Category Theory Based Isomorphic Router * * A mathematically sound router built on categorical principles: * - Route as Functor (structure preservation) * - Navigation as Monad (effect composition) * - Router as Coalgebra (isomorphic transformation) * * Features: * - Type-safe route matching * - Framework-agnostic (React, Svelte, Vue, SolidJS) * - Isomorphic (works client/server) * - Composable route combinators * - Algebraic route construction * - Built-in route guards * - Zero dependencies on router libraries */ // Core Functions export { Some, None, isSome, isNone } from './types'; // Route Constructors export { literal, param, query, wildcard, route, sequence as routeSequence, choice, optional, nested, matchRoute } from './route'; // Navigation export { navigation, pureNavigation, createBrowserNav, createNodeNav, createMemoryNav, createNavigationEffects } from './navigation'; // Router Core export { createRouter, createRouterSignal, router, treeRouter, matchRouteTree, createTreeRouter } from './router'; // Guards export { withGuard, withGuards, authGuard, roleGuard, confirmGuard, executeGuards, createGuardedNavigation, composeGuards, conditionalGuard } from './guards'; // Framework Adapters export { useReactRouter, useReactTreeRouter, } from './adapter.react'; // Convenience Re-exports export { signal } from '../core/signal'; export { effect } from '../core/effect'; /** * Quick Start Examples: * * Basic Usage: * ```ts * import { router, route } from 'signal-σ/router'; * * const routes = [ * route("/"), * route("/user/:id"), * route("/posts/:id/comments/:commentId") * ]; * * const app = router(routes); * * // Access current route * const currentRoute = app.route(); * const params = app.params(); * * // Navigate * app.navigate("/user/123"); * ``` * * Framework Integration: * ```ts * // React * const router = useReactRouter(routes); * * // Svelte * const router = useSvelteRouter(routes); * * // Vue * const router = useVueRouter(routes); * ``` * * Type-Safe Routes: * ```ts * const userRoute = route("/user/:id"); * // userRoute.params has type {id: string} * * const mapped = userRoute.map(({id}) => ({ * userId: id, * user: fetchUser(id) * })); * ``` * * Composable Routes: * ```ts * const api = route("/api"); * const users = route("/users/:id"); * const apiUsers = sequence(api, users); * // Matches: /api/users/:id * * const routes = choice([ * route("/home"), * route("/about"), * wildcard("*") // 404 fallback * ]); * ``` * * Route Guards: * ```ts * const adminRoute = withGuard( * route("/admin/:page"), * authGuard(() => checkAuth()) * ); * ``` */ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcm91dGVyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBaUJILGlCQUFpQjtBQUNqQixPQUFPLEVBQ0wsSUFBSSxFQUNKLElBQUksRUFDSixNQUFNLEVBQ04sTUFBTSxFQUNQLE1BQU0sU0FBUyxDQUFDO0FBRWpCLHFCQUFxQjtBQUNyQixPQUFPLEVBQ0wsT0FBTyxFQUNQLEtBQUssRUFDTCxLQUFLLEVBQ0wsUUFBUSxFQUNSLEtBQUssRUFDTCxRQUFRLElBQUksYUFBYSxFQUN6QixNQUFNLEVBQ04sUUFBUSxFQUNSLE1BQU0sRUFDTixVQUFVLEVBQ1gsTUFBTSxTQUFTLENBQUM7QUFFakIsYUFBYTtBQUNiLE9BQU8sRUFDTCxVQUFVLEVBQ1YsY0FBYyxFQUNkLGdCQUFnQixFQUNoQixhQUFhLEVBQ2IsZUFBZSxFQUNmLHVCQUF1QixFQUN4QixNQUFNLGNBQWMsQ0FBQztBQUV0QixjQUFjO0FBQ2QsT0FBTyxFQUNMLFlBQVksRUFDWixrQkFBa0IsRUFDbEIsTUFBTSxFQUNOLFVBQVUsRUFDVixjQUFjLEVBQ2QsZ0JBQWdCLEVBQ2pCLE1BQU0sVUFBVSxDQUFDO0FBRWxCLFNBQVM7QUFDVCxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixTQUFTLEVBQ1QsU0FBUyxFQUNULFlBQVksRUFDWixhQUFhLEVBQ2IsdUJBQXVCLEVBQ3ZCLGFBQWEsRUFDYixnQkFBZ0IsRUFDakIsTUFBTSxVQUFVLENBQUM7QUFFbEIscUJBQXFCO0FBQ3JCLE9BQU8sRUFDTCxjQUFjLEVBQ2Qsa0JBQWtCLEdBQ25CLE1BQU0saUJBQWlCLENBQUM7QUFFekIseUJBQXlCO0FBQ3pCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtRUcifQ==