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