| 123456789101112131415161718192021222324252627282930313233343536 | 
							- 'use strict';
 
- const pathToRegexp = require('path-to-regexp');
 
- module.exports = function(options) {
 
-   options = options || {};
 
-   if (options.match && options.ignore) throw new Error('options.match and options.ignore can not both present');
 
-   if (!options.match && !options.ignore) return () => true;
 
-   const matchFn = options.match ? toPathMatch(options.match) : toPathMatch(options.ignore);
 
-   return function pathMatch(ctx) {
 
-     const matched = matchFn(ctx);
 
-     return options.match ? matched : !matched;
 
-   };
 
- };
 
- function toPathMatch(pattern) {
 
-   if (typeof pattern === 'string') {
 
-     const reg = pathToRegexp(pattern, [], { end: false });
 
-     if (reg.global) reg.lastIndex = 0;
 
-     return ctx => reg.test(ctx.path);
 
-   }
 
-   if (pattern instanceof RegExp) {
 
-     return ctx => {
 
-       if (pattern.global) pattern.lastIndex = 0;
 
-       return pattern.test(ctx.path);
 
-     };
 
-   }
 
-   if (typeof pattern === 'function') return pattern;
 
-   if (Array.isArray(pattern)) {
 
-     const matchs = pattern.map(item => toPathMatch(item));
 
-     return ctx => matchs.some(match => match(ctx));
 
-   }
 
-   throw new Error('match/ignore pattern must be RegExp, Array or String, but got ' + pattern);
 
- }
 
 
  |