stackpress
Version:
Incept is a content management framework.
57 lines (56 loc) • 1.92 kB
JavaScript
;
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);
}