@dpkit/zip
Version:
Fast TypeScript data management framework built on top of the Data Package standard and Polars DataFrames
39 lines (31 loc) • 1.05 kB
text/typescript
import { readFile, writeFile } from "node:fs/promises"
import { mkdir } from "node:fs/promises"
import { dirname, join } from "node:path"
import { loadPackageDescriptor } from "@dpkit/core"
import { getTempFolderPath } from "@dpkit/folder"
import { unzip } from "fflate"
export async function loadPackageFromZip(archivePath: string) {
const basepath = getTempFolderPath()
const zipData = await readFile(archivePath)
const entries = await new Promise<Record<string, Uint8Array>>(
(resolve, reject) => {
unzip(zipData, (err, unzipped) => {
if (err) reject(err)
else resolve(unzipped)
})
},
)
for (const [filename, data] of Object.entries(entries)) {
const path = join(basepath, filename)
if (filename.endsWith("/")) {
await mkdir(path, { recursive: true })
continue
}
await mkdir(dirname(path), { recursive: true })
await writeFile(path, data)
}
const dataPackage = await loadPackageDescriptor(
join(basepath, "datapackage.json"),
)
return dataPackage
}