summaryrefslogtreecommitdiff
path: root/cli/ops.rs
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2019-06-09 15:08:20 +0200
committerRyan Dahl <ry@tinyclouds.org>2019-06-09 09:08:20 -0400
commita115340288d974f141cceb16faac71914402c445 (patch)
tree80353d2579e6d6dc9febd449f1f779ffa62c8397 /cli/ops.rs
parent8ec5276d30dac59ced0ca7e35e07e20644ee2188 (diff)
feat: Import maps (#2360)
Diffstat (limited to 'cli/ops.rs')
-rw-r--r--cli/ops.rs25
1 files changed, 23 insertions, 2 deletions
diff --git a/cli/ops.rs b/cli/ops.rs
index c76983c47..f39daaab6 100644
--- a/cli/ops.rs
+++ b/cli/ops.rs
@@ -29,6 +29,7 @@ use crate::worker::Worker;
use deno::js_check;
use deno::Buf;
use deno::JSError;
+//use deno::Loader;
use deno::Op;
use deno::PinnedBuf;
use flatbuffers::FlatBufferBuilder;
@@ -499,10 +500,30 @@ fn op_fetch_module_meta_data(
let use_cache = !state.flags.reload;
let no_fetch = state.flags.no_fetch;
+ // TODO(bartlomieju): I feel this is wrong - specifier is only resolved if there's an
+ // import map - why it is not always resolved? Eg. "bad-module.ts" will return NotFound
+ // error whilst it should return RelativeUrlWithCannotBeABaseBase error
+ let resolved_specifier = match &state.import_map {
+ Some(import_map) => {
+ match import_map.resolve(specifier, referrer) {
+ Ok(result) => match result {
+ Some(url) => url.clone(),
+ None => specifier.to_string(),
+ },
+ Err(err) => panic!("error resolving using import map: {:?}", err), // TODO: this should be coerced to DenoError
+ }
+ }
+ None => specifier.to_string(),
+ };
+
let fut = state
.dir
- .fetch_module_meta_data_async(specifier, referrer, use_cache, no_fetch)
- .and_then(move |out| {
+ .fetch_module_meta_data_async(
+ &resolved_specifier,
+ referrer,
+ use_cache,
+ no_fetch,
+ ).and_then(move |out| {
let builder = &mut FlatBufferBuilder::new();
let data_off = builder.create_vector(out.source_code.as_slice());
let msg_args = msg::FetchModuleMetaDataResArgs {