diff --git a/packages/dart_frog/CHANGELOG.md b/packages/dart_frog/CHANGELOG.md index 52df7ac6e..61b2f33c1 100644 --- a/packages/dart_frog/CHANGELOG.md +++ b/packages/dart_frog/CHANGELOG.md @@ -1,3 +1,8 @@ +# 1.2.6 + +- fix: revert `Expando` perf optimization ([#1908](https://github.com/dart-frog-dev/dart_frog/pull/1908)) + - perf optimization caused a regression when calling `request.read` multiple times across a middleware/handler gap + # 1.2.5 - feat: add `defaultDocument` to `createStaticFileHandler` ([#1901](https://github.com/dart-frog-dev/dart_frog/pull/1901)) diff --git a/packages/dart_frog/pubspec.yaml b/packages/dart_frog/pubspec.yaml index c389e8b4a..7b8af776d 100644 --- a/packages/dart_frog/pubspec.yaml +++ b/packages/dart_frog/pubspec.yaml @@ -1,6 +1,6 @@ name: dart_frog description: The official runtime for Dart Frog — a fast, minimalistic backend framework for Dart. -version: 1.2.5 +version: 1.2.6 homepage: https://dart-frog.dev repository: https://github.com/dart-frog-dev/dart_frog issue_tracker: https://github.com/dart-frog-dev/dart_frog/issues diff --git a/packages/dart_frog/test/src/serve_test.dart b/packages/dart_frog/test/src/serve_test.dart index afe85d53b..e88fc7cbf 100644 --- a/packages/dart_frog/test/src/serve_test.dart +++ b/packages/dart_frog/test/src/serve_test.dart @@ -254,5 +254,36 @@ SFTrELxay/xfdivEUxK9wEIG throwsA(isA()), ); }); + + test('can read request.body across middleware:handler gap', () async { + Middleware middleware() { + return (handler) { + return (context) async { + await context.request.body(); + return handler(context); + }; + }; + } + + Handler handler() { + return (context) async { + await context.request.body(); + return Response(); + }; + } + + final pipeline = const Pipeline().addMiddleware(middleware()); + final router = Router()..mount('/', handler()); + final server = await serve( + pipeline.addHandler(router.call), + 'localhost', + 3000, + ); + final client = HttpClient(); + final request = await client.getUrl(Uri.parse('http://localhost:3000')); + final response = await request.close(); + expect(response.statusCode, equals(HttpStatus.ok)); + await server.close(); + }); }); }