summaryrefslogtreecommitdiff
path: root/tests/registry/jsr
diff options
context:
space:
mode:
authorDavid Sherret <dsherret@users.noreply.github.com>2024-05-06 21:06:01 -0400
committerGitHub <noreply@github.com>2024-05-07 01:06:01 +0000
commit1587387bccb6dbecd85f5141dd7543f013d47cd8 (patch)
treeb9829c3e50442deff360cf664555935a0d16a4db /tests/registry/jsr
parent87d1ead7d09638172b0e397c8209c759666514da (diff)
chore(test): move npm registries to separate servers and to the `tests/registry` folder (#23717)
1. Moves the npm registries to their own dedicated ports. 2. Moves the data files out of `tests/testdata/npm/registry` to `tests/registry/npm`.
Diffstat (limited to 'tests/registry/jsr')
-rw-r--r--tests/registry/jsr/@denotest/add/0.2.0/mod.ts4
-rw-r--r--tests/registry/jsr/@denotest/add/0.2.0_meta.json8
-rw-r--r--tests/registry/jsr/@denotest/add/1.0.0/mod.ts3
-rw-r--r--tests/registry/jsr/@denotest/add/1.0.0_meta.json8
-rw-r--r--tests/registry/jsr/@denotest/add/meta.json9
-rw-r--r--tests/registry/jsr/@denotest/bad-manifest-checksum/1.0.0/mod.ts3
-rw-r--r--tests/registry/jsr/@denotest/bad-manifest-checksum/1.0.0_meta.json11
-rw-r--r--tests/registry/jsr/@denotest/bad-manifest-checksum/meta.json5
-rw-r--r--tests/registry/jsr/@denotest/deps/1.0.0/mod.ts7
-rw-r--r--tests/registry/jsr/@denotest/deps/1.0.0_meta.json22
-rw-r--r--tests/registry/jsr/@denotest/deps/meta.json5
-rw-r--r--tests/registry/jsr/@denotest/import-https-url/1.0.0/analyzable.ts1
-rw-r--r--tests/registry/jsr/@denotest/import-https-url/1.0.0/unanalyzable.ts5
-rw-r--r--tests/registry/jsr/@denotest/import-https-url/1.0.0_meta.json6
-rw-r--r--tests/registry/jsr/@denotest/import-https-url/meta.json5
-rw-r--r--tests/registry/jsr/@denotest/jsx-with-no-pragmas/1.0.0/foo.jsx5
-rw-r--r--tests/registry/jsr/@denotest/jsx-with-no-pragmas/1.0.0/foo.tsx5
-rw-r--r--tests/registry/jsr/@denotest/jsx-with-no-pragmas/1.0.0/mod.ts7
-rw-r--r--tests/registry/jsr/@denotest/jsx-with-no-pragmas/1.0.0_meta.json40
-rw-r--r--tests/registry/jsr/@denotest/jsx-with-no-pragmas/meta.json5
-rw-r--r--tests/registry/jsr/@denotest/jsx-with-pragmas/1.0.0/foo.jsx7
-rw-r--r--tests/registry/jsr/@denotest/jsx-with-pragmas/1.0.0/foo.tsx7
-rw-r--r--tests/registry/jsr/@denotest/jsx-with-pragmas/1.0.0/mod.ts7
-rw-r--r--tests/registry/jsr/@denotest/jsx-with-pragmas/1.0.0_meta.json52
-rw-r--r--tests/registry/jsr/@denotest/jsx-with-pragmas/meta.json5
-rw-r--r--tests/registry/jsr/@denotest/module-graph/1.4.0/mod.ts5
-rw-r--r--tests/registry/jsr/@denotest/module-graph/1.4.0/other.ts2
-rw-r--r--tests/registry/jsr/@denotest/module-graph/1.4.0_meta.json17
-rw-r--r--tests/registry/jsr/@denotest/module-graph/meta.json6
-rw-r--r--tests/registry/jsr/@denotest/module-graph2/1.4.0/mod.ts5
-rw-r--r--tests/registry/jsr/@denotest/module-graph2/1.4.0/other.ts2
-rw-r--r--tests/registry/jsr/@denotest/module-graph2/1.4.0_meta.json17
-rw-r--r--tests/registry/jsr/@denotest/module-graph2/meta.json6
-rw-r--r--tests/registry/jsr/@denotest/no-module-graph/0.1.0/TestClass.ts1
-rw-r--r--tests/registry/jsr/@denotest/no-module-graph/0.1.0/mod.ts3
-rw-r--r--tests/registry/jsr/@denotest/no-module-graph/0.1.0_meta.json5
-rw-r--r--tests/registry/jsr/@denotest/no-module-graph/0.1.1/TestClass.ts1
-rw-r--r--tests/registry/jsr/@denotest/no-module-graph/0.1.1/mod.ts3
-rw-r--r--tests/registry/jsr/@denotest/no-module-graph/0.1.1_meta.json5
-rw-r--r--tests/registry/jsr/@denotest/no-module-graph/0.2.0/TestClass.ts1
-rw-r--r--tests/registry/jsr/@denotest/no-module-graph/0.2.0/mod.ts3
-rw-r--r--tests/registry/jsr/@denotest/no-module-graph/0.2.0_meta.json5
-rw-r--r--tests/registry/jsr/@denotest/no-module-graph/meta.json7
-rw-r--r--tests/registry/jsr/@denotest/subset-type-graph-invalid/0.1.0/mod.ts12
-rw-r--r--tests/registry/jsr/@denotest/subset-type-graph-invalid/0.1.0_meta.json5
-rw-r--r--tests/registry/jsr/@denotest/subset-type-graph-invalid/meta.json5
-rw-r--r--tests/registry/jsr/@denotest/subset-type-graph/0.1.0/mod.ts17
-rw-r--r--tests/registry/jsr/@denotest/subset-type-graph/0.1.0_meta.json5
-rw-r--r--tests/registry/jsr/@denotest/subset-type-graph/meta.json5
-rw-r--r--tests/registry/jsr/@denotest/worker/0.1.0/mod.ts13
-rw-r--r--tests/registry/jsr/@denotest/worker/0.1.0/worker.ts4
-rw-r--r--tests/registry/jsr/@denotest/worker/0.1.0_meta.json5
-rw-r--r--tests/registry/jsr/@denotest/worker/meta.json5
-rw-r--r--tests/registry/jsr/@std/assert/0.220.1/assert.ts4
-rw-r--r--tests/registry/jsr/@std/assert/0.220.1/assert_equals.ts9
-rw-r--r--tests/registry/jsr/@std/assert/0.220.1/fail.ts5
-rw-r--r--tests/registry/jsr/@std/assert/0.220.1/mod.ts22
-rw-r--r--tests/registry/jsr/@std/assert/0.220.1_meta.json8
-rw-r--r--tests/registry/jsr/@std/assert/meta.json8
-rw-r--r--tests/registry/jsr/@std/path/0.220.1/_common/assert_path.ts10
-rw-r--r--tests/registry/jsr/@std/path/0.220.1/_common/constants.ts49
-rw-r--r--tests/registry/jsr/@std/path/0.220.1/_common/normalize.ts9
-rw-r--r--tests/registry/jsr/@std/path/0.220.1/_common/normalize_string.ts74
-rw-r--r--tests/registry/jsr/@std/path/0.220.1/posix/_util.ts10
-rw-r--r--tests/registry/jsr/@std/path/0.220.1/posix/join.ts25
-rw-r--r--tests/registry/jsr/@std/path/0.220.1/posix/normalize.ts30
-rw-r--r--tests/registry/jsr/@std/path/0.220.1_meta.json64
-rw-r--r--tests/registry/jsr/@std/path/meta.json8
-rw-r--r--tests/registry/jsr/@std/url/0.220.1/join.ts28
-rw-r--r--tests/registry/jsr/@std/url/0.220.1/normalize.ts28
-rw-r--r--tests/registry/jsr/@std/url/0.220.1_meta.json10
-rw-r--r--tests/registry/jsr/@std/url/meta.json8
72 files changed, 821 insertions, 0 deletions
diff --git a/tests/registry/jsr/@denotest/add/0.2.0/mod.ts b/tests/registry/jsr/@denotest/add/0.2.0/mod.ts
new file mode 100644
index 000000000..864e8dd32
--- /dev/null
+++ b/tests/registry/jsr/@denotest/add/0.2.0/mod.ts
@@ -0,0 +1,4 @@
+// This is renamed to `add()` in 1.0.0.
+export function sum(a: number, b: number): number {
+ return a + b;
+}
diff --git a/tests/registry/jsr/@denotest/add/0.2.0_meta.json b/tests/registry/jsr/@denotest/add/0.2.0_meta.json
new file mode 100644
index 000000000..6eebe2198
--- /dev/null
+++ b/tests/registry/jsr/@denotest/add/0.2.0_meta.json
@@ -0,0 +1,8 @@
+{
+ "exports": {
+ ".": "./mod.ts"
+ },
+ "moduleGraph1": {
+ "/mod.ts": {}
+ }
+}
diff --git a/tests/registry/jsr/@denotest/add/1.0.0/mod.ts b/tests/registry/jsr/@denotest/add/1.0.0/mod.ts
new file mode 100644
index 000000000..8d9b8a22a
--- /dev/null
+++ b/tests/registry/jsr/@denotest/add/1.0.0/mod.ts
@@ -0,0 +1,3 @@
+export function add(a: number, b: number): number {
+ return a + b;
+}
diff --git a/tests/registry/jsr/@denotest/add/1.0.0_meta.json b/tests/registry/jsr/@denotest/add/1.0.0_meta.json
new file mode 100644
index 000000000..6eebe2198
--- /dev/null
+++ b/tests/registry/jsr/@denotest/add/1.0.0_meta.json
@@ -0,0 +1,8 @@
+{
+ "exports": {
+ ".": "./mod.ts"
+ },
+ "moduleGraph1": {
+ "/mod.ts": {}
+ }
+}
diff --git a/tests/registry/jsr/@denotest/add/meta.json b/tests/registry/jsr/@denotest/add/meta.json
new file mode 100644
index 000000000..72aea80cc
--- /dev/null
+++ b/tests/registry/jsr/@denotest/add/meta.json
@@ -0,0 +1,9 @@
+{
+ "versions": {
+ "2.0.0": {
+ "yanked": true
+ },
+ "1.0.0": {},
+ "0.2.0": {}
+ }
+}
diff --git a/tests/registry/jsr/@denotest/bad-manifest-checksum/1.0.0/mod.ts b/tests/registry/jsr/@denotest/bad-manifest-checksum/1.0.0/mod.ts
new file mode 100644
index 000000000..8d9b8a22a
--- /dev/null
+++ b/tests/registry/jsr/@denotest/bad-manifest-checksum/1.0.0/mod.ts
@@ -0,0 +1,3 @@
+export function add(a: number, b: number): number {
+ return a + b;
+}
diff --git a/tests/registry/jsr/@denotest/bad-manifest-checksum/1.0.0_meta.json b/tests/registry/jsr/@denotest/bad-manifest-checksum/1.0.0_meta.json
new file mode 100644
index 000000000..8ef8ab3c3
--- /dev/null
+++ b/tests/registry/jsr/@denotest/bad-manifest-checksum/1.0.0_meta.json
@@ -0,0 +1,11 @@
+{
+ "exports": {
+ ".": "./mod.ts"
+ },
+ "manifest": {
+ "/mod.ts": {
+ "size": 0,
+ "checksum": "sha256-bad-checksum"
+ }
+ }
+}
diff --git a/tests/registry/jsr/@denotest/bad-manifest-checksum/meta.json b/tests/registry/jsr/@denotest/bad-manifest-checksum/meta.json
new file mode 100644
index 000000000..02601e4d0
--- /dev/null
+++ b/tests/registry/jsr/@denotest/bad-manifest-checksum/meta.json
@@ -0,0 +1,5 @@
+{
+ "versions": {
+ "1.0.0": {}
+ }
+}
diff --git a/tests/registry/jsr/@denotest/deps/1.0.0/mod.ts b/tests/registry/jsr/@denotest/deps/1.0.0/mod.ts
new file mode 100644
index 000000000..2751698ac
--- /dev/null
+++ b/tests/registry/jsr/@denotest/deps/1.0.0/mod.ts
@@ -0,0 +1,7 @@
+import { Other } from "jsr:@denotest/module-graph@1/other";
+import version from "jsr:@denotest/no-module-graph@^0.1";
+
+export default {
+ version,
+ other: new Other(),
+};
diff --git a/tests/registry/jsr/@denotest/deps/1.0.0_meta.json b/tests/registry/jsr/@denotest/deps/1.0.0_meta.json
new file mode 100644
index 000000000..814099af0
--- /dev/null
+++ b/tests/registry/jsr/@denotest/deps/1.0.0_meta.json
@@ -0,0 +1,22 @@
+{
+ "exports": {
+ ".": "./mod.ts"
+ },
+ "moduleGraph1": {
+ "/mod.ts": {
+ "dependencies": [{
+ "type": "static",
+ "kind": "import",
+ "range": [[0, 0], [0, 59]],
+ "specifier": "jsr:@denotest/module-graph@1/other",
+ "specifierRange": [[0, 22], [0, 58]]
+ }, {
+ "type": "static",
+ "kind": "import",
+ "range": [[1, 0], [1, 57]],
+ "specifier": "jsr:@denotest/no-module-graph@^0.1",
+ "specifierRange": [[1, 20], [1, 56]]
+ }]
+ }
+ }
+}
diff --git a/tests/registry/jsr/@denotest/deps/meta.json b/tests/registry/jsr/@denotest/deps/meta.json
new file mode 100644
index 000000000..02601e4d0
--- /dev/null
+++ b/tests/registry/jsr/@denotest/deps/meta.json
@@ -0,0 +1,5 @@
+{
+ "versions": {
+ "1.0.0": {}
+ }
+}
diff --git a/tests/registry/jsr/@denotest/import-https-url/1.0.0/analyzable.ts b/tests/registry/jsr/@denotest/import-https-url/1.0.0/analyzable.ts
new file mode 100644
index 000000000..b1b64d82f
--- /dev/null
+++ b/tests/registry/jsr/@denotest/import-https-url/1.0.0/analyzable.ts
@@ -0,0 +1 @@
+await import("http://localhost:4545/welcome.ts");
diff --git a/tests/registry/jsr/@denotest/import-https-url/1.0.0/unanalyzable.ts b/tests/registry/jsr/@denotest/import-https-url/1.0.0/unanalyzable.ts
new file mode 100644
index 000000000..63001d15f
--- /dev/null
+++ b/tests/registry/jsr/@denotest/import-https-url/1.0.0/unanalyzable.ts
@@ -0,0 +1,5 @@
+function nonAnalyzableUrl() {
+ return "http://localhost:4545/" + "welcome.ts";
+}
+
+await import(nonAnalyzableUrl());
diff --git a/tests/registry/jsr/@denotest/import-https-url/1.0.0_meta.json b/tests/registry/jsr/@denotest/import-https-url/1.0.0_meta.json
new file mode 100644
index 000000000..23b877080
--- /dev/null
+++ b/tests/registry/jsr/@denotest/import-https-url/1.0.0_meta.json
@@ -0,0 +1,6 @@
+{
+ "exports": {
+ "./unanalyzable": "./unanalyzable.ts",
+ "./analyzable": "./analyzable.ts"
+ }
+}
diff --git a/tests/registry/jsr/@denotest/import-https-url/meta.json b/tests/registry/jsr/@denotest/import-https-url/meta.json
new file mode 100644
index 000000000..02601e4d0
--- /dev/null
+++ b/tests/registry/jsr/@denotest/import-https-url/meta.json
@@ -0,0 +1,5 @@
+{
+ "versions": {
+ "1.0.0": {}
+ }
+}
diff --git a/tests/registry/jsr/@denotest/jsx-with-no-pragmas/1.0.0/foo.jsx b/tests/registry/jsr/@denotest/jsx-with-no-pragmas/1.0.0/foo.jsx
new file mode 100644
index 000000000..ae310a74e
--- /dev/null
+++ b/tests/registry/jsr/@denotest/jsx-with-no-pragmas/1.0.0/foo.jsx
@@ -0,0 +1,5 @@
+import { renderToString } from "npm:preact-render-to-string";
+
+export default function render() {
+ return renderToString(<div>foo.jsx</div>);
+}
diff --git a/tests/registry/jsr/@denotest/jsx-with-no-pragmas/1.0.0/foo.tsx b/tests/registry/jsr/@denotest/jsx-with-no-pragmas/1.0.0/foo.tsx
new file mode 100644
index 000000000..021c2d49e
--- /dev/null
+++ b/tests/registry/jsr/@denotest/jsx-with-no-pragmas/1.0.0/foo.tsx
@@ -0,0 +1,5 @@
+import { renderToString } from "npm:preact-render-to-string";
+
+export default function render() {
+ return renderToString(<div>foo.tsx</div>);
+}
diff --git a/tests/registry/jsr/@denotest/jsx-with-no-pragmas/1.0.0/mod.ts b/tests/registry/jsr/@denotest/jsx-with-no-pragmas/1.0.0/mod.ts
new file mode 100644
index 000000000..05c549f64
--- /dev/null
+++ b/tests/registry/jsr/@denotest/jsx-with-no-pragmas/1.0.0/mod.ts
@@ -0,0 +1,7 @@
+import renderJsx from "./foo.jsx";
+import renderTsx from "./foo.tsx";
+
+export function render() {
+ console.log(renderJsx());
+ console.log(renderTsx());
+}
diff --git a/tests/registry/jsr/@denotest/jsx-with-no-pragmas/1.0.0_meta.json b/tests/registry/jsr/@denotest/jsx-with-no-pragmas/1.0.0_meta.json
new file mode 100644
index 000000000..417950442
--- /dev/null
+++ b/tests/registry/jsr/@denotest/jsx-with-no-pragmas/1.0.0_meta.json
@@ -0,0 +1,40 @@
+{
+ "exports": {
+ ".": "./mod.ts"
+ },
+ "moduleGraph1": {
+ "/mod.ts": {
+ "dependencies": [{
+ "type": "static",
+ "kind": "import",
+ "range": [[0, 0], [0, 35]],
+ "specifier": "./foo.jsx",
+ "specifierRange": [[0, 22], [0, 33]]
+ }, {
+ "type": "static",
+ "kind": "import",
+ "range": [[1, 0], [1, 25]],
+ "specifier": "./foo.tsx",
+ "specifierRange": [[1, 22], [1, 33]]
+ }]
+ },
+ "/foo.jsx": {
+ "dependencies": [{
+ "type": "static",
+ "kind": "import",
+ "range": [[0, 0], [0, 60]],
+ "specifier": "npm:preact-render-to-string",
+ "specifierRange": [[0, 32], [0, 60]]
+ }]
+ },
+ "/foo.tsx": {
+ "dependencies": [{
+ "type": "static",
+ "kind": "import",
+ "range": [[0, 0], [0, 60]],
+ "specifier": "npm:preact-render-to-string",
+ "specifierRange": [[0, 32], [0, 60]]
+ }]
+ }
+ }
+}
diff --git a/tests/registry/jsr/@denotest/jsx-with-no-pragmas/meta.json b/tests/registry/jsr/@denotest/jsx-with-no-pragmas/meta.json
new file mode 100644
index 000000000..02601e4d0
--- /dev/null
+++ b/tests/registry/jsr/@denotest/jsx-with-no-pragmas/meta.json
@@ -0,0 +1,5 @@
+{
+ "versions": {
+ "1.0.0": {}
+ }
+}
diff --git a/tests/registry/jsr/@denotest/jsx-with-pragmas/1.0.0/foo.jsx b/tests/registry/jsr/@denotest/jsx-with-pragmas/1.0.0/foo.jsx
new file mode 100644
index 000000000..463fdb015
--- /dev/null
+++ b/tests/registry/jsr/@denotest/jsx-with-pragmas/1.0.0/foo.jsx
@@ -0,0 +1,7 @@
+/** @jsxRuntime automatic *//** @jsxImportSource npm:preact */
+// deno-fmt-ignore-file
+import { renderToString } from "npm:preact-render-to-string";
+
+export default function render() {
+ return renderToString(<div>foo.jsx</div>);
+}
diff --git a/tests/registry/jsr/@denotest/jsx-with-pragmas/1.0.0/foo.tsx b/tests/registry/jsr/@denotest/jsx-with-pragmas/1.0.0/foo.tsx
new file mode 100644
index 000000000..b34f2952e
--- /dev/null
+++ b/tests/registry/jsr/@denotest/jsx-with-pragmas/1.0.0/foo.tsx
@@ -0,0 +1,7 @@
+/** @jsxRuntime automatic *//** @jsxImportSource npm:preact */
+// deno-fmt-ignore-file
+import { renderToString } from "npm:preact-render-to-string";
+
+export default function render() {
+ return renderToString(<div>foo.tsx</div>);
+}
diff --git a/tests/registry/jsr/@denotest/jsx-with-pragmas/1.0.0/mod.ts b/tests/registry/jsr/@denotest/jsx-with-pragmas/1.0.0/mod.ts
new file mode 100644
index 000000000..05c549f64
--- /dev/null
+++ b/tests/registry/jsr/@denotest/jsx-with-pragmas/1.0.0/mod.ts
@@ -0,0 +1,7 @@
+import renderJsx from "./foo.jsx";
+import renderTsx from "./foo.tsx";
+
+export function render() {
+ console.log(renderJsx());
+ console.log(renderTsx());
+}
diff --git a/tests/registry/jsr/@denotest/jsx-with-pragmas/1.0.0_meta.json b/tests/registry/jsr/@denotest/jsx-with-pragmas/1.0.0_meta.json
new file mode 100644
index 000000000..fd1a63e60
--- /dev/null
+++ b/tests/registry/jsr/@denotest/jsx-with-pragmas/1.0.0_meta.json
@@ -0,0 +1,52 @@
+{
+ "exports": {
+ ".": "./mod.ts"
+ },
+ "moduleGraph1": {
+ "/mod.ts": {
+ "dependencies": [{
+ "type": "static",
+ "kind": "import",
+ "range": [[0, 0], [0, 35]],
+ "specifier": "./foo.jsx",
+ "specifierRange": [[0, 22], [0, 33]]
+ }, {
+ "type": "static",
+ "kind": "import",
+ "range": [[1, 0], [1, 25]],
+ "specifier": "./foo.tsx",
+ "specifierRange": [[1, 22], [1, 33]]
+ }]
+ },
+ "/foo.jsx": {
+ "dependencies": [{
+ "type": "static",
+ "kind": "import",
+ "range": [[0, 0], [0, 60]],
+ "specifier": "npm:preact/jsx-runtime",
+ "specifierRange": [[0, 32], [0, 60]]
+ }, {
+ "type": "static",
+ "kind": "import",
+ "range": [[2, 0], [2, 60]],
+ "specifier": "npm:preact-render-to-string",
+ "specifierRange": [[2, 32], [2, 60]]
+ }]
+ },
+ "/foo.tsx": {
+ "dependencies": [{
+ "type": "static",
+ "kind": "import",
+ "range": [[0, 0], [0, 60]],
+ "specifier": "npm:preact/jsx-runtime",
+ "specifierRange": [[0, 32], [0, 60]]
+ }, {
+ "type": "static",
+ "kind": "import",
+ "range": [[2, 0], [2, 60]],
+ "specifier": "npm:preact-render-to-string",
+ "specifierRange": [[2, 32], [2, 60]]
+ }]
+ }
+ }
+}
diff --git a/tests/registry/jsr/@denotest/jsx-with-pragmas/meta.json b/tests/registry/jsr/@denotest/jsx-with-pragmas/meta.json
new file mode 100644
index 000000000..02601e4d0
--- /dev/null
+++ b/tests/registry/jsr/@denotest/jsx-with-pragmas/meta.json
@@ -0,0 +1,5 @@
+{
+ "versions": {
+ "1.0.0": {}
+ }
+}
diff --git a/tests/registry/jsr/@denotest/module-graph/1.4.0/mod.ts b/tests/registry/jsr/@denotest/module-graph/1.4.0/mod.ts
new file mode 100644
index 000000000..cb3c4a5e0
--- /dev/null
+++ b/tests/registry/jsr/@denotest/module-graph/1.4.0/mod.ts
@@ -0,0 +1,5 @@
+import { Other } from "./other.ts";
+
+export class Test {
+ other = new Other();
+}
diff --git a/tests/registry/jsr/@denotest/module-graph/1.4.0/other.ts b/tests/registry/jsr/@denotest/module-graph/1.4.0/other.ts
new file mode 100644
index 000000000..57e436cf8
--- /dev/null
+++ b/tests/registry/jsr/@denotest/module-graph/1.4.0/other.ts
@@ -0,0 +1,2 @@
+export class Other {
+}
diff --git a/tests/registry/jsr/@denotest/module-graph/1.4.0_meta.json b/tests/registry/jsr/@denotest/module-graph/1.4.0_meta.json
new file mode 100644
index 000000000..6cd99b42b
--- /dev/null
+++ b/tests/registry/jsr/@denotest/module-graph/1.4.0_meta.json
@@ -0,0 +1,17 @@
+{
+ "exports": {
+ ".": "./mod.ts",
+ "./other": "./other.ts"
+ },
+ "moduleGraph1": {
+ "/mod.ts": {
+ "dependencies": [{
+ "kind": "import",
+ "type": "static",
+ "specifier": "./other.ts",
+ "specifierRange": [[0, 22], [0, 34]]
+ }]
+ },
+ "/other.ts": {}
+ }
+}
diff --git a/tests/registry/jsr/@denotest/module-graph/meta.json b/tests/registry/jsr/@denotest/module-graph/meta.json
new file mode 100644
index 000000000..9a450c08b
--- /dev/null
+++ b/tests/registry/jsr/@denotest/module-graph/meta.json
@@ -0,0 +1,6 @@
+{
+ "versions": {
+ "1.0.0": {},
+ "1.4.0": {}
+ }
+}
diff --git a/tests/registry/jsr/@denotest/module-graph2/1.4.0/mod.ts b/tests/registry/jsr/@denotest/module-graph2/1.4.0/mod.ts
new file mode 100644
index 000000000..cb3c4a5e0
--- /dev/null
+++ b/tests/registry/jsr/@denotest/module-graph2/1.4.0/mod.ts
@@ -0,0 +1,5 @@
+import { Other } from "./other.ts";
+
+export class Test {
+ other = new Other();
+}
diff --git a/tests/registry/jsr/@denotest/module-graph2/1.4.0/other.ts b/tests/registry/jsr/@denotest/module-graph2/1.4.0/other.ts
new file mode 100644
index 000000000..57e436cf8
--- /dev/null
+++ b/tests/registry/jsr/@denotest/module-graph2/1.4.0/other.ts
@@ -0,0 +1,2 @@
+export class Other {
+}
diff --git a/tests/registry/jsr/@denotest/module-graph2/1.4.0_meta.json b/tests/registry/jsr/@denotest/module-graph2/1.4.0_meta.json
new file mode 100644
index 000000000..ce1d3782d
--- /dev/null
+++ b/tests/registry/jsr/@denotest/module-graph2/1.4.0_meta.json
@@ -0,0 +1,17 @@
+{
+ "exports": {
+ ".": "./mod.ts",
+ "./other": "./other.ts"
+ },
+ "moduleGraph2": {
+ "/mod.ts": {
+ "dependencies": [{
+ "kind": "import",
+ "type": "static",
+ "specifier": "./other.ts",
+ "specifierRange": [[0, 22], [0, 34]]
+ }]
+ },
+ "/other.ts": {}
+ }
+}
diff --git a/tests/registry/jsr/@denotest/module-graph2/meta.json b/tests/registry/jsr/@denotest/module-graph2/meta.json
new file mode 100644
index 000000000..9a450c08b
--- /dev/null
+++ b/tests/registry/jsr/@denotest/module-graph2/meta.json
@@ -0,0 +1,6 @@
+{
+ "versions": {
+ "1.0.0": {},
+ "1.4.0": {}
+ }
+}
diff --git a/tests/registry/jsr/@denotest/no-module-graph/0.1.0/TestClass.ts b/tests/registry/jsr/@denotest/no-module-graph/0.1.0/TestClass.ts
new file mode 100644
index 000000000..88ac04c12
--- /dev/null
+++ b/tests/registry/jsr/@denotest/no-module-graph/0.1.0/TestClass.ts
@@ -0,0 +1 @@
+export default class TestClass {}
diff --git a/tests/registry/jsr/@denotest/no-module-graph/0.1.0/mod.ts b/tests/registry/jsr/@denotest/no-module-graph/0.1.0/mod.ts
new file mode 100644
index 000000000..57600eb4b
--- /dev/null
+++ b/tests/registry/jsr/@denotest/no-module-graph/0.1.0/mod.ts
@@ -0,0 +1,3 @@
+export default "0.1.0";
+
+export { default as TestClass } from "./TestClass.ts";
diff --git a/tests/registry/jsr/@denotest/no-module-graph/0.1.0_meta.json b/tests/registry/jsr/@denotest/no-module-graph/0.1.0_meta.json
new file mode 100644
index 000000000..631a18d0e
--- /dev/null
+++ b/tests/registry/jsr/@denotest/no-module-graph/0.1.0_meta.json
@@ -0,0 +1,5 @@
+{
+ "exports": {
+ ".": "./mod.ts"
+ }
+}
diff --git a/tests/registry/jsr/@denotest/no-module-graph/0.1.1/TestClass.ts b/tests/registry/jsr/@denotest/no-module-graph/0.1.1/TestClass.ts
new file mode 100644
index 000000000..88ac04c12
--- /dev/null
+++ b/tests/registry/jsr/@denotest/no-module-graph/0.1.1/TestClass.ts
@@ -0,0 +1 @@
+export default class TestClass {}
diff --git a/tests/registry/jsr/@denotest/no-module-graph/0.1.1/mod.ts b/tests/registry/jsr/@denotest/no-module-graph/0.1.1/mod.ts
new file mode 100644
index 000000000..5e1fd9435
--- /dev/null
+++ b/tests/registry/jsr/@denotest/no-module-graph/0.1.1/mod.ts
@@ -0,0 +1,3 @@
+export default "0.1.1";
+
+export { default as TestClass } from "./TestClass.ts";
diff --git a/tests/registry/jsr/@denotest/no-module-graph/0.1.1_meta.json b/tests/registry/jsr/@denotest/no-module-graph/0.1.1_meta.json
new file mode 100644
index 000000000..631a18d0e
--- /dev/null
+++ b/tests/registry/jsr/@denotest/no-module-graph/0.1.1_meta.json
@@ -0,0 +1,5 @@
+{
+ "exports": {
+ ".": "./mod.ts"
+ }
+}
diff --git a/tests/registry/jsr/@denotest/no-module-graph/0.2.0/TestClass.ts b/tests/registry/jsr/@denotest/no-module-graph/0.2.0/TestClass.ts
new file mode 100644
index 000000000..88ac04c12
--- /dev/null
+++ b/tests/registry/jsr/@denotest/no-module-graph/0.2.0/TestClass.ts
@@ -0,0 +1 @@
+export default class TestClass {}
diff --git a/tests/registry/jsr/@denotest/no-module-graph/0.2.0/mod.ts b/tests/registry/jsr/@denotest/no-module-graph/0.2.0/mod.ts
new file mode 100644
index 000000000..edf9622fb
--- /dev/null
+++ b/tests/registry/jsr/@denotest/no-module-graph/0.2.0/mod.ts
@@ -0,0 +1,3 @@
+export default "0.2.0";
+
+export { default as TestClass } from "./TestClass.ts";
diff --git a/tests/registry/jsr/@denotest/no-module-graph/0.2.0_meta.json b/tests/registry/jsr/@denotest/no-module-graph/0.2.0_meta.json
new file mode 100644
index 000000000..631a18d0e
--- /dev/null
+++ b/tests/registry/jsr/@denotest/no-module-graph/0.2.0_meta.json
@@ -0,0 +1,5 @@
+{
+ "exports": {
+ ".": "./mod.ts"
+ }
+}
diff --git a/tests/registry/jsr/@denotest/no-module-graph/meta.json b/tests/registry/jsr/@denotest/no-module-graph/meta.json
new file mode 100644
index 000000000..0268b6c8a
--- /dev/null
+++ b/tests/registry/jsr/@denotest/no-module-graph/meta.json
@@ -0,0 +1,7 @@
+{
+ "versions": {
+ "0.1.0": {},
+ "0.1.1": {},
+ "0.2.0": {}
+ }
+}
diff --git a/tests/registry/jsr/@denotest/subset-type-graph-invalid/0.1.0/mod.ts b/tests/registry/jsr/@denotest/subset-type-graph-invalid/0.1.0/mod.ts
new file mode 100644
index 000000000..6a5036bf5
--- /dev/null
+++ b/tests/registry/jsr/@denotest/subset-type-graph-invalid/0.1.0/mod.ts
@@ -0,0 +1,12 @@
+export class Foo {
+ method() {
+ return Math.random();
+ }
+}
+
+// This will be analyzed because the method above is missing an
+// explicit type which is required for the subset type graph to take
+// effect. So the entire source file will be type checked against,
+// causing a type error here.
+const invalidTypeCheck: number = "";
+console.log(invalidTypeCheck);
diff --git a/tests/registry/jsr/@denotest/subset-type-graph-invalid/0.1.0_meta.json b/tests/registry/jsr/@denotest/subset-type-graph-invalid/0.1.0_meta.json
new file mode 100644
index 000000000..631a18d0e
--- /dev/null
+++ b/tests/registry/jsr/@denotest/subset-type-graph-invalid/0.1.0_meta.json
@@ -0,0 +1,5 @@
+{
+ "exports": {
+ ".": "./mod.ts"
+ }
+}
diff --git a/tests/registry/jsr/@denotest/subset-type-graph-invalid/meta.json b/tests/registry/jsr/@denotest/subset-type-graph-invalid/meta.json
new file mode 100644
index 000000000..d10aa5c3a
--- /dev/null
+++ b/tests/registry/jsr/@denotest/subset-type-graph-invalid/meta.json
@@ -0,0 +1,5 @@
+{
+ "versions": {
+ "0.1.0": {}
+ }
+}
diff --git a/tests/registry/jsr/@denotest/subset-type-graph/0.1.0/mod.ts b/tests/registry/jsr/@denotest/subset-type-graph/0.1.0/mod.ts
new file mode 100644
index 000000000..e81b2309a
--- /dev/null
+++ b/tests/registry/jsr/@denotest/subset-type-graph/0.1.0/mod.ts
@@ -0,0 +1,17 @@
+// add some statements that will be removed by the subset
+// type graph so that we can test that the source map works
+console.log(1);
+console.log(2);
+console.log(3);
+
+export class Foo {
+ method(): number {
+ return Math.random();
+ }
+}
+
+// this won't be type checked against because the subset
+// type graph omit this code because it's not part of the
+// public API.
+const invalidTypeCheck: number = "";
+console.log(invalidTypeCheck);
diff --git a/tests/registry/jsr/@denotest/subset-type-graph/0.1.0_meta.json b/tests/registry/jsr/@denotest/subset-type-graph/0.1.0_meta.json
new file mode 100644
index 000000000..631a18d0e
--- /dev/null
+++ b/tests/registry/jsr/@denotest/subset-type-graph/0.1.0_meta.json
@@ -0,0 +1,5 @@
+{
+ "exports": {
+ ".": "./mod.ts"
+ }
+}
diff --git a/tests/registry/jsr/@denotest/subset-type-graph/meta.json b/tests/registry/jsr/@denotest/subset-type-graph/meta.json
new file mode 100644
index 000000000..d10aa5c3a
--- /dev/null
+++ b/tests/registry/jsr/@denotest/subset-type-graph/meta.json
@@ -0,0 +1,5 @@
+{
+ "versions": {
+ "0.1.0": {}
+ }
+}
diff --git a/tests/registry/jsr/@denotest/worker/0.1.0/mod.ts b/tests/registry/jsr/@denotest/worker/0.1.0/mod.ts
new file mode 100644
index 000000000..356df2c24
--- /dev/null
+++ b/tests/registry/jsr/@denotest/worker/0.1.0/mod.ts
@@ -0,0 +1,13 @@
+export function addAsync(a: number, b: number): Promise<number> {
+ const worker = new Worker(import.meta.resolve("./worker.ts"), {
+ type: "module",
+ });
+
+ return new Promise((resolve) => {
+ worker.addEventListener("message", (event) => {
+ resolve(event.data);
+ });
+
+ worker.postMessage({ a, b });
+ });
+}
diff --git a/tests/registry/jsr/@denotest/worker/0.1.0/worker.ts b/tests/registry/jsr/@denotest/worker/0.1.0/worker.ts
new file mode 100644
index 000000000..95b40c758
--- /dev/null
+++ b/tests/registry/jsr/@denotest/worker/0.1.0/worker.ts
@@ -0,0 +1,4 @@
+self.onmessage = (evt) => {
+ self.postMessage(evt.data.a + evt.data.b);
+ self.close();
+};
diff --git a/tests/registry/jsr/@denotest/worker/0.1.0_meta.json b/tests/registry/jsr/@denotest/worker/0.1.0_meta.json
new file mode 100644
index 000000000..631a18d0e
--- /dev/null
+++ b/tests/registry/jsr/@denotest/worker/0.1.0_meta.json
@@ -0,0 +1,5 @@
+{
+ "exports": {
+ ".": "./mod.ts"
+ }
+}
diff --git a/tests/registry/jsr/@denotest/worker/meta.json b/tests/registry/jsr/@denotest/worker/meta.json
new file mode 100644
index 000000000..d10aa5c3a
--- /dev/null
+++ b/tests/registry/jsr/@denotest/worker/meta.json
@@ -0,0 +1,5 @@
+{
+ "versions": {
+ "0.1.0": {}
+ }
+}
diff --git a/tests/registry/jsr/@std/assert/0.220.1/assert.ts b/tests/registry/jsr/@std/assert/0.220.1/assert.ts
new file mode 100644
index 000000000..8c20c347a
--- /dev/null
+++ b/tests/registry/jsr/@std/assert/0.220.1/assert.ts
@@ -0,0 +1,4 @@
+// deno-lint-ignore-file
+export function assert(expr: unknown) {
+ return true;
+}
diff --git a/tests/registry/jsr/@std/assert/0.220.1/assert_equals.ts b/tests/registry/jsr/@std/assert/0.220.1/assert_equals.ts
new file mode 100644
index 000000000..bd58194d0
--- /dev/null
+++ b/tests/registry/jsr/@std/assert/0.220.1/assert_equals.ts
@@ -0,0 +1,9 @@
+// deno-lint-ignore-file
+export function assertEquals<T>(
+ actual: T,
+ expected: T,
+ msg?: string,
+ options: { formatter?: (value: unknown) => string } = {},
+) {
+ return true;
+}
diff --git a/tests/registry/jsr/@std/assert/0.220.1/fail.ts b/tests/registry/jsr/@std/assert/0.220.1/fail.ts
new file mode 100644
index 000000000..6c21edda5
--- /dev/null
+++ b/tests/registry/jsr/@std/assert/0.220.1/fail.ts
@@ -0,0 +1,5 @@
+// deno-lint-ignore-file
+
+export function fail() {
+ return true;
+}
diff --git a/tests/registry/jsr/@std/assert/0.220.1/mod.ts b/tests/registry/jsr/@std/assert/0.220.1/mod.ts
new file mode 100644
index 000000000..fdcb56c8c
--- /dev/null
+++ b/tests/registry/jsr/@std/assert/0.220.1/mod.ts
@@ -0,0 +1,22 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+
+/** A library of assertion functions.
+ * If the assertion is false an `AssertionError` will be thrown which will
+ * result in pretty-printed diff of failing assertion.
+ *
+ * This module is browser compatible, but do not rely on good formatting of
+ * values for AssertionError messages in browsers.
+ *
+ * ```ts
+ * import { assert } from "@std/assert/assert";
+ *
+ * assert("I am truthy"); // Doesn't throw
+ * assert(false); // Throws `AssertionError`
+ * ```
+ *
+ * @module
+ */
+
+export * from "./assert_equals.ts";
+export * from "./assert.ts";
+export * from "./fail.ts";
diff --git a/tests/registry/jsr/@std/assert/0.220.1_meta.json b/tests/registry/jsr/@std/assert/0.220.1_meta.json
new file mode 100644
index 000000000..3ca2db93a
--- /dev/null
+++ b/tests/registry/jsr/@std/assert/0.220.1_meta.json
@@ -0,0 +1,8 @@
+{
+ "exports": {
+ ".": "./mod.ts",
+ "./assert": "./assert.ts",
+ "./assert-equals": "./assert-equals.ts",
+ "./fail": "./fail.ts"
+ }
+}
diff --git a/tests/registry/jsr/@std/assert/meta.json b/tests/registry/jsr/@std/assert/meta.json
new file mode 100644
index 000000000..4bb721c89
--- /dev/null
+++ b/tests/registry/jsr/@std/assert/meta.json
@@ -0,0 +1,8 @@
+{
+ "scope": "std",
+ "name": "assert",
+ "latest": "0.220.1",
+ "versions": {
+ "0.220.1": {}
+ }
+}
diff --git a/tests/registry/jsr/@std/path/0.220.1/_common/assert_path.ts b/tests/registry/jsr/@std/path/0.220.1/_common/assert_path.ts
new file mode 100644
index 000000000..7033edcd1
--- /dev/null
+++ b/tests/registry/jsr/@std/path/0.220.1/_common/assert_path.ts
@@ -0,0 +1,10 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// Copyright the Browserify authors. MIT License.
+
+export function assertPath(path?: string) {
+ if (typeof path !== "string") {
+ throw new TypeError(
+ `Path must be a string. Received ${JSON.stringify(path)}`,
+ );
+ }
+}
diff --git a/tests/registry/jsr/@std/path/0.220.1/_common/constants.ts b/tests/registry/jsr/@std/path/0.220.1/_common/constants.ts
new file mode 100644
index 000000000..9bfd411b6
--- /dev/null
+++ b/tests/registry/jsr/@std/path/0.220.1/_common/constants.ts
@@ -0,0 +1,49 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// Copyright the Browserify authors. MIT License.
+// Ported from https://github.com/browserify/path-browserify/
+// This module is browser compatible.
+
+// Alphabet chars.
+export const CHAR_UPPERCASE_A = 65; /* A */
+export const CHAR_LOWERCASE_A = 97; /* a */
+export const CHAR_UPPERCASE_Z = 90; /* Z */
+export const CHAR_LOWERCASE_Z = 122; /* z */
+
+// Non-alphabetic chars.
+export const CHAR_DOT = 46; /* . */
+export const CHAR_FORWARD_SLASH = 47; /* / */
+export const CHAR_BACKWARD_SLASH = 92; /* \ */
+export const CHAR_VERTICAL_LINE = 124; /* | */
+export const CHAR_COLON = 58; /* : */
+export const CHAR_QUESTION_MARK = 63; /* ? */
+export const CHAR_UNDERSCORE = 95; /* _ */
+export const CHAR_LINE_FEED = 10; /* \n */
+export const CHAR_CARRIAGE_RETURN = 13; /* \r */
+export const CHAR_TAB = 9; /* \t */
+export const CHAR_FORM_FEED = 12; /* \f */
+export const CHAR_EXCLAMATION_MARK = 33; /* ! */
+export const CHAR_HASH = 35; /* # */
+export const CHAR_SPACE = 32; /* */
+export const CHAR_NO_BREAK_SPACE = 160; /* \u00A0 */
+export const CHAR_ZERO_WIDTH_NOBREAK_SPACE = 65279; /* \uFEFF */
+export const CHAR_LEFT_SQUARE_BRACKET = 91; /* [ */
+export const CHAR_RIGHT_SQUARE_BRACKET = 93; /* ] */
+export const CHAR_LEFT_ANGLE_BRACKET = 60; /* < */
+export const CHAR_RIGHT_ANGLE_BRACKET = 62; /* > */
+export const CHAR_LEFT_CURLY_BRACKET = 123; /* { */
+export const CHAR_RIGHT_CURLY_BRACKET = 125; /* } */
+export const CHAR_HYPHEN_MINUS = 45; /* - */
+export const CHAR_PLUS = 43; /* + */
+export const CHAR_DOUBLE_QUOTE = 34; /* " */
+export const CHAR_SINGLE_QUOTE = 39; /* ' */
+export const CHAR_PERCENT = 37; /* % */
+export const CHAR_SEMICOLON = 59; /* ; */
+export const CHAR_CIRCUMFLEX_ACCENT = 94; /* ^ */
+export const CHAR_GRAVE_ACCENT = 96; /* ` */
+export const CHAR_AT = 64; /* @ */
+export const CHAR_AMPERSAND = 38; /* & */
+export const CHAR_EQUAL = 61; /* = */
+
+// Digits
+export const CHAR_0 = 48; /* 0 */
+export const CHAR_9 = 57; /* 9 */
diff --git a/tests/registry/jsr/@std/path/0.220.1/_common/normalize.ts b/tests/registry/jsr/@std/path/0.220.1/_common/normalize.ts
new file mode 100644
index 000000000..3a1a16284
--- /dev/null
+++ b/tests/registry/jsr/@std/path/0.220.1/_common/normalize.ts
@@ -0,0 +1,9 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+
+import { assertPath } from "./assert_path.ts";
+
+export function assertArg(path: string) {
+ assertPath(path);
+ if (path.length === 0) return ".";
+}
diff --git a/tests/registry/jsr/@std/path/0.220.1/_common/normalize_string.ts b/tests/registry/jsr/@std/path/0.220.1/_common/normalize_string.ts
new file mode 100644
index 000000000..d8f0e090a
--- /dev/null
+++ b/tests/registry/jsr/@std/path/0.220.1/_common/normalize_string.ts
@@ -0,0 +1,74 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// Copyright the Browserify authors. MIT License.
+// Ported from https://github.com/browserify/path-browserify/
+// This module is browser compatible.
+
+import { CHAR_DOT, CHAR_FORWARD_SLASH } from "./constants.ts";
+
+// Resolves . and .. elements in a path with directory names
+export function normalizeString(
+ path: string,
+ allowAboveRoot: boolean,
+ separator: string,
+ isPathSeparator: (code: number) => boolean,
+): string {
+ let res = "";
+ let lastSegmentLength = 0;
+ let lastSlash = -1;
+ let dots = 0;
+ let code: number | undefined;
+ for (let i = 0; i <= path.length; ++i) {
+ if (i < path.length) code = path.charCodeAt(i);
+ else if (isPathSeparator(code!)) break;
+ else code = CHAR_FORWARD_SLASH;
+
+ if (isPathSeparator(code!)) {
+ if (lastSlash === i - 1 || dots === 1) {
+ // NOOP
+ } else if (lastSlash !== i - 1 && dots === 2) {
+ if (
+ res.length < 2 ||
+ lastSegmentLength !== 2 ||
+ res.charCodeAt(res.length - 1) !== CHAR_DOT ||
+ res.charCodeAt(res.length - 2) !== CHAR_DOT
+ ) {
+ if (res.length > 2) {
+ const lastSlashIndex = res.lastIndexOf(separator);
+ if (lastSlashIndex === -1) {
+ res = "";
+ lastSegmentLength = 0;
+ } else {
+ res = res.slice(0, lastSlashIndex);
+ lastSegmentLength = res.length - 1 - res.lastIndexOf(separator);
+ }
+ lastSlash = i;
+ dots = 0;
+ continue;
+ } else if (res.length === 2 || res.length === 1) {
+ res = "";
+ lastSegmentLength = 0;
+ lastSlash = i;
+ dots = 0;
+ continue;
+ }
+ }
+ if (allowAboveRoot) {
+ if (res.length > 0) res += `${separator}..`;
+ else res = "..";
+ lastSegmentLength = 2;
+ }
+ } else {
+ if (res.length > 0) res += separator + path.slice(lastSlash + 1, i);
+ else res = path.slice(lastSlash + 1, i);
+ lastSegmentLength = i - lastSlash - 1;
+ }
+ lastSlash = i;
+ dots = 0;
+ } else if (code === CHAR_DOT && dots !== -1) {
+ ++dots;
+ } else {
+ dots = -1;
+ }
+ }
+ return res;
+}
diff --git a/tests/registry/jsr/@std/path/0.220.1/posix/_util.ts b/tests/registry/jsr/@std/path/0.220.1/posix/_util.ts
new file mode 100644
index 000000000..b446155df
--- /dev/null
+++ b/tests/registry/jsr/@std/path/0.220.1/posix/_util.ts
@@ -0,0 +1,10 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// Copyright the Browserify authors. MIT License.
+// Ported from https://github.com/browserify/path-browserify/
+// This module is browser compatible.
+
+import { CHAR_FORWARD_SLASH } from "../_common/constants.ts";
+
+export function isPosixPathSeparator(code: number): boolean {
+ return code === CHAR_FORWARD_SLASH;
+}
diff --git a/tests/registry/jsr/@std/path/0.220.1/posix/join.ts b/tests/registry/jsr/@std/path/0.220.1/posix/join.ts
new file mode 100644
index 000000000..625762ab9
--- /dev/null
+++ b/tests/registry/jsr/@std/path/0.220.1/posix/join.ts
@@ -0,0 +1,25 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+
+import { assertPath } from "../_common/assert_path.ts";
+import { normalize } from "./normalize.ts";
+
+/**
+ * Join all given a sequence of `paths`,then normalizes the resulting path.
+ * @param paths to be joined and normalized
+ */
+export function join(...paths: string[]): string {
+ if (paths.length === 0) return ".";
+
+ let joined: string | undefined;
+ for (let i = 0; i < paths.length; ++i) {
+ const path = paths[i]!;
+ assertPath(path);
+ if (path.length > 0) {
+ if (!joined) joined = path;
+ else joined += `/${path}`;
+ }
+ }
+ if (!joined) return ".";
+ return normalize(joined);
+}
diff --git a/tests/registry/jsr/@std/path/0.220.1/posix/normalize.ts b/tests/registry/jsr/@std/path/0.220.1/posix/normalize.ts
new file mode 100644
index 000000000..8e88ad254
--- /dev/null
+++ b/tests/registry/jsr/@std/path/0.220.1/posix/normalize.ts
@@ -0,0 +1,30 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+
+import { assertArg } from "../_common/normalize.ts";
+import { normalizeString } from "../_common/normalize_string.ts";
+import { isPosixPathSeparator } from "./_util.ts";
+
+/**
+ * Normalize the `path`, resolving `'..'` and `'.'` segments.
+ * Note that resolving these segments does not necessarily mean that all will be eliminated.
+ * A `'..'` at the top-level will be preserved, and an empty path is canonically `'.'`.
+ * @param path to be normalized
+ */
+export function normalize(path: string): string {
+ assertArg(path);
+
+ const isAbsolute = isPosixPathSeparator(path.charCodeAt(0));
+ const trailingSeparator = isPosixPathSeparator(
+ path.charCodeAt(path.length - 1),
+ );
+
+ // Normalize the path
+ path = normalizeString(path, !isAbsolute, "/", isPosixPathSeparator);
+
+ if (path.length === 0 && !isAbsolute) path = ".";
+ if (path.length > 0 && trailingSeparator) path += "/";
+
+ if (isAbsolute) return `/${path}`;
+ return path;
+}
diff --git a/tests/registry/jsr/@std/path/0.220.1_meta.json b/tests/registry/jsr/@std/path/0.220.1_meta.json
new file mode 100644
index 000000000..2a2f43f96
--- /dev/null
+++ b/tests/registry/jsr/@std/path/0.220.1_meta.json
@@ -0,0 +1,64 @@
+{
+ "exports": {
+ ".": "./mod.ts",
+ "./basename": "./basename.ts",
+ "./common": "./common.ts",
+ "./constants": "./constants.ts",
+ "./dirname": "./dirname.ts",
+ "./extname": "./extname.ts",
+ "./format": "./format.ts",
+ "./from_file_url": "./from_file_url.ts",
+ "./glob_to_regexp": "./glob_to_regexp.ts",
+ "./is_absolute": "./is_absolute.ts",
+ "./is_glob": "./is_glob.ts",
+ "./join": "./join.ts",
+ "./join_globs": "./join_globs.ts",
+ "./normalize": "./normalize.ts",
+ "./normalize_glob": "./normalize_glob.ts",
+ "./parse": "./parse.ts",
+ "./posix": "./posix/mod.ts",
+ "./posix/basename": "./posix/basename.ts",
+ "./posix/common": "./posix/common.ts",
+ "./posix/constants": "./posix/constants.ts",
+ "./posix/dirname": "./posix/dirname.ts",
+ "./posix/extname": "./posix/extname.ts",
+ "./posix/format": "./posix/format.ts",
+ "./posix/from_file_url": "./posix/from_file_url.ts",
+ "./posix/glob_to_regexp": "./posix/glob_to_regexp.ts",
+ "./posix/is_absolute": "./posix/is_absolute.ts",
+ "./posix/is_glob": "./posix/is_glob.ts",
+ "./posix/join": "./posix/join.ts",
+ "./posix/join_globs": "./posix/join_globs.ts",
+ "./posix/normalize": "./posix/normalize.ts",
+ "./posix/normalize_glob": "./posix/normalize_glob.ts",
+ "./posix/parse": "./posix/parse.ts",
+ "./posix/relative": "./posix/relative.ts",
+ "./posix/resolve": "./posix/resolve.ts",
+ "./posix/to_file_url": "./posix/to_file_url.ts",
+ "./posix/to_namespaced_path": "./posix/to_namespaced_path.ts",
+ "./relative": "./relative.ts",
+ "./resolve": "./resolve.ts",
+ "./to_file_url": "./to_file_url.ts",
+ "./to_namespaced_path": "./to_namespaced_path.ts",
+ "./windows": "./windows/mod.ts",
+ "./windows/basename": "./windows/basename.ts",
+ "./windows/common": "./windows/common.ts",
+ "./windows/constants": "./windows/constants.ts",
+ "./windows/dirname": "./windows/dirname.ts",
+ "./windows/extname": "./windows/extname.ts",
+ "./windows/format": "./windows/format.ts",
+ "./windows/from_file_url": "./windows/from_file_url.ts",
+ "./windows/glob_to_regexp": "./windows/glob_to_regexp.ts",
+ "./windows/is_absolute": "./windows/is_absolute.ts",
+ "./windows/is_glob": "./windows/is_glob.ts",
+ "./windows/join": "./windows/join.ts",
+ "./windows/join_globs": "./windows/join_globs.ts",
+ "./windows/normalize": "./windows/normalize.ts",
+ "./windows/normalize_glob": "./windows/normalize_glob.ts",
+ "./windows/parse": "./windows/parse.ts",
+ "./windows/relative": "./windows/relative.ts",
+ "./windows/resolve": "./windows/resolve.ts",
+ "./windows/to_file_url": "./windows/to_file_url.ts",
+ "./windows/to_namespaced_path": "./windows/to_namespaced_path.ts"
+ }
+}
diff --git a/tests/registry/jsr/@std/path/meta.json b/tests/registry/jsr/@std/path/meta.json
new file mode 100644
index 000000000..89a4e07f9
--- /dev/null
+++ b/tests/registry/jsr/@std/path/meta.json
@@ -0,0 +1,8 @@
+{
+ "scope": "std",
+ "name": "path",
+ "latest": "0.220.1",
+ "versions": {
+ "0.220.1": {}
+ }
+}
diff --git a/tests/registry/jsr/@std/url/0.220.1/join.ts b/tests/registry/jsr/@std/url/0.220.1/join.ts
new file mode 100644
index 000000000..158994ad3
--- /dev/null
+++ b/tests/registry/jsr/@std/url/0.220.1/join.ts
@@ -0,0 +1,28 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+
+import { join as posixJoin } from "jsr:/@std/path@^0.220.1/posix/join";
+
+/**
+ * Join a base `URL` and a series of `paths`, then normalizes the resulting URL.
+ *
+ * @example
+ * ```ts
+ * import { join } from "@std/url/join";
+ *
+ * console.log(join("https://deno.land/", "std", "path", "mod.ts").href);
+ * // Outputs: "https://deno.land/std/path/mod.ts"
+ *
+ * console.log(join("https://deno.land", "//std", "path/", "/mod.ts").href);
+ * // Outputs: "https://deno.land/path/mod.ts"
+ * ```
+ *
+ * @param url the base URL to be joined with the paths and normalized
+ * @param paths array of path segments to be joined to the base URL
+ * @returns a complete URL string containing the base URL joined with the paths
+ */
+export function join(url: string | URL, ...paths: string[]): URL {
+ url = new URL(url);
+ url.pathname = posixJoin(url.pathname, ...paths);
+ return url;
+}
diff --git a/tests/registry/jsr/@std/url/0.220.1/normalize.ts b/tests/registry/jsr/@std/url/0.220.1/normalize.ts
new file mode 100644
index 000000000..dc2305701
--- /dev/null
+++ b/tests/registry/jsr/@std/url/0.220.1/normalize.ts
@@ -0,0 +1,28 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+
+import { normalize as posixNormalize } from "jsr:/@std/path@^0.220.1/posix/normalize";
+
+/**
+ * Normalize the `URL`, resolving `'..'` and `'.'` segments and multiple
+ * `'/'`s into `'//'` after protocol and remaining into `'/'`.
+ *
+ * @example
+ * ```ts
+ * import { normalize } from "@std/url/normalize";
+ *
+ * console.log(normalize("https:///deno.land///std//assert//.//mod.ts").href);
+ * // Outputs: "https://deno.land/std/path/mod.ts"
+ *
+ * console.log(normalize("https://deno.land/std/assert/../async/retry.ts").href);
+ * // Outputs: "https://deno.land/std/async/retry.ts"
+ * ```
+ *
+ * @param url to be normalized
+ * @returns normalized URL
+ */
+export function normalize(url: string | URL): URL {
+ url = new URL(url);
+ url.pathname = posixNormalize(url.pathname);
+ return url;
+}
diff --git a/tests/registry/jsr/@std/url/0.220.1_meta.json b/tests/registry/jsr/@std/url/0.220.1_meta.json
new file mode 100644
index 000000000..2a92cc651
--- /dev/null
+++ b/tests/registry/jsr/@std/url/0.220.1_meta.json
@@ -0,0 +1,10 @@
+{
+ "exports": {
+ ".": "./mod.ts",
+ "./basename": "./basename.ts",
+ "./dirname": "./dirname.ts",
+ "./extname": "./extname.ts",
+ "./join": "./join.ts",
+ "./normalize": "./normalize.ts"
+ }
+}
diff --git a/tests/registry/jsr/@std/url/meta.json b/tests/registry/jsr/@std/url/meta.json
new file mode 100644
index 000000000..3ae97c991
--- /dev/null
+++ b/tests/registry/jsr/@std/url/meta.json
@@ -0,0 +1,8 @@
+{
+ "scope": "std",
+ "name": "url",
+ "latest": "0.220.1",
+ "versions": {
+ "0.220.1": {}
+ }
+}