/URI

ECMA-262 URI type, rfc3986 compliant, multi vendor and v8 / node.js compatible (client and server side)

Primary LanguageJavaScript

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