/** * Service Accessors (Generic) * * Generic utilities for accessing services from stores. * These work with any domain service, not just feature flags. */ import type { CoreDomainServiceInstance } from '@plyaz/types/core'; /** * Create a service accessor function for use in stores. * * @param serviceKey - Key of the service in the registry * @returns Async function that returns the service instance * * @example * ```typescript * const getExampleService = createServiceAccessor('example'); * * const myStoreSlice = { * async createEntity(data) { * const service = await getExampleService(); * return service.create(data); * }, * }; * ``` */ export declare function createServiceAccessor(serviceKey: string): () => Promise; /** * Create multiple service accessors at once. * * @param keys - Object mapping accessor names to service keys * @returns Object with accessor functions * * @example * ```typescript * const services = createServiceAccessors({ * flags: 'featureFlags', * examples: 'example', * users: 'users', * }); * * const flags = await services.flags(); * const example = await services.examples(); * ``` */ export declare function createServiceAccessors>(keys: T): { [K in keyof T]: () => Promise; }; /** * Create a Zustand middleware that injects services into store actions. * * @param serviceKeys - Service keys to inject * @returns Zustand middleware function * * @example * ```typescript * import { create } from 'zustand'; * import { withServices } from '@plyaz/core/frontend'; * * interface MyStore { * items: Item[]; * services: { example: ExampleDomainService }; * fetchItems: () => Promise; * } * * const useMyStore = create( * withServices(['example'], (set, get, services) => ({ * items: [], * services, * fetchItems: async () => { * const items = await services.example.getAll(); * set({ items }); * }, * })) * ); * ``` */ export declare function withServices>(serviceKeys: string[], createStore: (set: (partial: unknown) => void, get: () => unknown, services: TServices) => unknown): (set: (partial: unknown) => void, get: () => unknown) => unknown; //# sourceMappingURL=service-accessors.d.ts.map