chore: upgrade starmelon dependencies

Upgrade deno_core 0.65 -> 0.127
This commit is contained in:
nobody 2023-09-22 20:41:34 +00:00
commit bdccb9cb88
Signed by: GrocerPublishAgent
GPG key ID: D460CD54A9E3AB86
6 changed files with 47 additions and 125 deletions

View file

@ -24,7 +24,7 @@ rustc-hash = "1.1"
home = "0.5" home = "0.5"
# Required to transpile view functions to Rust # Required to transpile view functions to Rust
genco = "0.15" genco = "0.17"
# Required to generate fixture Elm files # Required to generate fixture Elm files
genco-extra = { path = "../../../infra/genco-extra" } 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 # 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 # same versions as other projects in our cargo workspace. Multiple different
# versions of rusty_v8 seem to break its build script. # versions of rusty_v8 seem to break its build script.
deno_runtime = "0.65" deno_runtime = "0.127"
tokio = { version = "1.17", features = ["full"] } tokio = { version = "1.32", features = ["full"] }
deno_core = "0.139" deno_core = "0.214"
deno_web = "0.88" deno_web = "0.150"
futures = "0.3" futures = "0.3"
# Required to add sql query support to interpreter. Because deno expects sync # 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 # functions. I read the code for oneshot
# (https://github.com/faern/oneshot/commit/9aa237f185e1b65d61bf92c20350cf7bee0aa88b) # (https://github.com/faern/oneshot/commit/9aa237f185e1b65d61bf92c20350cf7bee0aa88b)
# and it looks reasonable. # 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" oneshot = "0.1.3"
# required for livetable derive macro # required for livetable derive macro

View file

@ -5,6 +5,7 @@ use deno_core::{v8, Extension, OpState};
use elm_project_utils::{setup_generator_project, ElmPostProcessor, ElmResult}; use elm_project_utils::{setup_generator_project, ElmPostProcessor, ElmResult};
use os_pipe::dup_stderr; use os_pipe::dup_stderr;
use sqlx::sqlite::SqlitePool; use sqlx::sqlite::SqlitePool;
use std::borrow::Cow;
use std::cell::RefCell; use std::cell::RefCell;
use std::convert::TryFrom; use std::convert::TryFrom;
use std::fs; use std::fs;
@ -258,18 +259,17 @@ pub(crate) fn run(
let mailbox: Arc<RefCell<Option<Result<Vec<u8>, ScriptError>>>> = Arc::new(RefCell::new(None)); let mailbox: Arc<RefCell<Option<Result<Vec<u8>, ScriptError>>>> = Arc::new(RefCell::new(None));
let mailbox_clone = Arc::clone(&mailbox); let mailbox_clone = Arc::clone(&mailbox);
let mut extensions = vec![Extension::builder() let mut extensions = vec![Extension {
.ops(vec![ ops: Cow::Owned(vec![
op_starmelon_bytes_output::decl(), op_starmelon_bytes_output::decl(),
op_starmelon_string_output::decl(), op_starmelon_string_output::decl(),
op_starmelon_problem::decl(), op_starmelon_problem::decl(),
]) ]),
.state(move |state| { op_state_fn: Some(Box::new(move |state| {
state.put(Arc::clone(&mailbox_clone)); state.put(Arc::clone(&mailbox_clone));
})),
Ok(()) ..Default::default()
}) }];
.build()];
let sql_background_thread_handle = if let Some(database_url) = sqlite_path { 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 // 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] #[deno_core::op]
fn op_starmelon_bytes_output( fn op_starmelon_bytes_output(
state: &mut OpState, state: &mut OpState,
msg: ElmResult<deno_core::ZeroCopyBuf, ScriptError>, msg: ElmResult<deno_core::JsBuffer, ScriptError>,
) -> Result<(), deno_core::error::AnyError> { ) -> Result<(), deno_core::error::AnyError> {
let mailbox_clone = state.borrow::<OutputMailbox>(); let mailbox_clone = state.borrow::<OutputMailbox>();
if let Ok(mut mailbox) = mailbox_clone.try_borrow_mut() { if let Ok(mut mailbox) = mailbox_clone.try_borrow_mut() {

View file

@ -4,6 +4,7 @@ use deno_core::{Extension, OpState};
use elm_project_utils::{setup_generator_project, ElmPostProcessor}; use elm_project_utils::{setup_generator_project, ElmPostProcessor};
use os_pipe::dup_stderr; use os_pipe::dup_stderr;
use serde::Deserialize; use serde::Deserialize;
use std::borrow::Cow;
use std::cell::RefCell; use std::cell::RefCell;
use std::fs; use std::fs;
use std::io::Write; use std::io::Write;
@ -174,14 +175,13 @@ pub(crate) fn run(
let mailbox: Arc<RefCell<Option<Vec<FileDefinition>>>> = Arc::new(RefCell::new(None)); let mailbox: Arc<RefCell<Option<Vec<FileDefinition>>>> = Arc::new(RefCell::new(None));
let mailbox_clone = Arc::clone(&mailbox); let mailbox_clone = Arc::clone(&mailbox);
let extensions = vec![Extension::builder() let extensions = vec![Extension {
.ops(vec![op_starmelon_elm_css_files_output::decl()]) ops: Cow::Owned(vec![op_starmelon_elm_css_files_output::decl()]),
.state(move |state| { op_state_fn: Some(Box::new(move |state| {
state.put(Arc::clone(&mailbox_clone)); state.put(Arc::clone(&mailbox_clone));
})),
Ok(()) ..Default::default()
}) }];
.build()];
drop(timing_guard); drop(timing_guard);

View file

@ -1,9 +1,10 @@
use deno_core::futures::StreamExt; use deno_core::futures::StreamExt;
use deno_core::{Extension, OpState}; use deno_core::{Extension, Op, OpState};
use elm_project_utils::ElmResult; use elm_project_utils::ElmResult;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use serde_json::{value::Map, value::Number, Value}; use serde_json::{value::Map, value::Number, Value};
use sqlx::{sqlite::SqlitePool, Column, Row, TypeInfo, ValueRef}; use sqlx::{sqlite::SqlitePool, Column, Row, TypeInfo, ValueRef};
use std::borrow::Cow;
use std::thread::JoinHandle; use std::thread::JoinHandle;
use std::time::Instant; use std::time::Instant;
use tokio; use tokio;
@ -111,14 +112,13 @@ pub(crate) fn init(db_pool: SqlitePool) -> Result<(Extension, JoinHandle<()>), (
} }
}); });
let worker_mailbox_clone = worker_mailbox.clone(); let worker_mailbox_clone = worker_mailbox.clone();
let extension = Extension::builder() let extension = Extension {
.ops(vec![op_starmelon_batch_queries::decl()]) ops: Cow::Owned(vec![op_starmelon_batch_queries::DECL]),
.state(move |state| { op_state_fn: Some(Box::new(move |state| {
state.put(worker_mailbox_clone.clone()); state.put(worker_mailbox_clone.clone());
})),
Ok(()) ..Default::default()
}) };
.build();
Ok((extension, sql_worker_thread)) Ok((extension, sql_worker_thread))
} }

View file

@ -175,7 +175,7 @@ mod runtime {
use deno_core::futures::FutureExt; use deno_core::futures::FutureExt;
use deno_core::{resolve_url, Extension, FsModuleLoader, ModuleLoader, ModuleSpecifier}; use deno_core::{resolve_url, Extension, FsModuleLoader, ModuleLoader, ModuleSpecifier};
use deno_runtime::deno_broadcast_channel::InMemoryBroadcastChannel; 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::MainWorker;
use deno_runtime::worker::WorkerOptions; use deno_runtime::worker::WorkerOptions;
use deno_runtime::BootstrapOptions; use deno_runtime::BootstrapOptions;
@ -193,53 +193,29 @@ mod runtime {
extensions: Vec<Extension>, extensions: Vec<Extension>,
path_str: &str, path_str: &str,
) -> Result<(MainWorker, ModuleSpecifier), AnyError> { ) -> Result<(MainWorker, ModuleSpecifier), AnyError> {
//let module_loader = Rc::new(EmbeddedModuleLoader("void".to_owned()));
let module_loader = Rc::new(FsModuleLoader); 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 { let options = WorkerOptions {
bootstrap: BootstrapOptions { bootstrap: BootstrapOptions {
args: vec![], args: vec![],
cpu_count: 1, cpu_count: 1,
debug_flag: false,
enable_testing_features: false, enable_testing_features: false,
location: None, location: None,
no_color: false, no_color: false,
is_tty: 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(), ts_version: "2.0.0".to_string(),
unstable: false, unstable: false,
user_agent: "starmelon".to_string(), user_agent: "starmelon".to_string(),
..Default::default()
}, },
extensions: extensions, extensions,
unsafely_ignore_certificate_errors: None, ..Default::default()
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(),
}; };
let main_module = deno_core::resolve_path(path_str)?; let main_module = ModuleSpecifier::from_file_path(path_str)
// note: resolve_url is just calling url::Url::parse and mapping the error type .map_err(|_| AnyError::msg("path is not absolute"))?;
// let main_module = resolve_url(SPECIFIER)?; let permissions = PermissionsContainer::allow_all();
let permissions = Permissions::allow_all();
let worker = MainWorker::from_options(main_module.clone(), permissions, options); let worker = MainWorker::from_options(main_module.clone(), permissions, options);
//worker.bootstrap(&options); //worker.bootstrap(&options);
@ -277,58 +253,4 @@ mod runtime {
Ok(()) 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<ModuleSpecifier, AnyError> {
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<ModuleSpecifier>,
_is_dyn_import: bool,
) -> Pin<Box<deno_core::ModuleSourceFuture>> {
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()
}
}
} }

View file

@ -4,6 +4,7 @@ use deno_core::{Extension, OpState};
use elm_project_utils::{setup_generator_project, ElmResult}; use elm_project_utils::{setup_generator_project, ElmResult};
use os_pipe::dup_stderr; use os_pipe::dup_stderr;
use sqlx::sqlite::SqlitePool; use sqlx::sqlite::SqlitePool;
use std::borrow::Cow;
use std::cell::RefCell; use std::cell::RefCell;
use std::convert::TryFrom; use std::convert::TryFrom;
use std::fs; use std::fs;
@ -284,18 +285,17 @@ pub(crate) fn run(
let mailbox: Arc<RefCell<Option<Result<Vec<u8>, String>>>> = Arc::new(RefCell::new(None)); let mailbox: Arc<RefCell<Option<Result<Vec<u8>, String>>>> = Arc::new(RefCell::new(None));
let mailbox_clone = Arc::clone(&mailbox); let mailbox_clone = Arc::clone(&mailbox);
let mut extensions = vec![Extension::builder() let mut extensions = vec![Extension {
.ops(vec![ ops: Cow::Owned(vec![
op_starmelon_bytes_output::decl(), op_starmelon_bytes_output::decl(),
op_starmelon_string_output::decl(), op_starmelon_string_output::decl(),
op_starmelon_problem::decl(), op_starmelon_problem::decl(),
]) ]),
.state(move |state| { op_state_fn: Some(Box::new(move |state| {
state.put(Arc::clone(&mailbox_clone)); state.put(Arc::clone(&mailbox_clone));
})),
Ok(()) ..Default::default()
}) }];
.build()];
let span = info_span!("register private api"); let span = info_span!("register private api");
let timing_guard = span.enter(); let timing_guard = span.enter();
@ -483,7 +483,7 @@ fn op_starmelon_problem(
#[deno_core::op] #[deno_core::op]
fn op_starmelon_bytes_output( fn op_starmelon_bytes_output(
state: &mut OpState, state: &mut OpState,
msg: ElmResult<deno_core::ZeroCopyBuf, String>, msg: ElmResult<deno_core::JsBuffer, String>,
) -> Result<(), deno_core::error::AnyError> { ) -> Result<(), deno_core::error::AnyError> {
let mailbox_clone = state.borrow::<OutputMailbox>(); let mailbox_clone = state.borrow::<OutputMailbox>();
if let Ok(mut mailbox) = mailbox_clone.try_borrow_mut() { if let Ok(mut mailbox) = mailbox_clone.try_borrow_mut() {