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.

95 lines (94 loc) 2.75 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 */ export type { Route, Navigation, Router, RouterSignal, RouteTree, RouteMatch, RouteGuard, NavigationEnv, Option, ParsePath, PrefetchStrategy } from './types'; export { Some, None, isSome, isNone } from './types'; export { literal, param, query, wildcard, route, sequence as routeSequence, choice, optional, nested, matchRoute } from './route'; export { navigation, pureNavigation, createBrowserNav, createNodeNav, createMemoryNav, createNavigationEffects } from './navigation'; export { createRouter, createRouterSignal, router, treeRouter, matchRouteTree, createTreeRouter } from './router'; export { withGuard, withGuards, authGuard, roleGuard, confirmGuard, executeGuards, createGuardedNavigation, composeGuards, conditionalGuard } from './guards'; export { useReactRouter, useReactTreeRouter, } from './adapter.react'; 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()) * ); * ``` */