Skip to content
This repository was archived by the owner on May 17, 2025. It is now read-only.

Commit b4c6e1b

Browse files
authored
fix: provider lookups to use standard npm packument (#381)
1 parent db9571c commit b4c6e1b

File tree

5 files changed

+104
-14
lines changed

5 files changed

+104
-14
lines changed

src/providers/esmsh.ts

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
1-
import { ExactPackage, PackageConfig } from "../install/package.js";
1+
import { ExactPackage, LatestPackageTarget, PackageConfig } from "../install/package.js";
22
import { Resolver } from "../trace/resolver.js";
33
// @ts-ignore
44
import { fetch } from "#fetch";
55
import { JspmError } from "../common/err.js";
6+
import { fetchVersions } from "./jspm.js";
7+
// @ts-ignore
8+
import { SemverRange } from "sver";
9+
import { importedFrom } from "../common/url.js";
610

711
const cdnUrl = "https://esm.sh/";
812

@@ -74,5 +78,22 @@ export async function getPackageConfig(
7478
return pcfg;
7579
}
7680

77-
// Use JSPM version resolver for now:
78-
export { resolveLatestTarget } from "./jspm.js";
81+
export async function resolveLatestTarget(
82+
this: Resolver,
83+
target: LatestPackageTarget,
84+
layer: string,
85+
parentUrl: string
86+
): Promise<ExactPackage | null> {
87+
const { registry, name, range, unstable } = target;
88+
const versions = await fetchVersions(name);
89+
const semverRange = new SemverRange(String(range) || "*", unstable);
90+
const version = semverRange.bestMatch(versions, unstable);
91+
if (version) {
92+
return { registry, name, version: version.toString() };
93+
}
94+
throw new JspmError(
95+
`Unable to resolve ${registry}:${name}@${range} to a valid version${importedFrom(
96+
parentUrl
97+
)}`
98+
);
99+
}

src/providers/jsdelivr.ts

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
1-
import { ExactPackage } from "../install/package.js";
1+
import { JspmError } from "../common/err.js";
2+
import { importedFrom } from "../common/url.js";
3+
import { ExactPackage, LatestPackageTarget } from "../install/package.js";
4+
import { Resolver } from "../trace/resolver.js";
5+
import { fetchVersions } from "./jspm.js";
6+
// @ts-ignore
7+
import { SemverRange } from "sver";
28

39
const cdnUrl = "https://cdn.jsdelivr.net/";
410

@@ -16,5 +22,22 @@ export function parseUrlPkg(url: string) {
1622
return { registry, name, version };
1723
}
1824

19-
// Use JSPM version resolver for now
20-
export { resolveLatestTarget } from "./jspm.js";
25+
export async function resolveLatestTarget(
26+
this: Resolver,
27+
target: LatestPackageTarget,
28+
layer: string,
29+
parentUrl: string
30+
): Promise<ExactPackage | null> {
31+
const { registry, name, range, unstable } = target;
32+
const versions = await fetchVersions(name);
33+
const semverRange = new SemverRange(String(range) || "*", unstable);
34+
const version = semverRange.bestMatch(versions, unstable);
35+
if (version) {
36+
return { registry, name, version: version.toString() };
37+
}
38+
throw new JspmError(
39+
`Unable to resolve ${registry}:${name}@${range} to a valid version${importedFrom(
40+
parentUrl
41+
)}`
42+
);
43+
}

src/providers/jspm.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,7 @@ async function lookupRange(
305305
`Unable to resolve ${registry}:${name}@${range} to a valid version${importedFrom(
306306
parentUrl
307307
)}`
308-
);
308+
);
309309
}
310310
})();
311311
lookupCache.set(url, lookupPromise);
@@ -314,7 +314,7 @@ async function lookupRange(
314314

315315
const versionsCacheMap = new Map<string, string[]>();
316316

317-
async function fetchVersions(name: string): Promise<string[]> {
317+
export async function fetchVersions(name: string): Promise<string[]> {
318318
if (versionsCacheMap.has(name)) {
319319
return versionsCacheMap.get(name);
320320
}

src/providers/skypack.ts

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
1-
import { ExactPackage } from "../install/package.js";
1+
import { JspmError } from "../common/err.js";
2+
import { importedFrom } from "../common/url.js";
3+
import { ExactPackage, LatestPackageTarget } from "../install/package.js";
4+
import { Resolver } from "../trace/resolver.js";
5+
import { fetchVersions } from "./jspm.js";
6+
// @ts-ignore
7+
import { SemverRange } from "sver";
28

39
const cdnUrl = "https://cdn.skypack.dev/";
410

@@ -15,5 +21,22 @@ export function parseUrlPkg(url: string) {
1521
return { registry: "npm", name, version };
1622
}
1723

18-
// Use JSPM version resolver for now:
19-
export { resolveLatestTarget } from "./jspm.js";
24+
export async function resolveLatestTarget(
25+
this: Resolver,
26+
target: LatestPackageTarget,
27+
layer: string,
28+
parentUrl: string
29+
): Promise<ExactPackage | null> {
30+
const { registry, name, range, unstable } = target;
31+
const versions = await fetchVersions(name);
32+
const semverRange = new SemverRange(String(range) || "*", unstable);
33+
const version = semverRange.bestMatch(versions, unstable);
34+
if (version) {
35+
return { registry, name, version: version.toString() };
36+
}
37+
throw new JspmError(
38+
`Unable to resolve ${registry}:${name}@${range} to a valid version${importedFrom(
39+
parentUrl
40+
)}`
41+
);
42+
}

src/providers/unpkg.ts

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
1-
import { ExactPackage } from "../install/package.js";
1+
import { JspmError } from "../common/err.js";
2+
import { importedFrom } from "../common/url.js";
3+
import { ExactPackage, LatestPackageTarget } from "../install/package.js";
4+
import { Resolver } from "../trace/resolver.js";
5+
import { fetchVersions } from "./jspm.js";
6+
// @ts-ignore
7+
import { SemverRange } from "sver";
28

39
const cdnUrl = "https://unpkg.com/";
410

@@ -16,5 +22,22 @@ export function parseUrlPkg(url: string) {
1622
}
1723
}
1824

19-
// Use JSPM version resolver for now
20-
export { resolveLatestTarget } from "./jspm.js";
25+
export async function resolveLatestTarget(
26+
this: Resolver,
27+
target: LatestPackageTarget,
28+
layer: string,
29+
parentUrl: string
30+
): Promise<ExactPackage | null> {
31+
const { registry, name, range, unstable } = target;
32+
const versions = await fetchVersions(name);
33+
const semverRange = new SemverRange(String(range) || "*", unstable);
34+
const version = semverRange.bestMatch(versions, unstable);
35+
if (version) {
36+
return { registry, name, version: version.toString() };
37+
}
38+
throw new JspmError(
39+
`Unable to resolve ${registry}:${name}@${range} to a valid version${importedFrom(
40+
parentUrl
41+
)}`
42+
);
43+
}

0 commit comments

Comments
 (0)