UNPKG

@typespec/compiler

Version:

TypeSpec compiler and standard library

35 lines 1.47 kB
// 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