@publint/pack
Version:
Utilities for packing and unpacking npm packages
22 lines (20 loc) • 729 B
JavaScript
import util from 'node:util'
import zlib from 'node:zlib'
import { readableStreamToArrayBuffer } from '../shared/buffer-stream.js'
import { getFilesRootDir, parseTar } from '../shared/parse-tar.js'
/** @type {import('../index.d.ts').unpack} */
export async function unpack(tarball) {
/** @type {ArrayBuffer} */
let buffer
if (tarball instanceof ReadableStream) {
buffer = await readableStreamToArrayBuffer(
tarball.pipeThrough(new DecompressionStream('gzip')),
)
} else {
const nodeBuffer = await util.promisify(zlib.gunzip)(tarball)
buffer = /** @type {ArrayBuffer} */ (nodeBuffer.buffer)
}
const files = parseTar(buffer)
const rootDir = getFilesRootDir(files)
return { files, rootDir }
}