fix(unzipper): update promise and buffer to be functions, not properties (#25685)

This commit is contained in:
Nate Mara 2018-05-11 18:01:23 -04:00 committed by Sheetal Nandi
parent af5dd8fe0f
commit a68f617d89
2 changed files with 118 additions and 113 deletions

View File

@ -1,109 +1,115 @@
// Type definitions for unzipper 0.8
// Project: https://github.com/ZJONSSON/node-unzipper#readme
// Definitions by: s73obrien <https://github.com/s73obrien>
// Nate <https://github.com/natemara>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
// TypeScript Version: 2.2
/// <reference types="node" />
import { Readable, Stream, PassThrough, Duplex } from "stream";
import { ClientRequest, RequestOptions } from "http";
export interface PullStream extends Duplex {
stream(eof: number | string, includeEof: boolean): PassThrough;
pull(eof: number | string, includeEof: boolean): Promise<Buffer>;
stream(eof: number | string, includeEof: boolean): PassThrough;
pull(eof: number | string, includeEof: boolean): Promise<Buffer>;
}
export interface Entry extends PassThrough {
autodrain(): Promise<void>;
buffer: Promise<Buffer>;
path: string;
autodrain(): Promise<void>;
buffer(): Promise<Buffer>;
path: string;
props: {
path: string;
};
props: {
path: string;
};
type: string;
vars: {
signature?: number;
versionsNeededToExtract: number;
flags: number;
compressionMethod: number;
lastModifiedTime: number;
crc32: number;
compressedSize: number;
fileNameLength: number;
extraFieldLength: number;
};
type: string;
vars: {
signature?: number;
versionsNeededToExtract: number;
flags: number;
compressionMethod: number;
lastModifiedTime: number;
crc32: number;
compressedSize: number;
fileNameLength: number;
extraFieldLength: number;
};
extra: {
signature: number;
partsize: number;
uncompressedSize: number;
compressedSize: number;
offset: number;
disknum: number;
};
extra: {
signature: number;
partsize: number;
uncompressedSize: number;
compressedSize: number;
offset: number;
disknum: number;
};
}
export function unzip(
source: {
stream: Readable;
size: Promise<number>
},
offset: number,
_password: string): Entry;
source: {
stream: Readable;
size: Promise<number>;
},
offset: number,
_password: string
): Entry;
export namespace Open {
function file(filename: string): CentralDirectory;
function url(request: ClientRequest, opt: string | RequestOptions): CentralDirectory;
function s3(client: any, params: any): CentralDirectory;
function file(filename: string): CentralDirectory;
function url(
request: ClientRequest,
opt: string | RequestOptions
): CentralDirectory;
function s3(client: any, params: any): CentralDirectory;
}
export function BufferStream(entry: Entry): Promise<Buffer>;
export interface CentralDirectory {
signature: number;
diskNumber: number;
diskStart: number;
numberOfRecordsOnDisk: number;
numberOfRecords: number;
sizeOfCentralDirectory: number;
offsetToStartOfCentralDirectory: number;
commentLength: number;
files: [
{
signature: number;
versionMadeBy: number;
versionsNeededToExtract: number;
flags: number;
compressionMethod: number;
lastModifiedTime: number;
lastModifiedDate: number;
crc32: number;
compressedSize: number;
uncompressedSize: number;
fileNameLength: number;
extraFieldLength: number;
fileCommentLength: number;
diskNumber: number;
internalFileAttributes: number;
externalFileAttributes: number;
offsetToLocalFileHeader: number;
path: string;
comment: string;
stream: Entry;
buffer: Promise<Buffer>;
}
];
signature: number;
diskNumber: number;
diskStart: number;
numberOfRecordsOnDisk: number;
numberOfRecords: number;
sizeOfCentralDirectory: number;
offsetToStartOfCentralDirectory: number;
commentLength: number;
files: [
{
signature: number;
versionMadeBy: number;
versionsNeededToExtract: number;
flags: number;
compressionMethod: number;
lastModifiedTime: number;
lastModifiedDate: number;
crc32: number;
compressedSize: number;
uncompressedSize: number;
fileNameLength: number;
extraFieldLength: number;
fileCommentLength: number;
diskNumber: number;
internalFileAttributes: number;
externalFileAttributes: number;
offsetToLocalFileHeader: number;
path: string;
comment: string;
stream: Entry;
buffer: Promise<Buffer>;
}
];
}
export class ParseOptions {
verbose?: boolean;
path?: string;
// more options?
verbose?: boolean;
path?: string;
// more options?
}
export type ParseStream = PullStream & {
promise: Promise<void>
promise(): Promise<void>;
};
export function Parse(opts?: ParseOptions): ParseStream;

View File

@ -1,44 +1,43 @@
import {
Parse,
Open,
Entry,
CentralDirectory
} from 'unzipper';
import { Parse, Open, Entry, CentralDirectory } from "unzipper";
import { createReadStream } from 'fs';
import { createReadStream } from "fs";
import { get } from 'http';
import { get } from "http";
createReadStream(
'http://example.org/path/to/archive.zip'
).pipe(
Parse()
).on('entry', (entry: Entry) => {
entry.buffer.then((b1: Buffer) => {});
const s1: string = entry.path;
const s2: string = entry.type;
const o1: {
signature?: number;
versionsNeededToExtract: number;
flags: number;
compressionMethod: number;
lastModifiedTime: number;
crc32: number;
compressedSize: number;
fileNameLength: number;
extraFieldLength: number;
} = entry.vars;
createReadStream("http://example.org/path/to/archive.zip")
.pipe(Parse())
.on("entry", (entry: Entry) => {
entry.buffer().then((b1: Buffer) => {});
const s1: string = entry.path;
const s2: string = entry.type;
const o1: {
signature?: number;
versionsNeededToExtract: number;
flags: number;
compressionMethod: number;
lastModifiedTime: number;
crc32: number;
compressedSize: number;
fileNameLength: number;
extraFieldLength: number;
} =
entry.vars;
const o2: {
signature: number;
partsize: number;
uncompressedSize: number;
compressedSize: number;
offset: number;
disknum: number;
} = entry.extra;
});
const o2: {
signature: number;
partsize: number;
uncompressedSize: number;
compressedSize: number;
offset: number;
disknum: number;
} =
entry.extra;
})
.promise()
.then(() => {
console.log("Finished reading stream");
});
const dir1: CentralDirectory = Open.file('Z:\\path\\to\\archive.zip');
const dir2: CentralDirectory = Open.url(get('url/to/archive.zip'), {});
const dir3: CentralDirectory = Open.s3('any', 'any');
const dir1: CentralDirectory = Open.file("Z:\\path\\to\\archive.zip");
const dir2: CentralDirectory = Open.url(get("url/to/archive.zip"), {});
const dir3: CentralDirectory = Open.s3("any", "any");