Skip to content

Commit 851bb73

Browse files
authored
fix: support virtual: and cloudflare: schemes (#1035)
Closes #986 Closes #1034 @zephraph this should address your problem, alongside denoland/deno#28922
1 parent 0fd3c2f commit 851bb73

File tree

8 files changed

+37
-8
lines changed

8 files changed

+37
-8
lines changed

api/src/analysis.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -477,11 +477,10 @@ impl SyncLoader<'_> {
477477
maybe_headers: None,
478478
}))
479479
}
480-
"http" | "https" | "node" | "npm" | "jsr" | "bun" => {
481-
Ok(Some(deno_graph::source::LoadResponse::External {
482-
specifier: specifier.clone(),
483-
}))
484-
}
480+
"http" | "https" | "node" | "npm" | "jsr" | "bun" | "virtual"
481+
| "cloudflare" => Ok(Some(deno_graph::source::LoadResponse::External {
482+
specifier: specifier.clone(),
483+
})),
485484
"data" => load_data_url(specifier)
486485
.map_err(|e| LoadError::Other(Arc::new(JsErrorBox::from_err(e)))),
487486
_ => Ok(None),
@@ -796,7 +795,7 @@ fn collect_dependencies(
796795
}
797796
}
798797
}
799-
"file" | "data" | "node" | "bun" => {}
798+
"file" | "data" | "node" | "bun" | "virtual" | "cloudflare" => {}
800799
"http" | "https" => {
801800
return Err(PublishError::InvalidExternalImport {
802801
specifier: module.specifier().to_string(),

api/src/api/package.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1828,7 +1828,7 @@ impl DepTreeLoader {
18281828
}
18291829
"jsr" => unreachable!("{specifier}"),
18301830
// TODO(@crowlKats): handle npm specifiers
1831-
"npm" | "node" | "bun" => async move {
1831+
"npm" | "node" | "bun" | "virtual" | "cloudflare" => async move {
18321832
Ok(Some(deno_graph::source::LoadResponse::External {
18331833
specifier: specifier.clone(),
18341834
}))

api/src/docs.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1098,7 +1098,7 @@ impl HrefResolver for DocResolver {
10981098
if let Ok(url) = Url::parse(src) {
10991099
match url.scheme() {
11001100
"node" => Some(format!("https://nodejs.org/api/{}.html", url.path())),
1101-
"bun" => None,
1101+
"bun" | "virtual" | "cloudflare" => None,
11021102
"npm" => {
11031103
let npm_package_req =
11041104
deno_semver::npm::NpmPackageReqReference::from_str(src).ok()?;

api/src/publish.rs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1161,6 +1161,24 @@ pub mod tests {
11611161
assert!(!uses_npm(&t, &task).await);
11621162
}
11631163

1164+
#[tokio::test]
1165+
async fn virtual_import() {
1166+
let t = TestSetup::new().await;
1167+
let bytes = create_mock_tarball("virtual_import");
1168+
let task = process_tarball_setup(&t, bytes).await;
1169+
assert_eq!(task.status, PublishingTaskStatus::Success, "{task:#?}");
1170+
assert!(!uses_npm(&t, &task).await);
1171+
}
1172+
1173+
#[tokio::test]
1174+
async fn cloudflare_import() {
1175+
let t = TestSetup::new().await;
1176+
let bytes = create_mock_tarball("cloudflare_import");
1177+
let task = process_tarball_setup(&t, bytes).await;
1178+
assert_eq!(task.status, PublishingTaskStatus::Success, "{task:#?}");
1179+
assert!(!uses_npm(&t, &task).await);
1180+
}
1181+
11641182
#[tokio::test]
11651183
async fn jsr_import() {
11661184
let t = TestSetup::new().await;
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"name": "@scope/foo",
3+
"version": "1.2.3",
4+
"exports": "./mod.ts"
5+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from "cloudflare:sockets";
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"name": "@scope/foo",
3+
"version": "1.2.3",
4+
"exports": "./mod.ts"
5+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from "virtual:test";

0 commit comments

Comments
 (0)