UNPKG

@emartech/faye-redis-sharded

Version:

Redis backend engine for Faye with support for sharding

83 lines (67 loc) 2.29 kB
Faye.URI = { isURI: function(uri) { return uri && uri.protocol && uri.host && uri.path; }, isSameOrigin: function(uri) { var location = Faye.ENV.location; return uri.protocol === location.protocol && uri.hostname === location.hostname && uri.port === location.port; }, parse: function(url) { if (typeof url !== 'string') return url; var uri = {}, parts, query, pairs, i, n, data; var consume = function(name, pattern) { url = url.replace(pattern, function(match) { uri[name] = match; return ''; }); uri[name] = uri[name] || ''; }; consume('protocol', /^[a-z]+\:/i); consume('host', /^\/\/[^\/\?#]+/); if (!/^\//.test(url) && !uri.host) url = Faye.ENV.location.pathname.replace(/[^\/]*$/, '') + url; consume('pathname', /^[^\?#]*/); consume('search', /^\?[^#]*/); consume('hash', /^#.*/); uri.protocol = uri.protocol || Faye.ENV.location.protocol; if (uri.host) { uri.host = uri.host.substr(2); parts = uri.host.split(':'); uri.hostname = parts[0]; uri.port = parts[1] || ''; } else { uri.host = Faye.ENV.location.host; uri.hostname = Faye.ENV.location.hostname; uri.port = Faye.ENV.location.port; } uri.pathname = uri.pathname || '/'; uri.path = uri.pathname + uri.search; query = uri.search.replace(/^\?/, ''); pairs = query ? query.split('&') : []; data = {}; for (i = 0, n = pairs.length; i < n; i++) { parts = pairs[i].split('='); data[decodeURIComponent(parts[0] || '')] = decodeURIComponent(parts[1] || ''); } uri.query = data; uri.href = this.stringify(uri); return uri; }, stringify: function(uri) { var string = uri.protocol + '//' + uri.hostname; if (uri.port) string += ':' + uri.port; string += uri.pathname + this.queryString(uri.query) + (uri.hash || ''); return string; }, queryString: function(query) { var pairs = []; for (var key in query) { if (!query.hasOwnProperty(key)) continue; pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(query[key])); } if (pairs.length === 0) return ''; return '?' + pairs.join('&'); } };