summaryrefslogtreecommitdiff
path: root/core/runtime.rs
diff options
context:
space:
mode:
Diffstat (limited to 'core/runtime.rs')
-rw-r--r--core/runtime.rs44
1 files changed, 36 insertions, 8 deletions
diff --git a/core/runtime.rs b/core/runtime.rs
index 1418e5791..096d26ca3 100644
--- a/core/runtime.rs
+++ b/core/runtime.rs
@@ -13,17 +13,18 @@ use crate::modules::ModuleId;
use crate::modules::ModuleLoadId;
use crate::modules::ModuleLoader;
use crate::modules::ModuleMap;
-use crate::modules::NoopModuleLoader;
use crate::op_void_async;
use crate::op_void_sync;
use crate::ops::*;
use crate::source_map::SourceMapCache;
use crate::source_map::SourceMapGetter;
use crate::Extension;
+use crate::NoopModuleLoader;
use crate::OpMiddlewareFn;
use crate::OpResult;
use crate::OpState;
use crate::PromiseId;
+use anyhow::Context as AnyhowContext;
use anyhow::Error;
use futures::channel::oneshot;
use futures::future::poll_fn;
@@ -605,9 +606,16 @@ impl JsRuntime {
None
};
- let loader = options
- .module_loader
- .unwrap_or_else(|| Rc::new(NoopModuleLoader));
+ let loader = if snapshot_options != SnapshotOptions::Load {
+ Rc::new(crate::modules::InternalModuleLoader::new(
+ options.module_loader,
+ ))
+ } else {
+ options
+ .module_loader
+ .unwrap_or_else(|| Rc::new(NoopModuleLoader))
+ };
+
{
let mut state = state_rc.borrow_mut();
state.global_realm = Some(JsRealm(global_context.clone()));
@@ -805,10 +813,30 @@ impl JsRuntime {
// Take extensions to avoid double-borrow
let extensions = std::mem::take(&mut self.extensions_with_js);
for ext in &extensions {
- let js_files = ext.init_js();
- for (filename, source) in js_files {
- // TODO(@AaronO): use JsRuntime::execute_static() here to move src off heap
- realm.execute_script(self.v8_isolate(), filename, source)?;
+ {
+ let js_files = ext.get_esm_sources();
+ for (filename, source) in js_files {
+ futures::executor::block_on(async {
+ let id = self
+ .load_side_module(
+ &ModuleSpecifier::parse(filename)?,
+ Some(source.to_string()),
+ )
+ .await?;
+ let receiver = self.mod_evaluate(id);
+ self.run_event_loop(false).await?;
+ receiver.await?
+ })
+ .with_context(|| format!("Couldn't execute '{filename}'"))?;
+ }
+ }
+
+ {
+ let js_files = ext.get_js_sources();
+ for (filename, source) in js_files {
+ // TODO(@AaronO): use JsRuntime::execute_static() here to move src off heap
+ realm.execute_script(self.v8_isolate(), filename, source)?;
+ }
}
}
// Restore extensions