72 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
// characters that generally can't be used in a url: # %
 | 
						|
// more: @ ! $ &
 | 
						|
// Have special meaning to some FSes: : \ /
 | 
						|
function methodA(apps) {
 | 
						|
  apps.map(function (apppath) {
 | 
						|
    var parts = apppath.split(/[#%]+/);
 | 
						|
    var hostname = parts.shift();
 | 
						|
    var pathname = parts.join('/');
 | 
						|
    return [hostname, pathname];
 | 
						|
  }).sort(function (a, b) {
 | 
						|
    var hlen = b[0].length - a[0].length;
 | 
						|
    var plen = plen = b[1].length - a[1].length;
 | 
						|
    if (!plen) {
 | 
						|
      return hlen;
 | 
						|
    }
 | 
						|
    return plen;
 | 
						|
  }).forEach(function (pair, i) {
 | 
						|
    // should print ordered by longest path, longest domain
 | 
						|
    console.log('app.use("/' + pair[1] + '", vhost("' + pair[0] + '"), app' + i + ')');
 | 
						|
  });
 | 
						|
  console.log('\n');
 | 
						|
}
 | 
						|
 | 
						|
function methodB(apps) {
 | 
						|
  var mergeMap = {};
 | 
						|
  var merged = [];
 | 
						|
 | 
						|
  apps.map(function (apppath) {
 | 
						|
    var parts = apppath.split(/[#%]+/);
 | 
						|
    var hostname = parts.shift();
 | 
						|
    var pathname = parts.join('/');
 | 
						|
 | 
						|
    return [hostname, pathname];
 | 
						|
  }).sort(function (a, b) {
 | 
						|
    var hlen = b[0].length - a[0].length;
 | 
						|
    var plen = plen = b[1].length - a[1].length;
 | 
						|
    if (!hlen) {
 | 
						|
      return plen;
 | 
						|
    }
 | 
						|
    return plen;
 | 
						|
  }).forEach(function (pair, i) {
 | 
						|
    var apps;
 | 
						|
    var hostname = pair[0];
 | 
						|
    var pathname = pair[1];
 | 
						|
 | 
						|
    // should order and group by longest domain, then longest path
 | 
						|
    if (!mergeMap[hostname]) {
 | 
						|
      mergeMap[hostname] = { hostname: hostname, apps: 'express()' };
 | 
						|
      merged.push(mergeMap[hostname]);
 | 
						|
    }
 | 
						|
 | 
						|
    mergeMap[hostname].apps += '.use("/' + pathname + '", app' + i + ')';
 | 
						|
  });
 | 
						|
 | 
						|
  console.log('\n');
 | 
						|
  merged.forEach(function (vhost) {
 | 
						|
    console.log("app.use(vhost('" + vhost.hostname + "', " + vhost.apps + ")");
 | 
						|
  });
 | 
						|
}
 | 
						|
 | 
						|
var apps;
 | 
						|
apps = [
 | 
						|
  'coolaj86.com'
 | 
						|
, 'coolaj86.com#demos#tel-carrier'
 | 
						|
, 'blog.coolaj86.com#demos#tel-carrier'
 | 
						|
, 'blog.coolaj86.com%social'
 | 
						|
, 'blog.coolaj86.com'
 | 
						|
];
 | 
						|
 | 
						|
methodA(apps);
 | 
						|
methodB(apps);
 |