~/bend-docscommunity

url/url.bend relies on unsafe/foreign

raw source on the hub · import 0x173c3ffc0efe5dd0532b157e241ba1a7/url/url.bend as Url

origin-form paths and query strings, percent-encoded.

1 import
import Base

Types

type Url source · line 6 · raw

Data

type Abs source · line 227 · raw

Data

target is the RFC 9112 §3.2.1 origin-form: path (never empty) and query, no fragment.

type PQ source · line 401 · raw

Data

A path, its query, and whether a "?" was present at all.

Definitions

def unreserved source · line 9 · raw

@+c:U32 -> Bool

def path_ok source · line 12 · raw

@+c:U32 -> Bool

def hexn source · line 15 · raw

@+n:U32 -> U32

def hexhi source · line 26 · raw

@+n:U32 -> U32

def hexlo source · line 29 · raw

@+n:U32 -> U32

def pct.enc.push source · line 32 · raw

@+c:U32 -> @acc:String -> @keep:Bool -> String

def pct.enc.path source · line 39 · raw

@s:String -> @acc:String -> String

def pct.enc.query source · line 46 · raw

@s:String -> @acc:String -> String

def pct.encode_path source · line 53 · raw

@s:String -> String

def pct.encode_q source · line 56 · raw

@s:String -> String

def unhex.H source · line 59 · raw

@c:U32 -> @hex:Bool -> Maybe<&2, U32>

def unhex.h source · line 66 · raw

@+c:U32 -> @lo:Bool -> Maybe<&2, U32>

def unhex.d source · line 73 · raw

@+c:U32 -> @dec:Bool -> @lo:Bool -> Maybe<&2, U32>

def unhex source · line 80 · raw

@+c:U32 -> Maybe<&2, U32>

def pct.cons source · line 83 · raw

@byte:U32 -> @rest:Maybe<&2, String> -> Maybe<&2, String>

def pct.join2 source · line 90 · raw

@x:U32 -> @b:Maybe<&2, U32> -> @rest:Maybe<&2, String> -> Maybe<&2, String>

def pct.join source · line 97 · raw

@a:Maybe<&2, U32> -> @b:Maybe<&2, U32> -> @rest:Maybe<&2, String> -> Maybe<&2, String>

def pct.decode.last source · line 104 · raw

@+c:U32 -> @pct:Bool -> Maybe<&2, String>

def pct.decode source · line 127 · raw

@s:String -> Maybe<&2, String>

def take_to.go source · line 129 · raw

@s:String -> @+stop:U32 -> @+acc:String -> Pair(String, String)

def take_to source · line 137 · raw

@s:String -> @stop:U32 -> Pair(String, String)

(text before the first stop char, text after it)

def pair source · line 140 · raw

@kv:String -> Pair(String, String)

def qput.decv source · line 143 · raw

@m:Map<&2, String> -> @key:String -> @v:Maybe<&2, String> -> Map<&2, String>

def qput.dec source · line 150 · raw

@m:Map<&2, String> -> @k:Maybe<&2, String> -> @v:Maybe<&2, String> -> Map<&2, String>

def qput.kv source · line 157 · raw

@m:Map<&2, String> -> @kv:Pair(String, String) -> Map<&2, String>

def qput source · line 161 · raw

@m:Map<&2, String> -> @kv:String -> Map<&2, String>

def qfold source · line 164 · raw

@xs:List<&2, String> -> @m:Map<&2, String> -> Map<&2, String>

def parse.q source · line 171 · raw

@path:String -> @rest:String -> @hasq:Bool -> Maybe<&2, Url>

def parse.path source · line 178 · raw

@path:Maybe<&2, String> -> @+rest:String -> Maybe<&2, Url>

def parse.split source · line 185 · raw

@pr:Pair(String, String) -> Maybe<&2, Url>

def parse.ok source · line 189 · raw

@+s:String -> @ok:Bool -> Maybe<&2, Url>

def parse source · line 196 · raw

@+s:String -> Maybe<&2, Url>

def enc.pairs.go source · line 199 · raw

@xs:List<&2, Sigma<&2, &2, String, _ => String>> -> @acc:String -> String

def enc.pairs source · line 206 · raw

@m:Map<&2, String> -> String

def encode.q source · line 209 · raw

@path:String -> @q:String -> @empty:Bool -> String

def encode.go source · line 216 · raw

@path:String -> @+q:String -> String

def encode source · line 219 · raw

@u:Url -> String

def has source · line 230 · raw

@s:String -> @+c:U32 -> Bool

def auth_end source · line 237 · raw

@+c:U32 -> Bool

def take_auth.go source · line 241 · raw

@s:String -> @+acc:String -> Pair(String, String)

§3.2: the authority runs to the first "/", "?" or "#".

def default_port source · line 248 · raw

@+scheme:String -> Maybe<&2, U32>

def abs.target source · line 251 · raw

@+pq:String -> String

def abs.fst source · line 254 · raw

@ab:Pair(String, String) -> String

def abs.build source · line 259 · raw

@scheme:String -> @host:String -> @port:Maybe<&2, U32> -> @rest:String -> Maybe<&2, Abs>

§3.5: the fragment is for the client; it never goes on the wire.

def abs.port.num source · line 266 · raw

@n:Maybe<&2, U32> -> Maybe<&2, U32>

def abs.port source · line 274 · raw

@+ps:String -> @dflt:Maybe<&2, U32> -> Maybe<&2, U32>

§3.2.3: an empty port means the scheme's default.

def abs.hostok source · line 277 · raw

@scheme:String -> @host:String -> @port:Maybe<&2, U32> -> @rest:String -> @ok:Bool -> Maybe<&2, Abs>

def abs.hostport source · line 285 · raw

@scheme:String -> @dflt:Maybe<&2, U32> -> @hp:Pair(String, String) -> @rest:String -> Maybe<&2, Abs>

§3.2.2: hosts are case-insensitive. IPv6 literals are refused (IPv4-only runtime).

def abs.auth.if source · line 290 · raw

@+scheme:String -> @auth:String -> @rest:String -> @creds:Bool -> Maybe<&2, Abs>

WHATWG fetch refuses URLs that carry credentials (user:pass@).

def abs.auth source · line 297 · raw

@scheme:String -> @ar:Pair(String, String) -> Maybe<&2, Abs>

def abs.slashes source · line 301 · raw

@scheme:String -> @+rest:String -> @ok:Bool -> Maybe<&2, Abs>

def abs.scheme source · line 308 · raw

@sr:Pair(String, String) -> Maybe<&2, Abs>

def absolute source · line 313 · raw

@s:String -> Maybe<&2, Abs>

scheme://host[:port][/path][?query][#fragment]

def abs.port.dflt source · line 316 · raw

@m:Maybe<&2, U32> -> U32

def host_field source · line 324 · raw

@a:Abs -> String

RFC 9110 §7.2: the Host field; the default port may be left out.

def dots.pop source · line 331 · raw

@stack:List<&2, String> -> List<&2, String>

def dots.push source · line 338 · raw

@seg:String -> @stack:List<&2, String> -> @dot:Bool -> @up:Bool -> List<&2, String>

def dots.join source · line 349 · raw

@xs:List<&2, String> -> @acc:String -> String

def dots.go source · line 357 · raw

@segs:List<&2, String> -> @stack:List<&2, String> -> @trail:Bool -> String

stack is reversed; trail: the last segment was "." or "..", so a "/" ends the path.

def dots.abs source · line 367 · raw

@xs:List<&2, String> -> String

def remove_dots source · line 375 · raw

@path:String -> String

§5.2.4 for an absolute path: "." and ".." segments go away.

def dir.go source · line 378 · raw

@s:String -> @+acc:String -> @last:String -> String

def dir source · line 387 · raw

@path:String -> String

§5.2.3: the base path up to and including its last "/".

def with_q source · line 390 · raw

@path:String -> @q:String -> @has_q:Bool -> String

def res.build source · line 397 · raw

@scheme:String -> @host:String -> @port:U32 -> @path:String -> @q:String -> @has_q:Bool -> Maybe<&2, Abs>

def res.pq source · line 404 · raw

@pq:Pair(String, String) -> @has_q:Bool -> PQ

def res.ref source · line 408 · raw

@+r:String -> PQ

def res.rel.go source · line 413 · raw

@+scheme:String -> @+host:String -> @+port:U32 -> @+bpath:String -> @+bq:String -> @+bhas:Bool -> @+rp:String -> @+q:String -> @+rhas:Bool -> Maybe<&2, Abs>

§5.2.2: an empty path keeps the base path (and its query unless one is given); "/..." replaces the path; anything else merges with the base directory.

def res.rel source · line 418 · raw

@scheme:String -> @host:String -> @port:U32 -> @bpath:String -> @bq:String -> @bhas:Bool -> @r:PQ -> Maybe<&2, Abs>

def res.base source · line 422 · raw

@+r:String -> @b:PQ -> @a:Abs -> Maybe<&2, Abs>

def res.local source · line 427 · raw

@+r:String -> @a:Abs -> Maybe<&2, Abs>

def abs.scheme_of source · line 431 · raw

@a:Abs -> String

def res.net source · line 435 · raw

@+r:String -> @a:Abs -> @net:Bool -> Maybe<&2, Abs>

def scheme.ok source · line 442 · raw

@s:String -> Bool

def abs.has_scheme source · line 450 · raw

@+pre:String -> @colon:Bool -> Bool

§3.1: a ":" before any "/", "?" or "#" with a valid scheme name before it.

def resolve source · line 454 · raw

@a:Abs -> @+ref:String -> Maybe<&2, Abs>

ref against base: absolute http(s) URLs as is, "//host...", "/path", "?q", or a relative path. Other schemes are None (fetch cannot follow them).

Unsafe

unsafe hexhi.go source · line 19 · raw

@+n:U32 -> @+acc:U32 -> @small:Bool -> U32

unsafe pct.decode.go source · line 112 · raw

@s:String -> Maybe<&2, String>