bend-kit-url Releases (2): 0.4.1.0 0x1f2d80f53f971b16c6de6a65cb1918ae indexed https://jend.leeeet.dev/files.txt?path=bend-kit-url@0.4.1.0 0.4.0.0 0xd248560355ba8929ae030bc9c72f40be unindexed https://jend.leeeet.dev/files.txt?path=bend-kit-url@0.4.0.0 Definitions (97): Url.Url (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=Url) type Url is Data: Url{path: String, query: Map<&2, String>} Url.unreserved (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=unreserved) def unreserved(+c: U32) -> Bool: Url.path_ok (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=path_ok) def path_ok(+c: U32) -> Bool: Url.hexn (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=hexn) def hexn(+n: U32) -> U32: Url.hexhi (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=hexhi) def hexhi(+n: U32) -> U32: Url.hexlo (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=hexlo) def hexlo(+n: U32) -> U32: Url.pct.enc.push (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=pct.enc.push) def pct.enc.push(+c: U32, acc: String, keep: Bool) -> String: Url.pct.enc.path (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=pct.enc.path) def pct.enc.path(s: String, acc: String) -> String: Url.pct.enc.query (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=pct.enc.query) def pct.enc.query(s: String, acc: String) -> String: Url.pct.encode_path (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=pct.encode_path) def pct.encode_path(s: String) -> String: Url.pct.encode_q (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=pct.encode_q) def pct.encode_q(s: String) -> String: Url.unhex.H (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=unhex.H) def unhex.H(c: U32, hex: Bool) -> Maybe<&2, U32>: Url.unhex.h (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=unhex.h) def unhex.h(+c: U32, lo: Bool) -> Maybe<&2, U32>: Url.unhex.d (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=unhex.d) def unhex.d(+c: U32, dec: Bool, lo: Bool) -> Maybe<&2, U32>: Url.unhex (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=unhex) def unhex(+c: U32) -> Maybe<&2, U32>: Url.Pd (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=Pd) # Lit: plain bytes. Hi: after "%". Lo: after "%" and one hex digit. Bad: never decodes. type Pd is Data: PdLit{} PdHi{} PdLo{hi: U32} PdBad{} Url.pct.lit (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=pct.lit) def pct.lit(+c: U32, racc: String, pct: Bool) -> Pd & String: Url.pct.hi (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=pct.hi) def pct.hi(m: Maybe<&2, U32>, racc: String) -> Pd & String: Url.pct.lo (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=pct.lo) def pct.lo(+x: U32, m: Maybe<&2, U32>, racc: String) -> Pd & String: Url.pct.byte (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=pct.byte) def pct.byte(h: Char) -> U32: Url.pct.end (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=pct.end) def pct.end(st: Pd, racc: String) -> Maybe<&2, String>: Url.pct.step (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=pct.step) def pct.step(st: Pd, +c: U32, racc: String) -> Pd & String: Url.pct.end.of (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=pct.end.of) def pct.end.of(sr: Pd & String) -> Maybe<&2, String>: Url.pct.step.of (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=pct.step.of) def pct.step.of(sr: Pd & String, +c: U32) -> Pd & String: Url.pct.decode.go (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=pct.decode.go) def pct.decode.go(s: String, sr: Pd & String) -> Maybe<&2, String>: Url.pct.decode (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=pct.decode) def pct.decode(s: String) -> Maybe<&2, String>: Url.take.cut (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=take.cut) # Bool.pick evaluates both arms; a split that recursed inside it would reverse acc at every byte. def take.cut(acc: String, rest: String) -> String & String: Url.take_to.go (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=take_to.go) # hit: the last char pushed onto acc was the stop char. def take_to.go(s: String, +stop: U32, acc: String, hit: Bool) -> String & String: Url.take_to (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=take_to) # (text before the first stop char, text after it) def take_to(s: String, stop: U32) -> String & String: Url.pair (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=pair) def pair(kv: String) -> String & String: Url.qput.decv (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=qput.decv) def qput.decv(m: Map<&2, String>, key: String, v: Maybe<&2, String>) -> Map<&2, String>: Url.qput.dec (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=qput.dec) def qput.dec(m: Map<&2, String>, k: Maybe<&2, String>, v: Maybe<&2, String>) -> Map<&2, String>: Url.qput.kv (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=qput.kv) def qput.kv(m: Map<&2, String>, kv: String & String) -> Map<&2, String>: Url.qput (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=qput) def qput(m: Map<&2, String>, kv: String) -> Map<&2, String>: Url.qfold (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=qfold) def qfold(xs: List<&2, String>, m: Map<&2, String>) -> Map<&2, String>: Url.parse.q (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=parse.q) def parse.q(path: String, rest: String, hasq: Bool) -> Maybe<&2, Url>: Url.parse.path (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=parse.path) def parse.path(path: Maybe<&2, String>, +rest: String) -> Maybe<&2, Url>: Url.parse.split (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=parse.split) def parse.split(pr: String & String) -> Maybe<&2, Url>: Url.parse.ok (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=parse.ok) def parse.ok(+s: String, ok: Bool) -> Maybe<&2, Url>: Url.parse (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=parse) def parse(+s: String) -> Maybe<&2, Url>: Url.enc.pairs.go (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=enc.pairs.go) def enc.pairs.go(xs: List<&2, Sigma<&2, &2, String, _ => String>>, acc: String) -> String: Url.enc.pairs (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=enc.pairs) def enc.pairs(m: Map<&2, String>) -> String: Url.encode.q (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=encode.q) def encode.q(path: String, q: String, empty: Bool) -> String: Url.encode.go (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=encode.go) def encode.go(path: String, +q: String) -> String: Url.encode (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=encode) def encode(u: Url) -> String: Url.form.drop (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=form.drop) def form.drop(q: String, empty: Bool) -> String: Url.form.go (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=form.go) def form.go(+q: String) -> String: Url.form (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=form) # application/x-www-form-urlencoded. Space is %20. def form(m: Map<&2, String>) -> String: Url.Abs (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=Abs) # target is the RFC 9112 §3.2.1 origin-form: path (never empty) and query, no fragment. type Abs is Data: Abs{scheme: String, host: String, port: U32, target: String} Url.has (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=has) def has(s: String, +c: U32) -> Bool: Url.auth_end (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=auth_end) def auth_end(+c: U32) -> Bool: Url.take.back (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=take.back) def take.back(acc: String, rest: String) -> String & String: Url.take_auth.go (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=take_auth.go) # §3.2: the authority runs to the first "/", "?" or "#". def take_auth.go(s: String, acc: String, hit: Bool) -> String & String: Url.default_port (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=default_port) def default_port(+scheme: String) -> Maybe<&2, U32>: Url.abs.target (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=abs.target) def abs.target(+pq: String) -> String: Url.abs.fst (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=abs.fst) def abs.fst(ab: String & String) -> String: Url.abs.build (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=abs.build) # §3.5: the fragment is for the client; it never goes on the wire. def abs.build(scheme: String, host: String, port: Maybe<&2, U32>, rest: String) -> Maybe<&2, Abs>: Url.abs.port.num (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=abs.port.num) def abs.port.num(n: Maybe<&2, U32>) -> Maybe<&2, U32>: Url.abs.port (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=abs.port) # §3.2.3: an empty port means the scheme's default. def abs.port(+ps: String, dflt: Maybe<&2, U32>) -> Maybe<&2, U32>: Url.abs.hostok (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=abs.hostok) def abs.hostok(scheme: String, host: String, port: Maybe<&2, U32>, rest: String, ok: Bool) -> Maybe<&2, Abs>: Url.abs.hostport (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=abs.hostport) # Bracket-free host in Abs; only the authority and Host field carry brackets. def abs.hostport(scheme: String, dflt: Maybe<&2, U32>, hp: String & String, rest: String) -> Maybe<&2, Abs>: Url.abs.ipv6.ch (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=abs.ipv6.ch) def abs.ipv6.ch(+c: U32) -> Bool: Url.abs.ipv6.chars (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=abs.ipv6.chars) def abs.ipv6.chars(s: String) -> Bool: Url.abs.ipv6.port (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=abs.ipv6.port) def abs.ipv6.port(scheme: String, dflt: Maybe<&2, U32>, +host: String, suffix: String, rest: String) -> Maybe<&2, Abs>: Url.abs.ipv6.split (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=abs.ipv6.split) def abs.ipv6.split(scheme: String, dflt: Maybe<&2, U32>, hp: String & String, rest: String) -> Maybe<&2, Abs>: Url.abs.ipv6.auth (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=abs.ipv6.auth) def abs.ipv6.auth(+scheme: String, host: String, rest: String, closed: Bool) -> Maybe<&2, Abs>: Url.abs.auth.addr (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=abs.auth.addr) def abs.auth.addr(auth: String, +scheme: String, rest: String) -> Maybe<&2, Abs>: Url.abs.auth.if (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=abs.auth.if) # WHATWG fetch refuses URLs that carry credentials (user:pass@). def abs.auth.if(+scheme: String, auth: String, rest: String, creds: Bool) -> Maybe<&2, Abs>: Url.abs.auth (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=abs.auth) def abs.auth(scheme: String, ar: String & String) -> Maybe<&2, Abs>: Url.abs.slashes (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=abs.slashes) def abs.slashes(scheme: String, +rest: String, ok: Bool) -> Maybe<&2, Abs>: Url.abs.scheme (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=abs.scheme) def abs.scheme(sr: String & String) -> Maybe<&2, Abs>: Url.absolute (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=absolute) # scheme://host[:port][/path][?query][#fragment] def absolute(s: String) -> Maybe<&2, Abs>: Url.abs.port.dflt (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=abs.port.dflt) def abs.port.dflt(m: Maybe<&2, U32>) -> U32: Url.host_field.wrap (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=host_field.wrap) # RFC 9110 §7.2: bracket an IPv6 literal in Host, and omit the default port. def host_field.wrap(host: String, ipv6: Bool) -> String: Url.host_field (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=host_field) def host_field(a: Abs) -> String: Url.dots.pop (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=dots.pop) def dots.pop(stack: List<&2, String>) -> List<&2, String>: Url.dots.push (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=dots.push) def dots.push(seg: String, stack: List<&2, String>, dot: Bool, up: Bool) -> List<&2, String>: Url.dots.join (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=dots.join) def dots.join(xs: List<&2, String>, acc: String) -> String: Url.dots.go (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=dots.go) # stack is reversed; trail: the last segment was "." or "..", so a "/" ends the path. def dots.go(segs: List<&2, String>, stack: List<&2, String>, trail: Bool) -> String: Url.dots.abs (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=dots.abs) def dots.abs(xs: List<&2, String>) -> String: Url.remove_dots (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=remove_dots) # §5.2.4 for an absolute path: "." and ".." segments go away. def remove_dots(path: String) -> String: Url.dir.go (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=dir.go) def dir.go(s: String, +acc: String, last: String) -> String: Url.dir (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=dir) # §5.2.3: the base path up to and including its last "/". def dir(path: String) -> String: Url.with_q (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=with_q) def with_q(path: String, q: String, has_q: Bool) -> String: Url.res.build (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=res.build) def res.build(scheme: String, host: String, port: U32, path: String, q: String, has_q: Bool) -> Maybe<&2, Abs>: Url.PQ (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=PQ) # A path, its query, and whether a "?" was present at all. type PQ is Data: PQ{path: String, q: String, has_q: Bool} Url.res.pq (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=res.pq) def res.pq(pq: String & String, has_q: Bool) -> PQ: Url.res.ref (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=res.ref) def res.ref(+r: String) -> PQ: Url.res.rel.go (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=res.rel.go) # §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.go(+scheme: String, +host: String, +port: U32, +bpath: String, +bq: String, +bhas: Bool, +rp: String, +q: String, +rhas: Bool) -> Maybe<&2, Abs>: Url.res.rel (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=res.rel) def res.rel(scheme: String, host: String, port: U32, bpath: String, bq: String, bhas: Bool, r: PQ) -> Maybe<&2, Abs>: Url.res.base (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=res.base) def res.base(+r: String, b: PQ, a: Abs) -> Maybe<&2, Abs>: Url.res.local (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=res.local) def res.local(+r: String, a: Abs) -> Maybe<&2, Abs>: Url.abs.scheme_of (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=abs.scheme_of) def abs.scheme_of(a: Abs) -> String: Url.res.net (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=res.net) def res.net(+r: String, a: Abs, net: Bool) -> Maybe<&2, Abs>: Url.scheme.ok (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=scheme.ok) def scheme.ok(s: String) -> Bool: Url.abs.has_scheme (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=abs.has_scheme) # §3.1: a ":" before any "/", "?" or "#" with a valid scheme name before it. def abs.has_scheme(+pre: String, colon: Bool) -> Bool: Url.resolve (https://jend.leeeet.dev/definition.txt?path=bend-kit-url@0.4.1.0/url.bend&name=resolve) # ref against base: absolute http(s) URLs as is, "//host...", "/path", "?q", # or a relative path. Other schemes are None (fetch cannot follow them). def resolve(a: Abs, +ref: String) -> Maybe<&2, Abs>: