refactor(core,logger)migrate to CherryPickObserver API and drop CherryPickLogger

BREAKING CHANGE:
- Removed the deprecated CherryPickLogger interface from cherrypick
- Logger/adapters (e.g., talker_cherrypick_logger) must now implement CherryPickObserver
- talker_cherrypick_logger: replace TalkerCherryPickLogger with TalkerCherryPickObserver
- All usages, docs, tests migrated to observer API
- Improved test mocks and integration tests for observer pattern
- Removed obsolete files: cherrypick/src/logger.dart, talker_cherrypick_logger/src/talker_cherrypick_logger.dart
- Updated README and example usages for new CherryPickObserver model

This refactor introduces a unified observer pattern (CherryPickObserver) to handle all DI lifecycle events, replacing the limited info/warn/error logger pattern.
All external logging adapters and integrations must migrate to use CherryPickObserver.
This commit is contained in:
Sergey Penkovsky
2025-08-11 18:01:21 +03:00
parent 4dc9e269cd
commit efed72cc39
24 changed files with 507 additions and 436 deletions

View File

@@ -1,24 +0,0 @@
import 'package:cherrypick/cherrypick.dart';
import 'package:talker/talker.dart';
/// Реализация CherryPickLogger для логирования через Talker
class TalkerCherryPickLogger implements CherryPickLogger {
final Talker talker;
TalkerCherryPickLogger(this.talker);
@override
void info(String message) => talker.info('[CherryPick] $message');
@override
void warn(String message) => talker.warning('[CherryPick] $message');
@override
void error(String message, [Object? error, StackTrace? stackTrace]) {
talker.handle(
error ?? '[CherryPick] $message',
stackTrace,
'[CherryPick] $message',
);
}
}

View File

@@ -0,0 +1,66 @@
import 'package:cherrypick/cherrypick.dart';
import 'package:talker/talker.dart';
/// CherryPickObserver-адаптер для логирования событий CherryPick через Talker
class TalkerCherryPickObserver implements CherryPickObserver {
final Talker talker;
TalkerCherryPickObserver(this.talker);
@override
void onBindingRegistered(String name, Type type, {String? scopeName}) {
talker.info('[binding][CherryPick] $name$type (scope: $scopeName)');
}
@override
void onInstanceRequested(String name, Type type, {String? scopeName}) {
talker.info('[request][CherryPick] $name$type (scope: $scopeName)');
}
@override
void onInstanceCreated(String name, Type type, Object instance, {String? scopeName}) {
talker.info('[create][CherryPick] $name$type => $instance (scope: $scopeName)');
}
@override
void onInstanceDisposed(String name, Type type, Object instance, {String? scopeName}) {
talker.info('[dispose][CherryPick] $name$type => $instance (scope: $scopeName)');
}
@override
void onModulesInstalled(List<String> modules, {String? scopeName}) {
talker.info('[modules installed][CherryPick] ${modules.join(', ')} (scope: $scopeName)');
}
@override
void onModulesRemoved(List<String> modules, {String? scopeName}) {
talker.info('[modules removed][CherryPick] ${modules.join(', ')} (scope: $scopeName)');
}
@override
void onScopeOpened(String name) {
talker.info('[scope opened][CherryPick] $name');
}
@override
void onScopeClosed(String name) {
talker.info('[scope closed][CherryPick] $name');
}
@override
void onCycleDetected(List<String> chain, {String? scopeName}) {
talker.warning('[cycle][CherryPick] Detected: ${chain.join(' -> ')}${scopeName != null ? ' (scope: $scopeName)' : ''}');
}
@override
void onCacheHit(String name, Type type, {String? scopeName}) {
talker.info('[cache hit][CherryPick] $name$type (scope: $scopeName)');
}
@override
void onCacheMiss(String name, Type type, {String? scopeName}) {
talker.info('[cache miss][CherryPick] $name$type (scope: $scopeName)');
}
@override
void onDiagnostic(String message, {Object? details}) {
talker.verbose('[diagnostic][CherryPick] $message ${details ?? ''}');
}
@override
void onWarning(String message, {Object? details}) {
talker.warning('[warn][CherryPick] $message ${details ?? ''}');
}
@override
void onError(String message, Object? error, StackTrace? stackTrace) {
talker.handle(error ?? '[CherryPick] $message', stackTrace, '[error][CherryPick] $message');
}
}

View File

@@ -3,6 +3,6 @@
/// More dartdocs go here.
library;
export 'src/talker_cherrypick_logger.dart';
export 'src/talker_cherrypick_observer.dart';
// TODO: Export any libraries intended for clients of this package.