import type { TDefinitionObject } from '@neon.id/core'; import type { TFilterCriteria, TFilterDotNotation, TFilterRaw } from '@neon.id/query'; import type { NActionDef, NObjectDef } from '@neon.id/types'; import type { TPermitCtx, TPermitEffect, TPermitIdentitas, TPermitKokpit, TPermitPayload, TPermitResult } from '../types'; export type TRuleIdentitasQuery = TFilterDotNotation; export type TRuleKokpitQuery = TFilterDotNotation; export type TRuleContextQuery = TFilterDotNotation; export interface TRuleCanOptions { model?: string; isDebug?: boolean; } export interface TRuleDefinition> { effect: TEffect; action?: TAction | TAction[]; object?: TObject | TObject[]; kokpit?: TRuleKokpitQuery; identitas?: TRuleIdentitasQuery; context?: TRuleContextQuery; data?: TFilterCriteria; } export interface TRuleInstance = Record> { effect: TEffect; actions: TAction[]; objects: TObject[]; kokpit?: TRuleKokpitQuery; identitas?: TRuleIdentitasQuery; context?: TRuleContextQuery; data?: TFilterRaw; details: Record; clone(): TRuleInstance; isRelevant(action: NActionDef): boolean; can(action: NActionDef, data?: Record, payload?: TPermitPayload, options?: TRuleCanOptions): TPermitResult; }