denoify
Version:
For NPM module authors that would like to support Deno but do not want to write and maintain a port.
54 lines (44 loc) • 1.62 kB
text/typescript
import fetch from "node-fetch";
import { addCache } from "../tools/addCache";
// https://api.deno.land/modules
// https://cdn.deno.land/evt/meta/versions.json
// https://cdn.deno.land/evt/versions/v1.6.8/meta/meta.json
export const getThirdPartyDenoModuleInfos = addCache(
async (params: {
denoModuleName: string;
}): Promise<
| {
owner: string;
repo: string;
latestVersion: string;
subdir: string;
}
| undefined
> => {
const { denoModuleName } = params;
const latestVersion = await fetch(`https://cdn.deno.land/${denoModuleName}/meta/versions.json`).then(async res =>
!/^2[0-9]{2}$/.test(`${res.status}`) ? undefined : (JSON.parse(await res.text())["latest"] as string)
);
if (latestVersion === undefined) {
return undefined;
}
const infos = await fetch(`https://cdn.deno.land/${denoModuleName}/versions/${latestVersion}/meta/meta.json`).then(async res =>
!/^2[0-9]{2}$/.test(`${res.status}`)
? undefined
: (JSON.parse(await res.text())["upload_options"] as { type: string; repository: string; subdir?: string })
);
if (infos?.type !== "github") {
return undefined;
}
if (infos.repository === undefined) {
return undefined;
}
const [owner, repo] = infos.repository.split("/");
return {
owner,
repo,
latestVersion,
"subdir": infos.subdir ?? "/"
};
}
);