UNPKG

stackpress

Version:

Incept is a content management framework.

57 lines (56 loc) 1.92 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.isRegExp = void 0; exports.matchAnyEvent = matchAnyEvent; exports.matchAnyRoute = matchAnyRoute; exports.matchEvent = matchEvent; exports.matchRoute = matchRoute; exports.isRegExp = /^\/.+\/[igmsuy]*$/; function matchAnyEvent(permit, permissions) { if (permissions.includes(permit)) { return true; } for (const permission of permissions) { if (matchEvent(permit, permission)) { return true; } } return false; } function matchAnyRoute(permit, permissions) { for (const permission of permissions) { if (matchRoute(permit, permission)) { return true; } } return false; } function matchEvent(permit, permission) { if (permission === permit) { return true; } const pattern = !exports.isRegExp.test(permission) ? `/^${permission .replaceAll('*', '([^-]+)') .replaceAll('([^-]+)([^-]+)', '(.*)')}$/ig` : permission; const regexp = new RegExp(pattern.substring(pattern.indexOf('/') + 1, pattern.lastIndexOf('/')), pattern.substring(pattern.lastIndexOf('/') + 1)); return regexp.test(permit); } function matchRoute(permit, permission) { if (permission.method !== 'ALL' && permission.method !== permit.method) { return false; } if (permission.route === permit.route) { return true; } const pattern = !exports.isRegExp.test(permission.route) ? `/^${permission.route .replace(/(\:[a-zA-Z0-9\-_]+)/g, '*') .replaceAll('*', '([^/]+)') .replaceAll('([^/]+)([^/]+)', '(.*)')}$/ig` : permission.route; const regexp = new RegExp(pattern.substring(pattern.indexOf('/') + 1, pattern.lastIndexOf('/')), pattern.substring(pattern.lastIndexOf('/') + 1)); return regexp.test(permit.route); }