import "reflect-metadata"; /** * Options for the EdenNamespace decorator */ export interface EdenNamespaceOptions { /** * Optional event interface name for this namespace * The interface should define events without the namespace prefix * * @example * ```typescript * interface ProcessNamespaceEvents { * "launched": { instance: AppInstance }; * "stopped": { appId: string }; * } * * @EdenNamespace("process", { events: "ProcessNamespaceEvents" }) * class ProcessManager { * // ... * } * ``` */ events?: string; } /** * Class decorator to set the namespace for all command handlers and events in a manager * @param namespace - The namespace for this manager (e.g., "process", "view") * @param options - Optional configuration including event interface * * @example * ```typescript * interface ProcessEvents { * "launched": { appId: string }; * } * * @EdenNamespace("process", { events: ProcessEvents }) * class ProcessManager { * @EdenHandler("launch") * async handleLaunch(args: { appId: string }) { * // This becomes "process/launch" * } * } * ``` */ export declare function EdenNamespace(namespace: string, options?: EdenNamespaceOptions): (target: T) => T; /** * Method decorator to register a method as a command handler * @param command - The command name (will be prefixed with the class namespace) * * @example * ```typescript * @EdenNamespace("process") * class ProcessManager { * @EdenHandler("launch") * async handleLaunch(args: { appId: string }) { * // Registered as "process/launch" * } * } * ``` */ export interface EdenHandlerOptions { /** * Permission required to execute this handler (app-level). * Specified without namespace prefix (e.g., "read" not "fs/read"). * The full permission will be "namespace/permission". */ permission?: string; /** * User grant required to execute this handler. * This is checked against the current user's grants. * Use full grant strings (e.g., "settings/com.eden/users"). */ grant?: string; } export declare function EdenHandler(command: string, options?: EdenHandlerOptions): (target: object, propertyKey: string | symbol, descriptor: PropertyDescriptor) => PropertyDescriptor; //# sourceMappingURL=CommandDecorators.d.ts.map