diff --git a/.github/workflows/dart.yml b/.github/workflows/dart.yml index 2c41eac..770cfdf 100644 --- a/.github/workflows/dart.yml +++ b/.github/workflows/dart.yml @@ -2,22 +2,31 @@ name: Dart CI on: push: + tags: + # must align with the tag-pattern configured on pub.dev, often just replace + # {{version}} with [0-9]+.[0-9]+.[0-9]+ + - 'v[0-9]+.[0-9]+.[0-9]+' # tag-pattern on pub.dev: 'v{{version}}' branches: - main pull_request: +env: + MINIMUM_PANA_SCORE: 150 + jobs: format: + name: Verify code formatting runs-on: ubuntu-slim steps: - uses: actions/checkout@v3 - uses: dart-lang/setup-dart@v1 - - name: Print version - run: dart --version + - name: Install dependencies + run: dart --version && dart pub get - name: Verify formatting run: dart format --set-exit-if-changed . - analyze: - needs: format + lints: + name: Analyze source code + needs: [format] runs-on: ubuntu-slim strategy: fail-fast: false @@ -28,28 +37,41 @@ jobs: - uses: dart-lang/setup-dart@v1 with: sdk: ${{ matrix.sdk }} - - name: Print version - run: dart --version - name: Install dependencies - run: dart pub get + run: dart --version && dart pub get - name: Analyze project source run: dart analyze + package_health: + name: Analyze package health + needs: [lints] + runs-on: ubuntu-slim + steps: + - uses: actions/checkout@v3 + - uses: dart-lang/setup-dart@v1 + - name: Install dependencies + run: dart --version && dart pub get && dart pub global activate pana + - name: Run package analyzer + run: dart pub global run pana --exit-code-threshold $MINIMUM_PANA_SCORE test: - needs: analyze + name: Run tests + needs: [lints] runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: os: [ubuntu-latest, windows-latest, macos-latest] + sdk: [stable, dev] steps: - uses: actions/checkout@v3 - uses: dart-lang/setup-dart@v1 + with: + sdk: ${{ matrix.sdk }} - uses: browser-actions/setup-chrome@v2 - - name: Print version - run: dart --version - name: Install dependencies - run: dart pub get + run: dart --version && dart pub get - name: Run tests (VM) run: dart test --platform vm - - name: Run tests (Chrome) - run: dart test --platform chrome \ No newline at end of file + - name: Run tests (Chrome, JS) + run: dart test --platform chrome --compiler dart2js + - name: Run tests (Chrome, WASM) + run: dart test --platform chrome --compiler dart2wasm \ No newline at end of file diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 0000000..a1f64ae --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,15 @@ +name: Publish to pub.dev + +on: + push: + tags: + - 'v[0-9]+.[0-9]+.[0-9]+' + +jobs: + publish: + runs-on: ubuntu-latest + permissions: + id-token: write + uses: dart-lang/setup-dart/.github/workflows/publish.yml@v1 + with: + environment: pub.dev \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index c7ce445..5d86095 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +# 2.3.1 +* Improves documentation. + # 2.3.0 * Makes BrowserHttpClient WASM compatible by making it use "dart:js_interop" rather than "dart:html". * Fixes various bugs. diff --git a/dart_test.yaml b/dart_test.yaml index 130cbfd..067f788 100644 --- a/dart_test.yaml +++ b/dart_test.yaml @@ -1,3 +1 @@ -platforms: [ chrome, vm, node ] -tags: - ipv6: +platforms: [ chrome, vm ] \ No newline at end of file diff --git a/lib/io.dart b/lib/io.dart index 16a2e8b..7f315dd 100644 --- a/lib/io.dart +++ b/lib/io.dart @@ -12,4 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. +/// @nodoc +library; + export 'universal_io.dart'; diff --git a/lib/src/_http_headers_impl.dart b/lib/src/_http_headers_impl.dart index ce17cd5..59c91a1 100644 --- a/lib/src/_http_headers_impl.dart +++ b/lib/src/_http_headers_impl.dart @@ -69,8 +69,8 @@ final class HttpHeadersImpl implements HttpHeaders { this.protocolVersion, { int defaultPortForScheme = HttpClient.defaultHttpPort, HttpHeadersImpl? initialHeaders, - }) : _headers = HashMap>(), - _defaultPortForScheme = defaultPortForScheme { + }) : _headers = HashMap>(), + _defaultPortForScheme = defaultPortForScheme { if (initialHeaders != null) { initialHeaders._headers.forEach((name, value) => _headers[name] = value); _contentLength = initialHeaders._contentLength; diff --git a/lib/src/_io_sink_base.dart b/lib/src/_io_sink_base.dart index e524be6..7b4a241 100644 --- a/lib/src/_io_sink_base.dart +++ b/lib/src/_io_sink_base.dart @@ -24,17 +24,15 @@ abstract mixin class IOSinkBase implements IOSink { @override Future addStream(Stream> stream) { - return stream - .listen( - (data) { - add(data); - }, - onError: (error, stackTrace) { - addError(error, stackTrace); - }, - cancelOnError: true, - ) - .asFuture(); + return stream.listen( + (data) { + add(data); + }, + onError: (error, stackTrace) { + addError(error, stackTrace); + }, + cancelOnError: true, + ).asFuture(); } @override diff --git a/lib/src/_xhr_http_client.dart b/lib/src/_xhr_http_client.dart index 7a3a42c..e88975f 100644 --- a/lib/src/_xhr_http_client.dart +++ b/lib/src/_xhr_http_client.dart @@ -39,11 +39,11 @@ final class XhrHttpClient extends BrowserHttpClient { @override Future Function(String host, int port, String scheme, String realm)? - authenticateProxy; + authenticateProxy; @override bool Function(X509Certificate cert, String host, int port)? - badCertificateCallback; + badCertificateCallback; @override String Function(Uri url)? findProxy; @@ -58,8 +58,7 @@ final class XhrHttpClient extends BrowserHttpClient { Uri url, String? proxyHost, int? proxyPort, - )? - f, + )? f, ) { // TODO: implement connectionFactory } diff --git a/lib/src/_xhr_http_client_request.dart b/lib/src/_xhr_http_client_request.dart index 84d591f..496e047 100644 --- a/lib/src/_xhr_http_client_request.dart +++ b/lib/src/_xhr_http_client_request.dart @@ -71,7 +71,7 @@ final class XhrHttpClientRequest extends BrowserHttpClientRequest @internal XhrHttpClientRequest(this.client, this.method, this.uri) - : _supportsBody = _httpMethodSupportsBody(method) { + : _supportsBody = _httpMethodSupportsBody(method) { // Add "User-Agent" header final userAgent = client.userAgent; if (userAgent != null) { @@ -133,17 +133,15 @@ final class XhrHttpClientRequest extends BrowserHttpClientRequest @override Future addStream(Stream> stream) async { _checkAddRequirements(); - final future = stream - .listen( - (item) { - _buffer.addAll(item); - }, - onError: (error) { - addError(error); - }, - cancelOnError: true, - ) - .asFuture(null); + final future = stream.listen( + (item) { + _buffer.addAll(item); + }, + onError: (error) { + addError(error); + }, + cancelOnError: true, + ).asFuture(null); _addStreamFuture = future; await future; _addStreamFuture = null; diff --git a/lib/src/browser_http_client.dart b/lib/src/browser_http_client.dart index 72d29c1..fde7234 100644 --- a/lib/src/browser_http_client.dart +++ b/lib/src/browser_http_client.dart @@ -30,7 +30,7 @@ abstract class BrowserHttpClient implements HttpClient { /// Enables you to set [BrowserHttpClientRequest.browserRequestType] before /// any _XHR_ request is sent to the server. FutureOr Function(BrowserHttpClientRequest request)? - onBrowserHttpClientRequestClose; + onBrowserHttpClientRequestClose; /// Enables [CORS "credentials mode"](https://developer.mozilla.org/en-US/docs/Web/API/Request/credentials) /// for all _XHR_ requests. Disabled by default. diff --git a/lib/src/internet_address.dart b/lib/src/internet_address.dart index 6a40604..6897713 100644 --- a/lib/src/internet_address.dart +++ b/lib/src/internet_address.dart @@ -328,7 +328,8 @@ class InternetAddress implements dart_io.InternetAddress { static Future> lookup( String host, { InternetAddressType type = InternetAddressType.any, - }) => throw UnimplementedError(); + }) => + throw UnimplementedError(); /// Attempts to parse [address] as a numeric address. /// diff --git a/pubspec.yaml b/pubspec.yaml index c6f3cd7..eee3312 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,5 +1,5 @@ name: universal_io -version: 2.3.0 +version: 2.3.1 description: Cross-platform 'dart:io' that adds browser support for HttpClient and some other "dart:io" APIs. homepage: https://github.com/dart-io-packages/universal_io diff --git a/test/http_client_test.dart b/test/http_client_test.dart index 0016d61..31321f8 100644 --- a/test/http_client_test.dart +++ b/test/http_client_test.dart @@ -419,7 +419,8 @@ void _testHttpClient({required bool isBrowser}) async { testOn: '!browser', ); - test('TLS connection to a self-signed server succeeds with' + test( + 'TLS connection to a self-signed server succeeds with' " the help of 'badCertificateCallback'", () async { final client = HttpClient(); client.badCertificateCallback = (certificate, host, port) { @@ -500,8 +501,8 @@ Future _testClient({ // Close HTTP request final response = await httpClientRequest.close().timeout( - const Duration(milliseconds: 500), - ); + const Duration(milliseconds: 500), + ); final actualResponseBody = await utf8 .decodeStream(response.cast>()) .timeout(const Duration(seconds: 5)); @@ -554,13 +555,12 @@ Future _testClientMethodWithoutUri({ expect(response.statusCode, 200); } -typedef OpenUrlFunction = - Future Function( - HttpClient client, - String host, - int port, - String path, - ); +typedef OpenUrlFunction = Future Function( + HttpClient client, + String host, + int port, + String path, +); class _ExpectedResponse { final int status; diff --git a/test/platform_test.dart b/test/platform_test.dart index 6a9f337..a387113 100644 --- a/test/platform_test.dart +++ b/test/platform_test.dart @@ -15,13 +15,15 @@ @TestOn('chrome') library; +import 'dart:js_interop'; + import 'package:test/test.dart'; import 'package:universal_io/io.dart'; import 'package:universal_io/src/js/_xhr.dart'; void main() { if (navigator.languages.length > 0) { - final locale = navigator.languages[0]; + final locale = navigator.languages[0].toDart; test("Platform.localeName == '$locale'", () { expect(Platform.localeName, locale); });