Require Dart 3.2, use pkg:web (dart-lang/sse#92)
diff --git a/pkgs/sse/.github/workflows/test-package.yml b/pkgs/sse/.github/workflows/test-package.yml index e6e4909..73bf502 100644 --- a/pkgs/sse/.github/workflows/test-package.yml +++ b/pkgs/sse/.github/workflows/test-package.yml
@@ -47,7 +47,7 @@ matrix: # Add macos-latest and/or windows-latest if relevant for this package. os: [ubuntu-latest] - sdk: [3.1.0, dev] + sdk: [3.2.0, dev] steps: - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 - uses: dart-lang/setup-dart@b64355ae6ca0b5d484f0106a033dd1388965d06d
diff --git a/pkgs/sse/CHANGELOG.md b/pkgs/sse/CHANGELOG.md index 36822cf..fef1e31 100644 --- a/pkgs/sse/CHANGELOG.md +++ b/pkgs/sse/CHANGELOG.md
@@ -1,6 +1,6 @@ -## 4.1.3-dev +## 4.1.3 -- Update the minimum Dart SDK version to `3.1.0`. +- Update the minimum Dart SDK version to `3.2.0`. ## 4.1.2
diff --git a/pkgs/sse/lib/client/sse_client.dart b/pkgs/sse/lib/client/sse_client.dart index 86dac10..96cd1f3 100644 --- a/pkgs/sse/lib/client/sse_client.dart +++ b/pkgs/sse/lib/client/sse_client.dart
@@ -4,12 +4,12 @@ import 'dart:async'; import 'dart:convert'; -import 'dart:html'; +import 'dart:js_interop'; -import 'package:js/js.dart'; import 'package:logging/logging.dart'; import 'package:pool/pool.dart'; import 'package:stream_channel/stream_channel.dart'; +import 'package:web/helpers.dart'; import '../src/util/uuid.dart'; @@ -52,14 +52,15 @@ ? generateUuidV4() : '$debugKey-${generateUuidV4()}' { _serverUrl = '$serverUrl?sseClientId=$_clientId'; - _eventSource = EventSource(_serverUrl, withCredentials: true); + _eventSource = + EventSource(_serverUrl, EventSourceInit(withCredentials: true)); _eventSource.onOpen.first.whenComplete(() { _onConnected.complete(); _outgoingController.stream .listen(_onOutgoingMessage, onDone: _onOutgoingDone); }); - _eventSource.addEventListener('message', _onIncomingMessage); - _eventSource.addEventListener('control', _onIncomingControlMessage); + _eventSource.addEventListener('message', _onIncomingMessage.toJS); + _eventSource.addEventListener('control', _onIncomingControlMessage.toJS); _eventSource.onOpen.listen((_) { _errorTimer?.cancel(); @@ -114,7 +115,7 @@ void _onIncomingControlMessage(Event message) { var data = (message as MessageEvent).data; - if (data == 'close') { + if (data.dartify() == 'close') { close(); } else { throw UnsupportedError('[$_clientId] Illegal Control Message "$data"'); @@ -147,8 +148,10 @@ final url = '$_serverUrl&messageId=${++_lastMessageId}'; await _fetch( url, - _FetchOptions( - method: 'POST', body: encodedMessage, credentials: 'include')); + RequestInit( + method: 'POST', + body: encodedMessage?.toJS, + credentials: 'include')); } catch (error) { final augmentedError = '[$_clientId] SSE client failed to send $message:\n $error'; @@ -159,20 +162,5 @@ } } -// Custom implementation of Fetch API until Dart supports GET vs. POST, -// credentials, etc. See https://github.com/dart-lang/http/issues/595. -@JS('fetch') -external Object _nativeJsFetch(String resourceUrl, _FetchOptions options); - -Future<dynamic> _fetch(String resourceUrl, _FetchOptions options) => - promiseToFuture(_nativeJsFetch(resourceUrl, options)); - -@JS() -@anonymous -class _FetchOptions { - external factory _FetchOptions({ - required String method, // e.g., 'GET', 'POST' - required String credentials, // e.g., 'omit', 'same-origin', 'include' - required String? body, - }); -} +Future<void> _fetch(String resourceUrl, RequestInit options) => + window.fetch(resourceUrl.toJS, options).toDart;
diff --git a/pkgs/sse/lib/src/server/sse_handler.dart b/pkgs/sse/lib/src/server/sse_handler.dart index d4b7e06..c235c20 100644 --- a/pkgs/sse/lib/src/server/sse_handler.dart +++ b/pkgs/sse/lib/src/server/sse_handler.dart
@@ -158,7 +158,7 @@ // period. // If the connection comes back, this will be cancelled and all messages // left in the queue tried again. - _keepAliveTimer = Timer(_keepAlive!, _close); + _keepAliveTimer = Timer(_keepAlive, _close); } }
diff --git a/pkgs/sse/pubspec.yaml b/pkgs/sse/pubspec.yaml index 1258266..8581f8e 100644 --- a/pkgs/sse/pubspec.yaml +++ b/pkgs/sse/pubspec.yaml
@@ -1,5 +1,5 @@ name: sse -version: 4.1.3-dev +version: 4.1.3 description: >- Provides client and server functionality for setting up bi-directional communication through Server Sent Events (SSE) and corresponding POST @@ -7,7 +7,7 @@ repository: https://github.com/dart-lang/sse environment: - sdk: ^3.1.0 + sdk: ^3.2.0 dependencies: async: ^2.0.8 @@ -17,6 +17,7 @@ pool: ^1.5.0 shelf: ^1.1.0 stream_channel: ^2.0.0 + web: '>=0.3.0 <0.5.0' dev_dependencies: dart_flutter_team_lints: ^2.0.0
diff --git a/pkgs/sse/test/web/index.dart b/pkgs/sse/test/web/index.dart index e149372..fadb147 100644 --- a/pkgs/sse/test/web/index.dart +++ b/pkgs/sse/test/web/index.dart
@@ -2,9 +2,8 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. -import 'dart:html'; - import 'package:sse/client/sse_client.dart'; +import 'package:web/helpers.dart'; void main() { var channel = SseClient('/test');