@oazmi/kitchensink - v0.9.13
    Preparing search index...

    Variable forbiddenBaseUriSchemesConst

    forbiddenBaseUriSchemes: UriScheme[] = ...

    here, you can specify which uri schemes cannot be used as a base url for resolving a url via the resolveAsUrl function.

    adding a new uri protocol scheme named "base64-scheme" to our registry, and then forbidding it from being used as a base url:

    import { assertEquals, assertThrows } from "jsr:@std/assert"

    // aliasing our functions for brevity
    const eq = assertEquals, err = assertThrows

    // initially, our custom "base64" scheme is unidentifiable, and cannot be used in `resolveAsUrl` as a base url
    eq(getUriScheme("base64://a/b/c.txt"), "relative")
    err(() => resolveAsUrl("./w.xyz", "base64://a/b/c.txt")) // "base64://a/b/c.txt" is identified as a relative path, and cannot be used as a base path

    // registering the custom protocol-scheme mapping.
    // note that you will have to declare `as any`, since the schemes are tightly defined by the type `UriScheme`.
    uriProtocolSchemeMap.push(["base64://", "base64-scheme" as any])

    // and now, our custom "base64" scheme becomes identifiable.
    eq(getUriScheme("base64://a/b/c.txt"), "base64-scheme")

    // it is also now accepted by `resolveAsUrl` as a base uri
    eq(resolveAsUrl("./w.xyz", "base64://a/b/c.txt"), new URL("base64://a/b/w.xyz"))

    // since we don't want to make it possible to have "base64-scheme" as a base uri, so we'll put it in the forbidden list.
    // once again `as any` is needed, since the `UriScheme` is tightly defined, and its definition cannot be changed.
    forbiddenBaseUriSchemes.push("base64-scheme" as any)
    err(() => resolveAsUrl("./w.xyz", "base64://a/b/c.txt")) // "base64://a/b/c.txt" is now amongst the forbidden schemes that cannot be combined with relative paths.
    eq(resolveAsUrl("base64://a/b/c.txt"), new URL("base64://a/b/c.txt")) // this is of course not stopping us from building urls with the "base64" scheme, so long as no relative path is attached.