393 Commits

Author SHA1 Message Date
Sergey Penkovsky
4d872d7c25 docs(disposable): add detailed English documentation and usage examples for Disposable interface; chore: update binding_resolver and add explanatory comment in scope_test for deprecated usage.\n\n- Expanded Disposable interface docs, added sync & async example classes, and CherryPick integration sample.\n- Clarified how to implement and use Disposable in DI context.\n- Updated binding_resolver for internal improvements.\n- Added ignore for deprecated member use in scope_test for clarity and future upgrades.\n\nBREAKING CHANGE: Documentation style enhancement and clearer API usage for Disposable implementations. 2025-08-11 11:53:25 +03:00
Sergey Penkovsky
450f4231cb Merge pull request #14 from pese-git/dispose
Dispose
2025-08-11 11:40:57 +03:00
Sergey Penkovsky
cd1b9cf49d fix(comment): fix warnings 2025-08-08 23:42:35 +03:00
Sergey Penkovsky
33775f5748 fix(license): correct urls 2025-08-08 23:24:05 +03:00
Sergey Penkovsky
e5848784ac refactor(core): make closeRootScope async and await dispose
BREAKING CHANGE: closeRootScope is now async (returns Future<void> and must be awaited). This change improves resource lifecycle management by allowing asynchronous cleanup when disposing the root Scope. All usages of closeRootScope should be updated to use await.

- Change closeRootScope from void to Future<void> and add async keyword
- Await _rootScopefor correct async disposal
- Ensures proper disposal and better future extensibility for async resources

Closes #xxx (replace if issue exists)
2025-08-08 16:56:37 +03:00
Sergey Penkovsky
40b3cbb422 chore(release): publish packages
- cherrypick@3.0.0-dev.6
 - cherrypick_flutter@1.1.3-dev.6
cherrypick_flutter-v1.1.3-dev.6 cherrypick-v3.0.0-dev.6
2025-08-08 16:23:13 +03:00
Sergey Penkovsky
a4b0ddfa54 docs(faq): add best practice FAQ about using await with scope disposal
- Added FAQ section in documentation (README and tutorials, EN + RU) recommending always using await when calling CherryPick.closeRootScope, scope.closeScope, or scope.dispose, even if no services implement Disposable.
- Clarifies future-proof resource management for all users.
2025-08-08 16:08:33 +03:00
Sergey Penkovsky
547a15fa4e docs(faq): add best practice FAQ about using await with scope disposal
- Added FAQ section in documentation (README and tutorials, EN + RU) recommending always using await when calling CherryPick.closeRootScope, scope.closeScope, or scope.dispose, even if no services implement Disposable.
- Clarifies future-proof resource management for all users.
2025-08-08 16:08:33 +03:00
Sergey Penkovsky
a9c95f6a89 docs+feat: add Disposable interface source and usage example
feat(core,doc): unified async dispose mechanism for resource cleanup

BREAKING CHANGE:

- Added full support for asynchronous resource cleanup via a unified FutureOr<void> dispose() method in the Disposable interface.
- The Scope now provides only Future<void> dispose() for disposing all tracked resources and child scopes (sync-only dispose() was removed).
- All calls to cleanup in code and tests (scope itself, subscopes, and custom modules) now require await ...dispose().
- Documentation and all examples updated: resource management is always async and must be awaited; Disposable implementers may use both sync and async cleanup.
- Old-style, synchronous cleanup methods have been completely removed (API is now consistently async for all DI lifecycle management).
- Example and tutorial code now demonstrate async resource disposal patterns.
2025-08-08 16:08:29 +03:00
Sergey Penkovsky
61f2268d63 fix(riverpod-adapter): update implementation in riverpod_adapter.dart 2025-08-08 15:08:27 +03:00
Sergey Penkovsky
f6fcb76730 docs(benchmark): update DI benchmark reports with new scenario tables and updated explanations 2025-08-08 15:02:45 +03:00
Sergey Penkovsky
f8bbaf6c2c Merge pull request #18 from pese-git/logger
Logger
2025-08-08 14:27:53 +03:00
Sergey Penkovsky
2ebc997fea docs(readme): add comprehensive DI state and action logging to features 2025-08-08 13:40:39 +03:00
Sergey Penkovsky
d15f3063fc hotfix 2025-08-08 12:49:12 +03:00
Sergey Penkovsky
1e8b8db64a docs(helper): add complete DartDoc with real usage examples for CherryPick class 2025-08-08 12:43:09 +03:00
Sergey Penkovsky
c3ec52823e fix: improve global cycle detector logic 2025-08-08 12:24:07 +03:00
Sergey Penkovsky
16e05d27c5 docs(log_format): add detailed English documentation for formatLogMessage function 2025-08-08 11:28:12 +03:00
Sergey Penkovsky
1131be44da feat(core): refactor root scope API, improve logger injection, helpers, and tests
- BREAKING CHANGE: introduce CherryPick.openRootScope
- add logger injection to Scope
- refactor helper and scope logic
- improve internal logging
- enhance and update tests
- add log_format.dart module
2025-08-08 11:24:03 +03:00
Sergey Penkovsky
c971b59483 feat(postly): add explicit PrintLogger setup in main.dart for debug builds 2025-08-08 08:24:19 +03:00
Sergey Penkovsky
aa97632add feat(logger): add extensible logging API, usage examples, and bilingual documentation
- Introduce CherryPickLogger interface, PrintLogger and SilentLogger implementations
- Add setGlobalLogger() to CherryPick API for custom DI logging
- Log key events (scope, module, error) via logger throughout DI lifecycle
- Comprehensive comments and code documentation in both English and Russian
- Document usage of logging system in quick_start and full_tutorial documentation (EN/RU)
- Provide usage examples in docs and code comments
- No logging inside GlobalCycleDetectionMixin (design choice: exceptions handled at Scope, not detector/mixin level) and detailed architectural reasoning
- Update helper.dart, logger.dart: comments, examples, API doc improvements
BREAKING CHANGE: Projects can now inject any logger via CherryPick.setGlobalLogger; default log behavior clarified and docstrings/usage examples enhanced
2025-08-08 08:24:13 +03:00
Sergey Penkovsky
41d49e98d0 docs(report): update comparative DI benchmark results and conclusions for cherrypick, get_it, riverpod (eng, ru) 2025-08-07 16:46:53 +03:00
Sergey Penkovsky
44a8a3fcb2 chore(pubspec): update pubspec and lock files for all packages, version bump and deps sync 2025-08-07 16:28:47 +03:00
Sergey Penkovsky
475deac1e0 chore(release): publish packages
- cherrypick@3.0.0-dev.5
 - cherrypick_flutter@1.1.3-dev.5
cherrypick-v3.0.0-dev.5 cherrypick_flutter-v1.1.3-dev.5
2025-08-07 16:23:12 +03:00
Sergey Penkovsky
f06f4564d9 Merge pull request #15 from pese-git/improve
perf(scope): speed up dependency lookup with Map-based binding resolv…
2025-08-07 16:19:11 +03:00
Sergey Penkovsky
70731c7e94 refactor(scope): simplify _findBindingResolver<T> with one-liner and optional chaining
The function is now shorter, more readable and uses modern Dart null-safety idioms. No functional change.
2025-08-07 15:48:04 +03:00
Sergey Penkovsky
4d5f96705f Merge pull request #17 from pese-git/impr/complex_benchmark_impr
impr: BENCHMARK - complex benchmark improvements.
2025-08-07 15:01:27 +03:00
yarashevich_kv
d23d06f98e impr: BENCHMARK - fix for CherrypickDIAdapter. 2025-08-07 14:55:07 +03:00
Sergey Penkovsky
e1371f7038 docs: update architecture diagram in README to show adapter-centric universalRegistration pattern 2025-08-07 14:37:34 +03:00
Sergey Penkovsky
75db42428c docs: update README (en/ru) to reflect adapter-based universalRegistration pattern
- Show type-safe DIAdapter-centric registration for all scenarios
- Document new way to add scenarios/DI via universalRegistration<S extends Enum>
- Remove legacy function-based registration/manual switching from guide
- Provide examples for Dart and CLI usage with all DI adapters
2025-08-07 14:23:06 +03:00
Sergey Penkovsky
5336c22550 test: validate all benchmark scenarios and stress runs for all DI adapters
- Successfully executed all scenarios (register, chain, asyncChain, named, override, etc) for Cherrypick, GetIt, and Riverpod
- Verified correct integration of fully generic DIAdapter & universalRegistration architecture
- Ensured type-safety in all setup/registration flows after complete refactor
- All benchmarks run and pass under stress/load params for each DI adapter
2025-08-07 14:18:16 +03:00
Sergey Penkovsky
56bdb3946e refactor: full generic DIAdapter workflow & universalRegistration abstraction
- Made UniversalChainBenchmark and UniversalChainAsyncBenchmark fully generic with strong typing for DIAdapter<TContainer>
- Moved all universalRegistration logic inside adapters; removed global function and typedef
- Replaced dynamic/object-based registration with type-safe generic contracts end-to-end
- Updated CLI and usage: all DI and scenarios are invoked via type-safe generics
- Fixed all analysis errors, Riverpod async/future usages, and imports for full Dart 3 compatibility
- All benchmarks fully pass for Cherrypick, GetIt, and Riverpod adapters
2025-08-07 14:11:29 +03:00
Sergey Penkovsky
54446868e4 refactor: unify DIAdapter with generics, ensure type-safety & scalability in benchmark_di
- Refactor DIAdapter to generic abstract class; align interfaces for Cherrypick, GetIt, Riverpod.
- Remove all dynamic/object usage from dependency registration and bench scenarios.
- Universal getUniversalRegistration function now fully type-safe for all DIs.
- Fix teardown and lifecycle for RiverpodAdapter to prevent disposed Container errors.
- Update CLI and benchmark entry points; validated all scenarios and stress modes for each DI adapter.
2025-08-07 13:45:16 +03:00
Sergey Penkovsky
590b876cf4 feat: add Riverpod adapter, async-chain support via FutureProvider, full DI CLI/bench integration, benchmarking, ascii performance graphs in markdown 2025-08-07 13:12:56 +03:00
Sergey Penkovsky
f7a7ea4384 feat: full di benchmarks report (en/ru) + get_it scope+override support fix; fresh results for all scenarios and settings 2025-08-07 12:11:16 +03:00
Sergey Penkovsky
6b6564f8c3 refactor: rename benchmark_cherrypick to benchmark_di, update paths, pubspec, imports, and documentation 2025-08-07 10:34:50 +03:00
Sergey Penkovsky
da79f1e546 docs: update README.md and README.ru.md for universal DI benchmarks, scenarios, CLI options, and architecture diagram 2025-08-07 10:16:14 +03:00
Sergey Penkovsky
64f33b20a7 fix: universal benchmarks and DI registration; proper named binding; robust override support for cherrypick and get_it; improved CLI args 2025-08-07 09:15:26 +03:00
Sergey Penkovsky
d523a5f261 refactor: simplify DIAdapter interface with a single registration callback; update benchmarks and cherrypick adapter accordingly 2025-08-07 08:28:23 +03:00
Sergey Penkovsky
b72dec9944 Обновлен README.ru.md: новые современные сценарии, параметры CLI, форматы отчётов, инструкция по расширению 2025-08-06 23:22:05 +03:00
Sergey Penkovsky
352442e52d Update README.md with current benchmark scenarios, CLI options, and report formats (EN) 2025-08-06 23:19:37 +03:00
Sergey Penkovsky
134fc5207a Add English documentation comments to all benchmark_cherrypick source files (adapters, scenarios, CLI, reporters, runner) 2025-08-06 23:15:28 +03:00
Sergey Penkovsky
01d82e1cd3 feat(report): add legend to MarkdownReport output with explanation of columns 2025-08-06 22:53:33 +03:00
Sergey Penkovsky
1e6375f5ae refactor(report): round numeric values to 2 decimal places in MarkdownReport output 2025-08-06 22:41:08 +03:00
Sergey Penkovsky
3da71674d4 chore: fix current status, all implemented features and refactors 2025-08-06 22:35:49 +03:00
Sergey Penkovsky
ea39b9d0e1 feat(report): align MarkdownReport columns for readable ASCII/markdown output 2025-08-06 22:31:41 +03:00
Sergey Penkovsky
09ed186544 refactor(cli): modularize CLI — extract parser, runner, report and main logic into dedicated files 2025-08-06 22:19:13 +03:00
Sergey Penkovsky
3ce21f55e4 refactor(report): extract ReportGenerator abstraction for pretty/csv/json; simplify report rendering in main 2025-08-06 22:02:41 +03:00
Sergey Penkovsky
bae940f374 refactor(main): extract BenchmarkRunner and BenchmarkResult, simplify main loop, unify sync/async cases 2025-08-06 21:53:13 +03:00
Sergey Penkovsky
0fc1907173 chore(cleanup): remove unused legacy benchmarks and scenario files 2025-08-06 18:36:11 +03:00
Sergey Penkovsky
4d41266135 refactor(benchmark): clean up UniversalChainBenchmark, remove async logic, keep only sync scenario logic 2025-08-06 18:26:05 +03:00