summaryrefslogtreecommitdiff
path: root/cli/module_loader.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/module_loader.rs')
-rw-r--r--cli/module_loader.rs67
1 files changed, 24 insertions, 43 deletions
diff --git a/cli/module_loader.rs b/cli/module_loader.rs
index c14c953b2..e66e4e4fc 100644
--- a/cli/module_loader.rs
+++ b/cli/module_loader.rs
@@ -1,7 +1,8 @@
// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.
-use crate::module_graph::TypeLib;
+use crate::emit::TypeLib;
use crate::proc_state::ProcState;
+
use deno_core::error::AnyError;
use deno_core::futures::future::FutureExt;
use deno_core::futures::Future;
@@ -10,16 +11,12 @@ use deno_core::ModuleLoader;
use deno_core::ModuleSpecifier;
use deno_core::OpState;
use deno_runtime::permissions::Permissions;
-use import_map::ImportMap;
use std::cell::RefCell;
use std::pin::Pin;
use std::rc::Rc;
use std::str;
-pub struct CliModuleLoader {
- /// When flags contains a `.import_map_path` option, the content of the
- /// import map file will be resolved and set.
- pub import_map: Option<ImportMap>,
+pub(crate) struct CliModuleLoader {
pub lib: TypeLib,
/// The initial set of permissions used to resolve the static imports in the
/// worker. They are decoupled from the worker (dynamic) permissions since
@@ -36,10 +33,7 @@ impl CliModuleLoader {
TypeLib::DenoWindow
};
- let import_map = ps.maybe_import_map.clone();
-
Rc::new(CliModuleLoader {
- import_map,
lib,
root_permissions: Permissions::allow_all(),
ps,
@@ -54,7 +48,6 @@ impl CliModuleLoader {
};
Rc::new(CliModuleLoader {
- import_map: None,
lib,
root_permissions: permissions,
ps,
@@ -67,44 +60,25 @@ impl ModuleLoader for CliModuleLoader {
&self,
specifier: &str,
referrer: &str,
- is_main: bool,
+ _is_main: bool,
) -> Result<ModuleSpecifier, AnyError> {
- // FIXME(bartlomieju): hacky way to provide compatibility with repl
- let referrer = if referrer.is_empty() && self.ps.flags.repl {
- deno_core::DUMMY_SPECIFIER
- } else {
- referrer
- };
-
- // TODO(ry) I think we can remove this conditional. At the time of writing
- // we don't have any tests that fail if it was removed.
- // https://github.com/WICG/import-maps/issues/157
- if !is_main {
- if let Some(import_map) = &self.import_map {
- return import_map
- .resolve(specifier, referrer)
- .map_err(AnyError::from);
- }
- }
-
- let module_specifier = deno_core::resolve_import(specifier, referrer)?;
-
- Ok(module_specifier)
+ self.ps.resolve(specifier, referrer)
}
fn load(
&self,
module_specifier: &ModuleSpecifier,
maybe_referrer: Option<ModuleSpecifier>,
- _is_dynamic: bool,
+ is_dynamic: bool,
) -> Pin<Box<deno_core::ModuleSourceFuture>> {
let module_specifier = module_specifier.clone();
let ps = self.ps.clone();
- // NOTE: this block is async only because of `deno_core`
- // interface requirements; module was already loaded
- // when constructing module graph during call to `prepare_load`.
- async move { ps.load(module_specifier, maybe_referrer) }.boxed_local()
+ // NOTE: this block is async only because of `deno_core` interface
+ // requirements; module was already loaded when constructing module graph
+ // during call to `prepare_load`.
+ async move { ps.load(module_specifier, maybe_referrer, is_dynamic) }
+ .boxed_local()
}
fn prepare_load(
@@ -117,24 +91,31 @@ impl ModuleLoader for CliModuleLoader {
) -> Pin<Box<dyn Future<Output = Result<(), AnyError>>>> {
let specifier = specifier.clone();
let ps = self.ps.clone();
- let maybe_import_map = self.import_map.clone();
let state = op_state.borrow();
- let root_permissions = self.root_permissions.clone();
let dynamic_permissions = state.borrow::<Permissions>().clone();
+ let root_permissions = if is_dynamic {
+ dynamic_permissions.clone()
+ } else {
+ self.root_permissions.clone()
+ };
- let lib = self.lib.clone();
+ let lib = match self.lib {
+ TypeLib::DenoWindow => crate::emit::TypeLib::DenoWindow,
+ TypeLib::DenoWorker => crate::emit::TypeLib::DenoWorker,
+ TypeLib::UnstableDenoWindow => crate::emit::TypeLib::UnstableDenoWindow,
+ TypeLib::UnstableDenoWorker => crate::emit::TypeLib::UnstableDenoWorker,
+ };
drop(state);
// TODO(bartlomieju): `prepare_module_load` should take `load_id` param
async move {
ps.prepare_module_load(
- specifier,
+ vec![specifier],
+ is_dynamic,
lib,
root_permissions,
dynamic_permissions,
- is_dynamic,
- maybe_import_map,
)
.await
}