import type { ConditionFunctionExpr, Resolvable } from '../types/expressions.type' import { FunctionType } from '../types/enums' import { BaseFunctionRegistry, CONDITION_OUTPUT_SCHEMA, type RegistrationOptions } from './BaseFunctionRegistry' export default class ConditionRegistry> extends BaseFunctionRegistry { constructor() { super(FunctionType.CONDITION, CONDITION_OUTPUT_SCHEMA) } register( name: string, options: RegistrationOptions & { factory: (deps: TDeps) => (value: any, ...args: TArgs) => boolean | PromiseLike }, ): (...args: { [K in keyof TArgs]: Resolvable }) => ConditionFunctionExpr register( name: string, options: RegistrationOptions, factory: (deps: TDeps) => (value: any, ...args: TArgs) => boolean | PromiseLike, ): (...args: { [K in keyof TArgs]: Resolvable }) => ConditionFunctionExpr register( name: string, factory: (deps: TDeps) => (value: any, ...args: TArgs) => boolean | PromiseLike, ): (...args: { [K in keyof TArgs]: Resolvable }) => ConditionFunctionExpr register( options: RegistrationOptions, factory: (deps: TDeps) => (value: any, ...args: TArgs) => boolean | PromiseLike, ): (...args: { [K in keyof TArgs]: Resolvable }) => ConditionFunctionExpr register( factory: (deps: TDeps) => (value: any, ...args: TArgs) => boolean | PromiseLike, ): (...args: { [K in keyof TArgs]: Resolvable }) => ConditionFunctionExpr register( first: string | RegistrationOptions | ((deps: TDeps) => (...args: any[]) => any), second?: RegistrationOptions | ((deps: TDeps) => (...args: any[]) => any), third?: (deps: TDeps) => (...args: any[]) => any, ): (...args: any[]) => ConditionFunctionExpr { const { name, options, factory } = this.parseArgs(first, second, third) this.store(name, options, factory) return this.buildExpressionHandle(name, options.prepare) as any } }