import { CdnBuildStatus } from "./models/SearchResponse/CdnBuildStatus"; import { getJSON } from "./utils"; interface SearchParams { /** * Don't add @ again, we hav @ front of your string, * look up document * https://docs.skypack.dev/skypack-cdn/api-reference/lookup-urls#lookup-by-package-+-version-range-semver */ min?: boolean; dts?: boolean; dist?: string; } const root = "https://cdn.skypack.dev"; /** 获取 package 的文件 */ export const getPackageURL = ( name: string, path = "", { min = false, dts = false, dist }: SearchParams = {} ) => { const params = new URLSearchParams(); min && params.set("min", ""); dts && params.set("dts", ""); dist && params.set("dts", dist); return root + `/${name}/` + path + "?" + params.toString(); }; interface MetaData { name: string; version: string; buildId: string; buildStatus: CdnBuildStatus; packageExports: { [name: string]: { id: string; optimized: boolean; hasDefaultExport: boolean; namedExports: string[]; type: string; }; }; } /** * 获取 package 的详细信息 当构建失败时会报错 * https://docs.skypack.dev/skypack-cdn/api-reference/package-metadata */ export const getPackageMetaData = async (name: string) => { return getJSON(root + `/${name}?meta`); }; /** * 获取一个 pinned 的 URL,可以加速获取文件 * https://docs.skypack.dev/skypack-cdn/api-reference/pinned-urls-optimized */ export const getPinnedURL = async (name: string, min = false) => { const meta = await getPackageMetaData(name); if (meta.packageExports["."]) { const head = root + `/pin/${meta.name}@v${meta.version}-${meta.buildId}/mode=imports${ min ? ",min" : "" }/optimized/`; return head + meta.packageExports["."].id.replace(/^\.*\//, ""); } else { return ""; } };