Skip to content

Commit e40a1ab

Browse files
authored
fix: handle npm entrypoints (#2)
1 parent 4eb1519 commit e40a1ab

File tree

2 files changed

+27
-11
lines changed

2 files changed

+27
-11
lines changed

deno.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@deno/loader",
3-
"version": "0.0.7",
3+
"version": "0.0.8",
44
"tasks": {
55
"wasmbuild": "deno run -A jsr:@deno/wasmbuild@0.19.2 --out ./src/lib"
66
},

src/rs_lib/lib.rs

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ use std::path::PathBuf;
55
use std::rc::Rc;
66
use std::sync::Arc;
77

8+
use anyhow::bail;
89
use deno_cache_dir::file_fetcher::CacheSetting;
910
use deno_cache_dir::file_fetcher::NullBlobStore;
1011
use deno_graph::MediaType;
@@ -366,22 +367,30 @@ impl DenoLoader {
366367
resolution_mode: node_resolver::ResolutionMode,
367368
) -> Result<String, anyhow::Error> {
368369
let importer = importer.filter(|v| !v.is_empty());
369-
let referrer = match importer {
370+
let (specifier, referrer) = match importer {
370371
Some(referrer)
371372
if referrer.starts_with("http:")
372373
|| referrer.starts_with("https:")
373374
|| referrer.starts_with("file:") =>
374375
{
375-
Url::parse(&referrer)?
376+
(specifier, Url::parse(&referrer)?)
376377
}
377-
Some(referrer) => deno_path_util::url_from_file_path(
378-
&sys_traits::impls::wasm_string_to_path(referrer),
379-
)?,
378+
Some(referrer) => (
379+
specifier,
380+
deno_path_util::url_from_file_path(
381+
&sys_traits::impls::wasm_string_to_path(referrer),
382+
)?,
383+
),
380384
None => {
381-
return Ok(
385+
let entrypoint =
382386
parse_entrypoint(specifier, self.workspace_factory.initial_cwd())?
383-
.to_string(),
384-
);
387+
.to_string();
388+
(
389+
entrypoint,
390+
deno_path_util::url_from_file_path(
391+
self.workspace_factory.initial_cwd(),
392+
)?,
393+
)
385394
}
386395
};
387396
let resolved = self.resolver.resolve_with_graph(
@@ -418,9 +427,15 @@ impl DenoLoader {
418427
MediaType::Wasm,
419428
&m.source,
420429
)),
421-
Some(Module::Node(node)) => Ok(create_external_repsonse(&node.specifier)),
430+
Some(Module::Node(m)) => Ok(create_external_repsonse(&m.specifier)),
431+
Some(Module::Npm(_)) => {
432+
bail!(
433+
"Failed resolving '{}'\n\nResolve the npm: specifier to a file: specifier before providing it to the loader.",
434+
url
435+
)
436+
}
422437
None if url.scheme() == "node" => Ok(create_external_repsonse(&url)),
423-
Some(Module::Npm(_) | Module::External(_)) | None => {
438+
Some(Module::External(_)) | None => {
424439
let file = self.file_fetcher.fetch_bypass_permissions(&url).await?;
425440
Ok(create_module_response(
426441
&file.url,
@@ -482,6 +497,7 @@ fn parse_entrypoint(
482497
if entrypoint.starts_with("jsr:")
483498
|| entrypoint.starts_with("https:")
484499
|| entrypoint.starts_with("file:")
500+
|| entrypoint.starts_with("npm:")
485501
{
486502
Ok(Url::parse(&entrypoint)?)
487503
} else {

0 commit comments

Comments
 (0)