Skip to content

Instantly share code, notes, and snippets.

@bartlomieju
Last active August 17, 2020 22:08
Show Gist options
  • Save bartlomieju/4a8d67fe8597c9ab216e9027b32e08ee to your computer and use it in GitHub Desktop.
Save bartlomieju/4a8d67fe8597c9ab216e9027b32e08ee to your computer and use it in GitHub Desktop.
let loader = Rc::new(RemoteLoader {});
let mut isolate = EsIsolate::new(loader, StartupData::None, false);
let mod_id = isolate.load_module(&specifier, Some(source_code)).await?;
isolate.mod_evaluate(mod_id)?;
struct RemoteLoader {}
impl ModuleLoader for RemoteLoader {
fn resolve(
&self,
specifier: &str,
referrer: &str,
_is_root: bool,
) -> Result<ModuleSpecifier, ErrBox> {
ModuleSpecifier::resolve_import(specifier, referrer).map_err(ErrBox::from)
}
fn load(
&self,
module_specifier: &ModuleSpecifier,
_maybe_referrer: Option<ModuleSpecifier>,
_is_dyn_import: bool,
) -> Pin<Box<ModuleSourceFuture>> {
let url = module_specifier.as_url().clone();
async move {
let response = reqwest::get(url.clone()).await?;
let final_url = response.url().clone();
let code = response.text().await?;
Ok(ModuleSource {
code,
module_url_specified: url.to_string(),
module_url_found: final_url.to_string(),
})
}
.boxed_local()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment