summaryrefslogtreecommitdiff
path: root/ext/web
diff options
context:
space:
mode:
authorDivy Srivastava <dj.srivastava23@gmail.com>2022-03-14 23:14:15 +0530
committerGitHub <noreply@github.com>2022-03-14 18:44:15 +0100
commitb4e42953e1d243f2eda20e5be6b845d60b7bf688 (patch)
tree10b3bfff165f9c04f9174c7c399d44b9b724c3b3 /ext/web
parent4e3ed37037a2aa1edeac260dc3463a81d9cf9b88 (diff)
feat(core): codegen ops (#13861)
Co-authored-by: Aaron O'Mullan <aaron.omullan@gmail.com>
Diffstat (limited to 'ext/web')
-rw-r--r--ext/web/blob.rs9
-rw-r--r--ext/web/compression.rs4
-rw-r--r--ext/web/lib.rs88
-rw-r--r--ext/web/message_port.rs5
-rw-r--r--ext/web/timers.rs6
5 files changed, 58 insertions, 54 deletions
diff --git a/ext/web/blob.rs b/ext/web/blob.rs
index 37e93c853..ad7f6c582 100644
--- a/ext/web/blob.rs
+++ b/ext/web/blob.rs
@@ -1,5 +1,7 @@
use async_trait::async_trait;
use deno_core::error::type_error;
+use deno_core::op;
+
use deno_core::parking_lot::Mutex;
use deno_core::url::Url;
use deno_core::ZeroCopyBuf;
@@ -157,6 +159,7 @@ impl BlobPart for SlicedBlobPart {
}
}
+#[op]
pub fn op_blob_create_part(
state: &mut deno_core::OpState,
data: ZeroCopyBuf,
@@ -175,6 +178,7 @@ pub struct SliceOptions {
len: usize,
}
+#[op]
pub fn op_blob_slice_part(
state: &mut deno_core::OpState,
id: Uuid,
@@ -200,6 +204,7 @@ pub fn op_blob_slice_part(
Ok(id)
}
+#[op]
pub async fn op_blob_read_part(
state: Rc<RefCell<deno_core::OpState>>,
id: Uuid,
@@ -215,6 +220,7 @@ pub async fn op_blob_read_part(
Ok(ZeroCopyBuf::from(buf.to_vec()))
}
+#[op]
pub fn op_blob_remove_part(
state: &mut deno_core::OpState,
id: Uuid,
@@ -225,6 +231,7 @@ pub fn op_blob_remove_part(
Ok(())
}
+#[op]
pub fn op_blob_create_object_url(
state: &mut deno_core::OpState,
media_type: String,
@@ -250,6 +257,7 @@ pub fn op_blob_create_object_url(
Ok(url.to_string())
}
+#[op]
pub fn op_blob_revoke_object_url(
state: &mut deno_core::OpState,
url: String,
@@ -273,6 +281,7 @@ pub struct ReturnBlobPart {
pub size: usize,
}
+#[op]
pub fn op_blob_from_object_url(
state: &mut deno_core::OpState,
url: String,
diff --git a/ext/web/compression.rs b/ext/web/compression.rs
index c84db7550..d38f65d6a 100644
--- a/ext/web/compression.rs
+++ b/ext/web/compression.rs
@@ -1,6 +1,7 @@
// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
use deno_core::error::AnyError;
+use deno_core::op;
use deno_core::OpState;
use deno_core::Resource;
use deno_core::ResourceId;
@@ -32,6 +33,7 @@ impl Resource for CompressionResource {
}
}
+#[op]
pub fn op_compression_new(
state: &mut OpState,
format: String,
@@ -53,6 +55,7 @@ pub fn op_compression_new(
Ok(state.resource_table.add(resource))
}
+#[op]
pub fn op_compression_write(
state: &mut OpState,
rid: ResourceId,
@@ -86,6 +89,7 @@ pub fn op_compression_write(
Ok(out.into())
}
+#[op]
pub fn op_compression_finish(
state: &mut OpState,
rid: ResourceId,
diff --git a/ext/web/lib.rs b/ext/web/lib.rs
index f117bfb9d..6c278cbb0 100644
--- a/ext/web/lib.rs
+++ b/ext/web/lib.rs
@@ -9,8 +9,7 @@ use deno_core::error::range_error;
use deno_core::error::type_error;
use deno_core::error::AnyError;
use deno_core::include_js_files;
-use deno_core::op_async;
-use deno_core::op_sync;
+use deno_core::op;
use deno_core::url::Url;
use deno_core::ByteString;
use deno_core::Extension;
@@ -83,58 +82,31 @@ pub fn init<P: TimersPermission + 'static>(
"15_performance.js",
))
.ops(vec![
- ("op_base64_decode", op_sync(op_base64_decode)),
- ("op_base64_encode", op_sync(op_base64_encode)),
- ("op_base64_atob", op_sync(op_base64_atob)),
- ("op_base64_btoa", op_sync(op_base64_btoa)),
- (
- "op_encoding_normalize_label",
- op_sync(op_encoding_normalize_label),
- ),
- ("op_encoding_new_decoder", op_sync(op_encoding_new_decoder)),
- ("op_encoding_decode", op_sync(op_encoding_decode)),
- ("op_encoding_encode_into", op_sync(op_encoding_encode_into)),
- ("op_blob_create_part", op_sync(op_blob_create_part)),
- ("op_blob_slice_part", op_sync(op_blob_slice_part)),
- ("op_blob_read_part", op_async(op_blob_read_part)),
- ("op_blob_remove_part", op_sync(op_blob_remove_part)),
- (
- "op_blob_create_object_url",
- op_sync(op_blob_create_object_url),
- ),
- (
- "op_blob_revoke_object_url",
- op_sync(op_blob_revoke_object_url),
- ),
- ("op_blob_from_object_url", op_sync(op_blob_from_object_url)),
- (
- "op_message_port_create_entangled",
- op_sync(op_message_port_create_entangled),
- ),
- (
- "op_message_port_post_message",
- op_sync(op_message_port_post_message),
- ),
- (
- "op_message_port_recv_message",
- op_async(op_message_port_recv_message),
- ),
- (
- "op_compression_new",
- op_sync(compression::op_compression_new),
- ),
- (
- "op_compression_write",
- op_sync(compression::op_compression_write),
- ),
- (
- "op_compression_finish",
- op_sync(compression::op_compression_finish),
- ),
- ("op_now", op_sync(op_now::<P>)),
- ("op_timer_handle", op_sync(op_timer_handle)),
- ("op_sleep", op_async(op_sleep)),
- ("op_sleep_sync", op_sync(op_sleep_sync::<P>)),
+ op_base64_decode::decl(),
+ op_base64_encode::decl(),
+ op_base64_atob::decl(),
+ op_base64_btoa::decl(),
+ op_encoding_normalize_label::decl(),
+ op_encoding_new_decoder::decl(),
+ op_encoding_decode::decl(),
+ op_encoding_encode_into::decl(),
+ op_blob_create_part::decl(),
+ op_blob_slice_part::decl(),
+ op_blob_read_part::decl(),
+ op_blob_remove_part::decl(),
+ op_blob_create_object_url::decl(),
+ op_blob_revoke_object_url::decl(),
+ op_blob_from_object_url::decl(),
+ op_message_port_create_entangled::decl(),
+ op_message_port_post_message::decl(),
+ op_message_port_recv_message::decl(),
+ compression::op_compression_new::decl(),
+ compression::op_compression_write::decl(),
+ compression::op_compression_finish::decl(),
+ op_now::decl::<P>(),
+ op_timer_handle::decl(),
+ op_sleep::decl(),
+ op_sleep_sync::decl::<P>(),
])
.state(move |state| {
state.put(blob_store.clone());
@@ -147,6 +119,7 @@ pub fn init<P: TimersPermission + 'static>(
.build()
}
+#[op]
fn op_base64_decode(
_: &mut OpState,
input: String,
@@ -157,6 +130,7 @@ fn op_base64_decode(
Ok(b64_decode(&input)?.into())
}
+#[op]
fn op_base64_atob(
_: &mut OpState,
s: ByteString,
@@ -210,6 +184,7 @@ fn b64_decode(input: &[u8]) -> Result<Vec<u8>, AnyError> {
Ok(out)
}
+#[op]
fn op_base64_encode(
_: &mut OpState,
s: ZeroCopyBuf,
@@ -218,6 +193,7 @@ fn op_base64_encode(
Ok(b64_encode(&s))
}
+#[op]
fn op_base64_btoa(
_: &mut OpState,
s: ByteString,
@@ -240,6 +216,7 @@ struct DecoderOptions {
fatal: bool,
}
+#[op]
fn op_encoding_normalize_label(
_state: &mut OpState,
label: String,
@@ -255,6 +232,7 @@ fn op_encoding_normalize_label(
Ok(encoding.name().to_lowercase())
}
+#[op]
fn op_encoding_new_decoder(
state: &mut OpState,
options: DecoderOptions,
@@ -294,6 +272,7 @@ struct DecodeOptions {
stream: bool,
}
+#[op]
fn op_encoding_decode(
state: &mut OpState,
data: ZeroCopyBuf,
@@ -357,6 +336,7 @@ struct EncodeIntoResult {
written: usize,
}
+#[op]
fn op_encoding_encode_into(
_state: &mut OpState,
input: String,
diff --git a/ext/web/message_port.rs b/ext/web/message_port.rs
index 8734f9b65..7f2b18b3c 100644
--- a/ext/web/message_port.rs
+++ b/ext/web/message_port.rs
@@ -4,6 +4,8 @@ use std::rc::Rc;
use deno_core::error::type_error;
use deno_core::error::AnyError;
+use deno_core::op;
+
use deno_core::ZeroCopyBuf;
use deno_core::{CancelFuture, Resource};
use deno_core::{CancelHandle, OpState};
@@ -104,6 +106,7 @@ impl Resource for MessagePortResource {
}
}
+#[op]
pub fn op_message_port_create_entangled(
state: &mut OpState,
_: (),
@@ -185,6 +188,7 @@ pub struct JsMessageData {
transferables: Vec<JsTransferable>,
}
+#[op]
pub fn op_message_port_post_message(
state: &mut OpState,
rid: ResourceId,
@@ -203,6 +207,7 @@ pub fn op_message_port_post_message(
resource.port.send(state, data)
}
+#[op]
pub async fn op_message_port_recv_message(
state: Rc<RefCell<OpState>>,
rid: ResourceId,
diff --git a/ext/web/timers.rs b/ext/web/timers.rs
index 7f17aa969..9a78240f7 100644
--- a/ext/web/timers.rs
+++ b/ext/web/timers.rs
@@ -3,6 +3,8 @@
//! This module helps deno implement timers and performance APIs.
use deno_core::error::AnyError;
+use deno_core::op;
+
use deno_core::CancelFuture;
use deno_core::CancelHandle;
use deno_core::OpState;
@@ -25,6 +27,7 @@ pub type StartTime = Instant;
// since the start time of the deno runtime.
// If the High precision flag is not set, the
// nanoseconds are rounded on 2ms.
+#[op]
pub fn op_now<TP>(
state: &mut OpState,
_argument: (),
@@ -64,6 +67,7 @@ impl Resource for TimerHandle {
/// Creates a [`TimerHandle`] resource that can be used to cancel invocations of
/// [`op_sleep`].
+#[op]
pub fn op_timer_handle(
state: &mut OpState,
_: (),
@@ -77,6 +81,7 @@ pub fn op_timer_handle(
/// Waits asynchronously until either `millis` milliseconds have passed or the
/// [`TimerHandle`] resource given by `rid` has been canceled.
+#[op]
pub async fn op_sleep(
state: Rc<RefCell<OpState>>,
millis: u64,
@@ -89,6 +94,7 @@ pub async fn op_sleep(
Ok(())
}
+#[op]
pub fn op_sleep_sync<TP>(
state: &mut OpState,
millis: u64,