diff --git a/packages/cloudflare_workers/lib/interop/cache_interop.dart b/packages/cloudflare_workers/lib/interop/cache_interop.dart index 621b207..551ae96 100644 --- a/packages/cloudflare_workers/lib/interop/cache_interop.dart +++ b/packages/cloudflare_workers/lib/interop/cache_interop.dart @@ -2,7 +2,7 @@ library cache; import 'package:js/js.dart' as js; -import 'package:js_bindings/js_bindings.dart' as interop; +import 'package:typings/core.dart' as interop; @js.JS('default') external interop.Cache get defaultCache; diff --git a/packages/cloudflare_workers/lib/interop/durable_object_interop.dart b/packages/cloudflare_workers/lib/interop/durable_object_interop.dart index 88e5fb6..fa40adb 100644 --- a/packages/cloudflare_workers/lib/interop/durable_object_interop.dart +++ b/packages/cloudflare_workers/lib/interop/durable_object_interop.dart @@ -1,7 +1,7 @@ import 'dart:js_util' as js_util; import 'package:js/js.dart'; import 'package:js/js_util.dart'; -import 'package:js_bindings/js_bindings.dart' as interop; +import 'package:typings/core.dart' as interop; import 'package:edge_runtime/src/interop/promise_interop.dart'; import 'package:edge_runtime/src/interop/utils_interop.dart'; @@ -30,8 +30,7 @@ extension PropsDurableObject on DurableObject { js_util.setProperty(this, 'env', env); } - set fetch( - Promise Function(interop.Request request) function) { + set fetch(Promise Function(interop.Request request) function) { js_util.setProperty(this, 'fetch', function); } @@ -52,38 +51,32 @@ class DurableObjectStorage { } extension PropsDurableObjectStorage on DurableObjectStorage { - Future get(/* String | List */ dynamic keys, - DurableObjectGetOptions options) async { + Future get( + /* String | List */ dynamic keys, DurableObjectGetOptions options) async { return js_util.promiseToFuture( js_util.callMethod(this, 'get', [keys, options]), ); } - Future put( - String key, dynamic value, DurableObjectPutOptions options) { + Future put(String key, dynamic value, DurableObjectPutOptions options) { var newValue = value; if (value is Map || value is Iterable) { newValue = jsify(value); } - return js_util.promiseToFuture( - js_util.callMethod(this, 'put', [key, newValue, options])); + return js_util.promiseToFuture(js_util.callMethod(this, 'put', [key, newValue, options])); } - Future putEntries( - Map entries, DurableObjectPutOptions options) => - js_util.promiseToFuture( - js_util.callMethod(this, 'put', [jsify(entries), options])); + Future putEntries(Map entries, DurableObjectPutOptions options) => + js_util.promiseToFuture(js_util.callMethod(this, 'put', [jsify(entries), options])); - Future delete(String key, DurableObjectPutOptions options) => js_util - .promiseToFuture(js_util.callMethod(this, 'delete', [key, options])); + Future delete(String key, DurableObjectPutOptions options) => + js_util.promiseToFuture(js_util.callMethod(this, 'delete', [key, options])); Future deleteAll(DurableObjectPutOptions options) => js_util.promiseToFuture(js_util.callMethod(this, 'deleteAll', [options])); - Future deleteEntries(Iterable keys, - [DurableObjectPutOptions? options]) => - js_util - .promiseToFuture(js_util.callMethod(this, 'delete', [keys, options])); + Future deleteEntries(Iterable keys, [DurableObjectPutOptions? options]) => + js_util.promiseToFuture(js_util.callMethod(this, 'delete', [keys, options])); Future> list([DurableObjectListOptions? options]) => js_util.promiseToFuture(js_util.callMethod(this, 'list', [options])); @@ -91,8 +84,7 @@ extension PropsDurableObjectStorage on DurableObjectStorage { Future getAlarm([DurableObjectGetAlarmOptions? options]) => js_util.promiseToFuture(js_util.callMethod(this, 'getAlarm', [options])); - Future setAlarm(DateTime scheduled, - [DurableObjectSetAlarmOptions? options]) => + Future setAlarm(DateTime scheduled, [DurableObjectSetAlarmOptions? options]) => js_util.promiseToFuture(js_util.callMethod(this, 'setAlarm', [ scheduled.millisecondsSinceEpoch, options, @@ -103,11 +95,9 @@ extension PropsDurableObjectStorage on DurableObjectStorage { options, ])); - Future sync() => - js_util.promiseToFuture(js_util.callMethod(this, 'sync', [])); + Future sync() => js_util.promiseToFuture(js_util.callMethod(this, 'sync', [])); - Future transaction( - Future Function(DurableObjectTransaction tsx) callback) { + Future transaction(Future Function(DurableObjectTransaction tsx) callback) { return js_util.promiseToFuture( js_util.callMethod(this, 'transaction', [ allowInterop((tsx) async { @@ -127,8 +117,7 @@ class DurableObjectGetOptions { extension PropsDurableObjectGetOptions on DurableObjectGetOptions { set allowConcurrency(bool? allowConcurrency) { - js_util.setProperty( - this, 'allowConcurrency', allowConcurrency ?? jsUndefined); + js_util.setProperty(this, 'allowConcurrency', allowConcurrency ?? jsUndefined); } set noCache(bool? noCache) { @@ -145,8 +134,7 @@ class DurableObjectGetAlarmOptions { extension PropsDurableObjectGetAlarmOptions on DurableObjectGetAlarmOptions { set allowConcurrency(bool? allowConcurrency) { - js_util.setProperty( - this, 'allowConcurrency', allowConcurrency ?? jsUndefined); + js_util.setProperty(this, 'allowConcurrency', allowConcurrency ?? jsUndefined); } } @@ -159,13 +147,11 @@ class DurableObjectSetAlarmOptions { extension PropsDurableObjectSetAlarmOptions on DurableObjectSetAlarmOptions { set allowConcurrency(bool? allowConcurrency) { - js_util.setProperty( - this, 'allowConcurrency', allowConcurrency ?? jsUndefined); + js_util.setProperty(this, 'allowConcurrency', allowConcurrency ?? jsUndefined); } set allowUnconfirmed(bool? allowUnconfirmed) { - js_util.setProperty( - this, 'allowUnconfirmed', allowUnconfirmed ?? jsUndefined); + js_util.setProperty(this, 'allowUnconfirmed', allowUnconfirmed ?? jsUndefined); } } @@ -178,13 +164,11 @@ class DurableObjectPutOptions { extension PropsDurableObjectPutOptions on DurableObjectPutOptions { set allowConcurrency(bool? allowConcurrency) { - js_util.setProperty( - this, 'allowConcurrency', allowConcurrency ?? jsUndefined); + js_util.setProperty(this, 'allowConcurrency', allowConcurrency ?? jsUndefined); } set allowUnconfirmed(bool? allowUnconfirmed) { - js_util.setProperty( - this, 'allowUnconfirmed', allowUnconfirmed ?? jsUndefined); + js_util.setProperty(this, 'allowUnconfirmed', allowUnconfirmed ?? jsUndefined); } set noCache(bool? noCache) { @@ -225,8 +209,7 @@ extension PropsDurableObjectListOptions on DurableObjectListOptions { } set allowConcurrency(bool? allowConcurrency) { - js_util.setProperty( - this, 'allowConcurrency', allowConcurrency ?? jsUndefined); + js_util.setProperty(this, 'allowConcurrency', allowConcurrency ?? jsUndefined); } set noCache(bool? noCache) { @@ -262,8 +245,7 @@ extension PropsDurableObjectState on DurableObjectState { DurableObjectStorage get storage => js_util.getProperty(this, 'storage'); - void waitUntil(Future f) => - js_util.callMethod(this, 'waitUntil', [futureToPromise(f)]); + void waitUntil(Future f) => js_util.callMethod(this, 'waitUntil', [futureToPromise(f)]); Future blockConcurrencyWhile(Future Function() callback) { return js_util.promiseToFuture( @@ -284,15 +266,11 @@ class DurableObjectNamespace { } extension PropsDurableObjectNamespace on DurableObjectNamespace { - DurableObjectId newUniqueId( - [DurableObjectNamespaceNewUniqueIdOptions? options]) => + DurableObjectId newUniqueId([DurableObjectNamespaceNewUniqueIdOptions? options]) => js_util.callMethod(this, 'newUniqueId', [options]); - DurableObjectId idFromName(String name) => - js_util.callMethod(this, 'idFromName', [name]); - DurableObjectId idFromString(String id) => - js_util.callMethod(this, 'idFromString', [id]); - DurableObjectStub get(DurableObjectId id) => - js_util.callMethod(this, 'get', [id]); + DurableObjectId idFromName(String name) => js_util.callMethod(this, 'idFromName', [name]); + DurableObjectId idFromString(String id) => js_util.callMethod(this, 'idFromString', [id]); + DurableObjectStub get(DurableObjectId id) => js_util.callMethod(this, 'get', [id]); } @anonymous @@ -304,8 +282,7 @@ class DurableObjectId { extension PropsDurableObjectId on DurableObjectId { String get name => js_util.getProperty(this, 'name'); - bool equals(DurableObjectId other) => - js_util.callMethod(this, 'equals', [other]); + bool equals(DurableObjectId other) => js_util.callMethod(this, 'equals', [other]); String mToString() => js_util.callMethod(this, 'toString', []); } @@ -318,10 +295,8 @@ class Fetcher { extension PropsFetcher on Fetcher { // TODO RequestInit - Future fetch(interop.Request resource, - [interop.RequestInit? init]) => - js_util - .promiseToFuture(js_util.callMethod(this, 'fetch', [resource, init])); + Future fetch(interop.Request resource, [interop.RequestInit? init]) => + js_util.promiseToFuture(js_util.callMethod(this, 'fetch', [resource, init])); Socket connect(String address, [SocketOptions? options]) => js_util.callMethod(this, 'connect', [address, options]); @@ -335,10 +310,8 @@ class Socket { } extension PropsSocket on Socket { - Future get readable => - js_util.getProperty(this, 'readable'); - Future get writable => - js_util.getProperty(this, 'writable'); + Future get readable => js_util.getProperty(this, 'readable'); + Future get writable => js_util.getProperty(this, 'writable'); Future get closed => js_util.getProperty(this, 'closed'); Future close() => js_util.callMethod(this, 'close', []); } diff --git a/packages/cloudflare_workers/lib/interop/email_message_interop.dart b/packages/cloudflare_workers/lib/interop/email_message_interop.dart index fbd5d5e..6719242 100644 --- a/packages/cloudflare_workers/lib/interop/email_message_interop.dart +++ b/packages/cloudflare_workers/lib/interop/email_message_interop.dart @@ -1,7 +1,7 @@ import 'dart:js_util' as js_util; import 'package:js/js.dart'; -import 'package:js_bindings/js_bindings.dart' as interop; +import 'package:typings/core.dart' as interop; @anonymous @JS() @@ -17,8 +17,7 @@ extension PropsEmailMessage on EmailMessage { interop.ReadableStream get raw => js_util.getProperty(this, 'raw'); int get rawSize => js_util.getProperty(this, 'rawSize'); - void setReject(String reason) => - js_util.callMethod(this, 'setReject', [reason]); - Future forward(String to, [interop.Headers? headers]) => js_util - .promiseToFuture(js_util.callMethod(this, 'forward', [to, headers])); + void setReject(String reason) => js_util.callMethod(this, 'setReject', [reason]); + Future forward(String to, [interop.Headers? headers]) => + js_util.promiseToFuture(js_util.callMethod(this, 'forward', [to, headers])); } diff --git a/packages/cloudflare_workers/lib/interop/html_rewriter_interop.dart b/packages/cloudflare_workers/lib/interop/html_rewriter_interop.dart index 7d937d6..cdd793f 100644 --- a/packages/cloudflare_workers/lib/interop/html_rewriter_interop.dart +++ b/packages/cloudflare_workers/lib/interop/html_rewriter_interop.dart @@ -1,6 +1,6 @@ import 'dart:js_util' as js_util; import 'package:js/js.dart'; -import 'package:js_bindings/js_bindings.dart' as interop; +import 'package:typings/core.dart' as interop; import 'package:edge_runtime/src/interop/promise_interop.dart'; typedef HandlerMethod = Promise Function(T type); @@ -152,17 +152,14 @@ extension PropsElement on Element { bool get removed => js_util.getProperty(this, 'removed'); String get namespaceURI => js_util.getProperty(this, 'namespaceURI'); - String? getAttribute(String name) => - js_util.callMethod(this, 'getAttribute', [name]); + String? getAttribute(String name) => js_util.callMethod(this, 'getAttribute', [name]); - bool hasAttribute(String name) => - js_util.callMethod(this, 'hasAttribute', [name]); + bool hasAttribute(String name) => js_util.callMethod(this, 'hasAttribute', [name]); Element setAttribute(String name, String value) => js_util.callMethod(this, 'setAttribute', [name, value]); - Element removeAttribute(String name) => - js_util.callMethod(this, 'removeAttribute', [name]); + Element removeAttribute(String name) => js_util.callMethod(this, 'removeAttribute', [name]); Element before(String text, [ContentOptions? options]) => js_util.callMethod(this, 'before', [text, options]); @@ -181,14 +178,12 @@ extension PropsElement on Element { Element remove() => js_util.callMethod(this, 'remove', []); - Element removeAndKeepContent() => - js_util.callMethod(this, 'removeAndKeepContent', []); + Element removeAndKeepContent() => js_util.callMethod(this, 'removeAndKeepContent', []); Element setInnerContent(String text, [ContentOptions? options]) => js_util.callMethod(this, 'setInnerContent', [text, options]); - void onEndTag(dynamic handler) => - js_util.callMethod(this, 'onEndTag', [handler]); + void onEndTag(dynamic handler) => js_util.callMethod(this, 'onEndTag', [handler]); } @anonymous diff --git a/packages/cloudflare_workers/lib/interop/request_init_interop.dart b/packages/cloudflare_workers/lib/interop/request_init_interop.dart index 844967d..280fbec 100644 --- a/packages/cloudflare_workers/lib/interop/request_init_interop.dart +++ b/packages/cloudflare_workers/lib/interop/request_init_interop.dart @@ -1,6 +1,6 @@ import 'dart:js_util' as js_util; import 'package:js/js.dart'; -import 'package:js_bindings/js_bindings.dart' as interop; +import 'package:typings/core.dart' as interop; import 'package:edge_runtime/src/interop/utils_interop.dart'; extension CloudflareWorkersRequestInteropExtension on interop.RequestInit { @@ -45,11 +45,11 @@ extension PropsCloudflareRequestInit on CloudflareRequestInit { js_util.setProperty(this, 'apps', value ?? jsUndefined); } - set image(dynamic? value) { + set image(dynamic value) { js_util.setProperty(this, 'image', value ?? jsUndefined); } - set minify(dynamic? value) { + set minify(dynamic value) { js_util.setProperty(this, 'minify', value ?? jsUndefined); } @@ -73,8 +73,7 @@ class RequestInitCfPropertiesImageMinify { external factory RequestInitCfPropertiesImageMinify(); } -extension PropsRequestInitCfPropertiesImageMinify - on RequestInitCfPropertiesImageMinify { +extension PropsRequestInitCfPropertiesImageMinify on RequestInitCfPropertiesImageMinify { set javascript(bool? value) { js_util.setProperty(this, 'javascript', value ?? jsUndefined); } @@ -130,8 +129,7 @@ class RequestInitCfPropertiesImageDraw extends BasicImageTransformations { }); } -extension PropsRequestInitCfPropertiesImageDraw - on RequestInitCfPropertiesImageDraw { +extension PropsRequestInitCfPropertiesImageDraw on RequestInitCfPropertiesImageDraw { set opacity(num? value) { js_util.setProperty(this, 'opacity', value ?? jsUndefined); } diff --git a/packages/cloudflare_workers/lib/interop/request_interop.dart b/packages/cloudflare_workers/lib/interop/request_interop.dart index 9770609..ac63eda 100644 --- a/packages/cloudflare_workers/lib/interop/request_interop.dart +++ b/packages/cloudflare_workers/lib/interop/request_interop.dart @@ -1,6 +1,6 @@ import 'dart:js_util' as js_util; import 'package:js/js.dart'; -import 'package:js_bindings/js_bindings.dart' as interop; +import 'package:typings/core.dart' as interop; extension CloudflareWorkersRequestInteropExtension on interop.Request { IncomingRequestCfProperties get cf => js_util.getProperty(this, 'cf'); diff --git a/packages/cloudflare_workers/lib/public/cloudflare_workers.dart b/packages/cloudflare_workers/lib/public/cloudflare_workers.dart index 4eb80d3..d4e2b17 100644 --- a/packages/cloudflare_workers/lib/public/cloudflare_workers.dart +++ b/packages/cloudflare_workers/lib/public/cloudflare_workers.dart @@ -3,10 +3,10 @@ import 'dart:js_util' as js_util; import 'package:edge_runtime/edge_runtime.dart'; import 'package:js/js.dart'; import 'package:edge_runtime/src/interop/promise_interop.dart'; -import 'package:edge_runtime/src/request.dart'; import 'package:edge_runtime/src/response.dart'; +import 'package:edge_runtime/src/request.dart'; -import 'package:js_bindings/js_bindings.dart' as interop; +import 'package:typings/core.dart' as interop; import '../interop/environment_interop.dart' as interop; import '../interop/scheduled_event_interop.dart' as interop; import '../interop/email_message_interop.dart' as interop; diff --git a/packages/cloudflare_workers/lib/public/do/durable_object.dart b/packages/cloudflare_workers/lib/public/do/durable_object.dart index d841a07..43a02af 100644 --- a/packages/cloudflare_workers/lib/public/do/durable_object.dart +++ b/packages/cloudflare_workers/lib/public/do/durable_object.dart @@ -10,8 +10,7 @@ import 'durable_object_state.dart'; abstract class DurableObject { final interop.DurableObject _delegate; - DurableObjectState get state => - durableObjectStateFromJsObject(_delegate.state); + DurableObjectState get state => durableObjectStateFromJsObject(_delegate.state); Environment get env => environmentFromJsObject(_delegate.env); diff --git a/packages/cloudflare_workers/lib/public/fetcher.dart b/packages/cloudflare_workers/lib/public/fetcher.dart index bbf5a8b..5e8241f 100644 --- a/packages/cloudflare_workers/lib/public/fetcher.dart +++ b/packages/cloudflare_workers/lib/public/fetcher.dart @@ -2,7 +2,7 @@ import 'dart:async'; import 'package:edge_runtime/src/abort.dart'; import 'package:edge_runtime/src/headers.dart'; -import 'package:js_bindings/js_bindings.dart' as interop; +import 'package:typings/core.dart' as interop; import 'package:edge_runtime/src/request.dart'; import 'package:edge_runtime/src/response.dart'; @@ -15,39 +15,34 @@ abstract class Fetcher { Fetcher(this._delegate); - Future fetch( - Request request, { - String? method, - Headers? headers, - Object? body, - String? referrer, - interop.ReferrerPolicy? referrerPolicy, - interop.RequestMode? mode, - interop.RequestCredentials? credentials, - interop.RequestCache? cache, - interop.RequestRedirect? redirect, - String? integrity, - bool? keepalive, - AbortSignal? signal, - interop.RequestDuplex? duplex, - }) async { + Future fetch(Request request, + {String? method, + Headers? headers, + Object? body, + String? referrer, + interop.ReferrerPolicy? referrerPolicy, + interop.RequestMode? mode, + interop.RequestCredentials? credentials, + interop.RequestCache? cache, + interop.RequestRedirect? redirect, + String? integrity, + bool? keepalive, + AbortSignal? signal}) async { final response = await _delegate.fetch( request.delegate, interop.RequestInit( - method: method, - headers: headers?.delegate, - body: body, - referrer: referrer, - referrerPolicy: referrerPolicy, - mode: mode, - credentials: credentials, - cache: cache, - redirect: redirect, - integrity: integrity, - keepalive: keepalive, - signal: signal?.delegate, - duplex: duplex, - ), + method: method, + headers: headers?.delegate, + body: body, + referrer: referrer, + referrerPolicy: referrerPolicy, + mode: mode, + credentials: credentials, + cache: cache, + redirect: redirect, + integrity: integrity, + keepalive: keepalive, + signal: signal?.delegate), ); return responseFromJsObject(response); } diff --git a/packages/cloudflare_workers/lib/public/kv_namespace.dart b/packages/cloudflare_workers/lib/public/kv_namespace.dart index e9afca3..40ee969 100644 --- a/packages/cloudflare_workers/lib/public/kv_namespace.dart +++ b/packages/cloudflare_workers/lib/public/kv_namespace.dart @@ -50,8 +50,7 @@ class KVNamespace { return dartify(json) as Map; } - Future?>> - getJsonWithMetadata( + Future?>> getJsonWithMetadata( String name, { int? cacheTtl, }) async { @@ -114,8 +113,7 @@ class KVNamespace { return streamFromJSReader(reader); } - Future> - getStreamWithMetadata( + Future> getStreamWithMetadata( String name, { int? cacheTtl, }) async { @@ -162,8 +160,7 @@ class KVNamespace { ); } -KVNamespace kvNamespaceFromJsObject(interop.KVNamespace obj) => - KVNamespace._(obj); +KVNamespace kvNamespaceFromJsObject(interop.KVNamespace obj) => KVNamespace._(obj); class KVNamespaceGetWithMetadataResult { final interop.KVNamespaceGetWithMetadataResult _delegate; @@ -175,12 +172,10 @@ class KVNamespaceGetWithMetadataResult { class KVNamespaceListResult { final interop.KVNamespaceListResult _delegate; KVNamespaceListResult._(this._delegate); - Iterable get keys sync* { - // TODO fix me. - throw UnimplementedError('Returns a JsArray/List, but its not iterable?'); - for (var i = 0; i < _delegate.keys.length; i++) { - yield KVNamespaceListKey._(_delegate.keys[i]); - } + Iterable get keys { + return [ + for (int i = 0; i < _delegate.keys.length; i++) KVNamespaceListKey._(_delegate.keys[i]) + ]; } bool get listComplete => _delegate.listComplete; diff --git a/packages/cloudflare_workers/lib/public/socket.dart b/packages/cloudflare_workers/lib/public/socket.dart index 261a145..f6a8ef6 100644 --- a/packages/cloudflare_workers/lib/public/socket.dart +++ b/packages/cloudflare_workers/lib/public/socket.dart @@ -1,6 +1,6 @@ import 'dart:async'; -import 'package:js_bindings/js_bindings.dart' as interop; +import 'package:typings/core.dart' as interop; import '../interop/durable_object_interop.dart' as interop; class Socket { diff --git a/packages/cloudflare_workers/lib/public/top.dart b/packages/cloudflare_workers/lib/public/top.dart index dd9c6bf..116ee87 100644 --- a/packages/cloudflare_workers/lib/public/top.dart +++ b/packages/cloudflare_workers/lib/public/top.dart @@ -5,9 +5,8 @@ import 'package:edge_runtime/src/headers.dart'; import 'package:edge_runtime/src/response.dart'; import 'package:edge_runtime/src/abort.dart'; -import 'package:js_bindings/js_bindings.dart' as interop; +import 'package:typings/core.dart' as interop; import 'package:edge_runtime/src/interop/utils_interop.dart' as interop; -import 'package:edge_runtime/src/interop/scope_interop.dart' as interop; import '../interop/request_init_interop.dart' as interop; import 'request_init.dart'; @@ -27,7 +26,6 @@ Future fetch( String? integrity, bool? keepalive, AbortSignal? signal, - interop.RequestDuplex? duplex, }) async { final init = interop.RequestInit( method: method, @@ -42,7 +40,6 @@ Future fetch( integrity: integrity, keepalive: keepalive, signal: signal?.delegate, - duplex: duplex, ); // Attach the non-standard Cloudflare properties to the Request Init object. diff --git a/packages/cloudflare_workers/pubspec.yaml b/packages/cloudflare_workers/pubspec.yaml index a62aa14..d806886 100644 --- a/packages/cloudflare_workers/pubspec.yaml +++ b/packages/cloudflare_workers/pubspec.yaml @@ -10,8 +10,8 @@ environment: dependencies: edge: ^0.0.7 edge_runtime: ^0.0.4+2 - js_bindings: ^0.1.0 js: ^0.6.5 + typings: ^0.0.3 dev_dependencies: lints: ^2.0.0 diff --git a/packages/cloudflare_workers/test/_playground.dart b/packages/cloudflare_workers/test/_playground.dart index 3c24b4e..2543a42 100644 --- a/packages/cloudflare_workers/test/_playground.dart +++ b/packages/cloudflare_workers/test/_playground.dart @@ -1,17 +1,15 @@ -import 'dart:async'; - import 'package:cloudflare_workers/cloudflare_workers.dart'; void main() { -CloudflareWorkers( - fetch: (request, env, ctx) async { - try { - final KV = env.getKVNamespace('TEST_KV'); - final res = await KV.getWithMetadata('foo'); - return Response(res.metadata, status: 200); - } catch (e) { - return Response(e.toString(), status: 500); - } - }, -); + CloudflareWorkers( + fetch: (request, env, ctx) async { + try { + final kv = env.getKVNamespace('TEST_KV'); + final res = await kv.getWithMetadata('foo'); + return Response(res.metadata, status: 200); + } catch (e) { + return Response(e.toString(), status: 500); + } + }, + ); } diff --git a/packages/deno_deploy/lib/src/interop/deno_interop.dart b/packages/deno_deploy/lib/src/interop/deno_interop.dart index 6c838b5..4db318e 100644 --- a/packages/deno_deploy/lib/src/interop/deno_interop.dart +++ b/packages/deno_deploy/lib/src/interop/deno_interop.dart @@ -3,7 +3,7 @@ import 'dart:typed_data'; import 'package:js/js.dart'; import 'dart:js_util' as js_util; -import 'package:js_bindings/js_bindings.dart' as interop; +import 'package:typings/core.dart' as interop; import 'package:edge_runtime/src/interop/utils_interop.dart'; import 'package:edge_runtime/src/interop/promise_interop.dart'; import 'package:edge_runtime/src/interop/iterator_interop.dart'; @@ -18,12 +18,11 @@ class Env { extension PropsEnv on Env { String? get(String key) => js_util.callMethod(this, 'get', [key]); - void set(String key, String value) => - js_util.callMethod(this, 'set', [key, value]); + void set(String key, String value) => js_util.callMethod(this, 'set', [key, value]); void delete(String key) => js_util.callMethod(this, 'delete', [key]); bool has(String key) => js_util.callMethod(this, 'has', [key]); - Map toObject() => Map.from( - dartify(js_util.callMethod(this, 'toObject', []))); + Map toObject() => + Map.from(dartify(js_util.callMethod(this, 'toObject', []))); } @JS() diff --git a/packages/deno_deploy/pubspec.yaml b/packages/deno_deploy/pubspec.yaml index 7ac9185..b3b8b85 100644 --- a/packages/deno_deploy/pubspec.yaml +++ b/packages/deno_deploy/pubspec.yaml @@ -9,5 +9,5 @@ environment: dependencies: js: ^0.6.5 - js_bindings: ^0.1.0 - edge_runtime: ^0.0.4+2 \ No newline at end of file + edge_runtime: ^0.0.4+2 + typings: ^0.0.3 diff --git a/packages/edge_http_client/test/http_client_test.dart b/packages/edge_http_client/test/http_client_test.dart index 3de1a2d..01b2bf6 100644 --- a/packages/edge_http_client/test/http_client_test.dart +++ b/packages/edge_http_client/test/http_client_test.dart @@ -12,7 +12,7 @@ Future Function() run(Future Function() fn) { void main() { group('package:http Client', () { - group('perfroms GET request', () { + group('performs GET request', () { test('without body', run(() async { final Uri uri = Uri.parse('http://localhost:3001/200'); final res = await http.get(uri); diff --git a/packages/edge_runtime/lib/edge_runtime.dart b/packages/edge_runtime/lib/edge_runtime.dart index 5138f2e..dd57356 100644 --- a/packages/edge_runtime/lib/edge_runtime.dart +++ b/packages/edge_runtime/lib/edge_runtime.dart @@ -2,37 +2,33 @@ import 'dart:js'; export 'dart:async' show FutureOr; -export 'src/top.dart'; +export 'package:typings/core.dart' + show + ReferrerPolicy, + ResponseType, + RequestCache, + RequestCredentials, + RequestDestination, + RequestMode, + RequestRedirect, + atob, + btoa; export 'src/abort.dart' show AbortController, AbortSignal; export 'src/blob.dart' show Blob, BlobPropertyBag; -export 'src/cache/cache_query_options.dart' - show CacheQueryOptions, MultiCacheQueryOptions; -export 'src/cache/cache_storage.dart' show CacheStorage, caches; export 'src/cache/cache.dart' show Cache; -export 'src/fetch_event.dart' show FetchEvent; +export 'src/cache/cache_query_options.dart' show CacheQueryOptions, MultiCacheQueryOptions; +export 'src/cache/cache_storage.dart' show CacheStorage, caches; export 'src/file.dart' show File; export 'src/form_data.dart' show FormData, FormDataEntryValue; export 'src/headers.dart' show Headers; +export 'src/io_http_client.dart'; export 'src/request.dart' show Request; export 'src/resource.dart' show Resource; export 'src/response.dart' show Response; -export 'src/text_decoder.dart' - show TextDecoder, TextDecodeOptions, TextDecoderOptions; +export 'src/text_decoder.dart' show TextDecoder, TextDecodeOptions, TextDecoderOptions; export 'src/text_encoder.dart' show TextEncoder, TextEncoderEncodeIntoResult; - -export 'src/io_http_client.dart'; - -export 'package:js_bindings/bindings/referrer_policy.dart' show ReferrerPolicy; -export 'package:js_bindings/bindings/fetch.dart' - show - ResponseType, - RequestDuplex, - RequestCache, - RequestCredentials, - RequestDestination, - RequestMode, - RequestRedirect; +export 'src/top.dart'; /// This should be called before any other platform code is run. void setupRuntime() { diff --git a/packages/edge_runtime/lib/src/abort.dart b/packages/edge_runtime/lib/src/abort.dart index 910acb0..1b11ebc 100644 --- a/packages/edge_runtime/lib/src/abort.dart +++ b/packages/edge_runtime/lib/src/abort.dart @@ -1,6 +1,6 @@ import 'dart:js_util' show jsify; -import 'package:js_bindings/js_bindings.dart' as interop; +import 'package:typings/core.dart' as interop; import './interop/utils_interop.dart'; class AbortController { @@ -8,8 +8,7 @@ class AbortController { AbortController() : _delegate = interop.AbortController(); AbortSignal get signal => AbortSignal._(_delegate.signal); - void abort([Object? reason]) => - _delegate.abort(reason != null ? jsify(reason) : jsUndefined); + void abort([Object? reason]) => _delegate.abort(reason != null ? jsify(reason) : jsUndefined); } class AbortSignal { diff --git a/packages/edge_runtime/lib/src/blob.dart b/packages/edge_runtime/lib/src/blob.dart index 0664652..daa96ee 100644 --- a/packages/edge_runtime/lib/src/blob.dart +++ b/packages/edge_runtime/lib/src/blob.dart @@ -2,9 +2,7 @@ import 'dart:js_util'; import 'dart:typed_data'; import 'package:edge_runtime/src/interop/readable_stream.dart'; -import 'package:js_bindings/js_bindings.dart' as interop; - -export 'package:js_bindings/js_bindings.dart' show EndingType; +import 'package:typings/core.dart' as interop; class Blob { final interop.Blob _delegate; @@ -13,11 +11,11 @@ class Blob { Blob([Iterable? blobParts, BlobPropertyBag? options]) : _delegate = interop.Blob( - blobParts, + blobParts?.toList() as List?, options?.delegate ?? interop.BlobPropertyBag(), ); - int get size => _delegate.size; + int get size => _delegate.size.toInt(); String get type => _delegate.type; Blob slice([int? start, int? end, String? contentType]) { diff --git a/packages/edge_runtime/lib/src/cache/cache.dart b/packages/edge_runtime/lib/src/cache/cache.dart index fe762df..47ea21d 100644 --- a/packages/edge_runtime/lib/src/cache/cache.dart +++ b/packages/edge_runtime/lib/src/cache/cache.dart @@ -1,6 +1,6 @@ import 'dart:js_util'; -import 'package:js_bindings/js_bindings.dart' as interop; +import 'package:typings/core.dart' as interop; import '../interop/utils_interop.dart' as interop; import '../request.dart'; @@ -20,24 +20,21 @@ class Cache { await _delegate.addAll(requests.map((r) => r.delegate).toList()); } - Future delete(Request request, - [MultiCacheQueryOptions? options]) async { + Future delete(Request request, [MultiCacheQueryOptions? options]) async { await _delegate.delete(request.delegate, options?.delegate); } Future match(Request request, [CacheQueryOptions? options]) async { - final obj = await promiseToFuture( - _delegate.match(request.delegate, options?.delegate)); + final obj = await promiseToFuture(_delegate.match(request.delegate, options?.delegate)); return obj == null ? null : responseFromJsObject(obj); } - Future> matchAll( - [Request? request, CacheQueryOptions? options]) async { + Future> matchAll([Request? request, CacheQueryOptions? options]) async { final matches = await _delegate.matchAll( - request?.delegate ?? interop.jsUndefined, + request ?? interop.jsUndefined, options?.delegate, ); - return matches.map((obj) => responseFromJsObject(obj)); + return matches.map((obj, _, __) => responseFromJsObject(obj)); } Future put( diff --git a/packages/edge_runtime/lib/src/cache/cache_query_options.dart b/packages/edge_runtime/lib/src/cache/cache_query_options.dart index 3b72871..f47808f 100644 --- a/packages/edge_runtime/lib/src/cache/cache_query_options.dart +++ b/packages/edge_runtime/lib/src/cache/cache_query_options.dart @@ -1,4 +1,4 @@ -import 'package:js_bindings/js_bindings.dart' as interop; +import 'package:typings/core.dart' as interop; class CacheQueryOptions { bool? ignoreSearch; diff --git a/packages/edge_runtime/lib/src/cache/cache_storage.dart b/packages/edge_runtime/lib/src/cache/cache_storage.dart index 60fdc5f..ab09866 100644 --- a/packages/edge_runtime/lib/src/cache/cache_storage.dart +++ b/packages/edge_runtime/lib/src/cache/cache_storage.dart @@ -1,6 +1,6 @@ import 'dart:js_util'; -import 'package:js_bindings/js_bindings.dart' as interop; +import 'package:typings/core.dart' as interop hide caches; import '../interop/cache_interop.dart' as interop; import '../request.dart'; import '../response.dart'; diff --git a/packages/edge_runtime/lib/src/crypto.dart b/packages/edge_runtime/lib/src/crypto.dart index f55e5ee..dd1ef30 100644 --- a/packages/edge_runtime/lib/src/crypto.dart +++ b/packages/edge_runtime/lib/src/crypto.dart @@ -1,11 +1,8 @@ import 'dart:typed_data'; -import 'package:js_bindings/js_bindings.dart' as interop; -import 'interop/crypto_interop.dart' as interop; +import 'package:typings/core.dart' as interop; -export 'package:js_bindings/js_bindings.dart' show KeyFormat, KeyType; - -final crypto = Crypto._(interop.crypto); +final crypto = Crypto._(interop.crypto.call()); class Crypto { final interop.Crypto _delegate; @@ -15,7 +12,7 @@ class Crypto { SubtleCrypto get subtle => SubtleCrypto._(_delegate.subtle); // TODO Is this the right way to do this? - TypedData getRandomValues(TypedData typedArray) => + interop.ArrayBufferView getRandomValues(interop.ArrayBufferView typedArray) => _delegate.getRandomValues(typedArray); String randomUUID() => _delegate.randomUUID(); @@ -31,21 +28,11 @@ class SubtleCrypto { CryptoKey key, dynamic data, ) { - final obj = _delegate.encrypt(algorithm._delegate, key._delegate, data); - throw UnimplementedError('TODO - how to handle return type?'); + return _delegate.encrypt(algorithm._delegate, key._delegate, data); + // TODO - how to handle return type? } - // TODO decrypt - // TODO sign - // TODO verify - // TODO digest - // TODO generateKey - // TODO deriveKey - // TODO deriveBits - // TODO importKey - // TODO exportKey - // TODO wrapKey - // TODO unwrapKey + // TODO decrypt, sign, verify, digest, generateKey, deriveKey, deriveBits, importKey, exportKey, wrapKey, unwrapKey } abstract class Algorithm { @@ -63,11 +50,9 @@ class RsaOaepParams extends Algorithm { factory RsaOaepParams({ ByteBuffer? label, }) => - RsaOaepParams._(interop.RsaOaepParams( - label: label, - )); + RsaOaepParams._(interop.RsaOaepParams(label: label, name: "RSA-OAEP")); - ByteBuffer? get label => _rsaDelegate.label; + ByteBuffer? get label => _rsaDelegate.label as interop.ArrayBufferLike; set label(ByteBuffer? value) => _rsaDelegate.label = value; } @@ -78,5 +63,5 @@ class CryptoKey { interop.KeyType get type => _delegate.type; bool get extractable => _delegate.extractable; - List get usages => _delegate.usages; + List get usages => _delegate.usages; } diff --git a/packages/edge_runtime/lib/src/fetch_event.dart b/packages/edge_runtime/lib/src/fetch_event.dart deleted file mode 100644 index e524e22..0000000 --- a/packages/edge_runtime/lib/src/fetch_event.dart +++ /dev/null @@ -1,44 +0,0 @@ -import 'dart:js_util' as js_util; -import 'dart:async'; - -import 'package:js_bindings/js_bindings.dart' as interop; - -import 'interop/promise_interop.dart'; -import 'interop/scope_interop.dart'; -import 'request.dart'; -import 'response.dart'; - -class FetchEvent { - final interop.FetchEvent _delegate; - FetchEvent._(this._delegate); - - String get type => _delegate.type; - Request get request => requestFromJsObject(_delegate.request); - - void respondWith(FutureOr response) { - return _delegate.respondWithPromise(Future(() async { - return (await response).delegate; - })); - } - - void waitUntil(FutureOr future) { - return _delegate.waitUntilPromise(Future(() async { - await future; - })); - } -} - -extension on interop.FetchEvent { - /// This is a workaround for the fact that the `respondWith` method is - /// probably checking for `instanceof Promise` instead of `then` method, - /// so we force the incoming Future to be a Promise so the type is valid. - void respondWithPromise(Future r) => - js_util.callMethod(this, 'respondWith', [futureToPromise(r)]); - - void waitUntilPromise(Future r) => - js_util.callMethod(this, 'waitUntil', [futureToPromise(r)]); -} - -FetchEvent fetchEventFromJsObject(interop.FetchEvent fetchEvent) { - return FetchEvent._(fetchEvent); -} diff --git a/packages/edge_runtime/lib/src/file.dart b/packages/edge_runtime/lib/src/file.dart index 9813c1f..1ccf886 100644 --- a/packages/edge_runtime/lib/src/file.dart +++ b/packages/edge_runtime/lib/src/file.dart @@ -1,9 +1,9 @@ import 'dart:js_util'; import 'dart:typed_data'; -import 'package:edge_runtime/src/interop/readable_stream.dart'; -import 'package:js_bindings/js_bindings.dart' as interop; +import 'package:typings/core.dart' as interop; +import './interop/readable_stream.dart'; import 'blob.dart'; class File implements Blob { @@ -12,7 +12,7 @@ class File implements Blob { File._(this._delegate); String get name => _delegate.name; - int get lastModified => _delegate.lastModified; + int get lastModified => _delegate.lastModified.toInt(); String? get webkitRelativePath { try { return _delegate.webkitRelativePath; @@ -28,7 +28,7 @@ class File implements Blob { Future arrayBuffer() => _delegate.arrayBuffer(); @override - int get size => _delegate.size; + int get size => _delegate.size.toInt(); @override Blob slice([int? start, int? end, String? contentType]) { diff --git a/packages/edge_runtime/lib/src/form_data.dart b/packages/edge_runtime/lib/src/form_data.dart index c2b70af..ad33bbb 100644 --- a/packages/edge_runtime/lib/src/form_data.dart +++ b/packages/edge_runtime/lib/src/form_data.dart @@ -1,5 +1,5 @@ import 'package:freezed_annotation/freezed_annotation.dart'; -import 'package:js_bindings/js_bindings.dart' as interop; +import 'package:typings/core.dart' as interop; import 'file.dart'; @@ -15,7 +15,7 @@ class FormData { value.when(file: (value) { throw UnimplementedError(); }, string: (value) { - _delegate.append( + _delegate.append.$3( name, interop.Blob( [value], @@ -59,7 +59,7 @@ class FormData { value.when(file: (value) { throw UnimplementedError(); }, string: (value) { - _delegate.set( + _delegate.set.$3( name, interop.Blob( [value], diff --git a/packages/edge_runtime/lib/src/headers.dart b/packages/edge_runtime/lib/src/headers.dart index 6a6e80f..8aa1406 100644 --- a/packages/edge_runtime/lib/src/headers.dart +++ b/packages/edge_runtime/lib/src/headers.dart @@ -1,13 +1,12 @@ import 'dart:js_util' show jsify; -import 'package:js_bindings/js_bindings.dart' as js_bindings; +import 'package:typings/core.dart' as js_interop; import 'interop/headers.dart' as interop; class Headers { final interop.Headers _delegate; - Headers([Map? headers]) - : _delegate = interop.Headers(jsify(headers ?? {})); + Headers([Map? headers]) : _delegate = interop.Headers(jsify(headers ?? {})); Headers._(this._delegate); @@ -28,7 +27,7 @@ class Headers { Iterable get values => _delegate.values; Map toMap() => _delegate.toMap(); - js_bindings.Headers toJsBindingsHeaders() => _delegate as js_bindings.Headers; + js_interop.Headers toJsBindingsHeaders() => _delegate as js_interop.Headers; } extension HeadersExtension on Headers { diff --git a/packages/edge_runtime/lib/src/interop/cache_interop.dart b/packages/edge_runtime/lib/src/interop/cache_interop.dart index 684582e..c9d888d 100644 --- a/packages/edge_runtime/lib/src/interop/cache_interop.dart +++ b/packages/edge_runtime/lib/src/interop/cache_interop.dart @@ -1,5 +1,5 @@ import 'package:js/js.dart' as js; -import 'package:js_bindings/js_bindings.dart' as interop; +import 'package:typings/core.dart' as interop; @js.JS('caches') external interop.CacheStorage get caches; diff --git a/packages/edge_runtime/lib/src/interop/crypto_interop.dart b/packages/edge_runtime/lib/src/interop/crypto_interop.dart deleted file mode 100644 index 9de6264..0000000 --- a/packages/edge_runtime/lib/src/interop/crypto_interop.dart +++ /dev/null @@ -1,5 +0,0 @@ -import 'package:js/js.dart' as js; -import 'package:js_bindings/js_bindings.dart' as interop; - -@js.JS('crypto') -external interop.Crypto get crypto; diff --git a/packages/edge_runtime/lib/src/interop/scope_interop.dart b/packages/edge_runtime/lib/src/interop/scope_interop.dart index 48f2cf3..a03e29e 100644 --- a/packages/edge_runtime/lib/src/interop/scope_interop.dart +++ b/packages/edge_runtime/lib/src/interop/scope_interop.dart @@ -1,12 +1,12 @@ import 'package:js/js.dart' as js; -import 'package:js_bindings/js_bindings.dart' as interop; +import 'package:typings/core.dart' as interop; import 'promise_interop.dart'; @js.JS() external void addEventListener( String type, - void Function(interop.ExtendableEvent event) callback, + void Function(interop.Event event) callback, ); @js.JS('fetch') diff --git a/packages/edge_runtime/lib/src/interop/utils_interop.dart b/packages/edge_runtime/lib/src/interop/utils_interop.dart index 896d43e..92d42c8 100644 --- a/packages/edge_runtime/lib/src/interop/utils_interop.dart +++ b/packages/edge_runtime/lib/src/interop/utils_interop.dart @@ -1,10 +1,10 @@ import 'dart:js_util' as js_util; import 'package:js/js.dart'; -import 'package:js_bindings/js_bindings.dart' as interop; +import 'package:typings/core.dart' as interop; -import '../resource.dart'; import '../request.dart'; +import '../resource.dart'; interop.Request requestFromResource(Resource resource) { switch (resource.runtimeType) { diff --git a/packages/edge_runtime/lib/src/io_http_client.dart b/packages/edge_runtime/lib/src/io_http_client.dart index 4593cec..d9e0110 100644 --- a/packages/edge_runtime/lib/src/io_http_client.dart +++ b/packages/edge_runtime/lib/src/io_http_client.dart @@ -61,8 +61,7 @@ class HttpClient implements io.HttpClient { int port, String scheme, String? realm, - )? - f, + )? f, ) { // TODO: implement authenticateProxy } @@ -87,8 +86,7 @@ class HttpClient implements io.HttpClient { Uri url, String? proxyHost, int? proxyPort, - )? - f, + )? f, ) { throw UnsupportedError(kUnsupportedEnv); } @@ -568,14 +566,12 @@ class HttpClientResponse implements io.HttpClientResponse { headers = HttpHeaders.fromFetchResponseHeaders(_response.headers); _body = _response.body ?? Stream.empty(); - final contentLengthHeader = - headers.value(io.HttpHeaders.contentLengthHeader); + final contentLengthHeader = headers.value(io.HttpHeaders.contentLengthHeader); contentLength = int.parse(contentLengthHeader ?? '-1'); } @override - io.X509Certificate? get certificate => - throw UnsupportedError(kUnsupportedEnv); + io.X509Certificate? get certificate => throw UnsupportedError(kUnsupportedEnv); @override io.HttpClientResponseCompressionState get compressionState { diff --git a/packages/edge_runtime/lib/src/request.dart b/packages/edge_runtime/lib/src/request.dart index ff2ac37..822d77f 100644 --- a/packages/edge_runtime/lib/src/request.dart +++ b/packages/edge_runtime/lib/src/request.dart @@ -4,7 +4,7 @@ import 'dart:typed_data'; import 'abort.dart'; import 'blob.dart'; import 'body.dart'; -import 'package:js_bindings/js_bindings.dart' as interop; +import 'package:typings/core.dart' as interop; import 'interop/readable_stream.dart'; import 'interop/utils_interop.dart' as interop; import 'interop/headers.dart' as headers_interop; @@ -32,7 +32,6 @@ class Request implements Body { String? integrity, bool? keepalive, AbortSignal? signal, - interop.RequestDuplex? duplex, }) : _delegate = interop.Request( interop.requestFromResource(resource), interop.RequestInit( @@ -49,7 +48,6 @@ class Request implements Body { integrity: integrity, keepalive: keepalive, signal: signal?.delegate, - duplex: duplex, ), ); @@ -96,8 +94,7 @@ class Request implements Body { bool get bodyUsed => _delegate.bodyUsed; @override - Future formData() async => - formDataFromJsObject(await _delegate.formData()); + Future formData() async => formDataFromJsObject(await _delegate.formData()); @override Future json() async => diff --git a/packages/edge_runtime/lib/src/response.dart b/packages/edge_runtime/lib/src/response.dart index 142a69a..f640309 100644 --- a/packages/edge_runtime/lib/src/response.dart +++ b/packages/edge_runtime/lib/src/response.dart @@ -2,7 +2,7 @@ import 'dart:convert'; import 'dart:js_util' show jsify, getProperty; import 'dart:typed_data'; -import 'package:js_bindings/js_bindings.dart' as interop; +import 'package:typings/core.dart' as interop; import './utils.dart'; import 'blob.dart'; @@ -49,7 +49,7 @@ class Response implements Body { Headers? headers, }) { return Response._( - interop.Response.json( + interop.Response( data != null ? jsify(data) : null, interop.ResponseInit( status: status ?? 200, @@ -63,7 +63,7 @@ class Response implements Body { interop.ResponseType get type => _delegate.type; Uri get url => Uri.parse(_delegate.url); bool get redirected => _delegate.redirected; - int get status => _delegate.status; + int get status => _delegate.status.toInt(); bool get ok => _delegate.ok; String get statusText => _delegate.statusText; Headers get headers { diff --git a/packages/edge_runtime/lib/src/text_decoder.dart b/packages/edge_runtime/lib/src/text_decoder.dart index 87c7012..abfb217 100644 --- a/packages/edge_runtime/lib/src/text_decoder.dart +++ b/packages/edge_runtime/lib/src/text_decoder.dart @@ -1,11 +1,9 @@ -import 'dart:typed_data' show Uint8List; - -import 'package:js_bindings/js_bindings.dart' as interop; +import 'package:typings/core.dart' as interop; class TextDecoder { final interop.TextDecoder _delegate; - TextDecoder._(this._delegate); + // TextDecoder._(this._delegate); // TODO: What happens if label is null? do we need to use undefined? TextDecoder([String? label, TextDecoderOptions? options]) @@ -29,13 +27,13 @@ class TextDecoderOptions { TextDecoderOptions._(this._delegate); - bool get fatal => _delegate.fatal; + bool get fatal => _delegate.fatal ?? false; set fatal(bool newValue) { _delegate.fatal = newValue; } - bool get ignoreBOM => _delegate.ignoreBOM; + bool get ignoreBOM => _delegate.ignoreBOM ?? false; set ignoreBOM(bool newValue) { _delegate.ignoreBOM = newValue; diff --git a/packages/edge_runtime/lib/src/text_encoder.dart b/packages/edge_runtime/lib/src/text_encoder.dart index 607bb88..3118aa9 100644 --- a/packages/edge_runtime/lib/src/text_encoder.dart +++ b/packages/edge_runtime/lib/src/text_encoder.dart @@ -1,6 +1,6 @@ import 'dart:typed_data' show Uint8List; -import 'package:js_bindings/js_bindings.dart' as interop; +import 'package:typings/core.dart' as interop; class TextEncoder { final interop.TextEncoder _delegate; @@ -21,21 +21,20 @@ extension TextEncoderExtension on TextEncoder { interop.TextEncoder get delegate => _delegate; } -TextEncoder textEncoderFromJsObject(interop.TextEncoder jsObject) => - TextEncoder._(jsObject); +TextEncoder textEncoderFromJsObject(interop.TextEncoder jsObject) => TextEncoder._(jsObject); class TextEncoderEncodeIntoResult { final interop.TextEncoderEncodeIntoResult _delegate; TextEncoderEncodeIntoResult._(this._delegate); - int get read => _delegate.read; + int get read => _delegate.read as int? ?? 0; set read(int newValue) { _delegate.read = newValue; } - int get written => _delegate.written; + int get written => _delegate.written as int? ?? 0; set written(int newValue) { _delegate.written = newValue; @@ -46,6 +45,5 @@ extension TextEncoderEncodeIntoResultExtension on TextEncoderEncodeIntoResult { interop.TextEncoderEncodeIntoResult get delegate => _delegate; } -TextEncoder textEncoderEncodeIntoResultFromJsObject( - interop.TextEncoder jsObject) => +TextEncoder textEncoderEncodeIntoResultFromJsObject(interop.TextEncoder jsObject) => TextEncoder._(jsObject); diff --git a/packages/edge_runtime/lib/src/top.dart b/packages/edge_runtime/lib/src/top.dart index b4232a7..dfca9a7 100644 --- a/packages/edge_runtime/lib/src/top.dart +++ b/packages/edge_runtime/lib/src/top.dart @@ -1,65 +1,55 @@ import 'dart:js' as js; import 'dart:js_util'; -import 'package:js_bindings/js_bindings.dart' as interop; +import 'package:typings/core.dart' as interop hide AbortSignal; + import 'abort.dart'; import 'headers.dart'; -import 'interop/scope_interop.dart' as interop; import 'interop/utils_interop.dart' as interop; - import 'resource.dart'; import 'response.dart'; -Future fetch( - Resource resource, { - String? method, - Headers? headers, - Object? body, - String? referrer, - interop.ReferrerPolicy? referrerPolicy, - interop.RequestMode? mode, - interop.RequestCredentials? credentials, - interop.RequestCache? cache, - interop.RequestRedirect? redirect, - String? integrity, - bool? keepalive, - AbortSignal? signal, - interop.RequestDuplex? duplex, -}) async { +Future fetch(Resource resource, + {String? method, + Headers? headers, + Object? body, + String? referrer, + interop.ReferrerPolicy? referrerPolicy, + interop.RequestMode? mode, + interop.RequestCredentials? credentials, + interop.RequestCache? cache, + interop.RequestRedirect? redirect, + String? integrity, + bool? keepalive, + AbortSignal? signal}) async { return responseFromJsObject( await promiseToFuture( interop.fetch( interop.requestFromResource(resource), interop.RequestInit( - method: method, - headers: headers?.delegate, - body: body, - referrer: referrer, - referrerPolicy: referrerPolicy, - mode: mode, - credentials: credentials, - cache: cache, - redirect: redirect, - integrity: integrity, - keepalive: keepalive, - signal: signal?.delegate, - duplex: duplex, - ), + method: method, + headers: headers?.delegate, + body: body, + referrer: referrer, + referrerPolicy: referrerPolicy, + mode: mode, + credentials: credentials, + cache: cache, + redirect: redirect, + integrity: integrity, + keepalive: keepalive, + signal: signal?.delegate), ), ), ); } -String atob(String encodedData) => interop.atob(encodedData); - -String btoa(String stringToEncode) => interop.btoa(stringToEncode); - int setInterval(void Function() callback, Duration duration) => - interop.setInterval(js.allowInterop(callback), duration.inMilliseconds); + interop.setInterval(js.allowInterop(callback), duration.inMilliseconds).toInt(); void clearInterval(int handle) => interop.clearInterval(handle); int setTimeout(void Function() callback, Duration duration) => - interop.setTimeout(js.allowInterop(callback), duration.inMilliseconds); + interop.setTimeout(js.allowInterop(callback), duration.inMilliseconds).toInt(); void clearTimeout(int handle) => interop.clearTimeout(handle); diff --git a/packages/edge_runtime/pubspec.yaml b/packages/edge_runtime/pubspec.yaml index 55c09a2..6ce17e5 100644 --- a/packages/edge_runtime/pubspec.yaml +++ b/packages/edge_runtime/pubspec.yaml @@ -5,12 +5,12 @@ repository: https://github.com/invertase/dart_edge/tree/main/packages/edge_runti version: 0.0.4+2 environment: - sdk: ">=2.18.5 <3.0.0" + sdk: ">3.1.0 <4.0.0" dependencies: freezed_annotation: ^2.2.0 js: ^0.6.5 - js_bindings: ^0.1.0 + typings: ^0.0.3 dev_dependencies: build_runner: ^2.3.3 @@ -19,4 +19,4 @@ dev_dependencies: test: ^1.16.0 shelf: ^1.4.0 shelf_router: ^1.1.3 - http: ^0.13.0 + http: ^1.1.0 diff --git a/packages/edge_runtime/test/cache_test.dart b/packages/edge_runtime/test/cache_test.dart index b5dff7f..b18187d 100644 --- a/packages/edge_runtime/test/cache_test.dart +++ b/packages/edge_runtime/test/cache_test.dart @@ -24,12 +24,11 @@ void main() { expect(await caches.has('exists'), isFalse); }); - // TODO: keys() api not working - // test('.keys()', () async { - // await caches.open('one'); - // await caches.open('two'); - // expect(await caches.keys(), ['one', 'two']); - // }); + test('.keys()', () async { + await caches.open('one'); + await caches.open('two'); + expect(await caches.keys(), ['one', 'two']); + }); test('.match()', () async { final request = Request(Resource('https://foo.com')); @@ -78,17 +77,16 @@ void main() { expect(await cache.match(request), isNotNull); }); - // TODO matchAll() api not working - // test('.matchAll()', () async { - // final request = serverRequest('/200'); - // final cache = await caches.open('matchAll'); - // expect(await cache.matchAll(), isEmpty); - // await cache.add(request); - // expect(await cache.matchAll(), isNotEmpty); - // final matches = await cache.matchAll(request); - // expect(await cache.matchAll(request), isNotEmpty); - // expect(matches.first.url.path, '/200'); - // }); + test('.matchAll()', () async { + final request = serverRequest('/200'); + final cache = await caches.open('matchAll'); + expect(await cache.matchAll(), isEmpty); + await cache.add(request); + expect(await cache.matchAll(), isNotEmpty); + final matches = await cache.matchAll(request); + expect(await cache.matchAll(request), isNotEmpty); + expect(matches.first.url.path, '/200'); + }); test('.put()', () async { final request = serverRequest('/200'); diff --git a/packages/edge_runtime/test/fetch_test.dart b/packages/edge_runtime/test/fetch_test.dart index b9ceaf8..76e84b3 100644 --- a/packages/edge_runtime/test/fetch_test.dart +++ b/packages/edge_runtime/test/fetch_test.dart @@ -1,5 +1,4 @@ import 'package:test/test.dart'; -import 'package:edge_runtime/edge_runtime.dart'; import 'utils.dart'; diff --git a/packages/edge_runtime/test/headers_test.dart b/packages/edge_runtime/test/headers_test.dart index 3931759..6cd7fa6 100644 --- a/packages/edge_runtime/test/headers_test.dart +++ b/packages/edge_runtime/test/headers_test.dart @@ -18,11 +18,10 @@ void main() { expect(headers['foo'], 'bar, baz'); }); - // TODO: See https://github.com/jodinathan/js_bindings/issues/24 - // test('.keys()', () { - // final headers = Headers({'foo': 'bar'}); - // expect(headers.keys().toList(), ['foo']); - // }); + test('.keys()', () { + final headers = Headers({'foo': 'bar'}); + expect(headers.keys.toList(), ['foo']); + }); test('.delete()', () { final headers = Headers({'foo': 'bar'})..delete('foo'); diff --git a/packages/edge_runtime/test/request_test.dart b/packages/edge_runtime/test/request_test.dart index de003d1..617fb80 100644 --- a/packages/edge_runtime/test/request_test.dart +++ b/packages/edge_runtime/test/request_test.dart @@ -38,7 +38,7 @@ void main() { }), ); - expect(request.headers['foo'], 'bar'); + expect(request.headers.get('foo'), 'bar'); }); test('.destination', () { diff --git a/packages/edge_runtime/test/utils.dart b/packages/edge_runtime/test/utils.dart index 6c17217..1499ef5 100644 --- a/packages/edge_runtime/test/utils.dart +++ b/packages/edge_runtime/test/utils.dart @@ -1,69 +1,57 @@ import 'package:edge_runtime/edge_runtime.dart'; -Request serverRequest( - String path, { - String? method, - Headers? headers, - Object? body, - String? referrer, - ReferrerPolicy? referrerPolicy, - RequestMode? mode, - RequestCredentials? credentials, - RequestCache? cache, - RequestRedirect? redirect, - String? integrity, - bool? keepalive, - AbortSignal? signal, - RequestDuplex? duplex, -}) { - return Request( - Resource('http://0.0.0.0:3001$path'), - method: method, - headers: headers, - body: body, - referrer: referrer, - referrerPolicy: referrerPolicy, - mode: mode, - credentials: credentials, - cache: cache, - redirect: redirect, - integrity: integrity, - keepalive: keepalive, - signal: signal, - duplex: duplex, - ); +Request serverRequest(String path, + {String? method, + Headers? headers, + Object? body, + String? referrer, + ReferrerPolicy? referrerPolicy, + RequestMode? mode, + RequestCredentials? credentials, + RequestCache? cache, + RequestRedirect? redirect, + String? integrity, + bool? keepalive, + AbortSignal? signal}) { + return Request(Resource('http://0.0.0.0:3001$path'), + method: method, + headers: headers, + body: body, + referrer: referrer, + referrerPolicy: referrerPolicy, + mode: mode, + credentials: credentials, + cache: cache, + redirect: redirect, + integrity: integrity, + keepalive: keepalive, + signal: signal); } -Future fetchFromServer( - String path, { - String? method, - Headers? headers, - Object? body, - String? referrer, - ReferrerPolicy? referrerPolicy, - RequestMode? mode, - RequestCredentials? credentials, - RequestCache? cache, - RequestRedirect? redirect, - String? integrity, - bool? keepalive, - AbortSignal? signal, - RequestDuplex? duplex, -}) { - return fetch( - Resource('http://0.0.0.0:3001$path'), - method: method, - headers: headers, - body: body, - referrer: referrer, - referrerPolicy: referrerPolicy, - mode: mode, - credentials: credentials, - cache: cache, - redirect: redirect, - integrity: integrity, - keepalive: keepalive, - signal: signal, - duplex: duplex, - ); +Future fetchFromServer(String path, + {String? method, + Headers? headers, + Object? body, + String? referrer, + ReferrerPolicy? referrerPolicy, + RequestMode? mode, + RequestCredentials? credentials, + RequestCache? cache, + RequestRedirect? redirect, + String? integrity, + bool? keepalive, + AbortSignal? signal}) { + return fetch(Resource('http://0.0.0.0:3001$path'), + method: method, + headers: headers, + body: body, + referrer: referrer, + referrerPolicy: referrerPolicy, + mode: mode, + credentials: credentials, + cache: cache, + redirect: redirect, + integrity: integrity, + keepalive: keepalive, + signal: signal); } diff --git a/packages/netlify_edge/lib/netlify_edge.dart b/packages/netlify_edge/lib/netlify_edge.dart index 0bf67b8..7a202e7 100644 --- a/packages/netlify_edge/lib/netlify_edge.dart +++ b/packages/netlify_edge/lib/netlify_edge.dart @@ -4,7 +4,7 @@ import 'package:edge_runtime/src/interop/promise_interop.dart'; import 'package:edge_runtime/edge_runtime.dart'; import 'package:edge_runtime/src/request.dart'; import 'package:edge_runtime/src/response.dart'; -import 'package:js_bindings/js_bindings.dart' as interop; +import 'package:typings/core.dart' as interop; import 'interop/context_interop.dart' as interop; export 'package:edge_runtime/edge_runtime.dart'; diff --git a/packages/netlify_edge/pubspec.yaml b/packages/netlify_edge/pubspec.yaml index b154fc4..91f665c 100644 --- a/packages/netlify_edge/pubspec.yaml +++ b/packages/netlify_edge/pubspec.yaml @@ -10,9 +10,9 @@ environment: dependencies: edge: ^0.0.7 edge_runtime: ^0.0.4+2 - js_bindings: ^0.1.0 js: ^0.6.5 path: ^1.8.3 + typings: ^0.0.3 dev_dependencies: lints: ^2.0.0 diff --git a/packages/supabase_functions/lib/supabase_functions.dart b/packages/supabase_functions/lib/supabase_functions.dart index c5fd651..2845285 100644 --- a/packages/supabase_functions/lib/supabase_functions.dart +++ b/packages/supabase_functions/lib/supabase_functions.dart @@ -3,7 +3,7 @@ import 'package:edge_runtime/edge_runtime.dart'; import 'package:edge_runtime/src/interop/promise_interop.dart'; import 'package:edge_runtime/src/request.dart'; import 'package:edge_runtime/src/response.dart'; -import 'package:js_bindings/js_bindings.dart' as interop; +import 'package:typings/core.dart' as interop; export 'package:edge_runtime/edge_runtime.dart'; export 'package:deno_deploy/deno_deploy.dart'; diff --git a/packages/supabase_functions/pubspec.yaml b/packages/supabase_functions/pubspec.yaml index e3fb854..c3c3748 100644 --- a/packages/supabase_functions/pubspec.yaml +++ b/packages/supabase_functions/pubspec.yaml @@ -11,8 +11,8 @@ dependencies: deno_deploy: ^0.0.1-dev.6 edge: ^0.0.7 edge_runtime: ^0.0.4+2 - js_bindings: ^0.1.0 js: ^0.6.5 + typings: ^0.0.3 dev_dependencies: lints: ^2.0.0 diff --git a/packages/vercel_edge/lib/interop/request_interop.dart b/packages/vercel_edge/lib/interop/request_interop.dart index a783c9a..6988bdd 100644 --- a/packages/vercel_edge/lib/interop/request_interop.dart +++ b/packages/vercel_edge/lib/interop/request_interop.dart @@ -1,4 +1,4 @@ -import 'package:js_bindings/js_bindings.dart' as interop; +import 'package:typings/core.dart' as interop; extension CloudflareWorkersRequestInteropExtension on interop.Request { String? get ipAddress => headers.get('x-real-ip'); diff --git a/packages/vercel_edge/lib/public/request.dart b/packages/vercel_edge/lib/public/request.dart index f611798..f4f0430 100644 --- a/packages/vercel_edge/lib/public/request.dart +++ b/packages/vercel_edge/lib/public/request.dart @@ -1,6 +1,6 @@ -import 'package:js_bindings/js_bindings.dart' as interop; -import 'package:edge_runtime/src/request.dart'; +import 'package:typings/core.dart' as interop; +import 'package:edge_runtime/src/request.dart'; import '../interop/request_interop.dart'; extension VercelEdgeRequestExtension on Request { diff --git a/packages/vercel_edge/lib/vercel_edge.dart b/packages/vercel_edge/lib/vercel_edge.dart index abfff71..9491a73 100644 --- a/packages/vercel_edge/lib/vercel_edge.dart +++ b/packages/vercel_edge/lib/vercel_edge.dart @@ -1,11 +1,10 @@ -import 'package:js/js.dart'; import 'package:edge_runtime/edge_runtime.dart'; import 'package:edge_runtime/src/interop/promise_interop.dart'; import 'package:edge_runtime/src/request.dart'; import 'package:edge_runtime/src/response.dart'; -import 'package:js_bindings/js_bindings.dart' as interop; +import 'package:js/js.dart'; +import 'package:typings/core.dart' as interop; -export 'package:edge_runtime/edge_runtime.dart'; export './public/request.dart'; @JS('__dartVercelFetchHandler') diff --git a/packages/vercel_edge/lib/vercel_edge_shelf.dart b/packages/vercel_edge/lib/vercel_edge_shelf.dart index fa118f3..7f226d8 100644 --- a/packages/vercel_edge/lib/vercel_edge_shelf.dart +++ b/packages/vercel_edge/lib/vercel_edge_shelf.dart @@ -1,14 +1,14 @@ -import 'package:js/js.dart'; -import 'package:edge_runtime/edge_runtime.dart'; import 'dart:js_util' as js_util; -import 'package:js_bindings/js_bindings.dart' as interop; -import 'package:shelf/shelf.dart' as shelf; + +import 'package:edge_runtime/edge_runtime.dart'; import 'package:edge_runtime/src/interop/promise_interop.dart'; import 'package:edge_runtime/src/response.dart'; +import 'package:js/js.dart'; +import 'package:shelf/shelf.dart' as shelf; +import 'package:typings/core.dart' as interop; @JS('__dartVercelFetchHandler') -external set __dartVercelFetchHandler( - Promise Function(interop.Request req) f); +external set __dartVercelFetchHandler(Promise Function(interop.Request req) f); class VercelEdgeShelf { final FutureOr Function(shelf.Request request)? fetch; diff --git a/packages/vercel_edge/pubspec.yaml b/packages/vercel_edge/pubspec.yaml index 7280469..560fa47 100644 --- a/packages/vercel_edge/pubspec.yaml +++ b/packages/vercel_edge/pubspec.yaml @@ -10,9 +10,9 @@ environment: dependencies: edge: ^0.0.7 edge_runtime: ^0.0.4+2 - js_bindings: ^0.1.0 js: ^0.6.5 shelf: ^1.4.0 + typings: ^0.0.3 dev_dependencies: lints: ^2.0.0 diff --git a/pubspec.yaml b/pubspec.yaml index 4c07bbf..f0749f2 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -2,6 +2,6 @@ name: dart_edge_workspace publish_to: none environment: - sdk: '>=2.18.0 <3.0.0' + sdk: '>3.1.0 <4.0.0' dev_dependencies: melos: ^3.0.0