Skip to content

Commit 5c25a26

Browse files
authored
🤖 Merge PR DefinitelyTyped#75069 [yauzl] Update to 3.3; keep 2.x as v2 by @u1f992
1 parent 2330ee2 commit 5c25a26

9 files changed

Lines changed: 361 additions & 22 deletions

File tree

types/yauzl/.npmignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@
33
!**/*.d.cts
44
!**/*.d.mts
55
!**/*.d.*.ts
6+
/v2/

types/yauzl/index.d.ts

Lines changed: 71 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,14 @@
33
import { EventEmitter } from "events";
44
import { Readable } from "stream";
55

6+
export interface ExtraField {
7+
id: number;
8+
data: Buffer;
9+
}
10+
611
export abstract class RandomAccessReader extends EventEmitter {
7-
_readStreamForRange(start: number, end: number): void;
8-
createReadStream(options: { start: number; end: number }): void;
12+
_readStreamForRange(start: number, end: number): Readable;
13+
createReadStream(options: { start: number; end: number }): Readable;
914
read(buffer: Buffer, offset: number, length: number, position: number, callback: (err: Error | null) => void): void;
1015
close(callback: (err: Error | null) => void): void;
1116
}
@@ -17,10 +22,14 @@ export class Entry {
1722
crc32: number;
1823
externalFileAttributes: number;
1924
extraFieldLength: number;
20-
extraFields: Array<{ id: number; data: Buffer }>;
25+
extraFieldRaw: Buffer;
26+
extraFields: ExtraField[];
27+
fileComment: string;
2128
fileCommentLength: number;
29+
fileCommentRaw: Buffer;
2230
fileName: string;
2331
fileNameLength: number;
32+
fileNameRaw: Buffer;
2433
generalPurposeBitFlag: number;
2534
internalFileAttributes: number;
2635
lastModFileDate: number;
@@ -30,16 +39,42 @@ export class Entry {
3039
versionMadeBy: number;
3140
versionNeededToExtract: number;
3241

33-
getLastModDate(): Date;
42+
getLastModDate(options?: GetLastModDateOptions): Date;
43+
canDecodeFileData(): boolean;
3444
isEncrypted(): boolean;
45+
/** @deprecated Use `canDecodeFileData()` and/or check `compressionMethod`. */
3546
isCompressed(): boolean;
3647
}
3748

49+
export interface GetLastModDateOptions {
50+
timezone?: "local" | "UTC" | null | undefined;
51+
forceDosFormat?: boolean | undefined;
52+
}
53+
54+
export class LocalFileHeader {
55+
fileDataStart: number;
56+
versionNeededToExtract: number;
57+
generalPurposeBitFlag: number;
58+
compressionMethod: number;
59+
lastModFileTime: number;
60+
lastModFileDate: number;
61+
crc32: number;
62+
compressedSize: number;
63+
uncompressedSize: number;
64+
fileNameLength: number;
65+
extraFieldLength: number;
66+
fileName: Buffer;
67+
extraField: Buffer;
68+
}
69+
3870
export interface ZipFileOptions {
39-
decompress: boolean | null;
40-
decrypt: boolean | null;
41-
start: number | null;
42-
end: number | null;
71+
decodeFileData?: boolean | null | undefined;
72+
start?: number | null | undefined;
73+
end?: number | null | undefined;
74+
/** @deprecated */
75+
decompress?: boolean | null | undefined;
76+
/** @deprecated */
77+
decrypt?: boolean | null | undefined;
4378
}
4479

4580
export class ZipFile extends EventEmitter {
@@ -73,6 +108,26 @@ export class ZipFile extends EventEmitter {
73108
callback: (err: Error | null, stream: Readable) => void,
74109
): void;
75110
openReadStream(entry: Entry, callback: (err: Error | null, stream: Readable) => void): void;
111+
readLocalFileHeader(
112+
entry: Entry,
113+
options: { minimal: true },
114+
callback: (err: Error | null, header: { fileDataStart: number }) => void,
115+
): void;
116+
readLocalFileHeader(
117+
entry: Entry,
118+
options: { minimal?: boolean },
119+
callback: (err: Error | null, header: LocalFileHeader) => void,
120+
): void;
121+
readLocalFileHeader(entry: Entry, callback: (err: Error | null, header: LocalFileHeader) => void): void;
122+
openReadStreamLowLevel(
123+
fileDataStart: number,
124+
compressedSize: number,
125+
relativeStart: number,
126+
relativeEnd: number,
127+
decompress: boolean,
128+
uncompressedSize: number | null,
129+
callback: (err: Error | null, stream: Readable) => void,
130+
): void;
76131
close(): void;
77132
readEntry(): void;
78133
}
@@ -106,5 +161,13 @@ export function fromRandomAccessReader(
106161
totalSize: number,
107162
callback: (err: Error | null, zipfile: ZipFile) => void,
108163
): void;
164+
/** @deprecated Use `entry.getLastModDate()` instead. */
109165
export function dosDateTimeToDate(date: number, time: number): Date;
110166
export function validateFileName(fileName: string): string | null;
167+
export function getFileNameLowLevel(
168+
generalPurposeBitFlag: number,
169+
fileNameBuffer: Buffer,
170+
extraFields: ExtraField[],
171+
strictFileNames: boolean,
172+
): string;
173+
export function parseExtraFields(extraFieldBuffer: Buffer): ExtraField[];

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": "2.10.9999",
4+
"version": "3.3.9999",
55
"projects": [
66
"https://github.com/thejoshwolfe/yauzl"
77
],

types/yauzl/v2/.npmignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
*
2+
!**/*.d.ts
3+
!**/*.d.cts
4+
!**/*.d.mts
5+
!**/*.d.*.ts

types/yauzl/v2/index.d.ts

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
/// <reference types="node" />
2+
3+
import { EventEmitter } from "events";
4+
import { Readable } from "stream";
5+
6+
export abstract class RandomAccessReader extends EventEmitter {
7+
_readStreamForRange(start: number, end: number): void;
8+
createReadStream(options: { start: number; end: number }): void;
9+
read(buffer: Buffer, offset: number, length: number, position: number, callback: (err: Error | null) => void): void;
10+
close(callback: (err: Error | null) => void): void;
11+
}
12+
13+
export class Entry {
14+
comment: string;
15+
compressedSize: number;
16+
compressionMethod: number;
17+
crc32: number;
18+
externalFileAttributes: number;
19+
extraFieldLength: number;
20+
extraFields: Array<{ id: number; data: Buffer }>;
21+
fileCommentLength: number;
22+
fileName: string;
23+
fileNameLength: number;
24+
generalPurposeBitFlag: number;
25+
internalFileAttributes: number;
26+
lastModFileDate: number;
27+
lastModFileTime: number;
28+
relativeOffsetOfLocalHeader: number;
29+
uncompressedSize: number;
30+
versionMadeBy: number;
31+
versionNeededToExtract: number;
32+
33+
getLastModDate(): Date;
34+
isEncrypted(): boolean;
35+
isCompressed(): boolean;
36+
}
37+
38+
export interface ZipFileOptions {
39+
decompress: boolean | null;
40+
decrypt: boolean | null;
41+
start: number | null;
42+
end: number | null;
43+
}
44+
45+
export class ZipFile extends EventEmitter {
46+
autoClose: boolean;
47+
comment: string;
48+
decodeStrings: boolean;
49+
emittedError: boolean;
50+
entriesRead: number;
51+
entryCount: number;
52+
fileSize: number;
53+
isOpen: boolean;
54+
lazyEntries: boolean;
55+
readEntryCursor: boolean;
56+
validateEntrySizes: boolean;
57+
58+
constructor(
59+
reader: RandomAccessReader,
60+
centralDirectoryOffset: number,
61+
fileSize: number,
62+
entryCount: number,
63+
comment: string,
64+
autoClose: boolean,
65+
lazyEntries: boolean,
66+
decodeStrings: boolean,
67+
validateEntrySizes: boolean,
68+
);
69+
70+
openReadStream(
71+
entry: Entry,
72+
options: ZipFileOptions,
73+
callback: (err: Error | null, stream: Readable) => void,
74+
): void;
75+
openReadStream(entry: Entry, callback: (err: Error | null, stream: Readable) => void): void;
76+
close(): void;
77+
readEntry(): void;
78+
}
79+
80+
export interface Options {
81+
autoClose?: boolean | undefined;
82+
lazyEntries?: boolean | undefined;
83+
decodeStrings?: boolean | undefined;
84+
validateEntrySizes?: boolean | undefined;
85+
strictFileNames?: boolean | undefined;
86+
}
87+
88+
export function open(path: string, options: Options, callback?: (err: Error | null, zipfile: ZipFile) => void): void;
89+
export function open(path: string, callback?: (err: Error | null, zipfile: ZipFile) => void): void;
90+
export function fromFd(fd: number, options: Options, callback?: (err: Error | null, zipfile: ZipFile) => void): void;
91+
export function fromFd(fd: number, callback?: (err: Error | null, zipfile: ZipFile) => void): void;
92+
export function fromBuffer(
93+
buffer: Buffer,
94+
options: Options,
95+
callback?: (err: Error | null, zipfile: ZipFile) => void,
96+
): void;
97+
export function fromBuffer(buffer: Buffer, callback?: (err: Error | null, zipfile: ZipFile) => void): void;
98+
export function fromRandomAccessReader(
99+
reader: RandomAccessReader,
100+
totalSize: number,
101+
options: Options,
102+
callback: (err: Error | null, zipfile: ZipFile) => void,
103+
): void;
104+
export function fromRandomAccessReader(
105+
reader: RandomAccessReader,
106+
totalSize: number,
107+
callback: (err: Error | null, zipfile: ZipFile) => void,
108+
): void;
109+
export function dosDateTimeToDate(date: number, time: number): Date;
110+
export function validateFileName(fileName: string): string | null;

types/yauzl/v2/package.json

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
"private": true,
3+
"name": "@types/yauzl",
4+
"version": "2.10.9999",
5+
"projects": [
6+
"https://github.com/thejoshwolfe/yauzl"
7+
],
8+
"dependencies": {
9+
"@types/node": "*"
10+
},
11+
"devDependencies": {
12+
"@types/yauzl": "workspace:."
13+
},
14+
"owners": [
15+
{
16+
"name": "Florian Keller",
17+
"githubUsername": "ffflorian"
18+
}
19+
]
20+
}

types/yauzl/v2/tsconfig.json

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{
2+
"compilerOptions": {
3+
"module": "node16",
4+
"lib": [
5+
"es6"
6+
],
7+
"noImplicitAny": true,
8+
"noImplicitThis": true,
9+
"strictNullChecks": true,
10+
"strictFunctionTypes": true,
11+
"types": [],
12+
"noEmit": true,
13+
"forceConsistentCasingInFileNames": true
14+
},
15+
"files": [
16+
"index.d.ts",
17+
"yauzl-tests.ts"
18+
]
19+
}

types/yauzl/v2/yauzl-tests.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import { Writable } from "stream";
2+
import * as yauzl from "yauzl";
3+
4+
yauzl.open("path/to/file.zip", { lazyEntries: true }, (err, zipfile) => {
5+
if (err) {
6+
throw err;
7+
}
8+
if (zipfile) {
9+
zipfile.readEntry();
10+
zipfile.on("entry", entry => {
11+
if (/\/$/.test(entry.fileName)) {
12+
zipfile.readEntry();
13+
} else {
14+
zipfile.openReadStream(entry, (err, readStream) => {
15+
if (err) {
16+
throw err;
17+
}
18+
if (readStream) {
19+
readStream.on("end", () => {
20+
zipfile.readEntry();
21+
});
22+
readStream.pipe(new Writable());
23+
}
24+
});
25+
}
26+
});
27+
}
28+
});
29+
30+
yauzl.open("options.zip", { strictFileNames: true }, () => {});

0 commit comments

Comments
 (0)