UNPKG

openfl

Version:

A fast, productive library for 2D cross-platform development.

170 lines (153 loc) 4.8 kB
// Class: haxe.zip.Reader var $global = typeof window != "undefined" ? window : typeof global != "undefined" ? global : typeof self != "undefined" ? self : this $global.Object.defineProperty(exports, "__esModule", {value: true}); var __map_reserved = {}; // Imports var $hxClasses = require("./../../hxClasses_stub").default; var $hxEnums = require("./../../hxEnums_stub").default; var $import = require("./../../import_stub").default; function haxe_ds_List() {return require("./../../haxe/ds/List");} function js__$Boot_HaxeError() {return require("./../../js/_Boot/HaxeError");} function haxe_io_BytesBuffer() {return require("./../../haxe/io/BytesBuffer");} function haxe_zip_ExtraField() {return require("./../../haxe/zip/ExtraField");} function haxe_io_Bytes() {return require("./../../haxe/io/Bytes");} function haxe_zip_InflateImpl() {return require("./../../haxe/zip/InflateImpl");} // Constructor var Reader = function(i) { this.i = i; } // Meta Reader.__name__ = "haxe.zip.Reader"; Reader.__isInterface__ = false; Reader.prototype = { readZipDate: function() { var t = this.i.readUInt16(); var hour = t >> 11 & 31; var min = t >> 5 & 63; var sec = t & 31; var d = this.i.readUInt16(); var year = d >> 9; var month = d >> 5 & 15; var day = d & 31; return new Date(year + 1980,month - 1,day,hour,min,sec << 1); }, readExtraFields: function(length) { var fields = new (haxe_ds_List().default)(); while(length > 0) { if(length < 4) { throw new (js__$Boot_HaxeError().default)("Invalid extra fields data"); } var tag = this.i.readUInt16(); var len = this.i.readUInt16(); if(length < len) { throw new (js__$Boot_HaxeError().default)("Invalid extra fields data"); } if(tag == 28789) { var version = this.i.readByte(); if(version != 1) { var data = new (haxe_io_BytesBuffer().default)(); data.addByte(version); data.add(this.i.read(len - 1)); fields.add((haxe_zip_ExtraField().default).FUnknown(tag,data.getBytes())); } else { var crc = this.i.readInt32(); var name = this.i.read(len - 5).toString(); fields.add((haxe_zip_ExtraField().default).FInfoZipUnicodePath(name,crc)); } } else { fields.add((haxe_zip_ExtraField().default).FUnknown(tag,this.i.read(len))); } length -= 4 + len; } return fields; }, readEntryHeader: function() { var i = this.i; var h = i.readInt32(); if(h == 33639248 || h == 101010256) { return null; } if(h != 67324752) { throw new (js__$Boot_HaxeError().default)("Invalid Zip Data"); } var version = i.readUInt16(); var flags = i.readUInt16(); var utf8 = (flags & 2048) != 0; if((flags & 63473) != 0) { throw new (js__$Boot_HaxeError().default)("Unsupported flags " + flags); } var compression = i.readUInt16(); var compressed = compression != 0; if(compressed && compression != 8) { throw new (js__$Boot_HaxeError().default)("Unsupported compression " + compression); } var mtime = this.readZipDate(); var crc32 = i.readInt32(); var csize = i.readInt32(); var usize = i.readInt32(); var fnamelen = i.readInt16(); var elen = i.readInt16(); var fname = i.readString(fnamelen); var fields = this.readExtraFields(elen); if(utf8) { fields.push((haxe_zip_ExtraField().default).FUtf8); } var data = null; if((flags & 8) != 0) { crc32 = null; } return { fileName : fname, fileSize : usize, fileTime : mtime, compressed : compressed, dataSize : csize, data : data, crc32 : crc32, extraFields : fields}; }, read: function() { var l = new (haxe_ds_List().default)(); var buf = null; var tmp = null; while(true) { var e = this.readEntryHeader(); if(e == null) { break; } if(e.crc32 == null) { if(e.compressed) { var bufSize = 65536; if(tmp == null) { tmp = (haxe_io_Bytes().default).alloc(bufSize); } var out = new (haxe_io_BytesBuffer().default)(); var z = new (haxe_zip_InflateImpl().default)(this.i,false,false); while(true) { var n = z.readBytes(tmp,0,bufSize); out.addBytes(tmp,0,n); if(n < bufSize) { break; } } e.data = out.getBytes(); } else { e.data = this.i.read(e.dataSize); } e.crc32 = this.i.readInt32(); if(e.crc32 == 134695760) { e.crc32 = this.i.readInt32(); } e.dataSize = this.i.readInt32(); e.fileSize = this.i.readInt32(); e.dataSize = e.fileSize; e.compressed = false; } else { e.data = this.i.read(e.dataSize); } l.add(e); } return l; } }; Reader.prototype.__class__ = Reader.prototype.constructor = $hxClasses["haxe.zip.Reader"] = Reader; // Init // Statics Reader.readZip = function(i) { var r = new Reader(i); return r.read(); } // Export exports.default = Reader;