mirror of
				https://github.com/musix-org/musix-oss
				synced 2025-11-04 09:49:32 +00:00 
			
		
		
		
	fix
This commit is contained in:
		
							
								
								
									
										559
									
								
								node_modules/file-type/index.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										559
									
								
								node_modules/file-type/index.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,559 @@
 | 
			
		||||
'use strict';
 | 
			
		||||
 | 
			
		||||
module.exports = input => {
 | 
			
		||||
	const buf = new Uint8Array(input);
 | 
			
		||||
 | 
			
		||||
	if (!(buf && buf.length > 1)) {
 | 
			
		||||
		return null;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	const check = (header, opts) => {
 | 
			
		||||
		opts = Object.assign({
 | 
			
		||||
			offset: 0
 | 
			
		||||
		}, opts);
 | 
			
		||||
 | 
			
		||||
		for (let i = 0; i < header.length; i++) {
 | 
			
		||||
			if (header[i] !== buf[i + opts.offset]) {
 | 
			
		||||
				return false;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return true;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	if (check([0xFF, 0xD8, 0xFF])) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'jpg',
 | 
			
		||||
			mime: 'image/jpeg'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (check([0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A])) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'png',
 | 
			
		||||
			mime: 'image/png'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (check([0x47, 0x49, 0x46])) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'gif',
 | 
			
		||||
			mime: 'image/gif'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (check([0x57, 0x45, 0x42, 0x50], {offset: 8})) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'webp',
 | 
			
		||||
			mime: 'image/webp'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (check([0x46, 0x4C, 0x49, 0x46])) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'flif',
 | 
			
		||||
			mime: 'image/flif'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Needs to be before `tif` check
 | 
			
		||||
	if (
 | 
			
		||||
		(check([0x49, 0x49, 0x2A, 0x0]) || check([0x4D, 0x4D, 0x0, 0x2A])) &&
 | 
			
		||||
		check([0x43, 0x52], {offset: 8})
 | 
			
		||||
	) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'cr2',
 | 
			
		||||
			mime: 'image/x-canon-cr2'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (
 | 
			
		||||
		check([0x49, 0x49, 0x2A, 0x0]) ||
 | 
			
		||||
		check([0x4D, 0x4D, 0x0, 0x2A])
 | 
			
		||||
	) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'tif',
 | 
			
		||||
			mime: 'image/tiff'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (check([0x42, 0x4D])) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'bmp',
 | 
			
		||||
			mime: 'image/bmp'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (check([0x49, 0x49, 0xBC])) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'jxr',
 | 
			
		||||
			mime: 'image/vnd.ms-photo'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (check([0x38, 0x42, 0x50, 0x53])) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'psd',
 | 
			
		||||
			mime: 'image/vnd.adobe.photoshop'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Needs to be before the `zip` check
 | 
			
		||||
	if (
 | 
			
		||||
		check([0x50, 0x4B, 0x3, 0x4]) &&
 | 
			
		||||
		check([0x6D, 0x69, 0x6D, 0x65, 0x74, 0x79, 0x70, 0x65, 0x61, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x2F, 0x65, 0x70, 0x75, 0x62, 0x2B, 0x7A, 0x69, 0x70], {offset: 30})
 | 
			
		||||
	) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'epub',
 | 
			
		||||
			mime: 'application/epub+zip'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Needs to be before `zip` check
 | 
			
		||||
	// Assumes signed `.xpi` from addons.mozilla.org
 | 
			
		||||
	if (
 | 
			
		||||
		check([0x50, 0x4B, 0x3, 0x4]) &&
 | 
			
		||||
		check([0x4D, 0x45, 0x54, 0x41, 0x2D, 0x49, 0x4E, 0x46, 0x2F, 0x6D, 0x6F, 0x7A, 0x69, 0x6C, 0x6C, 0x61, 0x2E, 0x72, 0x73, 0x61], {offset: 30})
 | 
			
		||||
	) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'xpi',
 | 
			
		||||
			mime: 'application/x-xpinstall'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (
 | 
			
		||||
		check([0x50, 0x4B]) &&
 | 
			
		||||
		(buf[2] === 0x3 || buf[2] === 0x5 || buf[2] === 0x7) &&
 | 
			
		||||
		(buf[3] === 0x4 || buf[3] === 0x6 || buf[3] === 0x8)
 | 
			
		||||
	) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'zip',
 | 
			
		||||
			mime: 'application/zip'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (check([0x75, 0x73, 0x74, 0x61, 0x72], {offset: 257})) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'tar',
 | 
			
		||||
			mime: 'application/x-tar'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (
 | 
			
		||||
		check([0x52, 0x61, 0x72, 0x21, 0x1A, 0x7]) &&
 | 
			
		||||
		(buf[6] === 0x0 || buf[6] === 0x1)
 | 
			
		||||
	) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'rar',
 | 
			
		||||
			mime: 'application/x-rar-compressed'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (check([0x1F, 0x8B, 0x8])) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'gz',
 | 
			
		||||
			mime: 'application/gzip'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (check([0x42, 0x5A, 0x68])) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'bz2',
 | 
			
		||||
			mime: 'application/x-bzip2'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (check([0x37, 0x7A, 0xBC, 0xAF, 0x27, 0x1C])) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: '7z',
 | 
			
		||||
			mime: 'application/x-7z-compressed'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (check([0x78, 0x01])) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'dmg',
 | 
			
		||||
			mime: 'application/x-apple-diskimage'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (
 | 
			
		||||
		(
 | 
			
		||||
			check([0x0, 0x0, 0x0]) &&
 | 
			
		||||
			(buf[3] === 0x18 || buf[3] === 0x20) &&
 | 
			
		||||
			check([0x66, 0x74, 0x79, 0x70], {offset: 4})
 | 
			
		||||
		) ||
 | 
			
		||||
		check([0x33, 0x67, 0x70, 0x35]) ||
 | 
			
		||||
		(
 | 
			
		||||
			check([0x0, 0x0, 0x0, 0x1C, 0x66, 0x74, 0x79, 0x70, 0x6D, 0x70, 0x34, 0x32]) &&
 | 
			
		||||
			check([0x6D, 0x70, 0x34, 0x31, 0x6D, 0x70, 0x34, 0x32, 0x69, 0x73, 0x6F, 0x6D], {offset: 16})
 | 
			
		||||
		) ||
 | 
			
		||||
		check([0x0, 0x0, 0x0, 0x1C, 0x66, 0x74, 0x79, 0x70, 0x69, 0x73, 0x6F, 0x6D]) ||
 | 
			
		||||
		check([0x0, 0x0, 0x0, 0x1C, 0x66, 0x74, 0x79, 0x70, 0x6D, 0x70, 0x34, 0x32, 0x0, 0x0, 0x0, 0x0])
 | 
			
		||||
	) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'mp4',
 | 
			
		||||
			mime: 'video/mp4'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (check([0x0, 0x0, 0x0, 0x1C, 0x66, 0x74, 0x79, 0x70, 0x4D, 0x34, 0x56])) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'm4v',
 | 
			
		||||
			mime: 'video/x-m4v'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (check([0x4D, 0x54, 0x68, 0x64])) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'mid',
 | 
			
		||||
			mime: 'audio/midi'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// https://github.com/threatstack/libmagic/blob/master/magic/Magdir/matroska
 | 
			
		||||
	if (check([0x1A, 0x45, 0xDF, 0xA3])) {
 | 
			
		||||
		const sliced = buf.subarray(4, 4 + 4096);
 | 
			
		||||
		const idPos = sliced.findIndex((el, i, arr) => arr[i] === 0x42 && arr[i + 1] === 0x82);
 | 
			
		||||
 | 
			
		||||
		if (idPos >= 0) {
 | 
			
		||||
			const docTypePos = idPos + 3;
 | 
			
		||||
			const findDocType = type => Array.from(type).every((c, i) => sliced[docTypePos + i] === c.charCodeAt(0));
 | 
			
		||||
 | 
			
		||||
			if (findDocType('matroska')) {
 | 
			
		||||
				return {
 | 
			
		||||
					ext: 'mkv',
 | 
			
		||||
					mime: 'video/x-matroska'
 | 
			
		||||
				};
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if (findDocType('webm')) {
 | 
			
		||||
				return {
 | 
			
		||||
					ext: 'webm',
 | 
			
		||||
					mime: 'video/webm'
 | 
			
		||||
				};
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (check([0x0, 0x0, 0x0, 0x14, 0x66, 0x74, 0x79, 0x70, 0x71, 0x74, 0x20, 0x20]) ||
 | 
			
		||||
		check([0x66, 0x72, 0x65, 0x65], {offset: 4}) ||
 | 
			
		||||
		check([0x66, 0x74, 0x79, 0x70, 0x71, 0x74, 0x20, 0x20], {offset: 4}) ||
 | 
			
		||||
		check([0x6D, 0x64, 0x61, 0x74], {offset: 4}) || // MJPEG
 | 
			
		||||
		check([0x77, 0x69, 0x64, 0x65], {offset: 4})) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'mov',
 | 
			
		||||
			mime: 'video/quicktime'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (
 | 
			
		||||
		check([0x52, 0x49, 0x46, 0x46]) &&
 | 
			
		||||
		check([0x41, 0x56, 0x49], {offset: 8})
 | 
			
		||||
	) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'avi',
 | 
			
		||||
			mime: 'video/x-msvideo'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (check([0x30, 0x26, 0xB2, 0x75, 0x8E, 0x66, 0xCF, 0x11, 0xA6, 0xD9])) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'wmv',
 | 
			
		||||
			mime: 'video/x-ms-wmv'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (check([0x0, 0x0, 0x1, 0xBA])) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'mpg',
 | 
			
		||||
			mime: 'video/mpeg'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (
 | 
			
		||||
		check([0x49, 0x44, 0x33]) ||
 | 
			
		||||
		check([0xFF, 0xFB])
 | 
			
		||||
	) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'mp3',
 | 
			
		||||
			mime: 'audio/mpeg'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (
 | 
			
		||||
		check([0x66, 0x74, 0x79, 0x70, 0x4D, 0x34, 0x41], {offset: 4}) ||
 | 
			
		||||
		check([0x4D, 0x34, 0x41, 0x20])
 | 
			
		||||
	) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'm4a',
 | 
			
		||||
			mime: 'audio/m4a'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Needs to be before `ogg` check
 | 
			
		||||
	if (check([0x4F, 0x70, 0x75, 0x73, 0x48, 0x65, 0x61, 0x64], {offset: 28})) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'opus',
 | 
			
		||||
			mime: 'audio/opus'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (check([0x4F, 0x67, 0x67, 0x53])) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'ogg',
 | 
			
		||||
			mime: 'audio/ogg'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (check([0x66, 0x4C, 0x61, 0x43])) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'flac',
 | 
			
		||||
			mime: 'audio/x-flac'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (
 | 
			
		||||
		check([0x52, 0x49, 0x46, 0x46]) &&
 | 
			
		||||
		check([0x57, 0x41, 0x56, 0x45], {offset: 8})
 | 
			
		||||
	) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'wav',
 | 
			
		||||
			mime: 'audio/x-wav'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (check([0x23, 0x21, 0x41, 0x4D, 0x52, 0x0A])) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'amr',
 | 
			
		||||
			mime: 'audio/amr'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (check([0x25, 0x50, 0x44, 0x46])) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'pdf',
 | 
			
		||||
			mime: 'application/pdf'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (check([0x4D, 0x5A])) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'exe',
 | 
			
		||||
			mime: 'application/x-msdownload'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (
 | 
			
		||||
		(buf[0] === 0x43 || buf[0] === 0x46) &&
 | 
			
		||||
		check([0x57, 0x53], {offset: 1})
 | 
			
		||||
	) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'swf',
 | 
			
		||||
			mime: 'application/x-shockwave-flash'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (check([0x7B, 0x5C, 0x72, 0x74, 0x66])) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'rtf',
 | 
			
		||||
			mime: 'application/rtf'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (check([0x00, 0x61, 0x73, 0x6D])) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'wasm',
 | 
			
		||||
			mime: 'application/wasm'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (
 | 
			
		||||
		check([0x77, 0x4F, 0x46, 0x46]) &&
 | 
			
		||||
		(
 | 
			
		||||
			check([0x00, 0x01, 0x00, 0x00], {offset: 4}) ||
 | 
			
		||||
			check([0x4F, 0x54, 0x54, 0x4F], {offset: 4})
 | 
			
		||||
		)
 | 
			
		||||
	) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'woff',
 | 
			
		||||
			mime: 'font/woff'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (
 | 
			
		||||
		check([0x77, 0x4F, 0x46, 0x32]) &&
 | 
			
		||||
		(
 | 
			
		||||
			check([0x00, 0x01, 0x00, 0x00], {offset: 4}) ||
 | 
			
		||||
			check([0x4F, 0x54, 0x54, 0x4F], {offset: 4})
 | 
			
		||||
		)
 | 
			
		||||
	) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'woff2',
 | 
			
		||||
			mime: 'font/woff2'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (
 | 
			
		||||
		check([0x4C, 0x50], {offset: 34}) &&
 | 
			
		||||
		(
 | 
			
		||||
			check([0x00, 0x00, 0x01], {offset: 8}) ||
 | 
			
		||||
			check([0x01, 0x00, 0x02], {offset: 8}) ||
 | 
			
		||||
			check([0x02, 0x00, 0x02], {offset: 8})
 | 
			
		||||
		)
 | 
			
		||||
	) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'eot',
 | 
			
		||||
			mime: 'application/octet-stream'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (check([0x00, 0x01, 0x00, 0x00, 0x00])) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'ttf',
 | 
			
		||||
			mime: 'font/ttf'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (check([0x4F, 0x54, 0x54, 0x4F, 0x00])) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'otf',
 | 
			
		||||
			mime: 'font/otf'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (check([0x00, 0x00, 0x01, 0x00])) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'ico',
 | 
			
		||||
			mime: 'image/x-icon'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (check([0x46, 0x4C, 0x56, 0x01])) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'flv',
 | 
			
		||||
			mime: 'video/x-flv'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (check([0x25, 0x21])) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'ps',
 | 
			
		||||
			mime: 'application/postscript'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (check([0xFD, 0x37, 0x7A, 0x58, 0x5A, 0x00])) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'xz',
 | 
			
		||||
			mime: 'application/x-xz'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (check([0x53, 0x51, 0x4C, 0x69])) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'sqlite',
 | 
			
		||||
			mime: 'application/x-sqlite3'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (check([0x4E, 0x45, 0x53, 0x1A])) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'nes',
 | 
			
		||||
			mime: 'application/x-nintendo-nes-rom'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (check([0x43, 0x72, 0x32, 0x34])) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'crx',
 | 
			
		||||
			mime: 'application/x-google-chrome-extension'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (
 | 
			
		||||
		check([0x4D, 0x53, 0x43, 0x46]) ||
 | 
			
		||||
		check([0x49, 0x53, 0x63, 0x28])
 | 
			
		||||
	) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'cab',
 | 
			
		||||
			mime: 'application/vnd.ms-cab-compressed'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Needs to be before `ar` check
 | 
			
		||||
	if (check([0x21, 0x3C, 0x61, 0x72, 0x63, 0x68, 0x3E, 0x0A, 0x64, 0x65, 0x62, 0x69, 0x61, 0x6E, 0x2D, 0x62, 0x69, 0x6E, 0x61, 0x72, 0x79])) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'deb',
 | 
			
		||||
			mime: 'application/x-deb'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (check([0x21, 0x3C, 0x61, 0x72, 0x63, 0x68, 0x3E])) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'ar',
 | 
			
		||||
			mime: 'application/x-unix-archive'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (check([0xED, 0xAB, 0xEE, 0xDB])) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'rpm',
 | 
			
		||||
			mime: 'application/x-rpm'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (
 | 
			
		||||
		check([0x1F, 0xA0]) ||
 | 
			
		||||
		check([0x1F, 0x9D])
 | 
			
		||||
	) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'Z',
 | 
			
		||||
			mime: 'application/x-compress'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (check([0x4C, 0x5A, 0x49, 0x50])) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'lz',
 | 
			
		||||
			mime: 'application/x-lzip'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (check([0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1])) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'msi',
 | 
			
		||||
			mime: 'application/x-msi'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (check([0x06, 0x0E, 0x2B, 0x34, 0x02, 0x05, 0x01, 0x01, 0x0D, 0x01, 0x02, 0x01, 0x01, 0x02])) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'mxf',
 | 
			
		||||
			mime: 'application/mxf'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (check([0x47], {offset: 4}) && (check([0x47], {offset: 192}) || check([0x47], {offset: 196}))) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'mts',
 | 
			
		||||
			mime: 'video/mp2t'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (check([0x42, 0x4C, 0x45, 0x4E, 0x44, 0x45, 0x52])) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'blend',
 | 
			
		||||
			mime: 'application/x-blender'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (check([0x42, 0x50, 0x47, 0xFB])) {
 | 
			
		||||
		return {
 | 
			
		||||
			ext: 'bpg',
 | 
			
		||||
			mime: 'image/bpg'
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return null;
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										21
									
								
								node_modules/file-type/license
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								node_modules/file-type/license
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
The MIT License (MIT)
 | 
			
		||||
 | 
			
		||||
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
 | 
			
		||||
 | 
			
		||||
Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
in the Software without restriction, including without limitation the rights
 | 
			
		||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
			
		||||
copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
furnished to do so, subject to the following conditions:
 | 
			
		||||
 | 
			
		||||
The above copyright notice and this permission notice shall be included in
 | 
			
		||||
all copies or substantial portions of the Software.
 | 
			
		||||
 | 
			
		||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 | 
			
		||||
THE SOFTWARE.
 | 
			
		||||
							
								
								
									
										142
									
								
								node_modules/file-type/package.json
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										142
									
								
								node_modules/file-type/package.json
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,142 @@
 | 
			
		||||
{
 | 
			
		||||
  "_from": "file-type@^5.2.0",
 | 
			
		||||
  "_id": "file-type@5.2.0",
 | 
			
		||||
  "_inBundle": false,
 | 
			
		||||
  "_integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=",
 | 
			
		||||
  "_location": "/file-type",
 | 
			
		||||
  "_phantomChildren": {},
 | 
			
		||||
  "_requested": {
 | 
			
		||||
    "type": "range",
 | 
			
		||||
    "registry": true,
 | 
			
		||||
    "raw": "file-type@^5.2.0",
 | 
			
		||||
    "name": "file-type",
 | 
			
		||||
    "escapedName": "file-type",
 | 
			
		||||
    "rawSpec": "^5.2.0",
 | 
			
		||||
    "saveSpec": null,
 | 
			
		||||
    "fetchSpec": "^5.2.0"
 | 
			
		||||
  },
 | 
			
		||||
  "_requiredBy": [
 | 
			
		||||
    "/decompress-tar",
 | 
			
		||||
    "/decompress-targz"
 | 
			
		||||
  ],
 | 
			
		||||
  "_resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz",
 | 
			
		||||
  "_shasum": "2ddbea7c73ffe36368dfae49dc338c058c2b8ad6",
 | 
			
		||||
  "_spec": "file-type@^5.2.0",
 | 
			
		||||
  "_where": "C:\\Users\\matia\\Musix\\node_modules\\decompress-tar",
 | 
			
		||||
  "author": {
 | 
			
		||||
    "name": "Sindre Sorhus",
 | 
			
		||||
    "email": "sindresorhus@gmail.com",
 | 
			
		||||
    "url": "sindresorhus.com"
 | 
			
		||||
  },
 | 
			
		||||
  "bugs": {
 | 
			
		||||
    "url": "https://github.com/sindresorhus/file-type/issues"
 | 
			
		||||
  },
 | 
			
		||||
  "bundleDependencies": false,
 | 
			
		||||
  "deprecated": false,
 | 
			
		||||
  "description": "Detect the file type of a Buffer/Uint8Array",
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "ava": "*",
 | 
			
		||||
    "read-chunk": "^2.0.0",
 | 
			
		||||
    "xo": "*"
 | 
			
		||||
  },
 | 
			
		||||
  "engines": {
 | 
			
		||||
    "node": ">=4"
 | 
			
		||||
  },
 | 
			
		||||
  "files": [
 | 
			
		||||
    "index.js"
 | 
			
		||||
  ],
 | 
			
		||||
  "homepage": "https://github.com/sindresorhus/file-type#readme",
 | 
			
		||||
  "keywords": [
 | 
			
		||||
    "mime",
 | 
			
		||||
    "file",
 | 
			
		||||
    "type",
 | 
			
		||||
    "archive",
 | 
			
		||||
    "image",
 | 
			
		||||
    "img",
 | 
			
		||||
    "pic",
 | 
			
		||||
    "picture",
 | 
			
		||||
    "flash",
 | 
			
		||||
    "photo",
 | 
			
		||||
    "video",
 | 
			
		||||
    "type",
 | 
			
		||||
    "detect",
 | 
			
		||||
    "check",
 | 
			
		||||
    "is",
 | 
			
		||||
    "exif",
 | 
			
		||||
    "exe",
 | 
			
		||||
    "binary",
 | 
			
		||||
    "buffer",
 | 
			
		||||
    "uint8array",
 | 
			
		||||
    "jpg",
 | 
			
		||||
    "png",
 | 
			
		||||
    "gif",
 | 
			
		||||
    "webp",
 | 
			
		||||
    "flif",
 | 
			
		||||
    "cr2",
 | 
			
		||||
    "tif",
 | 
			
		||||
    "bmp",
 | 
			
		||||
    "jxr",
 | 
			
		||||
    "psd",
 | 
			
		||||
    "zip",
 | 
			
		||||
    "tar",
 | 
			
		||||
    "rar",
 | 
			
		||||
    "gz",
 | 
			
		||||
    "bz2",
 | 
			
		||||
    "7z",
 | 
			
		||||
    "dmg",
 | 
			
		||||
    "mp4",
 | 
			
		||||
    "m4v",
 | 
			
		||||
    "mid",
 | 
			
		||||
    "mkv",
 | 
			
		||||
    "webm",
 | 
			
		||||
    "mov",
 | 
			
		||||
    "avi",
 | 
			
		||||
    "mpg",
 | 
			
		||||
    "mp3",
 | 
			
		||||
    "m4a",
 | 
			
		||||
    "ogg",
 | 
			
		||||
    "opus",
 | 
			
		||||
    "flac",
 | 
			
		||||
    "wav",
 | 
			
		||||
    "amr",
 | 
			
		||||
    "pdf",
 | 
			
		||||
    "epub",
 | 
			
		||||
    "exe",
 | 
			
		||||
    "swf",
 | 
			
		||||
    "rtf",
 | 
			
		||||
    "woff",
 | 
			
		||||
    "woff2",
 | 
			
		||||
    "eot",
 | 
			
		||||
    "ttf",
 | 
			
		||||
    "otf",
 | 
			
		||||
    "ico",
 | 
			
		||||
    "flv",
 | 
			
		||||
    "ps",
 | 
			
		||||
    "xz",
 | 
			
		||||
    "sqlite",
 | 
			
		||||
    "xpi",
 | 
			
		||||
    "cab",
 | 
			
		||||
    "deb",
 | 
			
		||||
    "ar",
 | 
			
		||||
    "rpm",
 | 
			
		||||
    "Z",
 | 
			
		||||
    "lz",
 | 
			
		||||
    "msi",
 | 
			
		||||
    "mxf",
 | 
			
		||||
    "mts",
 | 
			
		||||
    "wasm",
 | 
			
		||||
    "webassembly",
 | 
			
		||||
    "blend",
 | 
			
		||||
    "bpg"
 | 
			
		||||
  ],
 | 
			
		||||
  "license": "MIT",
 | 
			
		||||
  "name": "file-type",
 | 
			
		||||
  "repository": {
 | 
			
		||||
    "type": "git",
 | 
			
		||||
    "url": "git+https://github.com/sindresorhus/file-type.git"
 | 
			
		||||
  },
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "test": "xo && ava"
 | 
			
		||||
  },
 | 
			
		||||
  "version": "5.2.0"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										156
									
								
								node_modules/file-type/readme.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										156
									
								
								node_modules/file-type/readme.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,156 @@
 | 
			
		||||
# file-type [](https://travis-ci.org/sindresorhus/file-type)
 | 
			
		||||
 | 
			
		||||
> Detect the file type of a Buffer/Uint8Array
 | 
			
		||||
 | 
			
		||||
The file type is detected by checking the [magic number](http://en.wikipedia.org/wiki/Magic_number_(programming)#Magic_numbers_in_files) of the buffer.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Install
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
$ npm install --save file-type
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Usage
 | 
			
		||||
 | 
			
		||||
##### Node.js
 | 
			
		||||
 | 
			
		||||
```js
 | 
			
		||||
const readChunk = require('read-chunk');
 | 
			
		||||
const fileType = require('file-type');
 | 
			
		||||
const buffer = readChunk.sync('unicorn.png', 0, 4100);
 | 
			
		||||
 | 
			
		||||
fileType(buffer);
 | 
			
		||||
//=> {ext: 'png', mime: 'image/png'}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Or from a remote location:
 | 
			
		||||
 | 
			
		||||
```js
 | 
			
		||||
const http = require('http');
 | 
			
		||||
const fileType = require('file-type');
 | 
			
		||||
const url = 'http://assets-cdn.github.com/images/spinners/octocat-spinner-32.gif';
 | 
			
		||||
 | 
			
		||||
http.get(url, res => {
 | 
			
		||||
	res.once('data', chunk => {
 | 
			
		||||
		res.destroy();
 | 
			
		||||
		console.log(fileType(chunk));
 | 
			
		||||
		//=> {ext: 'gif', mime: 'image/gif'}
 | 
			
		||||
	});
 | 
			
		||||
});
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
##### Browser
 | 
			
		||||
 | 
			
		||||
```js
 | 
			
		||||
const xhr = new XMLHttpRequest();
 | 
			
		||||
xhr.open('GET', 'unicorn.png');
 | 
			
		||||
xhr.responseType = 'arraybuffer';
 | 
			
		||||
 | 
			
		||||
xhr.onload = () => {
 | 
			
		||||
	fileType(new Uint8Array(this.response));
 | 
			
		||||
	//=> {ext: 'png', mime: 'image/png'}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
xhr.send();
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## API
 | 
			
		||||
 | 
			
		||||
### fileType(input)
 | 
			
		||||
 | 
			
		||||
Returns an `Object` with:
 | 
			
		||||
 | 
			
		||||
- `ext` - One of the [supported file types](#supported-file-types)
 | 
			
		||||
- `mime` - The [MIME type](http://en.wikipedia.org/wiki/Internet_media_type)
 | 
			
		||||
 | 
			
		||||
Or `null` when no match.
 | 
			
		||||
 | 
			
		||||
#### input
 | 
			
		||||
 | 
			
		||||
Type: `Buffer` `Uint8Array`
 | 
			
		||||
 | 
			
		||||
It only needs the first 4100 bytes.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Supported file types
 | 
			
		||||
 | 
			
		||||
- [`jpg`](https://en.wikipedia.org/wiki/JPEG)
 | 
			
		||||
- [`png`](https://en.wikipedia.org/wiki/Portable_Network_Graphics)
 | 
			
		||||
- [`gif`](https://en.wikipedia.org/wiki/GIF)
 | 
			
		||||
- [`webp`](https://en.wikipedia.org/wiki/WebP)
 | 
			
		||||
- [`flif`](https://en.wikipedia.org/wiki/Free_Lossless_Image_Format)
 | 
			
		||||
- [`cr2`](http://fileinfo.com/extension/cr2)
 | 
			
		||||
- [`tif`](https://en.wikipedia.org/wiki/Tagged_Image_File_Format)
 | 
			
		||||
- [`bmp`](https://en.wikipedia.org/wiki/BMP_file_format)
 | 
			
		||||
- [`jxr`](https://en.wikipedia.org/wiki/JPEG_XR)
 | 
			
		||||
- [`psd`](https://en.wikipedia.org/wiki/Adobe_Photoshop#File_format)
 | 
			
		||||
- [`zip`](https://en.wikipedia.org/wiki/Zip_(file_format))
 | 
			
		||||
- [`tar`](https://en.wikipedia.org/wiki/Tar_(computing)#File_format)
 | 
			
		||||
- [`rar`](https://en.wikipedia.org/wiki/RAR_(file_format))
 | 
			
		||||
- [`gz`](https://en.wikipedia.org/wiki/Gzip)
 | 
			
		||||
- [`bz2`](https://en.wikipedia.org/wiki/Bzip2)
 | 
			
		||||
- [`7z`](https://en.wikipedia.org/wiki/7z)
 | 
			
		||||
- [`dmg`](https://en.wikipedia.org/wiki/Apple_Disk_Image)
 | 
			
		||||
- [`mp4`](https://en.wikipedia.org/wiki/MPEG-4_Part_14#Filename_extensions)
 | 
			
		||||
- [`m4v`](https://en.wikipedia.org/wiki/M4V)
 | 
			
		||||
- [`mid`](https://en.wikipedia.org/wiki/MIDI)
 | 
			
		||||
- [`mkv`](https://en.wikipedia.org/wiki/Matroska)
 | 
			
		||||
- [`webm`](https://en.wikipedia.org/wiki/WebM)
 | 
			
		||||
- [`mov`](https://en.wikipedia.org/wiki/QuickTime_File_Format)
 | 
			
		||||
- [`avi`](https://en.wikipedia.org/wiki/Audio_Video_Interleave)
 | 
			
		||||
- [`wmv`](https://en.wikipedia.org/wiki/Windows_Media_Video)
 | 
			
		||||
- [`mpg`](https://en.wikipedia.org/wiki/MPEG-1)
 | 
			
		||||
- [`mp3`](https://en.wikipedia.org/wiki/MP3)
 | 
			
		||||
- [`m4a`](https://en.wikipedia.org/wiki/MPEG-4_Part_14#.MP4_versus_.M4A)
 | 
			
		||||
- [`ogg`](https://en.wikipedia.org/wiki/Ogg)
 | 
			
		||||
- [`opus`](https://en.wikipedia.org/wiki/Opus_(audio_format))
 | 
			
		||||
- [`flac`](https://en.wikipedia.org/wiki/FLAC)
 | 
			
		||||
- [`wav`](https://en.wikipedia.org/wiki/WAV)
 | 
			
		||||
- [`amr`](https://en.wikipedia.org/wiki/Adaptive_Multi-Rate_audio_codec)
 | 
			
		||||
- [`pdf`](https://en.wikipedia.org/wiki/Portable_Document_Format)
 | 
			
		||||
- [`epub`](https://en.wikipedia.org/wiki/EPUB)
 | 
			
		||||
- [`exe`](https://en.wikipedia.org/wiki/.exe)
 | 
			
		||||
- [`swf`](https://en.wikipedia.org/wiki/SWF)
 | 
			
		||||
- [`rtf`](https://en.wikipedia.org/wiki/Rich_Text_Format)
 | 
			
		||||
- [`woff`](https://en.wikipedia.org/wiki/Web_Open_Font_Format)
 | 
			
		||||
- [`woff2`](https://en.wikipedia.org/wiki/Web_Open_Font_Format)
 | 
			
		||||
- [`eot`](https://en.wikipedia.org/wiki/Embedded_OpenType)
 | 
			
		||||
- [`ttf`](https://en.wikipedia.org/wiki/TrueType)
 | 
			
		||||
- [`otf`](https://en.wikipedia.org/wiki/OpenType)
 | 
			
		||||
- [`ico`](https://en.wikipedia.org/wiki/ICO_(file_format))
 | 
			
		||||
- [`flv`](https://en.wikipedia.org/wiki/Flash_Video)
 | 
			
		||||
- [`ps`](https://en.wikipedia.org/wiki/Postscript)
 | 
			
		||||
- [`xz`](https://en.wikipedia.org/wiki/Xz)
 | 
			
		||||
- [`sqlite`](https://www.sqlite.org/fileformat2.html)
 | 
			
		||||
- [`nes`](http://fileinfo.com/extension/nes)
 | 
			
		||||
- [`crx`](https://developer.chrome.com/extensions/crx)
 | 
			
		||||
- [`xpi`](https://en.wikipedia.org/wiki/XPInstall)
 | 
			
		||||
- [`cab`](https://en.wikipedia.org/wiki/Cabinet_(file_format))
 | 
			
		||||
- [`deb`](https://en.wikipedia.org/wiki/Deb_(file_format))
 | 
			
		||||
- [`ar`](https://en.wikipedia.org/wiki/Ar_(Unix))
 | 
			
		||||
- [`rpm`](http://fileinfo.com/extension/rpm)
 | 
			
		||||
- [`Z`](http://fileinfo.com/extension/z)
 | 
			
		||||
- [`lz`](https://en.wikipedia.org/wiki/Lzip)
 | 
			
		||||
- [`msi`](https://en.wikipedia.org/wiki/Windows_Installer)
 | 
			
		||||
- [`mxf`](https://en.wikipedia.org/wiki/Material_Exchange_Format)
 | 
			
		||||
- [`mts`](https://en.wikipedia.org/wiki/.m2ts)
 | 
			
		||||
- [`wasm`](https://en.wikipedia.org/wiki/WebAssembly)
 | 
			
		||||
- [`blend`](https://wiki.blender.org/index.php/Dev:Source/Architecture/File_Format)
 | 
			
		||||
- [`bpg`](https://bellard.org/bpg/)
 | 
			
		||||
 | 
			
		||||
*SVG isn't included as it requires the whole file to be read, but you can get it [here](https://github.com/sindresorhus/is-svg).*
 | 
			
		||||
 | 
			
		||||
*Pull request welcome for additional commonly used file types.*
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Related
 | 
			
		||||
 | 
			
		||||
- [file-type-cli](https://github.com/sindresorhus/file-type-cli) - CLI for this module
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## License
 | 
			
		||||
 | 
			
		||||
MIT © [Sindre Sorhus](https://sindresorhus.com)
 | 
			
		||||
		Reference in New Issue
	
	Block a user