UNPKG

@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
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 }