Skip to content

Commit

Permalink
improve
Browse files Browse the repository at this point in the history
  • Loading branch information
fundon committed Apr 11, 2015
1 parent a698bfd commit eb965a4
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 180 deletions.
111 changes: 17 additions & 94 deletions lib/router.js
Original file line number Diff line number Diff line change
Expand Up @@ -208,83 +208,6 @@ var Router = (function () {
}
};

/**
* Find route by method and path
*
* @method find
* @param {String} method
* @param {String} path
* @param {Node} [cn]
* @param {Number} {n=0}
* @param {Array} {params=[]}
* @return {Array} result
* @property {NULL|Function|GeneratorFunction} result[0]
* @property {Array} result[1]
*/

Router.prototype.oldFind = function oldFind(method, path, cn) {
var n = arguments[3] === undefined ? 0 : arguments[3];
var params = arguments[4] === undefined ? [] : arguments[4];

cn = cn || this.trees[method];
var search = path;
var result = Array(2);
result[1] = params;

if (search.length === 0 || search === cn.prefix) {
result[0] = cn.handler;
if (cn.handler && cn.handler.keys) {
for (var _i = 0, _l = cn.handler.keys.length; _i < _l; ++_i) {
params[_i].name = cn.handler.keys[_i];
}
}
return result;
}

var pl = cn.prefix.length;
var l = lcp(search, cn.prefix);
if (l === pl) {
search = search.substring(l);
}

var i = 0,
k = cn.edges.length,
e = undefined;
for (; i < k; ++i) {
e = cn.edges[i];
var has = e.label === 58 /*':'*/ ? PNODE : e.label === 42 /*'*'*/ ? CNODE : 0;
if (has === PNODE) {
l = search.length;
var j = 0;
for (; j < l && search.charCodeAt(j) !== 47 /*'/'*/; ++j) {}

params[n] = {
name: e.prefix.substring(1),
value: search.substring(0, j)
};
n++;
search = search.substring(j);
} else if (has === CNODE) {
params[n] = {
name: '_name',
value: search
};
search = '';
}

var x = cn.findEdge(search.charCodeAt(0));
if (x === undefined) {
result = this.find(method, search, e, n, params);
// if (result[0]) break;
} else {
result = this.find(method, search, x, n, params);
if (result[0]) break;
}
}

return result;
};

/**
* Find route by method and path
*
Expand All @@ -311,8 +234,8 @@ var Router = (function () {
result[1] = params;
if (cn.handler) {
var keys = cn.handler.keys;
for (var _i2 = 0, _l2 = keys.length; _i2 < _l2; ++_i2) {
params[_i2].name = keys[_i2];
for (var _i = 0, _l = keys.length; _i < _l; ++_i) {
params[_i].name = keys[_i];
}
}
return result;
Expand Down Expand Up @@ -348,22 +271,22 @@ var Router = (function () {

search = search.substring(i);
continue;
} else {
// Search CNODE
e = cn.findEdge(42 /*'*'*/);
if (e) {
cn = e;
// Catch-all node
params[n] = {
name: '_name',
value: search
};
search = ''; // End search
}
}

if (search.length === 0) {
continue;
}
// Search CNODE
e = cn.findEdge(42 /*'*'*/);
if (e) {
cn = e;
// Catch-all node
params[n] = {
name: '_name',
value: search
};
search = ''; // End search
}

if (search.length === 0) {
continue;
}

return result;
Expand Down
100 changes: 14 additions & 86 deletions src/router.js
Original file line number Diff line number Diff line change
Expand Up @@ -198,77 +198,6 @@ class Router {
}
}

/**
* Find route by method and path
*
* @method find
* @param {String} method
* @param {String} path
* @param {Node} [cn]
* @param {Number} {n=0}
* @param {Array} {params=[]}
* @return {Array} result
* @property {NULL|Function|GeneratorFunction} result[0]
* @property {Array} result[1]
*/
oldFind(method, path, cn, n = 0, params = []) {
cn = cn || this.trees[method];
let search = path;
let result = Array(2);
result[1] = params;

if (search.length === 0 || search === cn.prefix) {
result[0] = cn.handler;
if (cn.handler && cn.handler.keys) {
for (let i = 0, l = cn.handler.keys.length; i < l; ++i) {
params[i].name = cn.handler.keys[i];
}
}
return result;
}

let pl = cn.prefix.length;
let l = lcp(search, cn.prefix);
if (l === pl) {
search = search.substring(l);
}

let i = 0, k = cn.edges.length, e;
for (; i < k; ++i) {
e = cn.edges[i];
let has = e.label === 0x3A /*':'*/ ? PNODE : (e.label === 0x2A /*'*'*/ ? CNODE : 0);
if (has === PNODE) {
l = search.length;
let j = 0;
for (; j < l && (search.charCodeAt(j) !== 0x2F /*'/'*/); ++j) {}

params[n] = {
name: e.prefix.substring(1),
value: search.substring(0, j)
};
n++;
search = search.substring(j);
} else if (has === CNODE) {
params[n] = {
name: '_name',
value: search
};
search = '';
}

let x = cn.findEdge(search.charCodeAt(0));
if (x === undefined) {
result = this.find(method, search, e, n, params);
// if (result[0]) break;
} else {
result = this.find(method, search, x, n, params);
if (result[0]) break;
}
}

return result;
}

/**
* Find route by method and path
*
Expand Down Expand Up @@ -331,23 +260,22 @@ class Router {

search = search.substring(i);
continue;
} else {
// Search CNODE
e = cn.findEdge(0x2A /*'*'*/);
if (e) {
cn = e;
// Catch-all node
params[n] = {
name: '_name',
value: search
};
search = ''; // End search
}
}

if (search.length === 0) {
continue;
}
// Search CNODE
e = cn.findEdge(0x2A /*'*'*/);
if (e) {
cn = e;
// Catch-all node
params[n] = {
name: '_name',
value: search
};
search = ''; // End search
}

if (search.length === 0) {
continue;
}

return result;
Expand Down

0 comments on commit eb965a4

Please sign in to comment.