Fix Query lifecycle
Lint / lint (push) Successful in 39s

This commit is contained in:
Julien Valverdé
2026-07-19 20:41:59 +02:00
parent cc01e46997
commit 6551969bb1
4 changed files with 93 additions and 78 deletions
+32 -31
View File
@@ -254,43 +254,44 @@ extends Pipeable.Class implements Query<K, A, E, R> {
}),
})),
Effect.onExit(this.f(previous.key), exit => Lens.update(
state,
previous => Exit.match(exit, {
onSuccess: v => ({
key: previous.key,
result: AsyncResult.success(v),
}),
onFailure: c => AsyncResult.match(previous.result, {
onInitial: () => ({
key: previous.key,
result: AsyncResult.failure(c),
}),
onSuccess: v => ({
key: previous.key,
result: AsyncResult.failure(c, {
previousSuccess: Option.some(v),
}),
}),
onFailure: v => ({
key: previous.key,
result: AsyncResult.failure(c, {
previousSuccess: v.previousSuccess,
}),
}),
}),
}),
).pipe(
Effect.andThen(Effect.all([
Effect.fiberId,
Lens.get(this.fiber),
])),
Effect.onExit(this.f(previous.key), exit => Effect.all([
Effect.fiberId,
Lens.get(this.fiber),
]).pipe(
Effect.flatMap(([fiberId, fiber]) => Option.match(fiber, {
onSome: v => fiberId === v.id
? Lens.set(this.fiber, Option.none())
: Effect.void,
onNone: () => Effect.void,
})),
Effect.andThen(Lens.updateAndGet(
state,
previous => Exit.match(exit, {
onSuccess: v => ({
key: previous.key,
result: AsyncResult.success(v),
}),
onFailure: c => AsyncResult.match(previous.result, {
onInitial: () => ({
key: previous.key,
result: AsyncResult.failure(c),
}),
onSuccess: v => ({
key: previous.key,
result: AsyncResult.failure(c, {
previousSuccess: Option.some(v),
}),
}),
onFailure: v => ({
key: previous.key,
result: AsyncResult.failure(c, {
previousSuccess: v.previousSuccess,
}),
}),
}),
}),
)),
Effect.flatMap(finalState => Lens.set(this.latestFinalState, Option.some(finalState as FinalQueryState<K, A, E>))),
)),
))