zip: Add helper to list zip files as string[]
This commit is contained in:
parent
c6eea8085b
commit
1977e0d954
1 changed files with 17 additions and 6 deletions
|
@ -1,23 +1,23 @@
|
||||||
import { promises as fs } from 'fs'
|
import { promises as fs } from 'fs'
|
||||||
import { FileHandle } from 'fs/promises'
|
import * as unzipit from 'unzipit'
|
||||||
|
|
||||||
// https://greggman.github.io/unzipit/#loadafileasanarraybuffer
|
// https://greggman.github.io/unzipit/#loadafileasanarraybuffer
|
||||||
export class NodeFileReader {
|
export class NodeFileReader {
|
||||||
length?: number
|
length?: number
|
||||||
fhp: Promise<FileHandle>
|
file: Promise<fs.FileHandle>
|
||||||
|
|
||||||
constructor(filename: string) {
|
constructor(filename: string) {
|
||||||
this.fhp = fs.open(filename, 'r')
|
this.file = fs.open(filename, 'r')
|
||||||
}
|
}
|
||||||
|
|
||||||
async close() {
|
async close() {
|
||||||
const fh = await this.fhp
|
const fh = await this.file
|
||||||
await fh.close()
|
await fh.close()
|
||||||
}
|
}
|
||||||
|
|
||||||
async getLength() {
|
async getLength() {
|
||||||
if (this.length == undefined) {
|
if (this.length == undefined) {
|
||||||
const fh = await this.fhp
|
const fh = await this.file
|
||||||
const stat = await fh.stat()
|
const stat = await fh.stat()
|
||||||
this.length = stat.size
|
this.length = stat.size
|
||||||
}
|
}
|
||||||
|
@ -25,9 +25,20 @@ export class NodeFileReader {
|
||||||
}
|
}
|
||||||
|
|
||||||
async read(offset: number, length: number) {
|
async read(offset: number, length: number) {
|
||||||
const fh = await this.fhp
|
const fh = await this.file
|
||||||
const data = new Uint8Array(length)
|
const data = new Uint8Array(length)
|
||||||
await fh.read(data, 0, length, offset)
|
await fh.read(data, 0, length, offset)
|
||||||
return data
|
return data
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function listZipFiles(path: string) {
|
||||||
|
let reader = new NodeFileReader(path)
|
||||||
|
|
||||||
|
try {
|
||||||
|
let { entries } = await unzipit.unzip(reader)
|
||||||
|
return Object.keys(entries)
|
||||||
|
} finally {
|
||||||
|
await reader.close()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue