@typespec/compiler
Version:
TypeSpec compiler and standard library
35 lines • 1.47 kB
JavaScript
// Node.js-specific helpers for downloading and extracting npm packages.
// For browser-safe registry types and fetch functions, use ./npm-registry.js
import { createHash } from "crypto";
import { Readable } from "stream";
import { extract as tarX } from "tar/extract";
import { fetchPackageManifest } from "./npm-registry.js";
export async function downloadPackageVersion(packageName, version, dest) {
const manifest = await fetchPackageManifest(packageName, version);
return downloadAndExtractTarball(manifest.dist.tarball, dest);
}
export async function downloadAndExtractPackage(manifest, dest, hashAlgorithm = "sha512") {
return downloadAndExtractTarball(manifest.dist.tarball, dest, hashAlgorithm);
}
async function downloadAndExtractTarball(url, dest, hashAlgorithm = "sha512") {
const res = await fetch(url);
const tarballStream = Readable.fromWeb(res.body);
const hash = tarballStream.pipe(createHash(hashAlgorithm));
const extractor = tarX({
strip: 1,
cwd: dest,
});
const p = new Promise((resolve, reject) => {
extractor.on("end", () => {
resolve();
});
extractor.on("error", (er) => {
reject(er);
});
tarballStream.on("error", (er) => reject(er));
});
tarballStream.pipe(extractor);
await p;
return { dest, hash: { algorithm: hashAlgorithm, value: hash.digest("hex") } };
}
//# sourceMappingURL=npm-package-download.js.map