{"version":3,"sources":["zipper.ts"],"names":["deflateRaw","bufferCrc32","dateToDosTime","date","d","Date","getDate","getMonth","getFullYear","time","Math","floor","getSeconds","getMinutes","getHours","ZipperEntryExtraField","Object","constructor","toBuffer","data","b","Buffer","alloc","writeUInt16LE","type","length","concat","initInfoZipUnix2Local","uid","gid","_initInfoZipUnix2","initInfoZipUnix2Central","initExtendedTimestampLocal","mtime","atime","ctime","_initExtendedTimestamp","initExtendedTimestampCentral","local","flags","flagsB","buffers","forEach","v","i","round","getTime","writeUInt32LE","push","writeUInt8","ZipperEntry","createExtraField","setDate","dosTime","_dateToDosTime","getPathBuffer","from","path","getCommentBuffer","comment","getExtraFieldsLocalBuffer","extraFieldsLocal","map","e","getExtraFieldsCentralBuffer","extraFieldsCentral","getLocalBuffer","pathBuffer","extraFieldsBuffer","head","signatureLocal","extractVersion","extractHostOS","compression","crc32","sizeCompressed","sizeUncompressed","getCentralBuffer","commentBuffer","signatureCentral","createVersion","createHostOS","diskNumberStart","internalAttributes","externalAttributes","headerOffsetLocal","initData","compress","_bufferCrc32","comp","_zlibDeflateRaw","r","addExtraFieldsExtendedTimestamp","efl","efc","addExtraFieldsInfoZipUnix2","unsigned","Promise","resolve","reject","err","Zipper","output","_output","createEntry","getDirectoryBuffer","_offset","entries","directoryData","end","signature","addEntry","entry","Error","_writeOutput","close","write"],"mappings":"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","sourcesContent":["/* eslint-disable max-classes-per-file */\n\nimport {Writable} from 'stream';\nimport {deflateRaw} from 'zlib';\n\nimport bufferCrc32 from 'buffer-crc32';\n\n/**\n * Convert Date object or timestamp to DOS date and time values.\n *\n * @param date Data object or timestamp.\n * @returns Date and time values.\n */\nfunction dateToDosTime(date: Readonly<Date> | number) {\n\tconst d = typeof date === 'number' ? new Date(date * 1000) : date;\n\treturn {\n\t\tdate: (\n\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t(d.getDate() & 0x1F) |\n\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t(((d.getMonth() + 1) & 0xF) << 5) |\n\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t(((d.getFullYear() - 1980) & 0x7F) << 9)\n\t\t),\n\t\ttime: (\n\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\tMath.floor(d.getSeconds() / 2) |\n\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t((d.getMinutes() & 0x3F) << 5) |\n\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t((d.getHours() & 0x1F) << 11)\n\t\t)\n\t};\n}\n\n/**\n * Zipper Entry Extra Field.\n */\nexport class ZipperEntryExtraField extends Object {\n\t/**\n\t * Type ID.\n\t */\n\tpublic type = 0;\n\n\t/**\n\t * Data for the type.\n\t */\n\tpublic data: Buffer | null = null;\n\n\tconstructor() {\n\t\tsuper();\n\t}\n\n\t/**\n\t * Encode type and data as buffer.\n\t *\n\t * @returns Buffer data.\n\t */\n\tpublic toBuffer() {\n\t\tconst {data} = this;\n\t\tconst b = Buffer.alloc(4);\n\t\tb.writeUInt16LE(this.type, 0);\n\t\tif (data) {\n\t\t\tb.writeUInt16LE(data.length, 2);\n\t\t}\n\t\treturn data ? Buffer.concat([b, data]) : b;\n\t}\n\n\t/**\n\t * Init Info-ZIP UNIX type 2 data, local header.\n\t *\n\t * @param uid User ID.\n\t * @param gid Group ID.\n\t */\n\tpublic initInfoZipUnix2Local(uid = 0, gid = 0) {\n\t\tthis._initInfoZipUnix2(true, uid, gid);\n\t}\n\n\t/**\n\t * Init Info-ZIP UNIX type 2 data, central header.\n\t *\n\t * @param uid User ID.\n\t * @param gid Group ID.\n\t */\n\tpublic initInfoZipUnix2Central(uid = 0, gid = 0) {\n\t\tthis._initInfoZipUnix2(false, uid, gid);\n\t}\n\n\t/**\n\t * Init Extended Timestamp data, local header.\n\t *\n\t * @param mtime Modification time.\n\t * @param atime Access time.\n\t * @param ctime Creation time.\n\t */\n\tpublic initExtendedTimestampLocal(\n\t\tmtime: Readonly<Date> | number | null = null,\n\t\tatime: Readonly<Date> | number | null = null,\n\t\tctime: Readonly<Date> | number | null = null\n\t) {\n\t\tthis._initExtendedTimestamp(true, mtime, atime, ctime);\n\t}\n\n\t/**\n\t * Init Extended Timestamp data, central header.\n\t *\n\t * @param mtime Modification time.\n\t * @param atime Access time.\n\t * @param ctime Creation time.\n\t */\n\tpublic initExtendedTimestampCentral(\n\t\tmtime: Readonly<Date> | number | null = null,\n\t\tatime: Readonly<Date> | number | null = null,\n\t\tctime: Readonly<Date> | number | null = null\n\t) {\n\t\tthis._initExtendedTimestamp(false, mtime, atime, ctime);\n\t}\n\n\t/**\n\t * Init Info-ZIP UNIX type 2 data.\n\t *\n\t * @param local Local header or central.\n\t * @param uid User ID.\n\t * @param gid Group ID.\n\t */\n\tprotected _initInfoZipUnix2(local: boolean, uid: number, gid: number) {\n\t\tconst d = local ? Buffer.alloc(4) : null;\n\t\tif (d) {\n\t\t\td.writeUInt16LE(uid, 0);\n\t\t\td.writeUInt16LE(gid, 2);\n\t\t}\n\n\t\t// Type: 'Ux'\n\t\tthis.type = 0x7855;\n\t\tthis.data = d;\n\t}\n\n\t/**\n\t * Init Extended Timestamp data.\n\t *\n\t * @param local Local header or central.\n\t * @param mtime Modification time.\n\t * @param atime Access time.\n\t * @param ctime Creation time.\n\t */\n\tprotected _initExtendedTimestamp(\n\t\tlocal: boolean,\n\t\tmtime: Readonly<Date> | number | null,\n\t\tatime: Readonly<Date> | number | null,\n\t\tctime: Readonly<Date> | number | null\n\t) {\n\t\tlet flags = 0;\n\t\tconst flagsB = Buffer.alloc(1);\n\t\tconst buffers = [flagsB];\n\t\t[mtime, atime, ctime].forEach((v, i) => {\n\t\t\tif (v === null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\tflags |= (1 << i);\n\t\t\tif (!local && !i) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst time = typeof v === 'number' ?\n\t\t\t\tv : Math.round(v.getTime() / 1000);\n\t\t\tconst b = Buffer.alloc(4);\n\t\t\tb.writeUInt32LE(time, 0);\n\t\t\tbuffers.push(b);\n\t\t});\n\t\tflagsB.writeUInt8(flags, 0);\n\n\t\t// Type: 'UT'\n\t\tthis.type = 0x5455;\n\t\tthis.data = Buffer.concat(buffers);\n\t}\n}\n\n/**\n * Zipper Entry.\n */\nexport class ZipperEntry extends Object {\n\t/**\n\t * Tag signature, local header.\n\t */\n\tpublic signatureLocal = 0x4034B50;\n\n\t/**\n\t * Tag signature, central header.\n\t */\n\tpublic signatureCentral = 0x2014B50;\n\n\t/**\n\t * Extract version.\n\t */\n\tpublic extractVersion = 0x14;\n\n\t/**\n\t * Extract host OS.\n\t */\n\tpublic extractHostOS = 0;\n\n\t/**\n\t * Create version.\n\t */\n\tpublic createVersion = 0x14;\n\n\t/**\n\t * Create host OS.\n\t */\n\tpublic createHostOS = 0;\n\n\t/**\n\t * Extract flags.\n\t */\n\tpublic flags = 0;\n\n\t/**\n\t * Compression type.\n\t */\n\tpublic compression = 0;\n\n\t/**\n\t * DOS time.\n\t */\n\tpublic time = 0;\n\n\t/**\n\t * DOS date.\n\t */\n\tpublic date = 0;\n\n\t/**\n\t * Data CRC32.\n\t */\n\tpublic crc32 = 0;\n\n\t/**\n\t * Size compressed.\n\t */\n\tpublic sizeCompressed = 0;\n\n\t/**\n\t * Size uncompressed.\n\t */\n\tpublic sizeUncompressed = 0;\n\n\t/**\n\t * Disk number start.\n\t */\n\tpublic diskNumberStart = 0;\n\n\t/**\n\t * Internal attributes.\n\t */\n\tpublic internalAttributes = 0;\n\n\t/**\n\t * External attributes.\n\t */\n\tpublic externalAttributes = 0;\n\n\t/**\n\t * Header offset, local header.\n\t */\n\tpublic headerOffsetLocal = 0;\n\n\t/**\n\t * Entry path.\n\t */\n\tpublic path = '';\n\n\t/**\n\t * Entry comment.\n\t */\n\tpublic comment = '';\n\n\t/**\n\t * Extra fields, local header.\n\t */\n\tpublic extraFieldsLocal: ZipperEntryExtraField[] = [];\n\n\t/**\n\t * Extra fields, central header.\n\t */\n\tpublic extraFieldsCentral: ZipperEntryExtraField[] = [];\n\n\tconstructor() {\n\t\tsuper();\n\t}\n\n\t/**\n\t * Create new ZipperEntryExtraField object.\n\t *\n\t * @returns ZipperEntryExtraField object.\n\t */\n\tpublic createExtraField() {\n\t\treturn new ZipperEntryExtraField();\n\t}\n\n\t/**\n\t * Set date from a date object or timestamp.\n\t *\n\t * @param date Date object or timestamp.\n\t */\n\tpublic setDate(date: Readonly<Date> | number) {\n\t\tconst dosTime = this._dateToDosTime(date);\n\t\tthis.date = dosTime.date;\n\t\tthis.time = dosTime.time;\n\t}\n\n\t/**\n\t * Get path as data.\n\t *\n\t * @returns Path as data buffer.\n\t */\n\tpublic getPathBuffer() {\n\t\treturn Buffer.from(this.path, 'utf8');\n\t}\n\n\t/**\n\t * Get comment as data.\n\t *\n\t * @returns Comment as data buffer.\n\t */\n\tpublic getCommentBuffer() {\n\t\treturn Buffer.from(this.comment, 'utf8');\n\t}\n\n\t/**\n\t * Get the file record extra fields as data.\n\t *\n\t * @returns Extra fields as data.\n\t */\n\tpublic getExtraFieldsLocalBuffer() {\n\t\treturn Buffer.concat(\n\t\t\tthis.extraFieldsLocal.map(e => e.toBuffer())\n\t\t);\n\t}\n\n\t/**\n\t * Get the director entry extra fields as data.\n\t *\n\t * @returns Extra fields as data.\n\t */\n\tpublic getExtraFieldsCentralBuffer() {\n\t\treturn Buffer.concat(\n\t\t\tthis.extraFieldsCentral.map(e => e.toBuffer())\n\t\t);\n\t}\n\n\t/**\n\t * Get file record data.\n\t *\n\t * @returns File record data.\n\t */\n\tpublic getLocalBuffer() {\n\t\tconst pathBuffer = this.getPathBuffer();\n\t\tconst extraFieldsBuffer = this.getExtraFieldsLocalBuffer();\n\n\t\tconst head = Buffer.alloc(30);\n\t\thead.writeUInt32LE(this.signatureLocal, 0);\n\t\thead.writeUInt8(this.extractVersion, 4);\n\t\thead.writeUInt8(this.extractHostOS, 5);\n\t\thead.writeUInt16LE(this.flags, 6);\n\t\thead.writeUInt16LE(this.compression, 8);\n\t\thead.writeUInt16LE(this.time, 10);\n\t\thead.writeUInt16LE(this.date, 12);\n\t\thead.writeUInt32LE(this.crc32, 14);\n\t\thead.writeUInt32LE(this.sizeCompressed, 18);\n\t\thead.writeUInt32LE(this.sizeUncompressed, 22);\n\t\thead.writeUInt16LE(pathBuffer.length, 26);\n\t\thead.writeUInt16LE(extraFieldsBuffer.length, 28);\n\n\t\treturn Buffer.concat([\n\t\t\thead,\n\t\t\tpathBuffer,\n\t\t\textraFieldsBuffer\n\t\t]);\n\t}\n\n\t/**\n\t * Get directory entry data.\n\t *\n\t * @returns Directory entry data.\n\t */\n\tpublic getCentralBuffer() {\n\t\tconst pathBuffer = this.getPathBuffer();\n\t\tconst extraFieldsBuffer = this.getExtraFieldsCentralBuffer();\n\t\tconst commentBuffer = this.getCommentBuffer();\n\n\t\tconst head = Buffer.alloc(46);\n\t\thead.writeUInt32LE(this.signatureCentral, 0);\n\t\thead.writeUInt8(this.createVersion, 4);\n\t\thead.writeUInt8(this.createHostOS, 5);\n\t\thead.writeUInt8(this.extractVersion, 6);\n\t\thead.writeUInt8(this.extractHostOS, 7);\n\t\thead.writeUInt16LE(this.flags, 8);\n\t\thead.writeUInt16LE(this.compression, 10);\n\t\thead.writeUInt16LE(this.time, 12);\n\t\thead.writeUInt16LE(this.date, 14);\n\t\thead.writeUInt32LE(this.crc32, 16);\n\t\thead.writeUInt32LE(this.sizeCompressed, 20);\n\t\thead.writeUInt32LE(this.sizeUncompressed, 24);\n\t\thead.writeUInt16LE(pathBuffer.length, 28);\n\t\thead.writeUInt16LE(extraFieldsBuffer.length, 30);\n\t\thead.writeUInt16LE(commentBuffer.length, 32);\n\t\thead.writeUInt16LE(this.diskNumberStart, 34);\n\t\thead.writeUInt16LE(this.internalAttributes, 36);\n\t\thead.writeUInt32LE(this.externalAttributes, 38);\n\t\thead.writeUInt32LE(this.headerOffsetLocal, 42);\n\n\t\treturn Buffer.concat([\n\t\t\thead,\n\t\t\tpathBuffer,\n\t\t\textraFieldsBuffer,\n\t\t\tcommentBuffer\n\t\t]);\n\t}\n\n\t/**\n\t * Setup data for entry.\n\t *\n\t * @param data Data for the entry.\n\t * @param compress Compress option, true to force, false to disable.\n\t * @returns Resulting data, or null if no data passed.\n\t */\n\tpublic async initData(\n\t\tdata: Readonly<Buffer> | null,\n\t\tcompress: boolean | null = null\n\t) {\n\t\tthis.compression = 0;\n\t\tthis.crc32 = 0;\n\t\tthis.sizeCompressed = 0;\n\t\tthis.sizeUncompressed = 0;\n\n\t\tif (!data) {\n\t\t\treturn null;\n\t\t}\n\t\tconst crc32 = this._bufferCrc32(data);\n\n\t\tif (compress === false) {\n\t\t\tthis.crc32 = crc32;\n\t\t\tthis.sizeCompressed = this.sizeUncompressed = data.length;\n\t\t\tthis.compression = 0;\n\t\t\treturn data;\n\t\t}\n\n\t\tif (compress === true) {\n\t\t\tconst comp = await this._zlibDeflateRaw(data);\n\t\t\tthis.crc32 = crc32;\n\t\t\tthis.sizeUncompressed = data.length;\n\t\t\tthis.sizeCompressed = comp.length;\n\t\t\tthis.compression = 8;\n\t\t\treturn comp;\n\t\t}\n\n\t\tconst comp = await this._zlibDeflateRaw(data);\n\t\tconst r = comp.length < data.length ? comp : data;\n\t\tthis.crc32 = crc32;\n\t\tthis.sizeUncompressed = data.length;\n\t\tthis.sizeCompressed = r.length;\n\t\tthis.compression = r === data ? 0 : 8;\n\t\treturn r;\n\t}\n\n\t/**\n\t * Add extra fields for Extended Timestamp.\n\t *\n\t * @param mtime Modification time.\n\t * @param atime Access time.\n\t * @param ctime Creation time.\n\t */\n\tpublic addExtraFieldsExtendedTimestamp(\n\t\tmtime: Readonly<Date> | number | null = null,\n\t\tatime: Readonly<Date> | number | null = null,\n\t\tctime: Readonly<Date> | number | null = null\n\t) {\n\t\tconst efl = this.createExtraField();\n\t\tefl.initExtendedTimestampLocal(mtime, atime, ctime);\n\t\tthis.extraFieldsLocal.push(efl);\n\n\t\tconst efc = this.createExtraField();\n\t\tefc.initExtendedTimestampCentral(mtime, atime, ctime);\n\t\tthis.extraFieldsCentral.push(efc);\n\t}\n\n\t/**\n\t * Add extra fields for Info-ZIP UNIX type 2.\n\t *\n\t * @param uid User ID.\n\t * @param gid Group ID.\n\t */\n\tpublic addExtraFieldsInfoZipUnix2(uid = 0, gid = 0) {\n\t\tconst efl = this.createExtraField();\n\t\tefl.initInfoZipUnix2Local(uid, gid);\n\t\tthis.extraFieldsLocal.push(efl);\n\n\t\tconst efc = this.createExtraField();\n\t\tefc.initInfoZipUnix2Central(uid, gid);\n\t\tthis.extraFieldsCentral.push(efc);\n\t}\n\n\t/**\n\t * Convert date from a date object or timestamp.\n\t *\n\t * @param date Date object or timestamp.\n\t * @returns DOS time.\n\t */\n\tprotected _dateToDosTime(date: Readonly<Date> | number) {\n\t\treturn dateToDosTime(date);\n\t}\n\n\t/**\n\t * Calculate the CRC32 hash for data.\n\t *\n\t * @param data Data to be hashed.\n\t * @returns CRC32 hash.\n\t */\n\tprotected _bufferCrc32(data: Readonly<Buffer>) {\n\t\treturn bufferCrc32.unsigned(data as Buffer);\n\t}\n\n\t/**\n\t * Zlib deflate raw data.\n\t *\n\t * @param data Data to be compressed.\n\t * @returns Compressed data.\n\t */\n\tprotected async _zlibDeflateRaw(data: Readonly<Buffer>) {\n\t\treturn new Promise<Buffer>((resolve, reject) => {\n\t\t\tdeflateRaw(data as Buffer, (err, comp) => {\n\t\t\t\tif (err) {\n\t\t\t\t\treject(err);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tresolve(comp);\n\t\t\t});\n\t\t});\n\t}\n}\n\n/**\n * Zipper, a low-level ZIP file writter.\n *\n * @param output Writable stream.\n */\nexport class Zipper extends Object {\n\t/**\n\t * Tag signature.\n\t */\n\tpublic signature = 0x6054B50;\n\n\t/**\n\t * Archive comment.\n\t */\n\tpublic comment = '';\n\n\t/**\n\t * Added entries.\n\t */\n\tpublic entries: ZipperEntry[] = [];\n\n\t/**\n\t * Current offset.\n\t */\n\tprotected _offset = 0;\n\n\t/**\n\t * Output stream.\n\t */\n\tprotected readonly _output: Writable;\n\n\tconstructor(output: Writable) {\n\t\tsuper();\n\n\t\tthis._output = output;\n\t}\n\n\t/**\n\t * Create new ZipperEntry object.\n\t *\n\t * @returns ZipperEntry object.\n\t */\n\tpublic createEntry() {\n\t\treturn new ZipperEntry();\n\t}\n\n\t/**\n\t * Get comment as data.\n\t *\n\t * @returns Comment data.\n\t */\n\tpublic getCommentBuffer() {\n\t\treturn Buffer.from(this.comment, 'utf8');\n\t}\n\n\t/**\n\t * Get directory buffer data.\n\t *\n\t * @returns Directory data.\n\t */\n\tpublic getDirectoryBuffer() {\n\t\tconst {_offset, entries} = this;\n\t\tconst directoryData = Buffer.concat(entries.map(\n\t\t\te => e.getCentralBuffer()\n\t\t));\n\t\tconst commentBuffer = this.getCommentBuffer();\n\n\t\tconst end = Buffer.alloc(22);\n\t\tend.writeUInt32LE(this.signature, 0);\n\t\tend.writeUInt16LE(0, 4);\n\t\tend.writeUInt16LE(0, 6);\n\t\tend.writeUInt16LE(entries.length, 8);\n\t\tend.writeUInt16LE(entries.length, 10);\n\t\tend.writeUInt32LE(directoryData.length, 12);\n\t\tend.writeUInt32LE(_offset, 16);\n\t\tend.writeUInt16LE(commentBuffer.length, 20);\n\n\t\treturn Buffer.concat([\n\t\t\tdirectoryData,\n\t\t\tend,\n\t\t\tcommentBuffer\n\t\t]);\n\t}\n\n\t/**\n\t * Add Entry and any associated data.\n\t *\n\t * @param entry Entry object.\n\t * @param data Data from the entry initData method.\n\t */\n\tpublic async addEntry(\n\t\tentry: ZipperEntry,\n\t\tdata: Readonly<Buffer> | null = null\n\t) {\n\t\tconst {_offset} = this;\n\t\tconst {sizeCompressed} = entry;\n\t\tif (data) {\n\t\t\tif (data.length !== sizeCompressed) {\n\t\t\t\tthrow new Error('Data length and compressed size must match');\n\t\t\t}\n\t\t}\n\t\telse if (sizeCompressed) {\n\t\t\tthrow new Error('Data required when compressed size not zero');\n\t\t}\n\t\tentry.headerOffsetLocal = _offset;\n\t\tthis.entries.push(entry);\n\t\tawait this._writeOutput(entry.getLocalBuffer());\n\t\tif (data) {\n\t\t\tawait this._writeOutput(data);\n\t\t}\n\t}\n\n\t/**\n\t * Close stream.\n\t */\n\tpublic async close() {\n\t\tawait this._writeOutput(this.getDirectoryBuffer());\n\t\tawait new Promise<void>((resolve, reject) => {\n\t\t\tthis._output.end((err: any) => {\n\t\t\t\tif (err) {\n\t\t\t\t\treject(err);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tresolve();\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Write data buffer to output stream.\n\t *\n\t * @param data Data buffer.\n\t */\n\tprotected async _writeOutput(data: Readonly<Buffer>) {\n\t\tawait new Promise<void>((resolve, reject) => {\n\t\t\tthis._output.write(data, err => {\n\t\t\t\tif (err) {\n\t\t\t\t\treject(err);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tresolve();\n\t\t\t});\n\t\t});\n\t\tthis._offset += data.length;\n\t}\n}\n"],"file":"zipper.mjs","sourceRoot":"../src"}