123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.match = void 0;
- const isGlob = require("is-glob");
- const micromatch = require("micromatch");
- const url = require("url");
- const errors_1 = require("./errors");
- function match(context, uri, req) {
- // single path
- if (isStringPath(context)) {
- return matchSingleStringPath(context, uri);
- }
- // single glob path
- if (isGlobPath(context)) {
- return matchSingleGlobPath(context, uri);
- }
- // multi path
- if (Array.isArray(context)) {
- if (context.every(isStringPath)) {
- return matchMultiPath(context, uri);
- }
- if (context.every(isGlobPath)) {
- return matchMultiGlobPath(context, uri);
- }
- throw new Error(errors_1.ERRORS.ERR_CONTEXT_MATCHER_INVALID_ARRAY);
- }
- // custom matching
- if (typeof context === 'function') {
- const pathname = getUrlPathName(uri);
- return context(pathname, req);
- }
- throw new Error(errors_1.ERRORS.ERR_CONTEXT_MATCHER_GENERIC);
- }
- exports.match = match;
- /**
- * @param {String} context '/api'
- * @param {String} uri 'http://example.org/api/b/c/d.html'
- * @return {Boolean}
- */
- function matchSingleStringPath(context, uri) {
- const pathname = getUrlPathName(uri);
- return pathname.indexOf(context) === 0;
- }
- function matchSingleGlobPath(pattern, uri) {
- const pathname = getUrlPathName(uri);
- const matches = micromatch([pathname], pattern);
- return matches && matches.length > 0;
- }
- function matchMultiGlobPath(patternList, uri) {
- return matchSingleGlobPath(patternList, uri);
- }
- /**
- * @param {String} contextList ['/api', '/ajax']
- * @param {String} uri 'http://example.org/api/b/c/d.html'
- * @return {Boolean}
- */
- function matchMultiPath(contextList, uri) {
- let isMultiPath = false;
- for (const context of contextList) {
- if (matchSingleStringPath(context, uri)) {
- isMultiPath = true;
- break;
- }
- }
- return isMultiPath;
- }
- /**
- * Parses URI and returns RFC 3986 path
- *
- * @param {String} uri from req.url
- * @return {String} RFC 3986 path
- */
- function getUrlPathName(uri) {
- return uri && url.parse(uri).pathname;
- }
- function isStringPath(context) {
- return typeof context === 'string' && !isGlob(context);
- }
- function isGlobPath(context) {
- return isGlob(context);
- }
|