{
	"version": 3,
	"sources": [
		"C:\\dev\\streamline-zip\\src\\janzip._js"
	],
	"names": [
		"buf",
		"length",
		"table",
		"crc",
		"ix",
		"offset",
		"target",
		"data",
		"writeInt8",
		"ez",
		"require",
		"RollingBuffer",
		"fs",
		"zlib",
		"exports",
		"Zip",
		"outStream",
		"options",
		"date",
		"dosTime",
		"dosDate",
		"getHours",
		"getMinutes",
		"getSeconds",
		"getFullYear",
		"getMonth",
		"getDate",
		"time",
		"file",
		"compressIndicator",
		"compressedData",
		"dt",
		"getDateTimeHeaders",
		"Date",
		"header",
		"writeBytes",
		"writeInt16",
		"writeInt32",
		"crc32",
		"name",
		"fileHeader",
		"getFileHeader",
		"zipMethod",
		"indicator",
		"fileBuffer",
		"appendBuffer",
		"write",
		"dirBuffer",
		"fileOffset",
		"dirBuffers",
		"push",
		"totalDirLength",
		"os",
		"pre",
		"emitter",
		"devices",
		"node",
		"writer",
		"deflate",
		"add",
		"entry",
		"Array",
		"isArray",
		"bind",
		"stat",
		"path",
		"isDirectory",
		"n",
		"filter",
		"transform",
		"mtime",
		"Buffer",
		"isBuffer",
		"TypeError",
		"finish",
		"totalFileLength",
		"b",
		"dirEnd",
		"close",
		"store",
		"compress",
		"content"
	],
	"mappings": "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",
	"file": "janzip._js",
	"sourcesContent": [
		"/**\r\n * node.js zipping module\r\n *\r\n * (c) Jan Jongboom, 2011\r\n *\r\n * Modified by Bruno Jouhier to support compression and streaming.\r\n */\r\n\"use strict\";\r\nvar ez = require('ez-streams');\r\n\r\nvar RollingBuffer = require(\"./rollingbuffer\");\r\nvar fs = require('fs');\r\nvar zlib = require(\"zlib\");\r\n\r\n/// !doc\r\n/// \r\n/// # streamline-zip main module\r\n/// \r\n/// Simple API to create a zip archive. No external dependencies (except streamline.js).\r\n/// \r\n/// `var zip = require('streamline-zip')`\r\n/// \r\n/// * `archive = new zip.Zip(outStream[, options])`  \r\n///   Creates a zip archive.  \r\n///   Uses _deflate_ compression by default. You can override this by passing  \r\n///   `options = { zipMethod: zip.store }`  \r\n///   `options.filter`:  optional function to filter the contents of directories.  \r\n///   Called as `filter(_, filename, parentEntry)`.  \r\n///   `options.transform`:  optional function to transform the contents of files.  \r\n///   Called as `transform(_, contents, entry)` where `contents` is a buffer (not a string).\r\n/// \r\nexports.Zip = function(outStream, options) {\r\n\t// auto-wrap outStream with streamline stream\r\n\tvar os = (outStream.pre || outStream.emitter) ? outStream : ez.devices.node.writer(outStream);\r\n\toptions = options || {};\r\n\tvar zipMethod = options.zipMethod || exports.deflate;\r\n\r\n\tvar dirBuffers = [];\r\n\tvar fileOffset = 0;\r\n\tvar totalDirLength = 0;\r\n\r\n\tfunction getDateTimeHeaders(date) {\r\n\t\tvar dosTime, dosDate;\r\n\r\n\t\tdosTime = date.getHours();\r\n\t\tdosTime = dosTime << 6;\r\n\t\tdosTime = dosTime | date.getMinutes();\r\n\t\tdosTime = dosTime << 5;\r\n\t\tdosTime = dosTime | date.getSeconds() / 2;\r\n\r\n\t\tdosDate = date.getFullYear() - 1980;\r\n\t\tdosDate = dosDate << 4;\r\n\t\tdosDate = dosDate | (date.getMonth() + 1);\r\n\t\tdosDate = dosDate << 5;\r\n\t\tdosDate = dosDate | date.getDate();\r\n\r\n\t\treturn {\r\n\t\t\tdate: dosDate,\r\n\t\t\ttime: dosTime\r\n\t\t};\r\n\t}\r\n\r\n\tfunction getFileHeader(file, compressIndicator, compressedData) {\r\n\t\tvar dt = getDateTimeHeaders(file.date || new Date());\r\n\r\n\t\tvar header = new RollingBuffer(26);\r\n\r\n\t\t// version + bit flag\r\n\t\twriteBytes(header, [0x0A, 0x00, 0x00, 0x00]);\r\n\t\t// compression method @todo multiple methods, this is STORE\r\n\t\twriteBytes(header, compressIndicator);\r\n\t\t// file time & date\r\n\t\theader.writeInt16(dt.time);\r\n\t\theader.writeInt16(dt.date);\r\n\t\t// crc32\r\n\t\theader.writeInt32(crc32(file.data));\r\n\t\t// compressed size\r\n\t\theader.writeInt32(compressedData.length);\r\n\t\t// uncompressed size\r\n\t\theader.writeInt32(file.data.length);\r\n\t\t// file name length\r\n\t\theader.writeInt16(file.name.length);\r\n\t\t// fill\r\n\t\twriteBytes(header, [0x00, 0x00]);\r\n\r\n\t\treturn header;\r\n\t}\r\n\r\n\tfunction add(_, file) {\r\n\t\t// compress\r\n\t\tvar data = zipMethod.compress(file.data, _);\r\n\r\n\t\t// write file header\r\n\t\tvar fileHeader = getFileHeader(file, zipMethod.indicator, data);\r\n\t\tvar fileBuffer = new RollingBuffer(4 + fileHeader.length + file.name.length);\r\n\t\twriteBytes(fileBuffer, [0x50, 0x4b, 0x03, 0x04]); // 4\r\n\t\tfileBuffer.appendBuffer(fileHeader); // hmm...\r\n\t\tfileBuffer.write(file.name, \"ascii\");\r\n\t\tos.write(_, fileBuffer.buf);\r\n\r\n\t\t// write file data\r\n\t\tos.write(_, data);\r\n\r\n\t\t// now create dir\r\n\t\tvar dirBuffer = new RollingBuffer(4 + 2 + fileHeader.length + 6 + 4 + 4 + file.name.length);\r\n\t\twriteBytes(dirBuffer, [0x50, 0x4b, 0x01, 0x02]);\r\n\t\twriteBytes(dirBuffer, [0x14, 0x00]);\r\n\t\tdirBuffer.appendBuffer(fileHeader);\r\n\t\t// comment length, disk start, file attributes\r\n\t\twriteBytes(dirBuffer, [0x00, 0x00, 0x00, 0x00, 0x00, 0x00]);\r\n\t\t// external file attributes, @todo\r\n\t\twriteBytes(dirBuffer, [0x00, 0x00, 0x00, 0x00]);\r\n\t\t// relative offset of local header\r\n\t\tdirBuffer.writeInt32(fileOffset);\r\n\t\t// file name\r\n\t\tdirBuffer.write(file.name, \"ascii\");\r\n\t\tdirBuffers.push(dirBuffer.buf);\r\n\t\ttotalDirLength += dirBuffer.buf.length;\r\n\r\n\t\t// update offset\r\n\t\tfileOffset += fileBuffer.buf.length + data.length;\r\n\t}\r\n\r\n\t/// * `archive.add(_, entry)`  \r\n\t///   Adds an entry to the archive.  \r\n\t///   If the entry is `{ name: \"...\", path: \"...\" }`,\r\n\t///   the `path` file or directory (and all its contents) is added to the archive.  \r\n\t///   If the entry is `{ name: \"...\", data: ... }`,\r\n\t///   the `data` buffer (no string allowed!) is added to the archive.  \r\n\t///   You may also specify a `date` in the entry.  \r\n\t///   You can also pass an array of entries instead of a single entry.  \r\n\t///   Returns `this` for chaining\r\n\t/// \r\n\tthis.add = function(_, entry) {\r\n\t\tif (Array.isArray(entry)) {\r\n\t\t\tentry.forEach_(_, this.add.bind(this));\r\n\t\t} else {\r\n\t\t\tif (entry.data == null) {\r\n\t\t\t\tvar stat = fs.stat(entry.path, _);\r\n\t\t\t\tif (stat.isDirectory()) {\r\n\t\t\t\t\tfs.readdir(entry.path, _).forEach_(_, function(_, n) {\r\n\t\t\t\t\t\tif (options.filter && !options.filter(_, n, entry)) return;\r\n\t\t\t\t\t\tthis.add(_, {\r\n\t\t\t\t\t\t\tname: entry.name ? entry.name + \"/\" + n : n,\r\n\t\t\t\t\t\t\tpath: entry.path + \"/\" + n,\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}, this);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar data = fs.readFile(entry.path, _);\r\n\t\t\t\t\tif (options.transform) data = options.transform(_, data, entry);\r\n\t\t\t\t\tadd(_, {\r\n\t\t\t\t\t\tname: entry.name,\r\n\t\t\t\t\t\tdata: data,\r\n\t\t\t\t\t\tdate: entry.date || fs.stat(entry.path, _).mtime\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t} else { // data provided by caller\r\n\t\t\t\tif (!Buffer.isBuffer(entry.data)) \r\n\t\t\t\t\tthrow new TypeError(\"'data' content of entry must be a buffer\");\r\n\t\t\t\tadd(_, {\r\n\t\t\t\t\tname: entry.name,\r\n\t\t\t\t\tdata: entry.data,\r\n\t\t\t\t\tdate: entry.date || new Date()\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/// * `archive.finish(_)`  \r\n\t///   Writes the trailer at the end of the archive.  \r\n\t///   Returns `this` for chaining.\r\n\t/// \r\n\tthis.finish = function(_) {\r\n\t\tvar totalFileLength = fileOffset;\r\n\r\n\t\tdirBuffers.forEach_(_, function(_, b) {\r\n\t\t\tos.write(_, b);\r\n\t\t});\r\n\r\n\t\tvar dirEnd = new RollingBuffer(8 + 2 + 2 + 4 + 4 + 2);\r\n\t\twriteBytes(dirEnd, [0x50, 0x4b, 0x05, 0x06, 0x00, 0x00, 0x00, 0x00]);\r\n\t\t// total number of entries\r\n\t\tdirEnd.writeInt16(dirBuffers.length);\r\n\t\tdirEnd.writeInt16(dirBuffers.length);\r\n\t\t// directory lengths\r\n\t\tdirEnd.writeInt32(totalDirLength);\r\n\t\t// file lengths\r\n\t\tdirEnd.writeInt32(totalFileLength);\r\n\t\t// and the end of file\r\n\t\twriteBytes(dirEnd, [0x00, 0x00]);\r\n\r\n\t\tos.write(_, dirEnd.buf);\r\n\t\tos.write(_);\r\n\t\t// auto-close if wrapped automatically\r\n\t\tif (os !== outStream && os.close) os.close(_);\r\n\t\treturn this;\r\n\t};\r\n};\r\n\r\n/// * `zipMethod: zip.store`  \r\n///   _store_ method (no compression)\r\n/// \r\nexports.store = {\r\n\tindicator: [0x00, 0x00],\r\n\tcompress: function(content, _) {\r\n\t\treturn content;\r\n\t}\r\n};\r\n\r\n/// * `zipMethod: zip.deflate`  \r\n///   _deflate_ method (standard compression)\r\n/// \r\nexports.deflate = {\r\n\tindicator: [0x08, 0x00],\r\n\tcompress: function(content, _) {\r\n\t\treturn zlib.deflateRaw(content, _);\r\n\t}\r\n};\r\n\r\nfunction crc32(buf) {\r\n\tif (!buf || !buf.length) {\r\n\t\treturn [0x00, 0x00, 0x00, 0x00];\r\n\t}\r\n\tvar table = [0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433, 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777, 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D];\r\n\tvar crc = 0 ^ -1;\r\n\tfor (var ix = 0; ix < buf.length; ix++) {\r\n\t\tvar offset = (crc ^ buf[ix]) & 0xFF;\r\n\t\tcrc = (crc >>> 8) ^ table[offset];\r\n\t}\r\n\treturn crc ^ -1;\r\n}\r\n\r\nfunction writeBytes(target, data) {\r\n\tfor (var ix = 0; ix < data.length; ix++) {\r\n\t\ttarget.writeInt8(data[ix]);\r\n\t}\r\n}"
	]
}