diff options
Diffstat (limited to 'ext/web/lib.rs')
-rw-r--r-- | ext/web/lib.rs | 147 |
1 files changed, 83 insertions, 64 deletions
diff --git a/ext/web/lib.rs b/ext/web/lib.rs index 6a21a7470..dfc5ece72 100644 --- a/ext/web/lib.rs +++ b/ext/web/lib.rs @@ -16,6 +16,7 @@ use deno_core::v8; use deno_core::ByteString; use deno_core::CancelHandle; use deno_core::Extension; +use deno_core::ExtensionBuilder; use deno_core::OpState; use deno_core::Resource; use deno_core::ResourceId; @@ -57,74 +58,92 @@ use crate::timers::op_timer_handle; use crate::timers::StartTime; pub use crate::timers::TimersPermission; -/// Load and execute the javascript code. -pub fn init<P: TimersPermission + 'static>( - blob_store: BlobStore, - maybe_location: Option<Url>, -) -> Extension { +fn ext() -> ExtensionBuilder { Extension::builder_with_deps( env!("CARGO_PKG_NAME"), &["deno_webidl", "deno_console", "deno_url"], ) - .esm(include_js_files!( - "00_infra.js", - "01_dom_exception.js", - "01_mimesniff.js", - "02_event.js", - "02_structured_clone.js", - "02_timers.js", - "03_abort_signal.js", - "04_global_interfaces.js", - "05_base64.js", - "06_streams.js", - "08_text_encoding.js", - "09_file.js", - "10_filereader.js", - "11_blob_url.js", - "12_location.js", - "13_message_port.js", - "14_compression.js", - "15_performance.js", - )) - .ops(vec![ - op_base64_decode::decl(), - op_base64_encode::decl(), - op_base64_atob::decl(), - op_base64_btoa::decl(), - op_encoding_normalize_label::decl(), - op_encoding_decode_single::decl(), - op_encoding_decode_utf8::decl(), - op_encoding_new_decoder::decl(), - op_encoding_decode::decl(), - op_encoding_encode_into::decl(), - op_encode_binary_string::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_cancel_handle::decl(), - op_sleep::decl(), - op_transfer_arraybuffer::decl(), - ]) - .state(move |state| { - state.put(blob_store.clone()); - if let Some(location) = maybe_location.clone() { - state.put(Location(location)); - } - state.put(StartTime::now()); - }) - .build() +} + +fn ops<P: TimersPermission + 'static>( + ext: &mut ExtensionBuilder, + blob_store: BlobStore, + maybe_location: Option<Url>, +) -> &mut ExtensionBuilder { + ext + .ops(vec![ + op_base64_decode::decl(), + op_base64_encode::decl(), + op_base64_atob::decl(), + op_base64_btoa::decl(), + op_encoding_normalize_label::decl(), + op_encoding_decode_single::decl(), + op_encoding_decode_utf8::decl(), + op_encoding_new_decoder::decl(), + op_encoding_decode::decl(), + op_encoding_encode_into::decl(), + op_encode_binary_string::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_cancel_handle::decl(), + op_sleep::decl(), + op_transfer_arraybuffer::decl(), + ]) + .state(move |state| { + state.put(blob_store.clone()); + if let Some(location) = maybe_location.clone() { + state.put(Location(location)); + } + state.put(StartTime::now()); + }) +} + +pub fn init_ops_and_esm<P: TimersPermission + 'static>( + blob_store: BlobStore, + maybe_location: Option<Url>, +) -> Extension { + ops::<P>(&mut ext(), blob_store, maybe_location) + .esm(include_js_files!( + "00_infra.js", + "01_dom_exception.js", + "01_mimesniff.js", + "02_event.js", + "02_structured_clone.js", + "02_timers.js", + "03_abort_signal.js", + "04_global_interfaces.js", + "05_base64.js", + "06_streams.js", + "08_text_encoding.js", + "09_file.js", + "10_filereader.js", + "11_blob_url.js", + "12_location.js", + "13_message_port.js", + "14_compression.js", + "15_performance.js", + )) + .build() +} + +pub fn init_ops<P: TimersPermission + 'static>( + blob_store: BlobStore, + maybe_location: Option<Url>, +) -> Extension { + ops::<P>(&mut ext(), blob_store, maybe_location).build() } #[op] |