forked from coolaj86/walnut.js
		
	
		
			
	
	
		
			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);
							 |