From 5cf07fc12048053bb617df5c1a62bf5154039b31 Mon Sep 17 00:00:00 2001 From: Sean O'Brien Date: Wed, 17 Jan 2018 14:17:59 -0500 Subject: [PATCH] Added support for unzipper npm package (#22858) --- types/unzipper/index.d.ts | 110 +++++++++++++++++++++++++++++++ types/unzipper/tsconfig.json | 23 +++++++ types/unzipper/tslint.json | 1 + types/unzipper/unzipper-tests.ts | 44 +++++++++++++ 4 files changed, 178 insertions(+) create mode 100644 types/unzipper/index.d.ts create mode 100644 types/unzipper/tsconfig.json create mode 100644 types/unzipper/tslint.json create mode 100644 types/unzipper/unzipper-tests.ts diff --git a/types/unzipper/index.d.ts b/types/unzipper/index.d.ts new file mode 100644 index 0000000000..99ece81913 --- /dev/null +++ b/types/unzipper/index.d.ts @@ -0,0 +1,110 @@ +// Type definitions for unzipper 0.8 +// Project: https://github.com/ZJONSSON/node-unzipper#readme +// Definitions by: s73obrien +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped +/// + +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; +} + +export interface Entry extends PassThrough { + autodrain(): Promise; + buffer: Promise; + 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; + }; + + extra: { + signature: number; + partsize: number; + uncompressedSize: number; + compressedSize: number; + offset: number; + disknum: number; + }; +} + +export function unzip( + source: { + stream: Readable; + size: Promise + }, + 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; +} + +export function BufferStream(entry: Entry): Promise; + +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; + } + ]; +} + +export class ParseOptions { + verbose: boolean; + // more options? +} + +export type ParseStream = PullStream & { + promise: Promise +}; + +export function Parse(opts?: ParseOptions): ParseStream; +export function ParseOne(match: RegExp, opts: ParseOptions): Duplex; +export function Extract(opts?: ParseOptions): ParseStream; diff --git a/types/unzipper/tsconfig.json b/types/unzipper/tsconfig.json new file mode 100644 index 0000000000..d117b8eb1f --- /dev/null +++ b/types/unzipper/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "module": "commonjs", + "lib": [ + "es6" + ], + "noImplicitAny": true, + "noImplicitThis": true, + "strictNullChecks": true, + "strictFunctionTypes": true, + "baseUrl": "../", + "typeRoots": [ + "../" + ], + "types": [], + "noEmit": true, + "forceConsistentCasingInFileNames": true + }, + "files": [ + "index.d.ts", + "unzipper-tests.ts" + ] +} diff --git a/types/unzipper/tslint.json b/types/unzipper/tslint.json new file mode 100644 index 0000000000..3db14f85ea --- /dev/null +++ b/types/unzipper/tslint.json @@ -0,0 +1 @@ +{ "extends": "dtslint/dt.json" } diff --git a/types/unzipper/unzipper-tests.ts b/types/unzipper/unzipper-tests.ts new file mode 100644 index 0000000000..295b5541db --- /dev/null +++ b/types/unzipper/unzipper-tests.ts @@ -0,0 +1,44 @@ +import { + Parse, + Open, + Entry, + CentralDirectory +} from 'unzipper'; + +import { createReadStream } from 'fs'; + +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; + + const o2: { + signature: number; + partsize: number; + uncompressedSize: number; + compressedSize: number; + offset: number; + disknum: number; + } = entry.extra; +}); + +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');