/**
 * @packageDocumentation
 * @module permission
 */
import { K8sResourceDefinition } from '../api/types';
import { AnyArray, K8sResourceAction, KubernetesResource } from '../core/types/public-api';
export declare const READABLE_ACTIONS: readonly [K8sResourceAction.GET, K8sResourceAction.LIST, K8sResourceAction.PROXY, K8sResourceAction.REDIRECT, K8sResourceAction.WATCH];
export declare const WRITABLE_ACTIONS: readonly [K8sResourceAction.CREATE, K8sResourceAction.DELETE, K8sResourceAction.DELETE_COLLECTION, K8sResourceAction.PATCH, K8sResourceAction.UPDATE];
export declare const COMMON_READABLE_ACTIONS: readonly [K8sResourceAction.GET];
export declare const COMMON_WRITABLE_ACTIONS: readonly [K8sResourceAction.CREATE, K8sResourceAction.DELETE, K8sResourceAction.UPDATE];
export declare const ALL_ACTIONS: readonly [K8sResourceAction.CREATE, K8sResourceAction.DELETE, K8sResourceAction.DELETE_COLLECTION, K8sResourceAction.GET, K8sResourceAction.LIST, K8sResourceAction.PATCH, K8sResourceAction.PROXY, K8sResourceAction.REDIRECT, K8sResourceAction.UPDATE, K8sResourceAction.WATCH];
export type ReadablePermissions = Readonly<Record<(typeof READABLE_ACTIONS)[number], boolean>>;
export type WritablePermissions = Readonly<Record<(typeof WRITABLE_ACTIONS)[number], boolean>>;
export type CommonReadablePermissions = Readonly<Record<(typeof COMMON_READABLE_ACTIONS)[number], boolean>>;
export type CommonWritablePermissions = Readonly<Record<(typeof COMMON_WRITABLE_ACTIONS)[number], boolean>>;
export type AllPermissions = Readonly<Record<(typeof ALL_ACTIONS)[number] | 'all', boolean>>;
export interface K8sPermissionBaseParams {
    advanced?: boolean;
    project?: string;
}
interface K8sTypePermissionVariantByType {
    type: string | K8sResourceDefinition;
    definition?: never;
}
interface K8sTypePermissionVariantByDefinition {
    type?: never;
    definition: K8sResourceDefinition;
}
type K8sTypePermissionVariant = K8sTypePermissionVariantByType | K8sTypePermissionVariantByDefinition;
export type K8sTypePermissionBaseParams = K8sPermissionBaseParams & K8sTypePermissionVariant & {
    subResource?: string;
    cluster?: string;
    namespace?: string;
};
export type K8sTypePermissionNoneParams = K8sTypePermissionBaseParams & {
    action?: null;
    name?: null;
};
export type K8sTypePermissionSingleParams<T extends K8sResourceAction> = K8sTypePermissionBaseParams & ({
    action: T;
    name?: string;
} | {
    action?: T;
    name: string;
});
export type K8sTypePermissionActionsParams<T extends K8sResourceAction> = K8sTypePermissionBaseParams & {
    action: AnyArray<T>;
    name?: string;
};
export type K8sTypePermissionNamesParams<T extends K8sResourceAction> = K8sTypePermissionBaseParams & {
    action?: T;
    name: AnyArray<string>;
};
export type K8sTypePermissionMultiParams<T extends K8sResourceAction> = K8sTypePermissionActionsParams<T> | K8sTypePermissionNamesParams<T>;
export type K8sTypePermissionMatrixParams<T extends K8sResourceAction> = K8sTypePermissionBaseParams & {
    action: AnyArray<T>;
    name: AnyArray<string>;
};
export type K8sTypePermissionParams<T extends K8sResourceAction> = K8sTypePermissionNoneParams | K8sTypePermissionSingleParams<T> | K8sTypePermissionMultiParams<T> | K8sTypePermissionMatrixParams<T>;
export interface K8sPermissionTransformable<T extends boolean> {
    transform: T;
}
export type K8sTypePermissionWithTransformParams<T extends K8sResourceAction, K extends boolean> = K8sTypePermissionParams<T> & Partial<K8sPermissionTransformable<K>>;
export interface K8sResourcePermissionBaseParams<T extends KubernetesResource> extends K8sPermissionBaseParams {
    cluster: string;
    resource: T;
}
export interface K8sResourcePermissionNoneParams<T extends KubernetesResource> extends K8sResourcePermissionBaseParams<T> {
    action?: null;
}
export interface K8sResourcePermissionSingleParams<T extends KubernetesResource, K extends K8sResourceAction> extends K8sResourcePermissionBaseParams<T> {
    action: K;
}
export interface K8sResourcePermissionMultiParams<T extends KubernetesResource, K extends K8sResourceAction> extends K8sResourcePermissionBaseParams<T> {
    action: AnyArray<K>;
}
export type K8sResourcePermissionParams<T extends KubernetesResource, K extends K8sResourceAction> = K8sResourcePermissionNoneParams<T> | K8sResourcePermissionSingleParams<T, K> | K8sResourcePermissionMultiParams<T, K>;
export type K8sResourcePermissionWithTransformParams<T extends KubernetesResource, K extends K8sResourceAction, R extends boolean> = K8sResourcePermissionParams<T, K> & Partial<K8sPermissionTransformable<R>>;
export interface PermissionGuardData {
    /** 参数的读取是否优先读取子级路由(递归) */
    childFirst?: boolean;
}
export {};
