From 6825d7f13d51006967c2638b4433fb582cd6ddbc Mon Sep 17 00:00:00 2001 From: Casper Beyer Date: Fri, 2 Oct 2020 19:13:23 +0800 Subject: fix(cli/repl): use a default referrer when empty (#7794) This makes use of a default referrer when its empty in repl mode so that dynamic imports work in the global evaluation context. Co-authored-by: Bartek Iwanczuk --- core/modules.rs | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) (limited to 'core/modules.rs') diff --git a/core/modules.rs b/core/modules.rs index 294bcfb05..235bfeb4e 100644 --- a/core/modules.rs +++ b/core/modules.rs @@ -65,6 +65,7 @@ pub trait ModuleLoader { /// apply import map for child imports. fn resolve( &self, + op_state: Rc>, specifier: &str, referrer: &str, _is_main: bool, @@ -109,6 +110,7 @@ pub(crate) struct NoopModuleLoader; impl ModuleLoader for NoopModuleLoader { fn resolve( &self, + _op_state: Rc>, _specifier: &str, _referrer: &str, _is_main: bool, @@ -207,14 +209,23 @@ impl RecursiveModuleLoad { pub async fn prepare(self) -> (ModuleLoadId, Result) { let (module_specifier, maybe_referrer) = match self.state { LoadState::ResolveMain(ref specifier, _) => { - let spec = match self.loader.resolve(specifier, ".", true) { - Ok(spec) => spec, - Err(e) => return (self.id, Err(e)), - }; + let spec = + match self + .loader + .resolve(self.op_state.clone(), specifier, ".", true) + { + Ok(spec) => spec, + Err(e) => return (self.id, Err(e)), + }; (spec, None) } LoadState::ResolveImport(ref specifier, ref referrer) => { - let spec = match self.loader.resolve(specifier, referrer, false) { + let spec = match self.loader.resolve( + self.op_state.clone(), + specifier, + referrer, + false, + ) { Ok(spec) => spec, Err(e) => return (self.id, Err(e)), }; @@ -243,11 +254,13 @@ impl RecursiveModuleLoad { fn add_root(&mut self) -> Result<(), AnyError> { let module_specifier = match self.state { LoadState::ResolveMain(ref specifier, _) => { - self.loader.resolve(specifier, ".", true)? - } - LoadState::ResolveImport(ref specifier, ref referrer) => { - self.loader.resolve(specifier, referrer, false)? + self + .loader + .resolve(self.op_state.clone(), specifier, ".", true)? } + LoadState::ResolveImport(ref specifier, ref referrer) => self + .loader + .resolve(self.op_state.clone(), specifier, referrer, false)?, _ => unreachable!(), }; @@ -571,6 +584,7 @@ mod tests { impl ModuleLoader for MockLoader { fn resolve( &self, + _op_state: Rc>, specifier: &str, referrer: &str, _is_root: bool, -- cgit v1.2.3