File: /var/dev/nowruzgan/rest/node_modules/express-unless/index.js
var URL = require('url');
module.exports = function (options) {
var parent = this;
var opts = typeof options === 'function' ? {custom: options} : options;
opts.useOriginalUrl = (typeof opts.useOriginalUrl === 'undefined') ? true : opts.useOriginalUrl;
return function (req, res, next) {
var url = URL.parse((opts.useOriginalUrl ? req.originalUrl : req.url) || req.url || '', true);
var skip = false;
if (opts.custom) {
skip = skip || opts.custom(req);
}
var paths = !opts.path || Array.isArray(opts.path) ?
opts.path : [opts.path];
if (paths) {
skip = skip || paths.some(function (p) {
return isUrlMatch(p, url.pathname) && isMethodMatch(p.methods, req.method);
});
}
var exts = (!opts.ext || Array.isArray(opts.ext)) ?
opts.ext : [opts.ext];
if (exts) {
skip = skip || exts.some(function (ext) {
return url.pathname.substr(ext.length * -1) === ext;
});
}
var methods = (!opts.method || Array.isArray(opts.method)) ?
opts.method : [opts.method];
if (methods) {
skip = skip || !!~methods.indexOf(req.method);
}
if (skip) {
return next();
}
parent(req, res, next);
};
};
function isUrlMatch(p, url) {
var ret = (typeof p === 'string' && p === url) || (p instanceof RegExp && !!p.exec(url));
if (p instanceof RegExp) {
p.lastIndex = 0;
}
if (p && p.url) {
ret = isUrlMatch(p.url, url)
}
return ret;
}
function isMethodMatch(methods, m) {
if (!methods) {
return true;
}
methods = Array.isArray(methods) ? methods : [methods];
return !!~methods.indexOf(m);
}