2024-10-31 11:28:14 +02:00

52 lines
1.7 KiB
TypeScript

import { ActivatedRouteSnapshot, Route, RouterStateSnapshot } from '@angular/router';
import { List } from '../utils';
import { AllowFn, IqserPermissionsData, IqserPermissionsRouterData, IqserRedirectToNavigationParameters } from './types';
export function isFunction<T>(value: unknown): value is T {
return typeof value === 'function';
}
export function isPlainObject(value: unknown): boolean {
if (Object.prototype.toString.call(value) !== '[object Object]') {
return false;
}
const prototype = Object.getPrototypeOf(value);
return prototype === null || prototype === Object.prototype;
}
export function isString(value: unknown): value is string {
return typeof value === 'string';
}
export function isBoolean(value: unknown): value is boolean {
return typeof value === 'boolean';
}
export function isArray<T>(value: unknown): value is List<T>;
export function isArray<T>(value: unknown): value is T[] {
return Array.isArray(value);
}
export function toArray(value?: string | List): List {
return isString(value) ? [value] : (value ?? []);
}
export function isRedirectWithParameters(object: any | IqserRedirectToNavigationParameters): object is IqserRedirectToNavigationParameters {
return isPlainObject(object) && (!!object.navigationCommands || !!object.navigationExtras);
}
export function transformPermission(
permissions: IqserPermissionsRouterData,
route: ActivatedRouteSnapshot | Route,
state?: RouterStateSnapshot,
): IqserPermissionsData {
const allow = isFunction<AllowFn>(permissions.allow) ? permissions.allow(route, state) : toArray(permissions.allow);
const redirectTo = permissions.redirectTo;
return {
allow,
redirectTo,
};
}