| 'use strict'; |
| |
| // originally parseUri 1.2.2, now patched by us |
| // (c) Steven Levithan <stevenlevithan.com> |
| // MIT License |
| var keys = ["source", "protocol", "authority", "userInfo", "user", "password", |
| "host", "port", "relative", "path", "directory", "file", "query", "anchor"]; |
| var qName ="queryKey"; |
| var qParser = /(?:^|&)([^&=]*)=?([^&]*)/g; |
| |
| // use the "loose" parser |
| /* jshint maxlen: false */ |
| var parser = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/; |
| |
| function parseUri(str) { |
| var m = parser.exec(str); |
| var uri = {}; |
| var i = 14; |
| |
| while (i--) { |
| var key = keys[i]; |
| var value = m[i] || ""; |
| var encoded = ['user', 'password'].indexOf(key) !== -1; |
| uri[key] = encoded ? decodeURIComponent(value) : value; |
| } |
| |
| uri[qName] = {}; |
| uri[keys[12]].replace(qParser, function ($0, $1, $2) { |
| if ($1) { |
| uri[qName][$1] = $2; |
| } |
| }); |
| |
| return uri; |
| } |
| |
| module.exports = parseUri; |