relic/packages/core/src/utils/extractFile.js
2024-04-02 20:21:58 +02:00

48 lines
1.1 KiB
JavaScript

import Logger from "../logger"
import fs from "node:fs"
import path from "node:path"
import { pipeline as streamPipeline } from "node:stream/promises"
import { extractFull } from "node-7z"
import unzipper from "unzipper"
import Vars from "../vars"
const Log = Logger.child({ service: "EXTRACTOR" })
export async function extractFile(file, dest) {
const ext = path.extname(file)
Log.info(`Extracting ${file} to ${dest}`)
switch (ext) {
case ".zip": {
await streamPipeline(
fs.createReadStream(file),
unzipper.Extract({
path: dest,
})
)
break
}
case ".7z": {
await extractFull(file, dest, {
$bin: Vars.sevenzip_bin,
})
break
}
case ".gz": {
await extractFull(file, dest, {
$bin: Vars.sevenzip_bin
})
break
}
default:
throw new Error(`Unsupported file extension: ${ext}`)
}
return dest
}
export default extractFile