router.bend checks
raw source on the hub · import bend-kit-router@0.2.0.0/router.bend as Router
Prepared HTTP routes with exact paths, validated registration, and path-first method selection. Source: https://github.com/paymog/bend-kit/tree/main/router
2 imports
import Base import ./target.bend as Target
Types
type Segment source · line 5 · raw
Data
Literal@text:String -> Segment
Parameter@name:String -> Segment
type Entry source · line 9 · raw
@-A:Data -> Data
Entry@-A:Data -> @method:String -> @pattern:String -> @action:A -> @groups:List<&2, U32> -> Entry<A>
type Handler source · line 12 · raw
@-A:Data -> Data
Handler@-A:Data -> @method:String -> @pattern:String -> @segments:List<&2, Segment> -> @action:A -> Handler<A>
type Path source · line 15 · raw
@-A:Data -> Data
Path@-A:Data -> @segments:List<&2, Segment> -> @handlers:List<&2, Handler<A>> -> @groups:List<&2, U32> -> @allow:String -> Path<A>
type Table source · line 18 · raw
@-A:Data -> Data
Table@-A:Data -> @paths:List<&2, Path<A>> -> @allow:String -> Table<A>
type Error source · line 21 · raw
Data
InvalidPattern@pattern:String -> Error
InvalidMethod@method:String -> Error
Duplicate@method:String -> @pattern:String -> Error
GroupConflict@pattern:String -> Error
BadTargetError
type Choice source · line 28 · raw
@-A:Data -> Data
Found@-A:Data -> @action:A -> @params:Map<&2, String> -> @groups:List<&2, U32> -> @method:String -> @pattern:String -> Choice<A>
MethodMissing@-A:Data -> @groups:List<&2, U32> -> @allow:String -> Choice<A>
Options@-A:Data -> @groups:List<&2, U32> -> @allow:String -> Choice<A>
NotFound@-A:Data -> Choice<A>
type Resolved source · line 34 · raw
@-A:Data -> Data
Resolved@-A:Data -> @target:0x9606cc4b1afb0de13a7da7c0f6fc3a82/target.Target -> @choice:Choice<A> -> Resolved<A>
type Hidden source · line 37 · raw
Data
Hidden@pattern:String -> @methods:String -> Hidden
type Description source · line 40 · raw
Data
Description@method:String -> @pattern:String -> @groups:List<&2, U32> -> @hidden:List<&2, Hidden> -> Description
Definitions
def scalar source · line 43 · raw
@+c:U32 -> Bool
def literal.valid source · line 46 · raw
@s:String -> Bool
def name.tail source · line 53 · raw
@s:String -> Bool
def name.valid source · line 60 · raw
@s:String -> Bool
def member source · line 67 · raw
@xs:List<&2, String> -> @+s:String -> Bool
def pattern.segment source · line 74 · raw
@s:String -> @names:List<&2, String> -> Maybe<&2, Segment>
def pattern.names source · line 84 · raw
@segment:Segment -> @names:List<&2, String> -> List<&2, String>
def pattern.parts source · line 91 · raw
@xs:List<&2, String> -> @+names:List<&2, String> -> @acc:List<&2, Segment> -> Maybe<&2, List<&2, Segment>>
def pattern source · line 105 · raw
@s:String -> Maybe<&2, List<&2, Segment>>
def token source · line 114 · raw
@+c:U32 -> Bool
def method.tail source · line 117 · raw
@s:String -> Bool
def method.valid source · line 124 · raw
@s:String -> Bool
def continue source · line 131 · raw
@ok:Bool -> @later:(@_:Unit -> Bool) -> Bool
def matches source · line 138 · raw
@pat:List<&2, Segment> -> @got:List<&2, String> -> Bool
def capture source · line 149 · raw
@pat:List<&2, Segment> -> @got:List<&2, String> -> @acc:Map<&2, String> -> Map<&2, String>
def shape source · line 158 · raw
@a:List<&2, Segment> -> @b:List<&2, Segment> -> Bool
def specific source · line 169 · raw
@a:List<&2, Segment> -> @b:List<&2, Segment> -> Bool
def groups.eq source · line 182 · raw
@a:List<&2, U32> -> @b:List<&2, U32> -> Bool
def method.prepend source · line 230 · raw
@get:Bool -> @method:String -> @tail:List<&2, String> -> List<&2, String>
def unique source · line 244 · raw
@xs:List<&2, String> -> @prev:String -> @+acc:List<&2, String> -> List<&2, String>
def allow source · line 251 · raw
@xs:List<&2, String> -> String
def route.match source · line 384 · raw
@ok:Bool -> @ss:List<&2, Segment> -> @got:List<&2, String> -> Maybe<&2, Map<&2, String>>
def route.path source · line 391 · raw
@star:Bool -> @+ss:List<&2, Segment> -> @+got:List<&2, String> -> Maybe<&2, Map<&2, String>>
def route.target source · line 398 · raw
@parsed:Maybe<&2, 0x9606cc4b1afb0de13a7da7c0f6fc3a82/target.Target> -> @+ss:List<&2, Segment> -> Maybe<&2, Map<&2, String>>
def route.pattern source · line 405 · raw
@parsed:Maybe<&2, List<&2, Segment>> -> @path:String -> @method:String -> Maybe<&2, Map<&2, String>>
def route.method source · line 412 · raw
@same:Bool -> @p:String -> @path:String -> @method:String -> Maybe<&2, Map<&2, String>>
def route source · line 419 · raw
@want:String -> @+method:String -> @pattern:String -> @path:String -> Maybe<&2, Map<&2, String>>
def overlap source · line 422 · raw
@a:List<&2, Segment> -> @b:List<&2, Segment> -> Bool
Templates
template handler.has source · line 191 · raw
@-A:Data -> @xs:List<&2, Handler<A>> -> @+method:String -> Bool
template insert.merge source · line 198 · raw
@-A:Data -> @duplicate:Bool -> @same_groups:Bool -> @entry:Handler<A> -> @segments:List<&2, Segment> -> @handlers:List<&2, Handler<A>> -> @groups:List<&2, U32> -> @rest:List<&2, Path<A>> -> Result<&2, &2, Error, List<&2, Path<A>>>
template insert.branch source · line 209 · raw
@-A:Data -> @same:Bool -> @segments:List<&2, Segment> -> @+handlers:List<&2, Handler<A>> -> @+old_groups:List<&2, U32> -> @allowed:String -> @tail:List<&2, Path<A>> -> @entry:Handler<A> -> @groups:List<&2, U32> -> @rest:(@_:Unit -> Result<&2, &2, Error, List<&2, Path<A>>>) -> Result<&2, &2, Error, List<&2, Path<A>>>
template insert source · line 220 · raw
@-A:Data -> @paths:List<&2, Path<A>> -> @+entry:Handler<A> -> @+groups:List<&2, U32> -> Result<&2, &2, Error, List<&2, Path<A>>>
ponytail: preparation merges shapes in O(routes²); replace with a shape index if construction becomes a bottleneck.
template method.names source · line 237 · raw
@-A:Data -> @xs:List<&2, Handler<A>> -> List<&2, String>
template finish.paths source · line 254 · raw
@-A:Data -> @paths:List<&2, Path<A>> -> List<&2, Path<A>>
template all.methods source · line 261 · raw
@-A:Data -> @paths:List<&2, Path<A>> -> List<&2, String>
template prepare.pattern source · line 268 · raw
@-A:Data -> @parsed:Maybe<&2, List<&2, Segment>> -> @method:String -> @pattern:String -> @action:A -> @groups:List<&2, U32> -> @paths:List<&2, Path<A>> -> Result<&2, &2, Error, List<&2, Path<A>>>
template prepare.entry source · line 275 · raw
@-A:Data -> @valid:Bool -> @entry:Entry<A> -> @paths:List<&2, Path<A>> -> Result<&2, &2, Error, List<&2, Path<A>>>
template prepare.go source · line 284 · raw
@-A:Data -> @entries:List<&2, Entry<A>> -> @paths:List<&2, Path<A>> -> Result<&2, &2, Error, Table<A>>
template prepare source · line 294 · raw
@-A:Data -> @entries:List<&2, Entry<A>> -> Result<&2, &2, Error, Table<A>>
template best.compare source · line 297 · raw
@-A:Data -> @candidate:Path<A> -> @old:Path<A> -> Maybe<&2, Path<A>>
template best.pick source · line 302 · raw
@-A:Data -> @best:Maybe<&2, Path<A>> -> @candidate:Path<A> -> Maybe<&2, Path<A>>
template best.step source · line 309 · raw
@-A:Data -> @matched:Bool -> @candidate:Path<A> -> @best:Maybe<&2, Path<A>> -> Maybe<&2, Path<A>>
template best source · line 317 · raw
@-A:Data -> @paths:List<&2, Path<A>> -> @+segments:List<&2, String> -> @acc:Maybe<&2, Path<A>> -> Maybe<&2, Path<A>>
ponytail: lookup scans prepared paths in O(routes × segments); use a trie if measured dispatch cost warrants it.
template handler.next source · line 324 · raw
@-A:Data -> @same:Bool -> @here:Handler<A> -> @later:(@_:Unit -> Maybe<&2, Handler<A>>) -> Maybe<&2, Handler<A>>
template handler source · line 331 · raw
@-A:Data -> @xs:List<&2, Handler<A>> -> @+method:String -> Maybe<&2, Handler<A>>
template chosen source · line 338 · raw
@-A:Data -> @hit:Maybe<&2, Handler<A>> -> @segments:List<&2, String> -> @+groups:List<&2, U32> -> @+allowed:String -> @options:Bool -> Choice<A>
template choose.fallback source · line 345 · raw
@-A:Data -> @head:Bool -> @handlers:List<&2, Handler<A>> -> @method:String -> @segments:List<&2, String> -> @groups:List<&2, U32> -> @allowed:String -> Choice<A>
template choose.method source · line 352 · raw
@-A:Data -> @direct:Maybe<&2, Handler<A>> -> @+handlers:List<&2, Handler<A>> -> @+method:String -> @segments:List<&2, String> -> @groups:List<&2, U32> -> @allowed:String -> Choice<A>
template choose.path source · line 359 · raw
@-A:Data -> @path:Maybe<&2, Path<A>> -> @+method:String -> @segments:List<&2, String> -> Choice<A>
template resolve.star source · line 366 · raw
@-A:Data -> @star:Bool -> @paths:List<&2, Path<A>> -> @allowed:String -> @target:0x9606cc4b1afb0de13a7da7c0f6fc3a82/target.Target -> @method:String -> @+segments:List<&2, String> -> Resolved<A>
template resolve.target source · line 373 · raw
@-A:Data -> @parsed:Maybe<&2, 0x9606cc4b1afb0de13a7da7c0f6fc3a82/target.Target> -> @table:Table<A> -> @method:String -> Result<&2, &2, Error, Resolved<A>>
template resolve source · line 381 · raw
@-A:Data -> @table:Table<A> -> @+method:String -> @target:String -> Result<&2, &2, Error, Resolved<A>>
template description.handlers source · line 480 · raw
@-A:Data -> @handlers:List<&2, Handler<A>> -> @+groups:List<&2, U32> -> @+hidden:List<&2, Hidden> -> List<&2, Description>
template description.paths source · line 487 · raw
@-A:Data -> @paths:List<&2, Path<A>> -> @+all:List<&2, Path<A>> -> List<&2, Description>
template describe source · line 494 · raw
@-A:Data -> @table:Table<A> -> List<&2, Description>