UNPKG

pnpm

Version:

Fast, disk space efficient package manager

24 lines (23 loc) • 927 B
import { spawnSync } from 'node:child_process'; import fs from 'node:fs'; /** * Unpacks a package tarball into `dest`, leaving its `package/` root in place. * * Shells out to `tar`, which every supported host has: macOS and Linux ship it, * and Windows has had bsdtar since Windows 10 1803. Member selection and * `--strip-components` are avoided because busybox tar and bsdtar disagree * about them. */ export function extractTarball(tarball, dest) { fs.mkdirSync(dest, { recursive: true }); const { error, status, stderr } = spawnSync('tar', ['-xzf', tarball, '-C', dest], { encoding: 'utf8' }); if (error != null) { if (error.code === 'ENOENT') { throw new Error('This installer needs the `tar` command, which was not found on your PATH.'); } throw error; } if (status !== 0) { throw new Error(`Could not extract ${tarball}: ${stderr.trim()}`); } }