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