Skip to content

Commit 01b4323

Browse files
authored
🤖 Merge PR DefinitelyTyped#75106 [yauzl] Add support for promises in yauzl 3.4.0 by @joshkel
1 parent e4f318c commit 01b4323

4 files changed

Lines changed: 58 additions & 2 deletions

File tree

‎types/yauzl/index.d.ts‎

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,18 @@ export class ZipFile extends EventEmitter {
128128
uncompressedSize: number | null,
129129
callback: (err: Error | null, stream: Readable) => void,
130130
): void;
131+
openReadStreamPromise(entry: Entry, options?: ZipFileOptions): Promise<Readable>;
132+
readLocalFileHeaderPromise(entry: Entry, options: { minimal: true }): Promise<{ fileDataStart: number }>;
133+
readLocalFileHeaderPromise(entry: Entry, options?: { minimal?: boolean }): Promise<LocalFileHeader>;
134+
openReadStreamLowLevelPromise(
135+
fileDataStart: number,
136+
compressedSize: number,
137+
relativeStart: number,
138+
relativeEnd: number,
139+
decompress: boolean,
140+
uncompressedSize: number | null,
141+
): Promise<Readable>;
142+
eachEntry(): AsyncIterableIterator<Entry>;
131143
close(): void;
132144
readEntry(): void;
133145
}
@@ -161,6 +173,14 @@ export function fromRandomAccessReader(
161173
totalSize: number,
162174
callback: (err: Error | null, zipfile: ZipFile) => void,
163175
): void;
176+
export function openPromise(path: string, options?: Options): Promise<ZipFile>;
177+
export function fromFdPromise(fd: number, options?: Options): Promise<ZipFile>;
178+
export function fromBufferPromise(buffer: Buffer, options?: Options): Promise<ZipFile>;
179+
export function fromRandomAccessReaderPromise(
180+
reader: RandomAccessReader,
181+
totalSize: number,
182+
options?: Options,
183+
): Promise<ZipFile>;
164184
/** @deprecated Use `entry.getLastModDate()` instead. */
165185
export function dosDateTimeToDate(date: number, time: number): Date;
166186
export function validateFileName(fileName: string): string | null;

‎types/yauzl/package.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"private": true,
33
"name": "@types/yauzl",
4-
"version": "3.3.9999",
4+
"version": "3.4.9999",
55
"projects": [
66
"https://github.com/thejoshwolfe/yauzl"
77
],

‎types/yauzl/tsconfig.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"compilerOptions": {
33
"module": "node16",
44
"lib": [
5-
"es6"
5+
"es2018"
66
],
77
"noImplicitAny": true,
88
"noImplicitThis": true,

‎types/yauzl/yauzl-tests.ts‎

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,3 +119,39 @@ if (fromDos.getTime() < 0) throw new Error("unreachable");
119119
const decodedName: string = yauzl.getFileNameLowLevel(0x800, Buffer.from("a.txt"), [], true);
120120
const parsed: yauzl.ExtraField[] = yauzl.parseExtraFields(Buffer.alloc(0));
121121
if (decodedName.length < 0 || parsed.length < 0) throw new Error("unreachable");
122+
123+
// Promises API.
124+
async function withPromises() {
125+
const zipfile: yauzl.ZipFile = await yauzl.openPromise("path/to/file.zip");
126+
await yauzl.openPromise("path/to/file.zip", { strictFileNames: true });
127+
await yauzl.fromFdPromise(0);
128+
await yauzl.fromBufferPromise(Buffer.alloc(0), { decodeStrings: false });
129+
await yauzl.fromRandomAccessReaderPromise(new MemoryReader(), 1024);
130+
131+
for await (const entry of zipfile.eachEntry()) {
132+
const name: string = entry.fileName;
133+
if (name.length < 0) throw new Error("unreachable");
134+
135+
const readStream: Readable = await zipfile.openReadStreamPromise(entry);
136+
readStream.pipe(new Writable());
137+
await zipfile.openReadStreamPromise(entry, { decodeFileData: false });
138+
139+
const minimal = await zipfile.readLocalFileHeaderPromise(entry, { minimal: true });
140+
const start: number = minimal.fileDataStart;
141+
142+
const header: yauzl.LocalFileHeader = await zipfile.readLocalFileHeaderPromise(entry);
143+
const rawName: Buffer = header.fileName;
144+
if (rawName.length < 0) throw new Error("unreachable");
145+
146+
const lowStream: Readable = await zipfile.openReadStreamLowLevelPromise(
147+
start,
148+
entry.compressedSize,
149+
0,
150+
entry.compressedSize,
151+
true,
152+
entry.uncompressedSize,
153+
);
154+
lowStream.pipe(new Writable());
155+
}
156+
}
157+
withPromises();

0 commit comments

Comments
 (0)