null safety (#31)
migrate to null safety
diff --git a/.github/workflows/test-package.yml b/.github/workflows/test-package.yml
index 727e59e..21a3c50 100644
--- a/.github/workflows/test-package.yml
+++ b/.github/workflows/test-package.yml
@@ -59,27 +59,3 @@
- name: Run VM tests
run: dart test --platform vm
if: always() && steps.install.outcome == 'success'
-
- # Run tests on a matrix consisting of two dimensions:
- # 1. OS: ubuntu-latest, (macos-latest, windows-latest)
- # 2. release channel: 2.1.0
- test-legacy-sdk:
- needs: analyze
- runs-on: ${{ matrix.os }}
- strategy:
- fail-fast: false
- matrix:
- # Add macos-latest and/or windows-latest if relevant for this package.
- os: [ubuntu-latest]
- sdk: [2.1.0]
- steps:
- - uses: actions/checkout@v2
- - uses: dart-lang/setup-dart@v0.3
- with:
- sdk: ${{ matrix.sdk }}
- - id: install
- name: Install dependencies
- run: pub get
- - name: Run VM tests
- run: pub run test --platform vm
- if: always() && steps.install.outcome == 'success'
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0590a59..8db2d16 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.0.0-dev
+
+* Migrate to null safety.
+
## 0.2.4+1
* Support the latest `package:web_socket_channel`.
diff --git a/lib/shelf_web_socket.dart b/lib/shelf_web_socket.dart
index 061200e..420b1bf 100644
--- a/lib/shelf_web_socket.dart
+++ b/lib/shelf_web_socket.dart
@@ -7,7 +7,6 @@
import 'src/web_socket_handler.dart';
-
/// Creates a Shelf handler that upgrades HTTP requests to WebSocket
/// connections.
///
@@ -41,9 +40,9 @@
/// channel instance, enabling round-trip disconnect detection.
/// See [WebSocketChannel] for more details.
Handler webSocketHandler(Function onConnection,
- {Iterable<String> protocols,
- Iterable<String> allowedOrigins,
- Duration pingInterval}) {
+ {Iterable<String>? protocols,
+ Iterable<String>? allowedOrigins,
+ Duration? pingInterval}) {
if (onConnection is! void Function(Null, Null)) {
final innerOnConnection = onConnection;
onConnection = (webSocket, _) => innerOnConnection(webSocket);
@@ -52,7 +51,7 @@
return WebSocketHandler(
onConnection,
protocols?.toSet(),
- allowedOrigins?.map((origin) => origin.toLowerCase())?.toSet(),
+ allowedOrigins?.map((origin) => origin.toLowerCase()).toSet(),
pingInterval,
).handle;
}
diff --git a/lib/src/web_socket_handler.dart b/lib/src/web_socket_handler.dart
index c18c221..b4657c8 100644
--- a/lib/src/web_socket_handler.dart
+++ b/lib/src/web_socket_handler.dart
@@ -13,13 +13,13 @@
final Function _onConnection;
/// The set of protocols the user supports, or `null`.
- final Set<String> _protocols;
+ final Set<String>? _protocols;
/// The set of allowed browser origin connections, or `null`..
- final Set<String> _allowedOrigins;
+ final Set<String>? _allowedOrigins;
/// The ping interval used for verifying connection, or `null`.
- final Duration _pingInterval;
+ final Duration? _pingInterval;
WebSocketHandler(this._onConnection, this._protocols, this._allowedOrigins,
this._pingInterval);
@@ -64,7 +64,7 @@
final origin = request.headers['Origin'];
if (origin != null &&
_allowedOrigins != null &&
- !_allowedOrigins.contains(origin.toLowerCase())) {
+ !_allowedOrigins!.contains(origin.toLowerCase())) {
return _forbidden('invalid origin "$origin".');
}
@@ -85,19 +85,19 @@
// [request.hijack] is guaranteed to throw a [HijackException], so we'll
// never get here.
assert(false);
- return null;
+ throw StateError('unreachable');
}
/// Selects a subprotocol to use for the given connection.
///
/// If no matching protocol can be found, returns `null`.
- String _chooseProtocol(Request request) {
+ String? _chooseProtocol(Request request) {
final requestProtocols = request.headers['Sec-WebSocket-Protocol'];
if (requestProtocols == null) return null;
if (_protocols == null) return null;
for (var requestProtocol in requestProtocols.split(',')) {
requestProtocol = requestProtocol.trim();
- if (_protocols.contains(requestProtocol)) return requestProtocol;
+ if (_protocols!.contains(requestProtocol)) return requestProtocol;
}
return null;
}
diff --git a/pubspec.yaml b/pubspec.yaml
index 8f52f76..8211256 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,19 +1,21 @@
name: shelf_web_socket
-version: 0.2.4+1
+version: 1.0.0-dev
description: >-
A shelf handler that wires up a listener for every connection.
repository: https://github.com/dart-lang/shelf_web_socket
environment:
- sdk: ">=2.1.0 <3.0.0"
+ sdk: ">=2.12.0-0 <3.0.0"
dependencies:
- shelf: '>=0.7.0 <2.0.0'
- stream_channel: ">1.4.0 <3.0.0"
- web_socket_channel: '>=1.0.0 <3.0.0'
+ shelf: ^1.0.0
+ stream_channel: ^2.1.0
+ web_socket_channel: ^2.0.0
dev_dependencies:
- http: ">=0.10.0 <0.14.0"
- pedantic: ^1.4.0
- test: ^1.6.0
+ http: ^0.13.0
+ pedantic: ^1.10.0
+
+dependency_overrides:
+ test: ^1.16.0
diff --git a/test/web_socket_test.dart b/test/web_socket_test.dart
index ed62ac4..d2b6452 100644
--- a/test/web_socket_test.dart
+++ b/test/web_socket_test.dart
@@ -100,8 +100,8 @@
});
group('with a set of allowed origins', () {
- HttpServer server;
- Uri url;
+ late HttpServer server;
+ late Uri url;
setUp(() async {
server = await shelf_io.serve(
webSocketHandler((webSocket) {
@@ -157,8 +157,8 @@
});
group('HTTP errors', () {
- HttpServer server;
- Uri url;
+ late HttpServer server;
+ late Uri url;
setUp(() async {
server = await shelf_io.serve(webSocketHandler((_) {
fail('should not create a WebSocket');
@@ -201,7 +201,7 @@
});
}
-Matcher hasStatus(int status) => completion(predicate((response) {
+Matcher hasStatus(int status) => completion(predicate((http.Response response) {
expect(response, isA<http.Response>());
expect(response.statusCode, equals(status));
return true;