diff --git a/src/mod.test.ts b/src/mod.test.ts index 823faf5..3a555de 100644 --- a/src/mod.test.ts +++ b/src/mod.test.ts @@ -4,11 +4,11 @@ import { ResolutionMode, Workspace, } from "./mod.ts"; -import { assert, assertEquals } from "@std/assert"; +import { assert, assertEquals, assertRejects } from "@std/assert"; Deno.test("should resolve, load and get graph", async () => { const workspace = new Workspace({ - nodeConditions: undefined, // unsure doesn't error + nodeConditions: undefined, // ensure doesn't error }); const modFileUrl = import.meta.resolve("./mod.ts"); const loader = await workspace.createLoader({ @@ -47,3 +47,21 @@ Deno.test("should resolve, load and get graph", async () => { assertEquals(loadResponse.specifier, "node:events"); } }); + +Deno.test("resolving a jsr specifier should fail with explanatory message", async () => { + const workspace = new Workspace({}); + const modFileUrl = import.meta.resolve("./mod.ts"); + const loader = await workspace.createLoader({ + entrypoints: [modFileUrl], + }); + assertRejects( + async () => { + await loader.load( + "jsr:@scope/version", + RequestedModuleType.Default, + ); + }, + Error, + "Failed loading 'jsr:@scope/version'. jsr: specifiers must be resolved to an https: specifier before being loaded.", + ); +}); diff --git a/src/rs_lib/lib.rs b/src/rs_lib/lib.rs index 27277bf..611d9e1 100644 --- a/src/rs_lib/lib.rs +++ b/src/rs_lib/lib.rs @@ -467,7 +467,7 @@ impl DenoLoader { maintain_npm_specifiers: false, }, )?; - Ok(resolved.to_string()) + Ok(resolved.into()) } pub async fn load( @@ -502,6 +502,11 @@ impl DenoLoader { if url.scheme() == "node" { return Ok(create_external_repsonse(&url)); + } else if url.scheme() == "jsr" { + bail!( + "Failed loading '{}'. jsr: specifiers must be resolved to an https: specifier before being loaded.", + url + ); } match self