From 933929e309f212e251dec72fa207bbe366d874f6 Mon Sep 17 00:00:00 2001 From: ydl Date: Thu, 9 May 2019 11:07:35 +0800 Subject: [PATCH 1/2] feat: add type definitions --- index.d.ts | 258 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 258 insertions(+) create mode 100644 index.d.ts diff --git a/index.d.ts b/index.d.ts new file mode 100644 index 00000000..11840b83 --- /dev/null +++ b/index.d.ts @@ -0,0 +1,258 @@ +// Type definitions for JSZip 3.1 +// Project: http://stuk.github.com/jszip/, https://github.com/stuk/jszip +// Definitions by: mzeiher , forabi +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped +// TypeScript Version: 2.3 + +/// + +interface JSZipSupport { + arraybuffer: boolean; + uint8array: boolean; + blob: boolean; + nodebuffer: boolean; +} + +type Compression = 'STORE' | 'DEFLATE'; + +interface Metadata { + percent: number; + currentFile: string; +} + +type OnUpdateCallback = (metadata: Metadata) => void; + +interface InputByType { + base64: string; + string: string; + text: string; + binarystring: string; + array: number[]; + uint8array: Uint8Array; + arraybuffer: ArrayBuffer; + blob: Blob; + stream: NodeJS.ReadableStream; +} + +interface OutputByType { + base64: string; + text: string; + binarystring: string; + array: number[]; + uint8array: Uint8Array; + arraybuffer: ArrayBuffer; + blob: Blob; + nodebuffer: Buffer; +} + +type InputFileFormat = InputByType[keyof InputByType]; + +declare namespace JSZip { + type InputType = keyof InputByType; + + type OutputType = keyof OutputByType; + + interface JSZipObject { + name: string; + dir: boolean; + date: Date; + comment: string; + /** The UNIX permissions of the file, if any. */ + unixPermissions: number | string | null; + /** The UNIX permissions of the file, if any. */ + dosPermissions: number | null; + options: JSZipObjectOptions; + /** + * Prepare the content in the asked type. + * @param type the type of the result. + * @param onUpdate a function to call on each internal update. + * @return Promise the promise of the result. + */ + async(type: T, onUpdate?: OnUpdateCallback): Promise; + nodeStream(type?: 'nodestream', onUpdate?: OnUpdateCallback): NodeJS.ReadableStream; + } + + interface JSZipFileOptions { + /** Set to `true` if the data is `base64` encoded. For example image data from a `` element. Plain text and HTML do not need this option. */ + base64?: boolean; + /** + * Set to `true` if the data should be treated as raw content, `false` if this is a text. If `base64` is used, + * this defaults to `true`, if the data is not a `string`, this will be set to `true`. + */ + binary?: boolean; + /** + * The last modification date, defaults to the current date. + */ + date?: Date; + compression?: string; + comment?: string; + /** Set to `true` if (and only if) the input is a "binary string" and has already been prepared with a `0xFF` mask. */ + optimizedBinaryString?: boolean; + /** Set to `true` if folders in the file path should be automatically created, otherwise there will only be virtual folders that represent the path to the file. */ + createFolders?: boolean; + /** Set to `true` if this is a directory and content should be ignored. */ + dir?: boolean; + + /** 6 bits number. The DOS permissions of the file, if any. */ + dosPermissions?: number | null; + /** + * 16 bits number. The UNIX permissions of the file, if any. + * Also accepts a `string` representing the octal value: `"644"`, `"755"`, etc. + */ + unixPermissions?: number | string | null; + } + + interface JSZipObjectOptions { + compression: Compression; + } + + interface JSZipGeneratorOptions { + compression?: Compression; + compressionOptions?: null | { + level: number; + }; + type?: T; + comment?: string; + /** + * mime-type for the generated file. + * Useful when you need to generate a file with a different extension, ie: “.ods”. + * @default 'application/zip' + */ + mimeType?: string; + encodeFileName?(filename: string): string; + /** Stream the files and create file descriptors */ + streamFiles?: boolean; + /** DOS (default) or UNIX */ + platform?: 'DOS' | 'UNIX'; + } + + interface JSZipLoadOptions { + base64?: boolean; + checkCRC32?: boolean; + optimizedBinaryString?: boolean; + createFolders?: boolean; + } +} + +interface JSZip { + files: {[key: string]: JSZip.JSZipObject}; + + /** + * Get a file from the archive + * + * @param Path relative path to file + * @return File matching path, null if no file found + */ + file(path: string): JSZip.JSZipObject; + + /** + * Get files matching a RegExp from archive + * + * @param path RegExp to match + * @return Return all matching files or an empty array + */ + file(path: RegExp): JSZip.JSZipObject[]; + + /** + * Add a file to the archive + * + * @param path Relative path to file + * @param data Content of the file + * @param options Optional information about the file + * @return JSZip object + */ + file(path: string, data: InputByType[T] | Promise, options?: JSZip.JSZipFileOptions): this; + file(path: string, data: null, options?: JSZip.JSZipFileOptions & { dir: true }): this; + + /** + * Returns an new JSZip instance with the given folder as root + * + * @param name Name of the folder + * @return New JSZip object with the given folder as root or null + */ + folder(name: string): JSZip; + + /** + * Returns new JSZip instances with the matching folders as root + * + * @param name RegExp to match + * @return New array of JSZipFile objects which match the RegExp + */ + folder(name: RegExp): JSZip.JSZipObject[]; + + /** + * Call a callback function for each entry at this folder level. + * + * @param callback function + */ + forEach(callback: (relativePath: string, file: JSZip.JSZipObject) => void): void; + + /** + * Get all files which match the given filter function + * + * @param predicate Filter function + * @return Array of matched elements + */ + filter(predicate: (relativePath: string, file: JSZip.JSZipObject) => boolean): JSZip.JSZipObject[]; + + /** + * Removes the file or folder from the archive + * + * @param path Relative path of file or folder + * @return Returns the JSZip instance + */ + remove(path: string): JSZip; + + /** + * Generates a new archive asynchronously + * + * @param options Optional options for the generator + * @param onUpdate The optional function called on each internal update with the metadata. + * @return The serialized archive + */ + generateAsync(options?: JSZip.JSZipGeneratorOptions, onUpdate?: OnUpdateCallback): Promise; + + /** + * Generates a new archive asynchronously + * + * @param options Optional options for the generator + * @param onUpdate The optional function called on each internal update with the metadata. + * @return A Node.js `ReadableStream` + */ + generateNodeStream(options?: JSZip.JSZipGeneratorOptions<'nodebuffer'>, onUpdate?: OnUpdateCallback): NodeJS.ReadableStream; + + /** + * Deserialize zip file asynchronously + * + * @param data Serialized zip file + * @param options Options for deserializing + * @return Returns promise + */ + loadAsync(data: InputFileFormat, options?: JSZip.JSZipLoadOptions): Promise; + + /** + * Create JSZip instance + */ + + /** + * Create JSZip instance + * If no parameters given an empty zip archive will be created + * + * @param data Serialized zip archive + * @param options Description of the serialized zip archive + */ + new (data?: InputFileFormat, options?: JSZip.JSZipLoadOptions): this; + + (): JSZip; + + prototype: JSZip; + support: JSZipSupport; + external: { + Promise: PromiseConstructorLike; + }; + version: string; +} + +declare var JSZip: JSZip; + +export = JSZip; From 7a0bac9e94f8a0652148f5b3fccab0bcb117f4d7 Mon Sep 17 00:00:00 2001 From: ydl Date: Thu, 9 May 2019 11:30:08 +0800 Subject: [PATCH 2/2] feat: Type definitions for JSZIP, defined the filed _data of JSZipObject --- index.d.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/index.d.ts b/index.d.ts index 11840b83..4a94500b 100644 --- a/index.d.ts +++ b/index.d.ts @@ -45,6 +45,15 @@ interface OutputByType { nodebuffer: Buffer; } + +interface CompressedObject { + compressedSize: number; + uncompressedSize: number; + crc32: number; + compression: object; + compressedContent: string|ArrayBuffer|Uint8Array|Buffer; +} + type InputFileFormat = InputByType[keyof InputByType]; declare namespace JSZip { @@ -62,6 +71,8 @@ declare namespace JSZip { /** The UNIX permissions of the file, if any. */ dosPermissions: number | null; options: JSZipObjectOptions; + + _data: CompressedObject; /** * Prepare the content in the asked type. * @param type the type of the result.