resilify 1.0.2
resilify: ^1.0.2 copied to clipboard
Unified Result-based API handling for Dart & Flutter — works with http, Dio, Retrofit, Chopper, and WebSocket. No exceptions. Just results.
Changelog #
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
1.0.2 #
Added #
- New
Failurenamed constructors:Failure.forbidden(403),Failure.conflict(409), andFailure.rateLimit(429). Failure.fromStatusCode(int)— picks the most specific named constructor for a given HTTP status, falling back tobadResponsefor other 4xx andserverErrorfor other 5xx.Failure.is4xx,Failure.is5xx, andFailure.isRetryablegetters — drop-in predicates forRetryHelper.retryIf.onCompleteextension onResult<T>— finally-style hook that fires for bothSuccessandError.flatten()extension onResult<Result<T>>— collapses one layer of nesting thatflatMapchains often produce.
Changed #
RetryHelper.retrynow acceptsmaxDelayto cap the wait between attempts andjitter(with an optionalRandom) to spread retries and prevent thundering-herd retry storms. Both default to no-op behavior, so existing call sites are unaffected.
1.0.1 #
Added #
Result.tryRunandResult.tryRunAsync— bridge throwing code into aResult<T>without writing try/catch at call sites. Both accept an optionalonErrorto translate the caught object into a domain-specificFailure.mapErroronResult<T>— transform the wrappedFailurewithout touching the success path. Useful for translating low-level transport failures into domain failures.errorOrThrowextension — symmetric counterpart togetOrThrow, returning the wrappedFailureor throwing aStateErroronSuccess.
1.0.0 — Initial release #
Added #
-
Core
- Sealed
Result<T>withSuccess<T>andError<T>variants (Dart 3). - Structured
Failurevalue type with named constructors:network,timeout,badResponse,parsing,unauthorized,notFound,serverError,cancelled,unknown. - Synchronous extensions:
isSuccess,isError,dataOrNull,errorOrNull,getOrElse,getOrThrow,onSuccess,onError. when,fold,map,flatMaponResult<T>.- Async helpers on
Future<Result<T>>:mapAsync,flatMapAsync,recover. - Stream helpers on
Stream<Result<T>>:mapStream,whereSuccess,whereError,dataStream,listenResult. - List helpers on
Result<List<T>>:mapList,filter,whereResult,firstOrError. RetryHelper.retrywith exponential backoff, predicate-based retry, and per-attempt observer.
- Sealed
-
Integrations (each opt-in via its own barrel file)
resilify_http.dart—HttpResultHandlerforpackage:http.resilify_dio.dart—DioResultHandler(incl.upload/downloadwith progress) andResultLoggerInterceptor.resilify_retrofit.dart—.toResult()on Retrofit-generated futures.resilify_chopper.dart—.toResult()on ChopperResponse<T>futures with pluggable failure mappers.resilify_websocket.dart—WebSocketResultHandler<T>with auto-reconnect and exponential backoff.