52 lines
1.7 KiB
TypeScript
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,
|
|
};
|
|
}
|