diff options
author | Nayeem Rahman <nayeemrmn99@gmail.com> | 2022-04-27 00:06:10 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-27 01:06:10 +0200 |
commit | 9853c96cc4686a6cd1ffa1e9081c012b8df72ff7 (patch) | |
tree | c631ebfc363c06c468367be7ecd5b98110dde3a0 /runtime/web_worker.rs | |
parent | 58eab0e2b37fd8c3c83445196d4bde419740373d (diff) |
refactor: Remove PrettyJsError and js_error_create_fn (#14378)
This commit:
- removes "fmt_errors::PrettyJsError" in favor of "format_js_error" fn
- removes "deno_core::JsError::create" and
"deno_core::RuntimeOptions::js_error_create_fn"
- adds new option to "deno_runtime::ops::worker_host::init"
Diffstat (limited to 'runtime/web_worker.rs')
-rw-r--r-- | runtime/web_worker.rs | 29 |
1 files changed, 22 insertions, 7 deletions
diff --git a/runtime/web_worker.rs b/runtime/web_worker.rs index a1f5ea2ee..9f120539c 100644 --- a/runtime/web_worker.rs +++ b/runtime/web_worker.rs @@ -6,6 +6,7 @@ use crate::ops; use crate::ops::io::Stdio; use crate::permissions::Permissions; use crate::tokio_util::run_basic; +use crate::worker::FormatJsErrorFn; use crate::BootstrapOptions; use deno_broadcast_channel::InMemoryBroadcastChannel; use deno_core::error::AnyError; @@ -23,7 +24,6 @@ use deno_core::CancelHandle; use deno_core::CompiledWasmModuleStore; use deno_core::Extension; use deno_core::GetErrorClassFn; -use deno_core::JsErrorCreateFn; use deno_core::JsRuntime; use deno_core::ModuleId; use deno_core::ModuleLoader; @@ -94,7 +94,10 @@ impl Serialize for WorkerControlEvent { | WorkerControlEvent::Error(error) => { let value = match error.downcast_ref::<JsError>() { Some(js_error) => { - let frame = js_error.frames.first(); + let frame = js_error.frames.iter().find(|f| match &f.file_name { + Some(s) => !s.trim_start_matches('[').starts_with("deno:"), + None => false, + }); json!({ "message": js_error.exception_message, "fileName": frame.map(|f| f.file_name.as_ref()), @@ -325,8 +328,8 @@ pub struct WebWorkerOptions { pub module_loader: Rc<dyn ModuleLoader>, pub create_web_worker_cb: Arc<ops::worker_host::CreateWebWorkerCb>, pub preload_module_cb: Arc<ops::worker_host::PreloadModuleCb>, + pub format_js_error_fn: Option<Arc<FormatJsErrorFn>>, pub source_map_getter: Option<Box<dyn SourceMapGetter>>, - pub js_error_create_fn: Option<Rc<JsErrorCreateFn>>, pub use_deno_namespace: bool, pub worker_type: WebWorkerType, pub maybe_inspector_server: Option<Arc<InspectorServer>>, @@ -408,6 +411,7 @@ impl WebWorker { ops::worker_host::init( options.create_web_worker_cb.clone(), options.preload_module_cb.clone(), + options.format_js_error_fn.clone(), ), // Extensions providing Deno.* features ops::fs_events::init().enabled(options.use_deno_namespace), @@ -445,7 +449,6 @@ impl WebWorker { module_loader: Some(options.module_loader.clone()), startup_snapshot: Some(js::deno_isolate_init()), source_map_getter: options.source_map_getter, - js_error_create_fn: options.js_error_create_fn.clone(), get_error_class_fn: options.get_error_class_fn, shared_array_buffer_store: options.shared_array_buffer_store.clone(), compiled_wasm_module_store: options.compiled_wasm_module_store.clone(), @@ -646,7 +649,18 @@ impl WebWorker { } } -fn print_worker_error(error_str: String, name: &str) { +fn print_worker_error( + error: &AnyError, + name: &str, + format_js_error_fn: Option<&FormatJsErrorFn>, +) { + let error_str = match format_js_error_fn { + Some(format_js_error_fn) => match error.downcast_ref::<JsError>() { + Some(js_error) => format_js_error_fn(js_error), + None => error.to_string(), + }, + None => error.to_string(), + }; eprintln!( "{}: Uncaught (in worker \"{}\") {}", colors::red_bold("error"), @@ -662,6 +676,7 @@ pub fn run_web_worker( specifier: ModuleSpecifier, maybe_source_code: Option<String>, preload_module_cb: Arc<ops::worker_host::PreloadModuleCb>, + format_js_error_fn: Option<Arc<FormatJsErrorFn>>, ) -> Result<(), AnyError> { let name = worker.name.to_string(); @@ -675,7 +690,7 @@ pub fn run_web_worker( let mut worker = match result { Ok(worker) => worker, Err(e) => { - print_worker_error(e.to_string(), &name); + print_worker_error(&e, &name, format_js_error_fn.as_deref()); internal_handle .post_event(WorkerControlEvent::TerminalError(e)) .expect("Failed to post message to host"); @@ -715,7 +730,7 @@ pub fn run_web_worker( }; if let Err(e) = result { - print_worker_error(e.to_string(), &name); + print_worker_error(&e, &name, format_js_error_fn.as_deref()); internal_handle .post_event(WorkerControlEvent::TerminalError(e)) .expect("Failed to post message to host"); |