Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion example/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import 'package:ht/ht.dart';

Future<void> main() async {
final request = Request(
RequestInput.uri(Uri.parse('https://api.example.com/tasks')),
Uri.parse('https://api.example.com/tasks'),
RequestInit(
method: HttpMethod.post,
headers: Headers({'content-type': 'application/json; charset=utf-8'}),
Expand Down
4 changes: 0 additions & 4 deletions lib/src/fetch/request.dart
Original file line number Diff line number Diff line change
@@ -1,10 +1,6 @@
export 'request.native.dart'
show
RequestInit,
RequestInput,
RequestRequestInput,
StringRequestInput,
UriRequestInput,
RequestMode,
RequestCredentials,
RequestCache,
Expand Down
53 changes: 36 additions & 17 deletions lib/src/fetch/request.io.dart
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,14 @@ class Request implements native.Request {
Request._(this._host);

factory Request(Object? input, [native.RequestInit? init]) {
final host = switch ((input, init)) {
(final Request request, _) => request._host,
return Request._(switch ((input, init)) {
(final Request request, null) => request.clone()._host,
(final io.HttpRequest request, null) => HttpRequestHost(request),
(final native.Request request, _) => NativeRequestHost(request),
(final native.Request request, null) => NativeRequestHost(
request.clone(),
),
_ => NativeRequestHost(_toNativeRequest(input, init)),
};

return Request._(host);
});
}

final RequestHost _host;
Expand Down Expand Up @@ -231,7 +231,7 @@ class Request implements native.Request {
final body = this.body;
return Request(
native.Request(
native.RequestInput.string(url),
url,
native.RequestInit(
method: method,
headers: io_headers.Headers(headers),
Expand All @@ -255,21 +255,40 @@ class Request implements native.Request {
native.RequestInit? init,
) {
return switch (input) {
final native.Request request => request,
final native.RequestInput requestInput => native.Request(
requestInput,
init,
),
final String value => native.Request(
native.RequestInput.string(value),
init,
),
final Uri value => native.Request(native.RequestInput.uri(value), init),
final Request request => _nativeRequestFromWrappedRequest(request, init),
final native.Request request => native.Request(request, init),
final String value => native.Request(value, init),
final Uri value => native.Request(value, init),
_ => throw ArgumentError.value(
input,
'input',
'Unsupported request input: ${input.runtimeType}',
),
};
}

static native.Request _nativeRequestFromWrappedRequest(
Request request,
native.RequestInit? init,
) {
final body = init?.body == null ? request.body : null;

return native.Request(
request.url,
native.RequestInit(
method: init?.method ?? request.method,
headers: init?.headers ?? io_headers.Headers(request.headers),
body: init?.body ?? body?.clone(),
referrer: init?.referrer ?? request.referrer,
referrerPolicy: init?.referrerPolicy ?? request.referrerPolicy,
mode: init?.mode ?? request.mode,
credentials: init?.credentials ?? request.credentials,
cache: init?.cache ?? request.cache,
redirect: init?.redirect ?? request.redirect,
integrity: init?.integrity ?? request.integrity,
keepalive: init?.keepalive ?? request.keepalive,
duplex: init?.duplex ?? request.duplex,
),
);
}
}
50 changes: 36 additions & 14 deletions lib/src/fetch/request.js.dart
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,14 @@ class Request implements native.Request {
Request._(this._host);

factory Request(Object? input, [native.RequestInit? init]) {
final host = switch ((input, init)) {
(final Request request, _) => request._host,
return Request._(switch ((input, init)) {
(final Request request, null) => request.clone()._host,
(final web.Request request, null) => WebRequestHost(request),
(final native.Request request, _) => NativeRequestHost(request),
(final native.Request request, null) => NativeRequestHost(
request.clone(),
),
_ => NativeRequestHost(_toNativeRequest(input, init)),
};

return Request._(host);
});
}

final RequestHost _host;
Expand Down Expand Up @@ -283,18 +283,40 @@ class Request implements native.Request {
native.RequestInit? init,
) {
return switch (input) {
final native.Request request => request,
final native.RequestInput requestInput => native.Request(
requestInput,
init,
),
final String url => native.Request(native.RequestInput.string(url), init),
final Uri url => native.Request(native.RequestInput.uri(url), init),
final Request request => _nativeRequestFromWrappedRequest(request, init),
final native.Request request => native.Request(request, init),
final String _ => native.Request(input, init),
final Uri _ => native.Request(input, init),
final web.Request request => _nativeRequestFromWebRequest(request, init),
_ => throw ArgumentError.value(input, 'input'),
};
}

static native.Request _nativeRequestFromWrappedRequest(
Request request,
native.RequestInit? init,
) {
final body = init?.body == null ? request.body : null;

return native.Request(
request.url,
native.RequestInit(
method: init?.method ?? request.method,
headers: init?.headers ?? js_headers.Headers(request.headers),
body: init?.body ?? body?.clone(),
referrer: init?.referrer ?? request.referrer,
referrerPolicy: init?.referrerPolicy ?? request.referrerPolicy,
mode: init?.mode ?? request.mode,
credentials: init?.credentials ?? request.credentials,
cache: init?.cache ?? request.cache,
redirect: init?.redirect ?? request.redirect,
integrity: init?.integrity ?? request.integrity,
keepalive: init?.keepalive ?? request.keepalive,
duplex: init?.duplex ?? request.duplex,
),
);
}

static native.Request _nativeRequestFromWebRequest(
web.Request request,
native.RequestInit? init,
Expand All @@ -303,7 +325,7 @@ class Request implements native.Request {
final body = wrapped.body;

return native.Request(
native.RequestInput.string(wrapped.url),
wrapped.url,
native.RequestInit(
method: init?.method ?? wrapped.method,
headers: init?.headers ?? js_headers.Headers(wrapped.headers),
Expand Down
Loading
Loading