mizchi/sol/router does not have a README file
pub(all) struct CatchAllInfo {
name : String
optional : Bool
}pub struct CompiledSolRoute {
pattern : String
param_names : Array[String]
page_handler : PageHandler?
api_handler : ApiHandler?
raw_handler : RawHandler?
layouts : Array[(PageProps, ServerNode) -> ServerNode raise]
middlewares : Array[Middleware]
kind : SolRouteKind
title : String
meta : Array[(String, String)]
catch_all : CatchAllInfo?
revalidate : Int?
cache_strategy : CacheStrategy
rendered_meta : String
styles : Array[String]
scripts : Array[String]
}pub(all) struct MbtxChunkEntry {
id : String
code : String
}pub(all) struct MbtxEntry {
id : String
code : String
}pub(all) struct MbtxRoute {
path : String
js_path : String
}pub struct PageProps {
params : RouteParams
is_fragment : Bool
is_isr_render : Bool
// private fields
}pub(all) enum RouteKind {
Static
Dynamic
}pub struct RouteManifestEntry {
pattern : String
http_method : RouteManifestMethod
owner : RouteManifestOwner
match_kind : RouteManifestMatchKind
param_names : Array[String]
}fn RouteOwnershipManifest::match_path(self : RouteOwnershipManifest, path : String, http_method? : RouteManifestMethod) -> RouteManifestEntry?pub struct RouterConfig {
title_prefix : String
default_title : String
default_head : String
styles : Array[String]
client_scripts : Array[String]
loader_url : String
wc_loader_url : String
enable_preload : Bool
enable_streaming : Bool
preload_libs : Array[String]
chunk_manifest : ChunkManifest?
root_template : String
isr_cache : MemoryCache?
cache_strategy : CDNCacheStrategy?
server_islands : ServerIslandRegistry?
}fn RouterConfig::with_cache_strategy(self : RouterConfig, strategy : CDNCacheStrategy) -> RouterConfigfn RouterConfig::with_server_islands(self : RouterConfig, registry : ServerIslandRegistry) -> RouterConfigpub(all) struct ServerIslandDef {
id : String
render : async (Json) -> ServerNode
revalidate : Int?
}pub(all) enum SolRoutes {
Page(String, PageHandler, String, Array[(String, String)], Int?, CacheStrategy?)
Layout(String, (PageProps, ServerNode) -> ServerNode raise, Array[SolRoutes])
Get(String, ApiHandler)
Post(String, ApiHandler)
Put(String, ApiHandler)
Delete(String, ApiHandler)
Patch(String, ApiHandler)
RawGet(String, RawHandler)
RawPost(String, RawHandler)
RawPut(String, RawHandler)
RawDelete(String, RawHandler)
RawPatch(String, RawHandler)
WithMiddleware(Array[Middleware], Array[SolRoutes])
WithAssets(Array[String], Array[String], Array[SolRoutes])
}pub(all) struct StaticDir {
path_prefix : String
source_dir : String
title : String
config : StaticDirConfig
}pub(all) struct StaticDirConfig {
i18n : I18nConfig
navigation : NavigationConfig
exclude : Array[String]
trailing_slash : Bool
}api_get("/api/users/:id", get_user)api_post("/api/users", create_user)fn manifest_to_sol_routes(manifest : RouteManifest, page_factory : PageHandlerFactory, api_factory : ApiHandlerFactory) -> Array[SolRoutes]let manifest = scan_pages_dir(fs, "docs", cwd)
let routes = manifest_to_sol_routes(manifest, my_page_factory, my_api_factory)
register_sol_routes(app, routes, config)nodes([
@element.h1([@element.text("Hello")]),
@element.p([@element.text("World")]),
])ok([("status", "ok".to_json())]).to_json()fn page(path : String, handler : async (PageProps) -> ServerNode, title? : String, meta? : Array[(String, String)], revalidate? : Int?, cache? : CacheStrategy?, styles? : Array[String], scripts? : Array[String]) -> SolRoutespage("/", home, title="Home")
page("/blog/:slug", blog_post, title="Blog", revalidate=Some(60))fn[E] register_routes(app : Server, routes : Array[Routes], page_resolver : (String, Context, RouteParams) -> Node[E, String]?, api_resolver : (String, Context, RouteParams) -> Any?, config? : RouterConfig, title_prefix? : String, default_title? : String, default_head? : String, loader_url? : String, wc_loader_url? : String) -> Unitfn register_server_routes(app : Server, routes : Array[Routes], page_resolver : (String, Context, RouteParams) -> ServerNode?, api_resolver : (String, Context, RouteParams) -> Any?, config? : RouterConfig, title_prefix? : String, default_title? : String, default_head? : String, loader_url? : String, wc_loader_url? : String) -> Unitfn route_ownership_manifest(routes : Array[SolRoutes], config? : RouterConfig) -> RouteOwnershipManifestfn transform_mbtx_to_esm(code : String) -> Stringfn with_assets(content : Node[Unit, String], styles? : Array[String], scripts? : Array[String]) -> ServerNodewith_mw([@mw.logger(), @mw.cors()], [
api_get("/api/data", get_data),
])fn wrap(segment : String, layout : (PageProps, ServerNode) -> ServerNode raise, children : Array[SolRoutes]) -> SolRouteswrap("/admin", admin_layout, [
page("/", admin_dashboard),
page("/settings", admin_settings),
])Install
Download zipThin Mars wrapper for file-based routing, SSR, and asset loading