cdn-resolve
Version:
Resolves import paths to their CDN equivalents
61 lines (59 loc) • 2.57 kB
JavaScript
const require_parse = require('./parse-CDYH5MAa.cjs');
//#region src/esm.ts
/**
* Builds the URL for esm.sh
*
* @param {string} module - The module name.
* @param {ESMOptions?} options - options for building the URL.
* @returns {URL | undefined} URL for the ESM, or undefined if an error occurs.
*/
function buildESMUrl(module$1, options) {
try {
const pkg = require_parse.parsePackage(module$1);
const url = new URL(`${options?.external === true ? "*" : ""}${pkg.full}`, "https://esm.sh/");
if (options?.deps) url.searchParams.append("deps", options.deps.join(","));
if (options?.alias) url.searchParams.append("alias", Object.entries(options.alias).map(([key, value]) => `${key}:${value}`).join(","));
if (options?.treeShake) url.searchParams.append("exports", options.treeShake.join(","));
if (options?.bundle) url.searchParams.append("bundle", options.bundle);
if (options?.dev) url.searchParams.append("dev", "true");
if (options?.esbuild) {
if (options.esbuild.target) url.searchParams.append("target", options.esbuild.target);
if (options.esbuild.conditions) url.searchParams.append("conditions", options.esbuild.conditions.join(","));
if (options.esbuild.keepNames) url.searchParams.append("keep-names", "true");
if (options.esbuild.ignoreAnnotations) url.searchParams.append("ignore-annotations", "true");
}
if (options?.worker) url.searchParams.append("worker", "true");
if (options?.css) url.searchParams.append("css", "true");
if (options?.wasm) url.searchParams.append("module", "true");
if (options?.external && Array.isArray(options.external)) url.searchParams.append("external", options.external.join(","));
if (options?.pin) url.searchParams.append("pin", options.pin);
if (options?.noDts) url.searchParams.append("no-dts", "true");
if (options?.raw) url.searchParams.append("raw", "true");
return url;
} catch {
return;
}
}
/**
* Resolves the ESM types for a given URL.
*
* @param {URL | string} url - The URL or string representation of the URL.
* @returns {Promise<string | null>} A promise that resolves to a string representing the ESM types, or null if not found.
*/
async function resolveESMTypes(url) {
if (url instanceof URL) url = url.toString();
return (await fetch(url).then((res) => res.headers)).get("x-typescript-types");
}
//#endregion
Object.defineProperty(exports, 'buildESMUrl', {
enumerable: true,
get: function () {
return buildESMUrl;
}
});
Object.defineProperty(exports, 'resolveESMTypes', {
enumerable: true,
get: function () {
return resolveESMTypes;
}
});