From bdccb9cb88fdaeb013f03dd7e472e62482b69e6e Mon Sep 17 00:00:00 2001 From: nobody Date: Fri, 22 Sep 2023 20:41:34 +0000 Subject: [PATCH] chore: upgrade starmelon dependencies Upgrade deno_core 0.65 -> 0.127 --- Cargo.toml | 12 ++--- src/exec/astrid_pages.rs | 18 +++---- src/exec/css_in_elm.rs | 14 +++--- src/exec/fixtures/sqlite.rs | 16 +++---- src/exec/mod.rs | 94 ++++--------------------------------- src/exec/scripting.rs | 18 +++---- 6 files changed, 47 insertions(+), 125 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index b6493ac..d233548 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -24,7 +24,7 @@ rustc-hash = "1.1" home = "0.5" # Required to transpile view functions to Rust -genco = "0.15" +genco = "0.17" # Required to generate fixture Elm files genco-extra = { path = "../../../infra/genco-extra" } @@ -32,10 +32,10 @@ genco-extra = { path = "../../../infra/genco-extra" } # All of these are required for deno's javascript runtime. We need to keep the # same versions as other projects in our cargo workspace. Multiple different # versions of rusty_v8 seem to break its build script. -deno_runtime = "0.65" -tokio = { version = "1.17", features = ["full"] } -deno_core = "0.139" -deno_web = "0.88" +deno_runtime = "0.127" +tokio = { version = "1.32", features = ["full"] } +deno_core = "0.214" +deno_web = "0.150" futures = "0.3" # Required to add sql query support to interpreter. Because deno expects sync @@ -43,7 +43,7 @@ futures = "0.3" # functions. I read the code for oneshot # (https://github.com/faern/oneshot/commit/9aa237f185e1b65d61bf92c20350cf7bee0aa88b) # and it looks reasonable. -sqlx = { version = "0.6", features = [ "sqlite", "macros", "runtime-tokio-rustls", "chrono", "json", "uuid" ] } +sqlx = { version = "0.7", features = [ "sqlite", "macros", "runtime-tokio", "chrono", "json", "uuid" ] } oneshot = "0.1.3" # required for livetable derive macro diff --git a/src/exec/astrid_pages.rs b/src/exec/astrid_pages.rs index 08ddfae..9059412 100644 --- a/src/exec/astrid_pages.rs +++ b/src/exec/astrid_pages.rs @@ -5,6 +5,7 @@ use deno_core::{v8, Extension, OpState}; use elm_project_utils::{setup_generator_project, ElmPostProcessor, ElmResult}; use os_pipe::dup_stderr; use sqlx::sqlite::SqlitePool; +use std::borrow::Cow; use std::cell::RefCell; use std::convert::TryFrom; use std::fs; @@ -258,18 +259,17 @@ pub(crate) fn run( let mailbox: Arc, ScriptError>>>> = Arc::new(RefCell::new(None)); let mailbox_clone = Arc::clone(&mailbox); - let mut extensions = vec![Extension::builder() - .ops(vec![ + let mut extensions = vec![Extension { + ops: Cow::Owned(vec![ op_starmelon_bytes_output::decl(), op_starmelon_string_output::decl(), op_starmelon_problem::decl(), - ]) - .state(move |state| { + ]), + op_state_fn: Some(Box::new(move |state| { state.put(Arc::clone(&mailbox_clone)); - - Ok(()) - }) - .build()]; + })), + ..Default::default() + }]; let sql_background_thread_handle = if let Some(database_url) = sqlite_path { // I want to construct the connection in the initial thread so I can tell if the connection @@ -358,7 +358,7 @@ fn op_starmelon_problem( #[deno_core::op] fn op_starmelon_bytes_output( state: &mut OpState, - msg: ElmResult, + msg: ElmResult, ) -> Result<(), deno_core::error::AnyError> { let mailbox_clone = state.borrow::(); if let Ok(mut mailbox) = mailbox_clone.try_borrow_mut() { diff --git a/src/exec/css_in_elm.rs b/src/exec/css_in_elm.rs index 36bc93c..c3b970a 100644 --- a/src/exec/css_in_elm.rs +++ b/src/exec/css_in_elm.rs @@ -4,6 +4,7 @@ use deno_core::{Extension, OpState}; use elm_project_utils::{setup_generator_project, ElmPostProcessor}; use os_pipe::dup_stderr; use serde::Deserialize; +use std::borrow::Cow; use std::cell::RefCell; use std::fs; use std::io::Write; @@ -174,14 +175,13 @@ pub(crate) fn run( let mailbox: Arc>>> = Arc::new(RefCell::new(None)); let mailbox_clone = Arc::clone(&mailbox); - let extensions = vec![Extension::builder() - .ops(vec![op_starmelon_elm_css_files_output::decl()]) - .state(move |state| { + let extensions = vec![Extension { + ops: Cow::Owned(vec![op_starmelon_elm_css_files_output::decl()]), + op_state_fn: Some(Box::new(move |state| { state.put(Arc::clone(&mailbox_clone)); - - Ok(()) - }) - .build()]; + })), + ..Default::default() + }]; drop(timing_guard); diff --git a/src/exec/fixtures/sqlite.rs b/src/exec/fixtures/sqlite.rs index 779eacd..be66f9f 100644 --- a/src/exec/fixtures/sqlite.rs +++ b/src/exec/fixtures/sqlite.rs @@ -1,9 +1,10 @@ use deno_core::futures::StreamExt; -use deno_core::{Extension, OpState}; +use deno_core::{Extension, Op, OpState}; use elm_project_utils::ElmResult; use serde::{Deserialize, Serialize}; use serde_json::{value::Map, value::Number, Value}; use sqlx::{sqlite::SqlitePool, Column, Row, TypeInfo, ValueRef}; +use std::borrow::Cow; use std::thread::JoinHandle; use std::time::Instant; use tokio; @@ -111,14 +112,13 @@ pub(crate) fn init(db_pool: SqlitePool) -> Result<(Extension, JoinHandle<()>), ( } }); let worker_mailbox_clone = worker_mailbox.clone(); - let extension = Extension::builder() - .ops(vec![op_starmelon_batch_queries::decl()]) - .state(move |state| { + let extension = Extension { + ops: Cow::Owned(vec![op_starmelon_batch_queries::DECL]), + op_state_fn: Some(Box::new(move |state| { state.put(worker_mailbox_clone.clone()); - - Ok(()) - }) - .build(); + })), + ..Default::default() + }; Ok((extension, sql_worker_thread)) } diff --git a/src/exec/mod.rs b/src/exec/mod.rs index 24ed7bc..b99ba94 100644 --- a/src/exec/mod.rs +++ b/src/exec/mod.rs @@ -175,7 +175,7 @@ mod runtime { use deno_core::futures::FutureExt; use deno_core::{resolve_url, Extension, FsModuleLoader, ModuleLoader, ModuleSpecifier}; use deno_runtime::deno_broadcast_channel::InMemoryBroadcastChannel; - use deno_runtime::permissions::Permissions; + use deno_runtime::permissions::PermissionsContainer; use deno_runtime::worker::MainWorker; use deno_runtime::worker::WorkerOptions; use deno_runtime::BootstrapOptions; @@ -193,53 +193,29 @@ mod runtime { extensions: Vec, path_str: &str, ) -> Result<(MainWorker, ModuleSpecifier), AnyError> { - //let module_loader = Rc::new(EmbeddedModuleLoader("void".to_owned())); let module_loader = Rc::new(FsModuleLoader); - let create_web_worker_cb = Arc::new(|_| { - todo!("Web workers are not supported in the example"); - }); - let web_worker_preload_module_cb = Arc::new(|_| { - todo!("Web workers are not supported in the example"); - }); let options = WorkerOptions { bootstrap: BootstrapOptions { args: vec![], cpu_count: 1, - debug_flag: false, enable_testing_features: false, location: None, no_color: false, is_tty: false, - runtime_version: "0.50.0".to_string(), + runtime_version: "0.127.0".to_string(), ts_version: "2.0.0".to_string(), unstable: false, user_agent: "starmelon".to_string(), + ..Default::default() }, - extensions: extensions, - unsafely_ignore_certificate_errors: None, - root_cert_store: None, - seed: None, - module_loader, - create_web_worker_cb, - web_worker_preload_module_cb, - format_js_error_fn: None, - source_map_getter: None, - maybe_inspector_server: None, - should_break_on_first_statement: false, - get_error_class_fn: Some(&get_error_class_name), - origin_storage_dir: None, - blob_store: BlobStore::default(), - broadcast_channel: InMemoryBroadcastChannel::default(), - shared_array_buffer_store: None, - compiled_wasm_module_store: None, - stdio: deno_runtime::ops::io::Stdio::default(), + extensions, + ..Default::default() }; - let main_module = deno_core::resolve_path(path_str)?; - // note: resolve_url is just calling url::Url::parse and mapping the error type - // let main_module = resolve_url(SPECIFIER)?; - let permissions = Permissions::allow_all(); + let main_module = ModuleSpecifier::from_file_path(path_str) + .map_err(|_| AnyError::msg("path is not absolute"))?; + let permissions = PermissionsContainer::allow_all(); let worker = MainWorker::from_options(main_module.clone(), permissions, options); //worker.bootstrap(&options); @@ -277,58 +253,4 @@ mod runtime { Ok(()) } - - const SPECIFIER: &str = "file://$deno$/bundle.js"; - - struct EmbeddedModuleLoader(String); - - impl ModuleLoader for EmbeddedModuleLoader { - fn resolve( - &self, - specifier: &str, - _referrer: &str, - _is_main: bool, - ) -> Result { - if let Ok(module_specifier) = resolve_url(specifier) { - //if get_source_from_data_url(&module_specifier).is_ok() - // || specifier == SPECIFIER - //{ - return Ok(module_specifier); - //} - } - Err(type_error( - "Self-contained binaries don't support module loading", - )) - } - - fn load( - &self, - module_specifier: &ModuleSpecifier, - _maybe_referrer: Option, - _is_dyn_import: bool, - ) -> Pin> { - let module_specifier = module_specifier.clone(); - //let is_data_uri = get_source_from_data_url(&module_specifier).ok(); - //let code = if let Some((ref source, _)) = is_data_uri { - // source.to_string() - //} else { - let code: Box<[u8]> = self.0.as_bytes().into(); - //}; - async move { - //if is_data_uri.is_none() && module_specifier.to_string() != SPECIFIER { - // return Err(type_error( - // "Self-contained binaries don't support module loading", - // )); - //} - - Ok(deno_core::ModuleSource { - code, - module_type: deno_core::ModuleType::JavaScript, - module_url_specified: module_specifier.to_string(), - module_url_found: module_specifier.to_string(), - }) - } - .boxed_local() - } - } } diff --git a/src/exec/scripting.rs b/src/exec/scripting.rs index f19d463..2b6979e 100644 --- a/src/exec/scripting.rs +++ b/src/exec/scripting.rs @@ -4,6 +4,7 @@ use deno_core::{Extension, OpState}; use elm_project_utils::{setup_generator_project, ElmResult}; use os_pipe::dup_stderr; use sqlx::sqlite::SqlitePool; +use std::borrow::Cow; use std::cell::RefCell; use std::convert::TryFrom; use std::fs; @@ -284,18 +285,17 @@ pub(crate) fn run( let mailbox: Arc, String>>>> = Arc::new(RefCell::new(None)); let mailbox_clone = Arc::clone(&mailbox); - let mut extensions = vec![Extension::builder() - .ops(vec![ + let mut extensions = vec![Extension { + ops: Cow::Owned(vec![ op_starmelon_bytes_output::decl(), op_starmelon_string_output::decl(), op_starmelon_problem::decl(), - ]) - .state(move |state| { + ]), + op_state_fn: Some(Box::new(move |state| { state.put(Arc::clone(&mailbox_clone)); - - Ok(()) - }) - .build()]; + })), + ..Default::default() + }]; let span = info_span!("register private api"); let timing_guard = span.enter(); @@ -483,7 +483,7 @@ fn op_starmelon_problem( #[deno_core::op] fn op_starmelon_bytes_output( state: &mut OpState, - msg: ElmResult, + msg: ElmResult, ) -> Result<(), deno_core::error::AnyError> { let mailbox_clone = state.borrow::(); if let Ok(mut mailbox) = mailbox_clone.try_borrow_mut() {