walnut.js/snippets/test-mounts.js

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);