@jspm/generator
Version:
Package Import Map Generation Tool
37 lines (35 loc) • 1.29 kB
JavaScript
import { JspmError } from "../common/err.js";
import { importedFrom } from "../common/url.js";
import { fetchVersions } from "./jspm.js";
// @ts-ignore
import { SemverRange } from "sver";
const cdnUrl = "https://cdn.skypack.dev/";
export async function pkgToUrl(pkg) {
return `${cdnUrl}${pkg.name}@${pkg.version}/`;
}
const exactPkgRegEx = /^((?:@[^/\\%@]+\/)?[^./\\%@][^/\\%@]*)@([^\/]+)(\/.*)?$/;
export function parseUrlPkg(url) {
if (!url.startsWith(cdnUrl)) return;
const [, name, version] = url.slice(cdnUrl.length).match(exactPkgRegEx) || [];
if (!name || !version) return;
return {
registry: "npm",
name,
version
};
}
export async function resolveLatestTarget(target, layer, parentUrl) {
const { registry, name, range, unstable } = target;
const versions = await fetchVersions.call(this, name);
const semverRange = new SemverRange(String(range) || "*", unstable);
const version = semverRange.bestMatch(versions, unstable);
if (version) {
return {
registry,
name,
version: version.toString()
};
}
throw new JspmError(`Unable to resolve ${registry}:${name}@${range} to a valid version${importedFrom(parentUrl)}`);
}
//# sourceMappingURL=skypack.js.map