Skip to content

Commit

Permalink
feat: allows us to map some JSR things
Browse files Browse the repository at this point in the history
  • Loading branch information
maraisr committed May 29, 2024
1 parent 00b9ab7 commit f9507cf
Show file tree
Hide file tree
Showing 3 changed files with 135 additions and 0 deletions.
70 changes: 70 additions & 0 deletions rs-lib/src/loader/specifier_mappers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ pub fn get_all_specifier_mappers() -> Vec<Box<dyn SpecifierMapper>> {
Box::new(DenoStdNodeSpecifierMapper::new("url")),
Box::new(DenoStdNodeSpecifierMapper::new("util")),
Box::new(DenoStdNodeSpecifierMapper::new("worker_threads")),
Box::new(JsrMapper),
Box::new(SkypackMapper),
Box::new(EsmShMapper),
Box::new(NpmMapper),
Expand Down Expand Up @@ -145,6 +146,22 @@ impl SpecifierMapper for NpmMapper {
}
}

struct JsrMapper;

impl SpecifierMapper for JsrMapper {
fn map(&self, specifier: &ModuleSpecifier) -> Option<PackageMappedSpecifier> {
let req_ref =
deno_semver::jsr::JsrPackageReqReference::from_specifier(specifier)
.ok()?;
Some(PackageMappedSpecifier {
name: req_ref.req().name.clone(),
version: Some(req_ref.req().version_req.to_string()),
sub_path: req_ref.sub_path().map(|s| s.to_string()),
peer_dependency: false,
})
}
}

struct DenoStdNodeSpecifierMapper {
url_re: Regex,
to_specifier: String,
Expand Down Expand Up @@ -338,4 +355,57 @@ mod test {
})
);
}

#[test]
fn test_jsr_mapper() {
let mapper = JsrMapper;
assert_eq!(
mapper.map(&ModuleSpecifier::parse("jsr:@scope/name").unwrap()),
Some(PackageMappedSpecifier {
name: "@scope/name".to_string(),
version: Some("*".to_string()),
sub_path: None,
peer_dependency: false
})
);
assert_eq!(
mapper.map(&ModuleSpecifier::parse("jsr:name@2.1.3/mod.ts").unwrap()),
Some(PackageMappedSpecifier {
name: "name".to_string(),
version: Some("2.1.3".to_string()),
sub_path: Some("mod.ts".to_string()),
peer_dependency: false
})
);
assert_eq!(
mapper.map(
&ModuleSpecifier::parse("jsr:@project/name@2.1.3/mod.ts").unwrap()
),
Some(PackageMappedSpecifier {
name: "@project/name".to_string(),
version: Some("2.1.3".to_string()),
sub_path: Some("mod.ts".to_string()),
peer_dependency: false
})
);
assert_eq!(
mapper.map(&ModuleSpecifier::parse("jsr:@project/name@2.1.3").unwrap()),
Some(PackageMappedSpecifier {
name: "@project/name".to_string(),
version: Some("2.1.3".to_string()),
sub_path: None,
peer_dependency: false
})
);
assert_eq!(
mapper
.map(&ModuleSpecifier::parse("jsr:@project/name/sub-path").unwrap()),
Some(PackageMappedSpecifier {
name: "@project/name".to_string(),
version: Some("*".to_string()),
sub_path: Some("sub-path".to_string()),
peer_dependency: false
})
);
}
}
53 changes: 53 additions & 0 deletions tests/integration.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1067,6 +1067,58 @@ Deno.test("using declaration project", async () => {
});
});

Deno.test("should build jsr mapped project", async () => {
await runTest("jsr_map_project", {
entryPoints: ["mod.ts"],
outDir: "./npm",
typeCheck: "both",
shims: {
deno: {
test: true,
},
},
package: {
name: "add",
version: "1.0.0",
},
mappings: {
"jsr:@std/csv/parse": {
name: "csv-parse",
version: "*",
},
},
}, (output) => {
output.assertNotExists("script/mod.js.map");
output.assertNotExists("esm/mod.js.map");
assertEquals(output.packageJson, {
name: "add",
version: "1.0.0",
main: "./script/mod.js",
module: "./esm/mod.js",
exports: {
".": {
import: "./esm/mod.js",
require: "./script/mod.js",
},
},
scripts: {
test: "node test_runner.js",
},
dependencies: {
tslib: versions.tsLib,
"@deno/sham-weakref": versions.weakRefSham,
"assert": "*"
},
devDependencies: {
"@types/node": versions.nodeTypes,
picocolors: versions.picocolors,
"@deno/shim-deno": versions.denoShim,
},
_generatedBy: "dnt@dev",
});
});
})

Deno.test("should build jsr project", async () => {
await runTest("jsr_project", {
entryPoints: ["mod.ts"],
Expand Down Expand Up @@ -1144,6 +1196,7 @@ async function runTest(
| "declaration_import_project"
| "import_map_project"
| "json_module_project"
| "jsr_map_project"
| "jsr_project"
| "package_mappings_project"
| "polyfill_project"
Expand Down
12 changes: 12 additions & 0 deletions tests/jsr_map_project/mod.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
// Copyright 2018-2024 the Deno authors. MIT license.

import { parse } from "jsr:@std/csv/parse";
import { assertEquals } from "jsr:@std/assert@0.221/assert-equals";
import * as fs from "node:fs";

export function add(a: number, b: number) {
console.log(fs.readFileSync);
const result = parse("a,b,c\n1,2,3\n4,5,6");
assertEquals(result[0], ["a", "b", "c"]);
return a + b;
}

0 comments on commit f9507cf

Please sign in to comment.