Instruction file imported from dev-mosuk/mosuk-ui (
.cursor/rules/services/rule.mdc). Copyright stays with the author.
services
Назначение
Imperative API без React: singletons, registry, side-effect coordinators.
Структура
{feature}/
├── index.ts
├── service.ts
├── service.interface.ts
└── service.enums.ts ← optional
index.ts
export { alertsService, type Alert, type AlertsServiceProps };
export namespace AlertsService {
export type Props = AlertsServiceProps;
export const ENUMS = { Type: AlertType };
}
service.ts
- Module-level singleton или factory
- Methods mutate external refs (Toast manager from provider)
- Не import React components
Provider wiring
Provider registers service on mount:
useEffect(() => {
alertsService.manager(manager);
return () => alertsService.manager(null);
}, [manager]);
Interface
service.interface.ts— public method signatures, DTO types- Enums в
service.enums.ts— export через namespaceENUMS
Правила
- Service — single responsibility domain (alerts, storage)
- Не UI в service
- Testable: inject dependencies через setter (
manager(null))
Эталоны
src/services/alerts/— Toast manager registrysrc/services/storage/local/— localStorage wrappersrc/services/storage/cookie/— cookie wrapper