Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Refactor TypeScript definition to CommonJS compatible export (#194)
- Loading branch information
1 parent
afcd1cb
commit d4ee6db
Showing
4 changed files
with
187 additions
and
133 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,139 +1,191 @@ | ||
/// <reference types="node"/> | ||
import {Readable as ReadableStream} from 'stream'; | ||
|
||
export type FileType = | ||
| 'jpg' | ||
| 'png' | ||
| 'gif' | ||
| 'webp' | ||
| 'flif' | ||
| 'cr2' | ||
| 'tif' | ||
| 'bmp' | ||
| 'jxr' | ||
| 'psd' | ||
| 'zip' | ||
| 'tar' | ||
| 'rar' | ||
| 'gz' | ||
| 'bz2' | ||
| '7z' | ||
| 'dmg' | ||
| 'mp4' | ||
| 'm4v' | ||
| 'mid' | ||
| 'mkv' | ||
| 'webm' | ||
| 'mov' | ||
| 'avi' | ||
| 'wmv' | ||
| 'mpg' | ||
| 'mp2' | ||
| 'mp3' | ||
| 'm4a' | ||
| 'ogg' | ||
| 'opus' | ||
| 'flac' | ||
| 'wav' | ||
| 'qcp' | ||
| 'amr' | ||
| 'pdf' | ||
| 'epub' | ||
| 'mobi' | ||
| 'exe' | ||
| 'swf' | ||
| 'rtf' | ||
| 'woff' | ||
| 'woff2' | ||
| 'eot' | ||
| 'ttf' | ||
| 'otf' | ||
| 'ico' | ||
| 'flv' | ||
| 'ps' | ||
| 'xz' | ||
| 'sqlite' | ||
| 'nes' | ||
| 'crx' | ||
| 'xpi' | ||
| 'cab' | ||
| 'deb' | ||
| 'ar' | ||
| 'rpm' | ||
| 'Z' | ||
| 'lz' | ||
| 'msi' | ||
| 'mxf' | ||
| 'mts' | ||
| 'wasm' | ||
| 'blend' | ||
| 'bpg' | ||
| 'docx' | ||
| 'pptx' | ||
| 'xlsx' | ||
| '3gp' | ||
| 'jp2' | ||
| 'jpm' | ||
| 'jpx' | ||
| 'mj2' | ||
| 'aif' | ||
| 'odt' | ||
| 'ods' | ||
| 'odp' | ||
| 'xml' | ||
| 'heic' | ||
| 'cur' | ||
| 'ktx' | ||
| 'ape' | ||
| 'wv' | ||
| 'asf' | ||
| 'wma' | ||
| 'wmv' | ||
| 'dcm' | ||
| 'mpc' | ||
| 'ics' | ||
| 'glb' | ||
| 'pcap'; | ||
|
||
export interface FileTypeResult { | ||
/** | ||
* One of the supported [file types](https://github.com/sindresorhus/file-type#supported-file-types). | ||
*/ | ||
ext: FileType; | ||
declare namespace fileType { | ||
type FileType = | ||
| 'jpg' | ||
| 'png' | ||
| 'gif' | ||
| 'webp' | ||
| 'flif' | ||
| 'cr2' | ||
| 'tif' | ||
| 'bmp' | ||
| 'jxr' | ||
| 'psd' | ||
| 'zip' | ||
| 'tar' | ||
| 'rar' | ||
| 'gz' | ||
| 'bz2' | ||
| '7z' | ||
| 'dmg' | ||
| 'mp4' | ||
| 'm4v' | ||
| 'mid' | ||
| 'mkv' | ||
| 'webm' | ||
| 'mov' | ||
| 'avi' | ||
| 'wmv' | ||
| 'mpg' | ||
| 'mp2' | ||
| 'mp3' | ||
| 'm4a' | ||
| 'ogg' | ||
| 'opus' | ||
| 'flac' | ||
| 'wav' | ||
| 'qcp' | ||
| 'amr' | ||
| 'pdf' | ||
| 'epub' | ||
| 'mobi' | ||
| 'exe' | ||
| 'swf' | ||
| 'rtf' | ||
| 'woff' | ||
| 'woff2' | ||
| 'eot' | ||
| 'ttf' | ||
| 'otf' | ||
| 'ico' | ||
| 'flv' | ||
| 'ps' | ||
| 'xz' | ||
| 'sqlite' | ||
| 'nes' | ||
| 'crx' | ||
| 'xpi' | ||
| 'cab' | ||
| 'deb' | ||
| 'ar' | ||
| 'rpm' | ||
| 'Z' | ||
| 'lz' | ||
| 'msi' | ||
| 'mxf' | ||
| 'mts' | ||
| 'wasm' | ||
| 'blend' | ||
| 'bpg' | ||
| 'docx' | ||
| 'pptx' | ||
| 'xlsx' | ||
| '3gp' | ||
| 'jp2' | ||
| 'jpm' | ||
| 'jpx' | ||
| 'mj2' | ||
| 'aif' | ||
| 'odt' | ||
| 'ods' | ||
| 'odp' | ||
| 'xml' | ||
| 'heic' | ||
| 'cur' | ||
| 'ktx' | ||
| 'ape' | ||
| 'wv' | ||
| 'asf' | ||
| 'wma' | ||
| 'wmv' | ||
| 'dcm' | ||
| 'mpc' | ||
| 'ics' | ||
| 'glb' | ||
| 'pcap'; | ||
|
||
/** | ||
* The detected [MIME type](https://en.wikipedia.org/wiki/Internet_media_type). | ||
*/ | ||
mime: string; | ||
interface FileTypeResult { | ||
/** | ||
One of the supported [file types](https://github.com/sindresorhus/file-type#supported-file-types). | ||
*/ | ||
ext: FileType; | ||
|
||
/** | ||
The detected [MIME type](https://en.wikipedia.org/wiki/Internet_media_type). | ||
*/ | ||
mime: string; | ||
} | ||
|
||
type ReadableStreamWithFileType = ReadableStream & { | ||
readonly fileType: FileTypeResult | null; | ||
}; | ||
} | ||
|
||
export type ReadableStreamWithFileType = ReadableStream & { | ||
readonly fileType: FileTypeResult | null; | ||
}; | ||
declare const fileType: { | ||
/** | ||
Detect the file type of a `Buffer`/`Uint8Array`. The file type is detected by checking the [magic number](https://en.wikipedia.org/wiki/Magic_number_(programming)#Magic_numbers_in_files) of the buffer. | ||
@param buffer - It only needs the first `.minimumBytes` bytes. The exception is detection of `docx`, `pptx`, and `xlsx` which potentially requires reading the whole file. | ||
@returns An object with the detected file type and MIME type or `null` when there was no match. | ||
@example | ||
``` | ||
import readChunk = require('read-chunk'); | ||
import fileType = require('file-type'); | ||
const buffer = readChunk.sync('unicorn.png', 0, fileType.minimumBytes); | ||
fileType(buffer); | ||
//=> {ext: 'png', mime: 'image/png'} | ||
export interface FileTypeModule { | ||
(buffer: Buffer | Uint8Array): FileTypeResult | null; | ||
// Or from a remote location: | ||
import * as http from 'http'; | ||
const url = 'https://assets-cdn.github.com/images/spinners/octocat-spinner-32.gif'; | ||
http.get(url, response => { | ||
response.on('readable', () => { | ||
const chunk = response.read(fileType.minimumBytes); | ||
response.destroy(); | ||
console.log(fileType(chunk)); | ||
//=> {ext: 'gif', mime: 'image/gif'} | ||
}); | ||
}); | ||
``` | ||
*/ | ||
(buffer: Buffer | Uint8Array): fileType.FileTypeResult | null; | ||
|
||
/** | ||
* The minimum amount of bytes needed to detect a file type. Currently, it's 4100 bytes, but it can change, so don't hard-code it. | ||
*/ | ||
The minimum amount of bytes needed to detect a file type. Currently, it's 4100 bytes, but it can change, so don't hard-code it. | ||
*/ | ||
readonly minimumBytes: number; | ||
|
||
/** | ||
* Detect the file type of a readable stream. | ||
* | ||
* @param readableStream - A readable stream containing a file to examine, see: [`stream.Readable`](https://nodejs.org/api/stream.html#stream_class_stream_readable). | ||
* @returns A `Promise` which resolves to the original readable stream argument, but with an added `fileType` property, which is an object like the one returned from `fileType()`. | ||
*/ | ||
readonly stream: (readableStream: ReadableStream) => Promise<ReadableStreamWithFileType>; | ||
} | ||
Detect the file type of a readable stream. | ||
@param readableStream - A readable stream containing a file to examine, see: [`stream.Readable`](https://nodejs.org/api/stream.html#stream_class_stream_readable). | ||
@returns A `Promise` which resolves to the original readable stream argument, but with an added `fileType` property, which is an object like the one returned from `fileType()`. | ||
@example | ||
``` | ||
import * as fs from 'fs'; | ||
import * as crypto from 'crypto'; | ||
import fileType = require('file-type'); | ||
/** | ||
* Detect the file type of a `Buffer`/`Uint8Array`. The file type is detected by checking the [magic number](https://en.wikipedia.org/wiki/Magic_number_(programming)#Magic_numbers_in_files) of the buffer. | ||
* | ||
* @param buffer - It only needs the first `.minimumBytes` bytes. The exception is detection of `docx`, `pptx`, and `xlsx` which potentially requires reading the whole file. | ||
* @returns An object with the detected file type and MIME type or `null` when there was no match. | ||
*/ | ||
declare const fileType: FileTypeModule; | ||
(async () => { | ||
const read = fs.createReadStream('encrypted.enc'); | ||
const decipher = crypto.createDecipheriv(alg, key, iv); | ||
const stream = await fileType.stream(read.pipe(decipher)); | ||
console.log(stream.fileType); | ||
//=> {ext: 'mov', mime: 'video/quicktime'} | ||
const write = fs.createWriteStream(`decrypted.${stream.fileType.ext}`); | ||
stream.pipe(write); | ||
})(); | ||
``` | ||
*/ | ||
readonly stream: ( | ||
readableStream: ReadableStream | ||
) => Promise<fileType.ReadableStreamWithFileType>; | ||
|
||
// TODO: Remove this for the next major release | ||
readonly default: typeof fileType; | ||
}; | ||
|
||
export default fileType; | ||
export = fileType; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters