URI
ECMA-262 URI type, rfc3986 compliant, multi vendor and v8 / node.js compatible (client and server side)
Install / Use
/learn @webr3/URIREADME
URI Type for javascript
- Supports all kinds of URI (URL, URN, any scheme).
- Relative URI Resolution
- All classes extend the native String implementation.
- Pure ECMA-262 implementation of URI spec (RFC-3986)
- Works Client or Server side, (V8 / node.js compatible).
Usage:
var u = new URI('http://user:pass@github.com/webr3/URI?query=string#this');
URI extends the native String implementation, so 'u' is a string, and you can call all the normal String methods like u.indexOf(), u.match(), u.substr() and so forth.
In addition, URI exposes the following URI specific methods for reading parts of a URI (each of which are strings themselves):
u.scheme(); -> 'http:' u.heirpart(); -> '//user:pass@github.com/webr3/URI' u.heirpart().authority(); -> 'user:pass@github.com' u.heirpart().authority().userinfo(); -> 'user:pass' u.heirpart().authority().host(); -> 'github.com' u.heirpart().path(); -> '/webr3/URI' u.querystring(); -> '?query=string' u.fragment(); -> '#this'
Further, methods are exposed to handle complicated URIs:
u = new URI('http://github.com/a/b/c/d/../.././egg#s/../x'); u.isAbsolute(); -> boolean u.defrag(); -> 'http://github.com/a/b/c/d/../.././egg' u.toAbsolute(); -> 'http://github.com/a/b/egg'
and to resolve relative URIs + URI References:
u = new URI('http://github.com/a/b/c/d'); u.resolveReference('../.././n?x=y'); -> 'http://github.com/a/n?x=y'
node.js usage:
require('./uris'); // require the file, and no, you don't need 'var uri =' var u = new URI('http://github.com/webr3/URI'); // nothing's different
running the tests:
URI.Test(); // be sure to include uristest first
Notes:
- I may add case normalisation for segments which support it..
- the file is called uris.js instead of uri.js because for some reason the line require('uri') makes v8/node throw a wobbly..
- validation is out of scope, couldn't possibly implement validation for every scheme..
A few examples of some of the URIs supported:
- ftp://ftp.is.co.za/rfc/rfc1808.txt
- http://www.ietf.org:8080/rfc/rfc2396.txt
- ldap://[2001:db8::7]:140/c=GB?objectClass?one
- mailto:John.Doe@example.com
- news:comp.infosystems.www.servers.unix
- tel:+1-816-555-1212
- telnet://192.0.2.16/
- telnet://192.0.2.16:/
- telnet://192.0.2.16:80/
- urn:oasis:names:specification:docbook:dtd:xml:4.1.2
- svn+ssh://data.fm/opt/repos/ssl/trunk
- file:///dev/null
Related Skills
node-connect
350.8kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
110.4kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
350.8kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
350.8kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
