packages/transcription-devtools/src/utils.ts
import { join, parse } from 'node:path'
import { createWriteStream } from 'node:fs'
import { lstat, unlink } from 'node:fs/promises'
import assert from 'node:assert'
import { $ } from 'execa'
import { makeFileRequest } from '@peertube/peertube-server-commands'
export const downloadFile = async (url: string, targetDirectory: string) => {
const { base } = parse(url)
const filePath = join(targetDirectory, base)
const fileStream = createWriteStream(filePath)
const stream = makeFileRequest(url).pipe(fileStream)
return await new Promise((resolve: (filePath: string) => void, reject) => {
stream.on('finish', () => resolve(filePath))
stream.on('error', async e => {
fileStream.close()
await unlink(filePath)
reject(e.message)
})
})
}
export const unzip = async (zipFilePath: string) => {
assert(await lstat(zipFilePath).then(stats => stats.isFile()), `${zipFilePath} isn't a file.`)
const { dir, name } = parse(zipFilePath)
await $`unzip -o ${zipFilePath} -d ${dir}`
return join(dir, name)
}