Skip to content

Commit b58659e

Browse files
ci: bump version to v0.15.7
1 parent 10e39b5 commit b58659e

17 files changed

Lines changed: 196 additions & 120 deletions

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
# Changelog
22

3+
## [0.15.7]
4+
5+
- Released @ 12/2025 (UTC)
6+
- Comment out two problematic asserts
7+
38
## [0.15.6]
49

510
- Released @ 7/2025 (UTC)

README.md

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
[![banner](https://github.com/dev-cetera/df_di/blob/v0.15.6/doc/assets/banner.png?raw=true)](https://github.com/dev-cetera)
1+
[![banner](https://github.com/dev-cetera/df_di/blob/v0.15.7/doc/assets/banner.png?raw=true)](https://github.com/dev-cetera)
22

33
[![pub](https://img.shields.io/pub/v/df_di.svg)](https://pub.dev/packages/df_di)
4-
[![tag](https://img.shields.io/badge/Tag-v0.15.6-purple?logo=github)](https://github.com/dev-cetera/df_di/tree/v0.15.6)
4+
[![tag](https://img.shields.io/badge/Tag-v0.15.7-purple?logo=github)](https://github.com/dev-cetera/df_di/tree/v0.15.7)
55
[![buymeacoffee](https://img.shields.io/badge/Buy%20Me%20A%20Coffee-FFDD00?logo=buy-me-a-coffee&logoColor=black)](https://www.buymeacoffee.com/dev_cetera)
66
[![sponsor](https://img.shields.io/badge/Sponsor-grey?logo=github-sponsors&logoColor=pink)](https://github.com/sponsors/dev-cetera)
77
[![patreon](https://img.shields.io/badge/Patreon-grey?logo=patreon)](https://www.patreon.com/t0mb3rr)
@@ -226,4 +226,3 @@ If you're enjoying this package and find it valuable, consider showing your appr
226226
## LICENSE
227227

228228
This project is released under the [MIT License](https://raw.githubusercontent.com/dev-cetera/df_di/main/LICENSE). See [LICENSE](https://raw.githubusercontent.com/dev-cetera/df_di/main/LICENSE) for more information.
229-

example/example.dart

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -77,18 +77,20 @@ Future<void> main() async {
7777
// This simulates a part of your application that initializes and provides
7878
// the service, for example, after a user logs in.
7979
Future.delayed(const Duration(seconds: 2), () {
80-
DI.global.register<UserService>(
81-
UserService(123),
82-
// Handle what happens when we unregister the dependency.
83-
onUnregister: (result) {
84-
if (result.isOk()) {
85-
final userService = result.unwrap();
86-
// ignore: void_checks
87-
return Future.value(userService.dispose().unwrap());
88-
}
89-
return null;
90-
},
91-
).end;
80+
DI.global
81+
.register<UserService>(
82+
UserService(123),
83+
// Handle what happens when we unregister the dependency.
84+
onUnregister: (result) {
85+
if (result.isOk()) {
86+
final userService = result.unwrap();
87+
// ignore: void_checks
88+
return Future.value(userService.dispose().unwrap());
89+
}
90+
return null;
91+
},
92+
)
93+
.end;
9294
});
9395

9496
// Await the service and use it.

lib/src/di/_dependency.dart

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ final class Dependency<T extends Object> {
2424

2525
Dependency(this._value, {this.metadata = const None()}) {
2626
UNSAFE:
27-
if (this.metadata.isSome()) {
28-
final a = this.metadata.unwrap();
27+
if (metadata.isSome()) {
28+
final a = metadata.unwrap();
2929
if (a._initialType.isSome()) {
3030
a._initialType = Some(_value.runtimeType);
3131
}
@@ -90,7 +90,7 @@ final class Dependency<T extends Object> {
9090
}) {
9191
UNSAFE:
9292
return Dependency<T>(
93-
value.isNone() ? this._value : value.unwrap(),
93+
value.isNone() ? _value : value.unwrap(),
9494
metadata: metadata,
9595
);
9696
}
@@ -155,8 +155,9 @@ class DependencyMetadata {
155155
}) {
156156
return DependencyMetadata(
157157
groupEntity: groupEntity.isNotDefault() ? groupEntity : this.groupEntity,
158-
preemptivetypeEntity:
159-
preemptivetypeEntity.isNotDefault() ? preemptivetypeEntity : this.preemptivetypeEntity,
158+
preemptivetypeEntity: preemptivetypeEntity.isNotDefault()
159+
? preemptivetypeEntity
160+
: this.preemptivetypeEntity,
160161
index: index.isSome() ? index : this.index,
161162
onUnregister: onUnregister.isSome() ? onUnregister : this.onUnregister,
162163
).._initialType = initialType.isSome() ? initialType : _initialType;
@@ -185,12 +186,14 @@ class DependencyMetadata {
185186
/// A typedef for a callback function to invoke when a dependency is
186187
/// registered.
187188
@internal
188-
typedef TOnRegisterCallback<T extends Object> = FutureOr<void> Function(T value);
189+
typedef TOnRegisterCallback<T extends Object> =
190+
FutureOr<void> Function(T value);
189191

190192
/// A typedef for a callback function to invoke when a dependency is
191193
/// unregistered.
192194
@internal
193-
typedef TOnUnregisterCallback<T extends Object> = FutureOr<void> Function(Result<T> value);
195+
typedef TOnUnregisterCallback<T extends Object> =
196+
FutureOr<void> Function(Result<T> value);
194197

195198
/// A typedef for a function that evaluates the validity of a dependency.
196199
@internal

lib/src/di/_di_base.dart

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,9 @@ base class DIBase {
7272
final metadata = DependencyMetadata(
7373
index: Some(_indexIncrementer++),
7474
groupEntity: g,
75-
onUnregister: onUnregister != null ? Some((e) => onUnregister(e.transf())) : const None(),
75+
onUnregister: onUnregister != null
76+
? Some((e) => onUnregister(e.transf()))
77+
: const None(),
7678
);
7779
final a = Resolvable(
7880
() => consec(value, (e) => consec(onRegister?.call(e), (_) => e)),
@@ -140,7 +142,9 @@ base class DIBase {
140142
}) {
141143
assert(T != Object, 'T must be specified and cannot be Object.');
142144
UNSAFE:
143-
final g = dependency.metadata.isSome() ? dependency.metadata.unwrap().groupEntity : focusGroup;
145+
final g = dependency.metadata.isSome()
146+
? dependency.metadata.unwrap().groupEntity
147+
: focusGroup;
144148
if (checkExisting) {
145149
final option = getDependency<T>(groupEntity: g, traverse: false);
146150
if (option.isSome()) {

lib/src/di/_di_registry.dart

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,14 @@ final class DIRegistry {
3434
/// A snapshot describing the current state of the dependencies.
3535
@pragma('vm:prefer-inline')
3636
TRegistryState get state => TRegistryState.unmodifiable(
37-
_state,
38-
).map((k, v) => MapEntry(k, Map.unmodifiable(v)));
37+
_state,
38+
).map((k, v) => MapEntry(k, Map.unmodifiable(v)));
3939

4040
/// Returns an iterable of all dependencies in the registry, unsorted.
4141
@protected
4242
@pragma('vm:prefer-inline')
43-
Iterable<Dependency> get unsortedDependencies => _state.entries.expand((e) => e.value.values);
43+
Iterable<Dependency> get unsortedDependencies =>
44+
_state.entries.expand((e) => e.value.values);
4445

4546
/// Returns a list of all dependencies, sorted in reverse order of registration (newest first).
4647
/// Dependencies without a registration index are placed at the end.
@@ -77,7 +78,9 @@ final class DIRegistry {
7778
/// subtypes.
7879
@pragma('vm:prefer-inline')
7980
Iterable<Dependency> dependenciesWhereTypeK(Entity typeEntity) {
80-
return reversedDependencies.map((e) => e.typeEntity == typeEntity ? e : null).nonNulls;
81+
return reversedDependencies
82+
.map((e) => e.typeEntity == typeEntity ? e : null)
83+
.nonNulls;
8184
}
8285

8386
/// A snapshot of the current group entities within [state].
@@ -111,7 +114,8 @@ final class DIRegistry {
111114
bool containsDependency<T extends Object>({
112115
Entity groupEntity = const DefaultEntity(),
113116
}) {
114-
return _state[groupEntity]?.values.any((e) => e.value is Resolvable<T>) == true;
117+
return _state[groupEntity]?.values.any((e) => e.value is Resolvable<T>) ==
118+
true;
115119
}
116120

117121
/// Checks if any dependency with the exact [type] exists under the specified
@@ -127,8 +131,8 @@ final class DIRegistry {
127131
final a = TypeEntity(Sync, [type]);
128132
final b = TypeEntity(Async, [type]);
129133
return _state[groupEntity]?.values.any(
130-
(e) => e.typeEntity == a || e.typeEntity == b,
131-
) ==
134+
(e) => e.typeEntity == a || e.typeEntity == b,
135+
) ==
132136
true;
133137
}
134138

@@ -145,8 +149,8 @@ final class DIRegistry {
145149
final a = TypeEntity(Sync, [typeEntity]);
146150
final b = TypeEntity(Async, [typeEntity]);
147151
return _state[groupEntity]?.values.any(
148-
(e) => e.typeEntity == a || e.typeEntity == b,
149-
) ==
152+
(e) => e.typeEntity == a || e.typeEntity == b,
153+
) ==
150154
true;
151155
}
152156

@@ -157,7 +161,9 @@ final class DIRegistry {
157161
Entity groupEntity = const DefaultEntity(),
158162
}) {
159163
return Option.from(
160-
_state[groupEntity]?.values.firstWhereOrNull((e) => e.value is Resolvable<T>)?.transf<T>(),
164+
_state[groupEntity]?.values
165+
.firstWhereOrNull((e) => e.value is Resolvable<T>)
166+
?.transf<T>(),
161167
);
162168
}
163169

@@ -193,8 +199,8 @@ final class DIRegistry {
193199
final b = TypeEntity(Async, [typeEntity]);
194200
return Option.from(
195201
_state[groupEntity]?.values.firstWhereOrNull(
196-
(e) => e.typeEntity == a || e.typeEntity == b,
197-
),
202+
(e) => e.typeEntity == a || e.typeEntity == b,
203+
),
198204
);
199205
}
200206

@@ -218,7 +224,9 @@ final class DIRegistry {
218224
if (group == null) {
219225
return const None();
220226
}
221-
final key = group.entries.firstWhereOrNull((e) => e.value.value is Resolvable<T>)?.key;
227+
final key = group.entries
228+
.firstWhereOrNull((e) => e.value.value is Resolvable<T>)
229+
?.key;
222230
if (key == null) {
223231
return const None();
224232
}

lib/src/di/_mixins/supports_children_mixin.dart

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@ base mixin SupportsChildrenMixin on SupportsConstructorsMixin {
2626
}
2727
UNSAFE:
2828
return childrenContainer.unwrap().registerLazy<DI>(
29-
() => Sync.okValue(DI()..parents.add(this as DI)),
30-
groupEntity: groupEntity,
31-
);
29+
() => Sync.okValue(DI()..parents.add(this as DI)),
30+
groupEntity: groupEntity,
31+
);
3232
}
3333

3434
Option<DI> getChildOrNone({Entity groupEntity = const DefaultEntity()}) {
@@ -54,8 +54,8 @@ base mixin SupportsChildrenMixin on SupportsConstructorsMixin {
5454
UNSAFE:
5555
{
5656
final option = childrenContainer.unwrap().getLazySingleton<DI>(
57-
groupEntity: g,
58-
);
57+
groupEntity: g,
58+
);
5959
if (option.isNone()) {
6060
return const None();
6161
}
@@ -76,9 +76,9 @@ base mixin SupportsChildrenMixin on SupportsConstructorsMixin {
7676
UNSAFE:
7777
{
7878
final option = childrenContainer.unwrap().getLazySingletonT<DI>(
79-
DI,
80-
groupEntity: g,
81-
);
79+
DI,
80+
groupEntity: g,
81+
);
8282
if (option.isNone()) {
8383
return const None();
8484
}
@@ -99,7 +99,12 @@ base mixin SupportsChildrenMixin on SupportsConstructorsMixin {
9999
return Err('No child container registered.');
100100
}
101101
UNSAFE:
102-
return childrenContainer.unwrap().unregister<DI>(groupEntity: g).sync().unwrap().value;
102+
return childrenContainer
103+
.unwrap()
104+
.unregister<DI>(groupEntity: g)
105+
.sync()
106+
.unwrap()
107+
.value;
103108
}
104109

105110
Result<Option<DI>> unregisterChildT(

lib/src/di/_mixins/supports_constructors_mixin.dart

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -207,8 +207,10 @@ base mixin SupportsConstructorsMixin on DIBase {
207207
/// Waits until a dependency of type `TSuper` or its subtype `TSub` is
208208
/// registered. `TSuper` should typically be the most general type expected.
209209
@pragma('vm:prefer-inline')
210-
Resolvable<TSub> untilLazySingleton<TSuper extends Object, TSub extends TSuper>(
211-
{Entity groupEntity = const DefaultEntity(), bool traverse = true}) {
210+
Resolvable<TSub> untilLazySingleton<
211+
TSuper extends Object,
212+
TSub extends TSuper
213+
>({Entity groupEntity = const DefaultEntity(), bool traverse = true}) {
212214
return untilLazy<TSuper, TSub>(
213215
groupEntity: groupEntity,
214216
traverse: traverse,

lib/src/di/_mixins/supports_constructors_mixin_t.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ import '/_common.dart';
1717

1818
/// A mixin that provides methods for working with constructors of dependencies,
1919
/// using `Type` for type resolution.
20-
base mixin SupportsConstructorsMixinT on SupportsConstructorsMixinK, SupportsMixinT {
20+
base mixin SupportsConstructorsMixinT
21+
on SupportsConstructorsMixinK, SupportsMixinT {
2122
/// Unregisters a lazily loaded dependency.
2223
@pragma('vm:prefer-inline')
2324
Resolvable<Option> unregisterLazyT(

lib/src/di/_mixins/supports_mixin_k.dart

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,9 @@ base mixin SupportsMixinK on DIBase {
4949
groupEntity: groupEntity,
5050
traverse: traverse,
5151
).map(
52-
(e) =>
53-
e.isSync() ? e.sync().unwrap() : Sync.err(Err('Called getSyncK() an async dependency.')),
52+
(e) => e.isSync()
53+
? e.sync().unwrap()
54+
: Sync.err(Err('Called getSyncK() an async dependency.')),
5455
);
5556
}
5657

@@ -163,10 +164,10 @@ base mixin SupportsMixinK on DIBase {
163164
final value = e.unwrap();
164165
registry.removeDependencyK(typeEntity, groupEntity: g).end();
165166
final metadata = option.unwrap().unwrap().metadata.map(
166-
(e) => e.copyWith(
167-
preemptivetypeEntity: TypeEntity(Sync, [typeEntity]),
168-
),
169-
);
167+
(e) => e.copyWith(
168+
preemptivetypeEntity: TypeEntity(Sync, [typeEntity]),
169+
),
170+
);
170171
registerDependencyK(
171172
dependency: Dependency(Sync.okValue(value), metadata: metadata),
172173
checkExisting: false,
@@ -184,7 +185,9 @@ base mixin SupportsMixinK on DIBase {
184185
bool checkExisting = false,
185186
}) {
186187
UNSAFE:
187-
final g = dependency.metadata.isSome() ? dependency.metadata.unwrap().groupEntity : focusGroup;
188+
final g = dependency.metadata.isSome()
189+
? dependency.metadata.unwrap().groupEntity
190+
: focusGroup;
188191
if (checkExisting) {
189192
final option = getDependencyK(
190193
dependency.typeEntity,

0 commit comments

Comments
 (0)