From 651e3e9e6daf3243dd21b7f66ce9738abdc39a37 Mon Sep 17 00:00:00 2001 From: David Sherret Date: Sat, 27 Apr 2024 17:11:57 -0400 Subject: fix(compile): certain jsr specifiers sometimes can't load (#23567) When returning a jsr specifier for resolve it seems like deno core does not work properly and hangs. Closes https://github.com/denoland/deno/issues/23551 Closes https://github.com/denoland/deno/issues/23139 --- .../testdata/jsr/registry/@std/url/0.220.1/join.ts | 28 ++++++++++++++++++++++ .../jsr/registry/@std/url/0.220.1/normalize.ts | 28 ++++++++++++++++++++++ .../jsr/registry/@std/url/0.220.1_meta.json | 10 ++++++++ tests/testdata/jsr/registry/@std/url/meta.json | 8 +++++++ 4 files changed, 74 insertions(+) create mode 100644 tests/testdata/jsr/registry/@std/url/0.220.1/join.ts create mode 100644 tests/testdata/jsr/registry/@std/url/0.220.1/normalize.ts create mode 100644 tests/testdata/jsr/registry/@std/url/0.220.1_meta.json create mode 100644 tests/testdata/jsr/registry/@std/url/meta.json (limited to 'tests/testdata/jsr/registry/@std/url') diff --git a/tests/testdata/jsr/registry/@std/url/0.220.1/join.ts b/tests/testdata/jsr/registry/@std/url/0.220.1/join.ts new file mode 100644 index 000000000..158994ad3 --- /dev/null +++ b/tests/testdata/jsr/registry/@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/testdata/jsr/registry/@std/url/0.220.1/normalize.ts b/tests/testdata/jsr/registry/@std/url/0.220.1/normalize.ts new file mode 100644 index 000000000..dc2305701 --- /dev/null +++ b/tests/testdata/jsr/registry/@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/testdata/jsr/registry/@std/url/0.220.1_meta.json b/tests/testdata/jsr/registry/@std/url/0.220.1_meta.json new file mode 100644 index 000000000..2a92cc651 --- /dev/null +++ b/tests/testdata/jsr/registry/@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/testdata/jsr/registry/@std/url/meta.json b/tests/testdata/jsr/registry/@std/url/meta.json new file mode 100644 index 000000000..3ae97c991 --- /dev/null +++ b/tests/testdata/jsr/registry/@std/url/meta.json @@ -0,0 +1,8 @@ +{ + "scope": "std", + "name": "url", + "latest": "0.220.1", + "versions": { + "0.220.1": {} + } +} -- cgit v1.2.3