├── lib ├── jszip-utils.min.js └── jszip.min.js ├── main.js ├── package.json ├── panel ├── export │ ├── asset-item.js │ ├── index.js │ └── panel.html ├── import │ ├── asset-item.js │ ├── index.js │ └── panel.html └── style.css ├── parse ├── depend.js ├── export.js └── import.js ├── scene-walker.js └── utils.js /lib/jszip-utils.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | 3 | JSZipUtils - A collection of cross-browser utilities to go along with JSZip. 4 | 5 | 6 | (c) 2014 Stuart Knightley, David Duponchel 7 | Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip-utils/master/LICENSE.markdown. 8 | 9 | */ 10 | !function(a){"object"==typeof exports?module.exports=a():"function"==typeof define&&define.amd?define(a):"undefined"!=typeof window?window.JSZipUtils=a():"undefined"!=typeof global?global.JSZipUtils=a():"undefined"!=typeof self&&(self.JSZipUtils=a())}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=c[g]={exports:{}};b[g][0].call(j.exports,function(a){var c=b[g][1][a];return e(c?c:a)},j,j.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g 5 | 6 | (c) 2009-2016 Stuart Knightley 7 | Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/master/LICENSE.markdown. 8 | 9 | JSZip uses the library pako released under the MIT license : 10 | https://github.com/nodeca/pako/blob/master/LICENSE 11 | */ 12 | !function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,b.JSZip=a()}}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g>2,h=(3&b)<<4|c>>4,i=n>1?(15&c)<<2|e>>6:64,j=n>2?63&e:64,k.push(f.charAt(g)+f.charAt(h)+f.charAt(i)+f.charAt(j));return k.join("")},c.decode=function(a){var b,c,d,g,h,i,j,k=0,l=0,m="data:";if(a.substr(0,m.length)===m)throw new Error("Invalid base64 input, it looks like a data url.");a=a.replace(/[^A-Za-z0-9\+\/\=]/g,"");var n=3*a.length/4;if(a.charAt(a.length-1)===f.charAt(64)&&n--,a.charAt(a.length-2)===f.charAt(64)&&n--,n%1!==0)throw new Error("Invalid base64 input, bad content length.");var o;for(o=e.uint8array?new Uint8Array(0|n):new Array(0|n);k>4,c=(15&h)<<4|i>>2,d=(3&i)<<6|j,o[l++]=b,64!==i&&(o[l++]=c),64!==j&&(o[l++]=d);return o}},{"./support":30,"./utils":32}],2:[function(a,b,c){"use strict";function d(a,b,c,d,e){this.compressedSize=a,this.uncompressedSize=b,this.crc32=c,this.compression=d,this.compressedContent=e}var e=a("./external"),f=a("./stream/DataWorker"),g=a("./stream/DataLengthProbe"),h=a("./stream/Crc32Probe"),g=a("./stream/DataLengthProbe");d.prototype={getContentWorker:function(){var a=new f(e.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new g("data_length")),b=this;return a.on("end",function(){if(this.streamInfo.data_length!==b.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")}),a},getCompressedWorker:function(){return new f(e.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},d.createWorkerFrom=function(a,b,c){return a.pipe(new h).pipe(new g("uncompressedSize")).pipe(b.compressWorker(c)).pipe(new g("compressedSize")).withStreamInfo("compression",b)},b.exports=d},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(a,b,c){"use strict";var d=a("./stream/GenericWorker");c.STORE={magic:"\0\0",compressWorker:function(a){return new d("STORE compression")},uncompressWorker:function(){return new d("STORE decompression")}},c.DEFLATE=a("./flate")},{"./flate":7,"./stream/GenericWorker":28}],4:[function(a,b,c){"use strict";function d(){for(var a,b=[],c=0;c<256;c++){a=c;for(var d=0;d<8;d++)a=1&a?3988292384^a>>>1:a>>>1;b[c]=a}return b}function e(a,b,c,d){var e=h,f=d+c;a^=-1;for(var g=d;g>>8^e[255&(a^b[g])];return a^-1}function f(a,b,c,d){var e=h,f=d+c;a^=-1;for(var g=d;g>>8^e[255&(a^b.charCodeAt(g))];return a^-1}var g=a("./utils"),h=d();b.exports=function(a,b){if("undefined"==typeof a||!a.length)return 0;var c="string"!==g.getTypeOf(a);return c?e(0|b,a,a.length,0):f(0|b,a,a.length,0)}},{"./utils":32}],5:[function(a,b,c){"use strict";c.base64=!1,c.binary=!1,c.dir=!1,c.createFolders=!0,c.date=null,c.compression=null,c.compressionOptions=null,c.comment=null,c.unixPermissions=null,c.dosPermissions=null},{}],6:[function(a,b,c){"use strict";var d=null;d="undefined"!=typeof Promise?Promise:a("lie"),b.exports={Promise:d}},{lie:58}],7:[function(a,b,c){"use strict";function d(a,b){h.call(this,"FlateWorker/"+a),this._pako=new f[a]({raw:!0,level:b.level||-1}),this.meta={};var c=this;this._pako.onData=function(a){c.push({data:a,meta:c.meta})}}var e="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array,f=a("pako"),g=a("./utils"),h=a("./stream/GenericWorker"),i=e?"uint8array":"array";c.magic="\b\0",g.inherits(d,h),d.prototype.processChunk=function(a){this.meta=a.meta,this._pako.push(g.transformTo(i,a.data),!1)},d.prototype.flush=function(){h.prototype.flush.call(this),this._pako.push([],!0)},d.prototype.cleanUp=function(){h.prototype.cleanUp.call(this),this._pako=null},c.compressWorker=function(a){return new d("Deflate",a)},c.uncompressWorker=function(){return new d("Inflate",{})}},{"./stream/GenericWorker":28,"./utils":32,pako:59}],8:[function(a,b,c){"use strict";function d(a,b,c,d){f.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=b,this.zipPlatform=c,this.encodeFileName=d,this.streamFiles=a,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}var e=a("../utils"),f=a("../stream/GenericWorker"),g=a("../utf8"),h=a("../crc32"),i=a("../signature"),j=function(a,b){var c,d="";for(c=0;c>>=8;return d},k=function(a,b){var c=a;return a||(c=b?16893:33204),(65535&c)<<16},l=function(a,b){return 63&(a||0)},m=function(a,b,c,d,f,m){var n,o,p=a.file,q=a.compression,r=m!==g.utf8encode,s=e.transformTo("string",m(p.name)),t=e.transformTo("string",g.utf8encode(p.name)),u=p.comment,v=e.transformTo("string",m(u)),w=e.transformTo("string",g.utf8encode(u)),x=t.length!==p.name.length,y=w.length!==u.length,z="",A="",B="",C=p.dir,D=p.date,E={crc32:0,compressedSize:0,uncompressedSize:0};b&&!c||(E.crc32=a.crc32,E.compressedSize=a.compressedSize,E.uncompressedSize=a.uncompressedSize);var F=0;b&&(F|=8),r||!x&&!y||(F|=2048);var G=0,H=0;C&&(G|=16),"UNIX"===f?(H=798,G|=k(p.unixPermissions,C)):(H=20,G|=l(p.dosPermissions,C)),n=D.getUTCHours(),n<<=6,n|=D.getUTCMinutes(),n<<=5,n|=D.getUTCSeconds()/2,o=D.getUTCFullYear()-1980,o<<=4,o|=D.getUTCMonth()+1,o<<=5,o|=D.getUTCDate(),x&&(A=j(1,1)+j(h(s),4)+t,z+="up"+j(A.length,2)+A),y&&(B=j(1,1)+j(h(v),4)+w,z+="uc"+j(B.length,2)+B);var I="";I+="\n\0",I+=j(F,2),I+=q.magic,I+=j(n,2),I+=j(o,2),I+=j(E.crc32,4),I+=j(E.compressedSize,4),I+=j(E.uncompressedSize,4),I+=j(s.length,2),I+=j(z.length,2);var J=i.LOCAL_FILE_HEADER+I+s+z,K=i.CENTRAL_FILE_HEADER+j(H,2)+I+j(v.length,2)+"\0\0\0\0"+j(G,4)+j(d,4)+s+z+v;return{fileRecord:J,dirRecord:K}},n=function(a,b,c,d,f){var g="",h=e.transformTo("string",f(d));return g=i.CENTRAL_DIRECTORY_END+"\0\0\0\0"+j(a,2)+j(a,2)+j(b,4)+j(c,4)+j(h.length,2)+h},o=function(a){var b="";return b=i.DATA_DESCRIPTOR+j(a.crc32,4)+j(a.compressedSize,4)+j(a.uncompressedSize,4)};e.inherits(d,f),d.prototype.push=function(a){var b=a.meta.percent||0,c=this.entriesCount,d=this._sources.length;this.accumulate?this.contentBuffer.push(a):(this.bytesWritten+=a.data.length,f.prototype.push.call(this,{data:a.data,meta:{currentFile:this.currentFile,percent:c?(b+100*(c-d-1))/c:100}}))},d.prototype.openedSource=function(a){this.currentSourceOffset=this.bytesWritten,this.currentFile=a.file.name;var b=this.streamFiles&&!a.file.dir;if(b){var c=m(a,b,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:c.fileRecord,meta:{percent:0}})}else this.accumulate=!0},d.prototype.closedSource=function(a){this.accumulate=!1;var b=this.streamFiles&&!a.file.dir,c=m(a,b,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(c.dirRecord),b)this.push({data:o(a),meta:{percent:100}});else for(this.push({data:c.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},d.prototype.flush=function(){for(var a=this.bytesWritten,b=0;b0?a.substring(0,b):""},q=function(a){return"/"!==a.slice(-1)&&(a+="/"),a},r=function(a,b){return b="undefined"!=typeof b?b:i.createFolders,a=q(a),this.files[a]||o.call(this,a,null,{dir:!0,createFolders:b}),this.files[a]},s={load:function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},forEach:function(a){var b,c,d;for(b in this.files)this.files.hasOwnProperty(b)&&(d=this.files[b],c=b.slice(this.root.length,b.length),c&&b.slice(0,this.root.length)===this.root&&a(c,d))},filter:function(a){var b=[];return this.forEach(function(c,d){a(c,d)&&b.push(d)}),b},file:function(a,b,c){if(1===arguments.length){if(d(a)){var e=a;return this.filter(function(a,b){return!b.dir&&e.test(a)})}var f=this.files[this.root+a];return f&&!f.dir?f:null}return a=this.root+a,o.call(this,a,b,c),this},folder:function(a){if(!a)return this;if(d(a))return this.filter(function(b,c){return c.dir&&a.test(b)});var b=this.root+a,c=r.call(this,b),e=this.clone();return e.root=c.name,e},remove:function(a){a=this.root+a;var b=this.files[a];if(b||("/"!==a.slice(-1)&&(a+="/"),b=this.files[a]),b&&!b.dir)delete this.files[a];else for(var c=this.filter(function(b,c){return c.name.slice(0,a.length)===a}),d=0;d=0;--f)if(this.data[f]===b&&this.data[f+1]===c&&this.data[f+2]===d&&this.data[f+3]===e)return f-this.zero;return-1},d.prototype.readAndCheckSignature=function(a){var b=a.charCodeAt(0),c=a.charCodeAt(1),d=a.charCodeAt(2),e=a.charCodeAt(3),f=this.readData(4);return b===f[0]&&c===f[1]&&d===f[2]&&e===f[3]},d.prototype.readData=function(a){if(this.checkOffset(a),0===a)return[];var b=this.data.slice(this.zero+this.index,this.zero+this.index+a);return this.index+=a,b},b.exports=d},{"../utils":32,"./DataReader":18}],18:[function(a,b,c){"use strict";function d(a){this.data=a,this.length=a.length,this.index=0,this.zero=0}var e=a("../utils");d.prototype={checkOffset:function(a){this.checkIndex(this.index+a)},checkIndex:function(a){if(this.length=this.index;b--)c=(c<<8)+this.byteAt(b);return this.index+=a,c},readString:function(a){return e.transformTo("string",this.readData(a))},readData:function(a){},lastIndexOfSignature:function(a){},readAndCheckSignature:function(a){},readDate:function(){var a=this.readInt(4);return new Date(Date.UTC((a>>25&127)+1980,(a>>21&15)-1,a>>16&31,a>>11&31,a>>5&63,(31&a)<<1))}},b.exports=d},{"../utils":32}],19:[function(a,b,c){"use strict";function d(a){e.call(this,a)}var e=a("./Uint8ArrayReader"),f=a("../utils");f.inherits(d,e),d.prototype.readData=function(a){this.checkOffset(a);var b=this.data.slice(this.zero+this.index,this.zero+this.index+a);return this.index+=a,b},b.exports=d},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(a,b,c){"use strict";function d(a){e.call(this,a)}var e=a("./DataReader"),f=a("../utils");f.inherits(d,e),d.prototype.byteAt=function(a){return this.data.charCodeAt(this.zero+a)},d.prototype.lastIndexOfSignature=function(a){return this.data.lastIndexOf(a)-this.zero},d.prototype.readAndCheckSignature=function(a){var b=this.readData(4);return a===b},d.prototype.readData=function(a){this.checkOffset(a);var b=this.data.slice(this.zero+this.index,this.zero+this.index+a);return this.index+=a,b},b.exports=d},{"../utils":32,"./DataReader":18}],21:[function(a,b,c){"use strict";function d(a){e.call(this,a)}var e=a("./ArrayReader"),f=a("../utils");f.inherits(d,e),d.prototype.readData=function(a){if(this.checkOffset(a),0===a)return new Uint8Array(0);var b=this.data.subarray(this.zero+this.index,this.zero+this.index+a);return this.index+=a,b},b.exports=d},{"../utils":32,"./ArrayReader":17}],22:[function(a,b,c){"use strict";var d=a("../utils"),e=a("../support"),f=a("./ArrayReader"),g=a("./StringReader"),h=a("./NodeBufferReader"),i=a("./Uint8ArrayReader");b.exports=function(a){var b=d.getTypeOf(a);return d.checkSupport(b),"string"!==b||e.uint8array?"nodebuffer"===b?new h(a):e.uint8array?new i(d.transformTo("uint8array",a)):new f(d.transformTo("array",a)):new g(a)}},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(a,b,c){"use strict";c.LOCAL_FILE_HEADER="PK",c.CENTRAL_FILE_HEADER="PK",c.CENTRAL_DIRECTORY_END="PK",c.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK",c.ZIP64_CENTRAL_DIRECTORY_END="PK",c.DATA_DESCRIPTOR="PK\b"},{}],24:[function(a,b,c){"use strict";function d(a){e.call(this,"ConvertWorker to "+a),this.destType=a}var e=a("./GenericWorker"),f=a("../utils");f.inherits(d,e),d.prototype.processChunk=function(a){this.push({data:f.transformTo(this.destType,a.data),meta:a.meta})},b.exports=d},{"../utils":32,"./GenericWorker":28}],25:[function(a,b,c){"use strict";function d(){e.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}var e=a("./GenericWorker"),f=a("../crc32"),g=a("../utils");g.inherits(d,e),d.prototype.processChunk=function(a){this.streamInfo.crc32=f(a.data,this.streamInfo.crc32||0),this.push(a)},b.exports=d},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(a,b,c){"use strict";function d(a){f.call(this,"DataLengthProbe for "+a),this.propName=a,this.withStreamInfo(a,0)}var e=a("../utils"),f=a("./GenericWorker");e.inherits(d,f),d.prototype.processChunk=function(a){if(a){var b=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=b+a.data.length}f.prototype.processChunk.call(this,a)},b.exports=d},{"../utils":32,"./GenericWorker":28}],27:[function(a,b,c){"use strict";function d(a){f.call(this,"DataWorker");var b=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,a.then(function(a){b.dataIsReady=!0,b.data=a,b.max=a&&a.length||0,b.type=e.getTypeOf(a),b.isPaused||b._tickAndRepeat()},function(a){b.error(a)})}var e=a("../utils"),f=a("./GenericWorker"),g=16384;e.inherits(d,f),d.prototype.cleanUp=function(){f.prototype.cleanUp.call(this),this.data=null},d.prototype.resume=function(){return!!f.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,e.delay(this._tickAndRepeat,[],this)),!0)},d.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(e.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},d.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var a=g,b=null,c=Math.min(this.max,this.index+a);if(this.index>=this.max)return this.end();switch(this.type){case"string":b=this.data.substring(this.index,c);break;case"uint8array":b=this.data.subarray(this.index,c);break;case"array":case"nodebuffer":b=this.data.slice(this.index,c)}return this.index=c,this.push({data:b,meta:{percent:this.max?this.index/this.max*100:0}})},b.exports=d},{"../utils":32,"./GenericWorker":28}],28:[function(a,b,c){"use strict";function d(a){this.name=a||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}d.prototype={push:function(a){this.emit("data",a)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(a){this.emit("error",a)}return!0},error:function(a){return!this.isFinished&&(this.isPaused?this.generatedError=a:(this.isFinished=!0,this.emit("error",a),this.previous&&this.previous.error(a),this.cleanUp()),!0)},on:function(a,b){return this._listeners[a].push(b),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(a,b){if(this._listeners[a])for(var c=0;c "+a:a}},b.exports=d},{}],29:[function(a,b,c){"use strict";function d(a,b,c,d){var f=null;switch(a){case"blob":return h.newBlob(c,d);case"base64":return f=e(b,c),k.encode(f);default:return f=e(b,c),h.transformTo(a,f)}}function e(a,b){var c,d=0,e=null,f=0;for(c=0;c=252?6:k>=248?5:k>=240?4:k>=224?3:k>=192?2:1;j[254]=j[254]=1;var l=function(a){var b,c,d,e,f,h=a.length,i=0;for(e=0;e>>6,b[f++]=128|63&c):c<65536?(b[f++]=224|c>>>12,b[f++]=128|c>>>6&63,b[f++]=128|63&c):(b[f++]=240|c>>>18,b[f++]=128|c>>>12&63,b[f++]=128|c>>>6&63,b[f++]=128|63&c);return b},m=function(a,b){var c;for(b=b||a.length,b>a.length&&(b=a.length),c=b-1;c>=0&&128===(192&a[c]);)c--;return c<0?b:0===c?b:c+j[a[c]]>b?c:b},n=function(a){var b,c,d,e,g=a.length,h=new Array(2*g);for(c=0,b=0;b4)h[c++]=65533,b+=e-1;else{for(d&=2===e?31:3===e?15:7;e>1&&b1?h[c++]=65533:d<65536?h[c++]=d:(d-=65536,h[c++]=55296|d>>10&1023,h[c++]=56320|1023&d)}return h.length!==c&&(h.subarray?h=h.subarray(0,c):h.length=c),f.applyFromCharCode(h)};c.utf8encode=function(a){return g.nodebuffer?h.newBuffer(a,"utf-8"):l(a)},c.utf8decode=function(a){return g.nodebuffer?f.transformTo("nodebuffer",a).toString("utf-8"):(a=f.transformTo(g.uint8array?"uint8array":"array",a),n(a))},f.inherits(d,i),d.prototype.processChunk=function(a){var b=f.transformTo(g.uint8array?"uint8array":"array",a.data);if(this.leftOver&&this.leftOver.length){if(g.uint8array){var d=b;b=new Uint8Array(d.length+this.leftOver.length),b.set(this.leftOver,0),b.set(d,this.leftOver.length)}else b=this.leftOver.concat(b);this.leftOver=null}var e=m(b),h=b;e!==b.length&&(g.uint8array?(h=b.subarray(0,e),this.leftOver=b.subarray(e,b.length)):(h=b.slice(0,e),this.leftOver=b.slice(e,b.length))),this.push({data:c.utf8decode(h),meta:a.meta})},d.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:c.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},c.Utf8DecodeWorker=d,f.inherits(e,i),e.prototype.processChunk=function(a){this.push({data:c.utf8encode(a.data),meta:a.meta})},c.Utf8EncodeWorker=e},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(a,b,c){"use strict";function d(a){var b=null;return b=i.uint8array?new Uint8Array(a.length):new Array(a.length),f(a,b)}function e(a){return a}function f(a,b){for(var c=0;c1;)try{return n.stringifyByChunk(a,d,b)}catch(f){b=Math.floor(b/2)}return n.stringifyByChar(a)}function h(a,b){for(var c=0;c1)throw new Error("Multi-volumes zip are not supported")},readLocalFiles:function(){var a,b;for(a=0;a0)this.isSignature(c,g.CENTRAL_FILE_HEADER)||(this.reader.zero=e);else if(e<0)throw new Error("Corrupted zip: missing "+Math.abs(e)+" bytes.")},prepareReader:function(a){this.reader=e(a)},load:function(a){this.prepareReader(a),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}},b.exports=d},{"./reader/readerFor":22,"./signature":23,"./support":30,"./utf8":31,"./utils":32,"./zipEntry":34}],34:[function(a,b,c){"use strict";function d(a,b){this.options=a,this.loadOptions=b}var e=a("./reader/readerFor"),f=a("./utils"),g=a("./compressedObject"),h=a("./crc32"),i=a("./utf8"),j=a("./compressions"),k=a("./support"),l=0,m=3,n=function(a){for(var b in j)if(j.hasOwnProperty(b)&&j[b].magic===a)return j[b];return null};d.prototype={isEncrypted:function(){return 1===(1&this.bitFlag)},useUTF8:function(){return 2048===(2048&this.bitFlag)},readLocalPart:function(a){var b,c;if(a.skip(22),this.fileNameLength=a.readInt(2),c=a.readInt(2),this.fileName=a.readData(this.fileNameLength),a.skip(c),this.compressedSize===-1||this.uncompressedSize===-1)throw new Error("Bug or corrupted zip : didn't get enough informations from the central directory (compressedSize === -1 || uncompressedSize === -1)");if(b=n(this.compressionMethod),null===b)throw new Error("Corrupted zip : compression "+f.pretty(this.compressionMethod)+" unknown (inner file : "+f.transformTo("string",this.fileName)+")");this.decompressed=new g(this.compressedSize,this.uncompressedSize,this.crc32,b,a.readData(this.compressedSize))},readCentralPart:function(a){this.versionMadeBy=a.readInt(2),a.skip(2),this.bitFlag=a.readInt(2),this.compressionMethod=a.readString(2),this.date=a.readDate(),this.crc32=a.readInt(4),this.compressedSize=a.readInt(4),this.uncompressedSize=a.readInt(4);var b=a.readInt(2);if(this.extraFieldsLength=a.readInt(2),this.fileCommentLength=a.readInt(2),this.diskNumberStart=a.readInt(2),this.internalFileAttributes=a.readInt(2),this.externalFileAttributes=a.readInt(4),this.localHeaderOffset=a.readInt(4),this.isEncrypted())throw new Error("Encrypted zip are not supported");a.skip(b),this.readExtraFields(a),this.parseZIP64ExtraField(a),this.fileComment=a.readData(this.fileCommentLength)},processAttributes:function(){this.unixPermissions=null,this.dosPermissions=null;var a=this.versionMadeBy>>8;this.dir=!!(16&this.externalFileAttributes),a===l&&(this.dosPermissions=63&this.externalFileAttributes),a===m&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||"/"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(a){if(this.extraFields[1]){var b=e(this.extraFields[1].value);this.uncompressedSize===f.MAX_VALUE_32BITS&&(this.uncompressedSize=b.readInt(8)),this.compressedSize===f.MAX_VALUE_32BITS&&(this.compressedSize=b.readInt(8)),this.localHeaderOffset===f.MAX_VALUE_32BITS&&(this.localHeaderOffset=b.readInt(8)),this.diskNumberStart===f.MAX_VALUE_32BITS&&(this.diskNumberStart=b.readInt(4))}},readExtraFields:function(a){var b,c,d,e=a.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});a.indexc;)b.push(arguments[c++]);return q[++p]=function(){h("function"==typeof a?a:Function(a),b)},d(p),p},n=function(a){delete q[a]},"process"==a("./_cof")(l)?d=function(a){l.nextTick(g(s,a,1))}:o?(e=new o,f=e.port2,e.port1.onmessage=t,d=g(f.postMessage,f,1)):k.addEventListener&&"function"==typeof postMessage&&!k.importScripts?(d=function(a){k.postMessage(a+"","*")},k.addEventListener("message",t,!1)):d=r in j("script")?function(a){i.appendChild(j("script"))[r]=function(){i.removeChild(this),s.call(a)}}:function(a){setTimeout(g(s,a,1),0)}),b.exports={set:m,clear:n}},{"./_cof":39,"./_ctx":41,"./_dom-create":43,"./_global":46,"./_html":48,"./_invoke":50}],55:[function(a,b,c){var d=a("./_is-object");b.exports=function(a,b){if(!d(a))return a;var c,e;if(b&&"function"==typeof(c=a.toString)&&!d(e=c.call(a)))return e;if("function"==typeof(c=a.valueOf)&&!d(e=c.call(a)))return e;if(!b&&"function"==typeof(c=a.toString)&&!d(e=c.call(a)))return e;throw TypeError("Can't convert object to primitive value")}},{"./_is-object":51}],56:[function(a,b,c){var d=a("./_export"),e=a("./_task");d(d.G+d.B,{setImmediate:e.set,clearImmediate:e.clear})},{"./_export":44,"./_task":54}],57:[function(a,b,c){(function(a){"use strict";function c(){k=!0;for(var a,b,c=l.length;c;){for(b=l,l=[],a=-1;++a0?b.windowBits=-b.windowBits:b.gzip&&b.windowBits>0&&b.windowBits<16&&(b.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new l,this.strm.avail_out=0;var c=h.deflateInit2(this.strm,b.level,b.method,b.windowBits,b.memLevel,b.strategy);if(c!==p)throw new Error(k[c]);if(b.header&&h.deflateSetHeader(this.strm,b.header),b.dictionary){var e;if(e="string"==typeof b.dictionary?j.string2buf(b.dictionary):"[object ArrayBuffer]"===m.call(b.dictionary)?new Uint8Array(b.dictionary):b.dictionary,c=h.deflateSetDictionary(this.strm,e),c!==p)throw new Error(k[c]);this._dict_set=!0}}function e(a,b){var c=new d(b);if(c.push(a,!0),c.err)throw c.msg;return c.result}function f(a,b){return b=b||{},b.raw=!0,e(a,b)}function g(a,b){return b=b||{},b.gzip=!0,e(a,b)}var h=a("./zlib/deflate"),i=a("./utils/common"),j=a("./utils/strings"),k=a("./zlib/messages"),l=a("./zlib/zstream"),m=Object.prototype.toString,n=0,o=4,p=0,q=1,r=2,s=-1,t=0,u=8;d.prototype.push=function(a,b){var c,d,e=this.strm,f=this.options.chunkSize;if(this.ended)return!1;d=b===~~b?b:b===!0?o:n,"string"==typeof a?e.input=j.string2buf(a):"[object ArrayBuffer]"===m.call(a)?e.input=new Uint8Array(a):e.input=a,e.next_in=0,e.avail_in=e.input.length;do{if(0===e.avail_out&&(e.output=new i.Buf8(f),e.next_out=0,e.avail_out=f),c=h.deflate(e,d),c!==q&&c!==p)return this.onEnd(c),this.ended=!0,!1;0!==e.avail_out&&(0!==e.avail_in||d!==o&&d!==r)||("string"===this.options.to?this.onData(j.buf2binstring(i.shrinkBuf(e.output,e.next_out))):this.onData(i.shrinkBuf(e.output,e.next_out)))}while((e.avail_in>0||0===e.avail_out)&&c!==q);return d===o?(c=h.deflateEnd(this.strm),this.onEnd(c),this.ended=!0,c===p):d!==r||(this.onEnd(p),e.avail_out=0,!0)},d.prototype.onData=function(a){this.chunks.push(a)},d.prototype.onEnd=function(a){a===p&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=i.flattenChunks(this.chunks)),this.chunks=[],this.err=a,this.msg=this.strm.msg},c.Deflate=d,c.deflate=e,c.deflateRaw=f,c.gzip=g},{"./utils/common":62,"./utils/strings":63,"./zlib/deflate":67,"./zlib/messages":72,"./zlib/zstream":74}],61:[function(a,b,c){"use strict";function d(a){if(!(this instanceof d))return new d(a);this.options=h.assign({chunkSize:16384,windowBits:0,to:""},a||{});var b=this.options;b.raw&&b.windowBits>=0&&b.windowBits<16&&(b.windowBits=-b.windowBits,0===b.windowBits&&(b.windowBits=-15)),!(b.windowBits>=0&&b.windowBits<16)||a&&a.windowBits||(b.windowBits+=32),b.windowBits>15&&b.windowBits<48&&0===(15&b.windowBits)&&(b.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new l,this.strm.avail_out=0;var c=g.inflateInit2(this.strm,b.windowBits);if(c!==j.Z_OK)throw new Error(k[c]);this.header=new m,g.inflateGetHeader(this.strm,this.header)}function e(a,b){var c=new d(b);if(c.push(a,!0),c.err)throw c.msg;return c.result}function f(a,b){return b=b||{},b.raw=!0,e(a,b)}var g=a("./zlib/inflate"),h=a("./utils/common"),i=a("./utils/strings"),j=a("./zlib/constants"),k=a("./zlib/messages"),l=a("./zlib/zstream"),m=a("./zlib/gzheader"),n=Object.prototype.toString;d.prototype.push=function(a,b){var c,d,e,f,k,l,m=this.strm,o=this.options.chunkSize,p=this.options.dictionary,q=!1;if(this.ended)return!1;d=b===~~b?b:b===!0?j.Z_FINISH:j.Z_NO_FLUSH,"string"==typeof a?m.input=i.binstring2buf(a):"[object ArrayBuffer]"===n.call(a)?m.input=new Uint8Array(a):m.input=a,m.next_in=0,m.avail_in=m.input.length;do{if(0===m.avail_out&&(m.output=new h.Buf8(o),m.next_out=0,m.avail_out=o),c=g.inflate(m,j.Z_NO_FLUSH),c===j.Z_NEED_DICT&&p&&(l="string"==typeof p?i.string2buf(p):"[object ArrayBuffer]"===n.call(p)?new Uint8Array(p):p,c=g.inflateSetDictionary(this.strm,l)),c===j.Z_BUF_ERROR&&q===!0&&(c=j.Z_OK,q=!1),c!==j.Z_STREAM_END&&c!==j.Z_OK)return this.onEnd(c),this.ended=!0,!1;m.next_out&&(0!==m.avail_out&&c!==j.Z_STREAM_END&&(0!==m.avail_in||d!==j.Z_FINISH&&d!==j.Z_SYNC_FLUSH)||("string"===this.options.to?(e=i.utf8border(m.output,m.next_out),f=m.next_out-e,k=i.buf2string(m.output,e),m.next_out=f,m.avail_out=o-f,f&&h.arraySet(m.output,m.output,e,f,0),this.onData(k)):this.onData(h.shrinkBuf(m.output,m.next_out)))),0===m.avail_in&&0===m.avail_out&&(q=!0)}while((m.avail_in>0||0===m.avail_out)&&c!==j.Z_STREAM_END);return c===j.Z_STREAM_END&&(d=j.Z_FINISH),d===j.Z_FINISH?(c=g.inflateEnd(this.strm),this.onEnd(c),this.ended=!0,c===j.Z_OK):d!==j.Z_SYNC_FLUSH||(this.onEnd(j.Z_OK),m.avail_out=0,!0)},d.prototype.onData=function(a){this.chunks.push(a)},d.prototype.onEnd=function(a){a===j.Z_OK&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=h.flattenChunks(this.chunks)),this.chunks=[],this.err=a,this.msg=this.strm.msg},c.Inflate=d,c.inflate=e,c.inflateRaw=f,c.ungzip=e},{"./utils/common":62,"./utils/strings":63,"./zlib/constants":65,"./zlib/gzheader":68,"./zlib/inflate":70,"./zlib/messages":72,"./zlib/zstream":74}],62:[function(a,b,c){"use strict";var d="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Int32Array;c.assign=function(a){for(var b=Array.prototype.slice.call(arguments,1);b.length;){var c=b.shift();if(c){if("object"!=typeof c)throw new TypeError(c+"must be non-object");for(var d in c)c.hasOwnProperty(d)&&(a[d]=c[d])}}return a},c.shrinkBuf=function(a,b){return a.length===b?a:a.subarray?a.subarray(0,b):(a.length=b,a)};var e={arraySet:function(a,b,c,d,e){if(b.subarray&&a.subarray)return void a.set(b.subarray(c,c+d),e);for(var f=0;f=252?6:j>=248?5:j>=240?4:j>=224?3:j>=192?2:1;i[254]=i[254]=1,c.string2buf=function(a){var b,c,d,f,g,h=a.length,i=0;for(f=0;f>>6,b[g++]=128|63&c):c<65536?(b[g++]=224|c>>>12,b[g++]=128|c>>>6&63,b[g++]=128|63&c):(b[g++]=240|c>>>18,b[g++]=128|c>>>12&63,b[g++]=128|c>>>6&63,b[g++]=128|63&c);return b},c.buf2binstring=function(a){return d(a,a.length)},c.binstring2buf=function(a){for(var b=new e.Buf8(a.length),c=0,d=b.length;c4)j[e++]=65533,c+=g-1;else{for(f&=2===g?31:3===g?15:7;g>1&&c1?j[e++]=65533:f<65536?j[e++]=f:(f-=65536,j[e++]=55296|f>>10&1023,j[e++]=56320|1023&f)}return d(j,e)},c.utf8border=function(a,b){var c;for(b=b||a.length,b>a.length&&(b=a.length),c=b-1;c>=0&&128===(192&a[c]);)c--;return c<0?b:0===c?b:c+i[a[c]]>b?c:b}},{"./common":62}],64:[function(a,b,c){"use strict";function d(a,b,c,d){for(var e=65535&a|0,f=a>>>16&65535|0,g=0;0!==c;){g=c>2e3?2e3:c,c-=g;do e=e+b[d++]|0,f=f+e|0;while(--g);e%=65521,f%=65521}return e|f<<16|0}b.exports=d},{}],65:[function(a,b,c){"use strict";b.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],66:[function(a,b,c){"use strict";function d(){ 14 | for(var a,b=[],c=0;c<256;c++){a=c;for(var d=0;d<8;d++)a=1&a?3988292384^a>>>1:a>>>1;b[c]=a}return b}function e(a,b,c,d){var e=f,g=d+c;a^=-1;for(var h=d;h>>8^e[255&(a^b[h])];return a^-1}var f=d();b.exports=e},{}],67:[function(a,b,c){"use strict";function d(a,b){return a.msg=I[b],b}function e(a){return(a<<1)-(a>4?9:0)}function f(a){for(var b=a.length;--b>=0;)a[b]=0}function g(a){var b=a.state,c=b.pending;c>a.avail_out&&(c=a.avail_out),0!==c&&(E.arraySet(a.output,b.pending_buf,b.pending_out,c,a.next_out),a.next_out+=c,b.pending_out+=c,a.total_out+=c,a.avail_out-=c,b.pending-=c,0===b.pending&&(b.pending_out=0))}function h(a,b){F._tr_flush_block(a,a.block_start>=0?a.block_start:-1,a.strstart-a.block_start,b),a.block_start=a.strstart,g(a.strm)}function i(a,b){a.pending_buf[a.pending++]=b}function j(a,b){a.pending_buf[a.pending++]=b>>>8&255,a.pending_buf[a.pending++]=255&b}function k(a,b,c,d){var e=a.avail_in;return e>d&&(e=d),0===e?0:(a.avail_in-=e,E.arraySet(b,a.input,a.next_in,e,c),1===a.state.wrap?a.adler=G(a.adler,b,e,c):2===a.state.wrap&&(a.adler=H(a.adler,b,e,c)),a.next_in+=e,a.total_in+=e,e)}function l(a,b){var c,d,e=a.max_chain_length,f=a.strstart,g=a.prev_length,h=a.nice_match,i=a.strstart>a.w_size-la?a.strstart-(a.w_size-la):0,j=a.window,k=a.w_mask,l=a.prev,m=a.strstart+ka,n=j[f+g-1],o=j[f+g];a.prev_length>=a.good_match&&(e>>=2),h>a.lookahead&&(h=a.lookahead);do if(c=b,j[c+g]===o&&j[c+g-1]===n&&j[c]===j[f]&&j[++c]===j[f+1]){f+=2,c++;do;while(j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&fg){if(a.match_start=b,g=d,d>=h)break;n=j[f+g-1],o=j[f+g]}}while((b=l[b&k])>i&&0!==--e);return g<=a.lookahead?g:a.lookahead}function m(a){var b,c,d,e,f,g=a.w_size;do{if(e=a.window_size-a.lookahead-a.strstart,a.strstart>=g+(g-la)){E.arraySet(a.window,a.window,g,g,0),a.match_start-=g,a.strstart-=g,a.block_start-=g,c=a.hash_size,b=c;do d=a.head[--b],a.head[b]=d>=g?d-g:0;while(--c);c=g,b=c;do d=a.prev[--b],a.prev[b]=d>=g?d-g:0;while(--c);e+=g}if(0===a.strm.avail_in)break;if(c=k(a.strm,a.window,a.strstart+a.lookahead,e),a.lookahead+=c,a.lookahead+a.insert>=ja)for(f=a.strstart-a.insert,a.ins_h=a.window[f],a.ins_h=(a.ins_h<a.pending_buf_size-5&&(c=a.pending_buf_size-5);;){if(a.lookahead<=1){if(m(a),0===a.lookahead&&b===J)return ua;if(0===a.lookahead)break}a.strstart+=a.lookahead,a.lookahead=0;var d=a.block_start+c;if((0===a.strstart||a.strstart>=d)&&(a.lookahead=a.strstart-d,a.strstart=d,h(a,!1),0===a.strm.avail_out))return ua;if(a.strstart-a.block_start>=a.w_size-la&&(h(a,!1),0===a.strm.avail_out))return ua}return a.insert=0,b===M?(h(a,!0),0===a.strm.avail_out?wa:xa):a.strstart>a.block_start&&(h(a,!1),0===a.strm.avail_out)?ua:ua}function o(a,b){for(var c,d;;){if(a.lookahead=ja&&(a.ins_h=(a.ins_h<=ja)if(d=F._tr_tally(a,a.strstart-a.match_start,a.match_length-ja),a.lookahead-=a.match_length,a.match_length<=a.max_lazy_match&&a.lookahead>=ja){a.match_length--;do a.strstart++,a.ins_h=(a.ins_h<=ja&&(a.ins_h=(a.ins_h<4096)&&(a.match_length=ja-1)),a.prev_length>=ja&&a.match_length<=a.prev_length){e=a.strstart+a.lookahead-ja,d=F._tr_tally(a,a.strstart-1-a.prev_match,a.prev_length-ja),a.lookahead-=a.prev_length-1,a.prev_length-=2;do++a.strstart<=e&&(a.ins_h=(a.ins_h<=ja&&a.strstart>0&&(e=a.strstart-1,d=g[e],d===g[++e]&&d===g[++e]&&d===g[++e])){f=a.strstart+ka;do;while(d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&ea.lookahead&&(a.match_length=a.lookahead)}if(a.match_length>=ja?(c=F._tr_tally(a,1,a.match_length-ja),a.lookahead-=a.match_length,a.strstart+=a.match_length,a.match_length=0):(c=F._tr_tally(a,0,a.window[a.strstart]),a.lookahead--,a.strstart++),c&&(h(a,!1),0===a.strm.avail_out))return ua}return a.insert=0,b===M?(h(a,!0),0===a.strm.avail_out?wa:xa):a.last_lit&&(h(a,!1),0===a.strm.avail_out)?ua:va}function r(a,b){for(var c;;){if(0===a.lookahead&&(m(a),0===a.lookahead)){if(b===J)return ua;break}if(a.match_length=0,c=F._tr_tally(a,0,a.window[a.strstart]),a.lookahead--,a.strstart++,c&&(h(a,!1),0===a.strm.avail_out))return ua}return a.insert=0,b===M?(h(a,!0),0===a.strm.avail_out?wa:xa):a.last_lit&&(h(a,!1),0===a.strm.avail_out)?ua:va}function s(a,b,c,d,e){this.good_length=a,this.max_lazy=b,this.nice_length=c,this.max_chain=d,this.func=e}function t(a){a.window_size=2*a.w_size,f(a.head),a.max_lazy_match=D[a.level].max_lazy,a.good_match=D[a.level].good_length,a.nice_match=D[a.level].nice_length,a.max_chain_length=D[a.level].max_chain,a.strstart=0,a.block_start=0,a.lookahead=0,a.insert=0,a.match_length=a.prev_length=ja-1,a.match_available=0,a.ins_h=0}function u(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=$,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new E.Buf16(2*ha),this.dyn_dtree=new E.Buf16(2*(2*fa+1)),this.bl_tree=new E.Buf16(2*(2*ga+1)),f(this.dyn_ltree),f(this.dyn_dtree),f(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new E.Buf16(ia+1),this.heap=new E.Buf16(2*ea+1),f(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new E.Buf16(2*ea+1),f(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function v(a){var b;return a&&a.state?(a.total_in=a.total_out=0,a.data_type=Z,b=a.state,b.pending=0,b.pending_out=0,b.wrap<0&&(b.wrap=-b.wrap),b.status=b.wrap?na:sa,a.adler=2===b.wrap?0:1,b.last_flush=J,F._tr_init(b),O):d(a,Q)}function w(a){var b=v(a);return b===O&&t(a.state),b}function x(a,b){return a&&a.state?2!==a.state.wrap?Q:(a.state.gzhead=b,O):Q}function y(a,b,c,e,f,g){if(!a)return Q;var h=1;if(b===T&&(b=6),e<0?(h=0,e=-e):e>15&&(h=2,e-=16),f<1||f>_||c!==$||e<8||e>15||b<0||b>9||g<0||g>X)return d(a,Q);8===e&&(e=9);var i=new u;return a.state=i,i.strm=a,i.wrap=h,i.gzhead=null,i.w_bits=e,i.w_size=1<N||b<0)return a?d(a,Q):Q;if(h=a.state,!a.output||!a.input&&0!==a.avail_in||h.status===ta&&b!==M)return d(a,0===a.avail_out?S:Q);if(h.strm=a,c=h.last_flush,h.last_flush=b,h.status===na)if(2===h.wrap)a.adler=0,i(h,31),i(h,139),i(h,8),h.gzhead?(i(h,(h.gzhead.text?1:0)+(h.gzhead.hcrc?2:0)+(h.gzhead.extra?4:0)+(h.gzhead.name?8:0)+(h.gzhead.comment?16:0)),i(h,255&h.gzhead.time),i(h,h.gzhead.time>>8&255),i(h,h.gzhead.time>>16&255),i(h,h.gzhead.time>>24&255),i(h,9===h.level?2:h.strategy>=V||h.level<2?4:0),i(h,255&h.gzhead.os),h.gzhead.extra&&h.gzhead.extra.length&&(i(h,255&h.gzhead.extra.length),i(h,h.gzhead.extra.length>>8&255)),h.gzhead.hcrc&&(a.adler=H(a.adler,h.pending_buf,h.pending,0)),h.gzindex=0,h.status=oa):(i(h,0),i(h,0),i(h,0),i(h,0),i(h,0),i(h,9===h.level?2:h.strategy>=V||h.level<2?4:0),i(h,ya),h.status=sa);else{var m=$+(h.w_bits-8<<4)<<8,n=-1;n=h.strategy>=V||h.level<2?0:h.level<6?1:6===h.level?2:3,m|=n<<6,0!==h.strstart&&(m|=ma),m+=31-m%31,h.status=sa,j(h,m),0!==h.strstart&&(j(h,a.adler>>>16),j(h,65535&a.adler)),a.adler=1}if(h.status===oa)if(h.gzhead.extra){for(k=h.pending;h.gzindex<(65535&h.gzhead.extra.length)&&(h.pending!==h.pending_buf_size||(h.gzhead.hcrc&&h.pending>k&&(a.adler=H(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending!==h.pending_buf_size));)i(h,255&h.gzhead.extra[h.gzindex]),h.gzindex++;h.gzhead.hcrc&&h.pending>k&&(a.adler=H(a.adler,h.pending_buf,h.pending-k,k)),h.gzindex===h.gzhead.extra.length&&(h.gzindex=0,h.status=pa)}else h.status=pa;if(h.status===pa)if(h.gzhead.name){k=h.pending;do{if(h.pending===h.pending_buf_size&&(h.gzhead.hcrc&&h.pending>k&&(a.adler=H(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending===h.pending_buf_size)){l=1;break}l=h.gzindexk&&(a.adler=H(a.adler,h.pending_buf,h.pending-k,k)),0===l&&(h.gzindex=0,h.status=qa)}else h.status=qa;if(h.status===qa)if(h.gzhead.comment){k=h.pending;do{if(h.pending===h.pending_buf_size&&(h.gzhead.hcrc&&h.pending>k&&(a.adler=H(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending===h.pending_buf_size)){l=1;break}l=h.gzindexk&&(a.adler=H(a.adler,h.pending_buf,h.pending-k,k)),0===l&&(h.status=ra)}else h.status=ra;if(h.status===ra&&(h.gzhead.hcrc?(h.pending+2>h.pending_buf_size&&g(a),h.pending+2<=h.pending_buf_size&&(i(h,255&a.adler),i(h,a.adler>>8&255),a.adler=0,h.status=sa)):h.status=sa),0!==h.pending){if(g(a),0===a.avail_out)return h.last_flush=-1,O}else if(0===a.avail_in&&e(b)<=e(c)&&b!==M)return d(a,S);if(h.status===ta&&0!==a.avail_in)return d(a,S);if(0!==a.avail_in||0!==h.lookahead||b!==J&&h.status!==ta){var o=h.strategy===V?r(h,b):h.strategy===W?q(h,b):D[h.level].func(h,b);if(o!==wa&&o!==xa||(h.status=ta),o===ua||o===wa)return 0===a.avail_out&&(h.last_flush=-1),O;if(o===va&&(b===K?F._tr_align(h):b!==N&&(F._tr_stored_block(h,0,0,!1),b===L&&(f(h.head),0===h.lookahead&&(h.strstart=0,h.block_start=0,h.insert=0))),g(a),0===a.avail_out))return h.last_flush=-1,O}return b!==M?O:h.wrap<=0?P:(2===h.wrap?(i(h,255&a.adler),i(h,a.adler>>8&255),i(h,a.adler>>16&255),i(h,a.adler>>24&255),i(h,255&a.total_in),i(h,a.total_in>>8&255),i(h,a.total_in>>16&255),i(h,a.total_in>>24&255)):(j(h,a.adler>>>16),j(h,65535&a.adler)),g(a),h.wrap>0&&(h.wrap=-h.wrap),0!==h.pending?O:P)}function B(a){var b;return a&&a.state?(b=a.state.status,b!==na&&b!==oa&&b!==pa&&b!==qa&&b!==ra&&b!==sa&&b!==ta?d(a,Q):(a.state=null,b===sa?d(a,R):O)):Q}function C(a,b){var c,d,e,g,h,i,j,k,l=b.length;if(!a||!a.state)return Q;if(c=a.state,g=c.wrap,2===g||1===g&&c.status!==na||c.lookahead)return Q;for(1===g&&(a.adler=G(a.adler,b,l,0)),c.wrap=0,l>=c.w_size&&(0===g&&(f(c.head),c.strstart=0,c.block_start=0,c.insert=0),k=new E.Buf8(c.w_size),E.arraySet(k,b,l-c.w_size,c.w_size,0),b=k,l=c.w_size),h=a.avail_in,i=a.next_in,j=a.input,a.avail_in=l,a.next_in=0,a.input=b,m(c);c.lookahead>=ja;){d=c.strstart,e=c.lookahead-(ja-1);do c.ins_h=(c.ins_h<>>24,p>>>=w,q-=w,w=v>>>16&255,0===w)C[h++]=65535&v;else{if(!(16&w)){if(0===(64&w)){v=r[(65535&v)+(p&(1<>>=w,q-=w),q<15&&(p+=B[f++]<>>24,p>>>=w,q-=w,w=v>>>16&255,!(16&w)){if(0===(64&w)){v=s[(65535&v)+(p&(1<k){a.msg="invalid distance too far back",c.mode=d;break a}if(p>>>=w,q-=w,w=h-i,y>w){if(w=y-w,w>m&&c.sane){a.msg="invalid distance too far back",c.mode=d;break a}if(z=0,A=o,0===n){if(z+=l-w,w2;)C[h++]=A[z++],C[h++]=A[z++],C[h++]=A[z++],x-=3;x&&(C[h++]=A[z++],x>1&&(C[h++]=A[z++]))}else{z=h-y;do C[h++]=C[z++],C[h++]=C[z++],C[h++]=C[z++],x-=3;while(x>2);x&&(C[h++]=C[z++],x>1&&(C[h++]=C[z++]))}break}}break}}while(f>3,f-=x,q-=x<<3,p&=(1<>>24&255)+(a>>>8&65280)+((65280&a)<<8)+((255&a)<<24)}function e(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new s.Buf16(320),this.work=new s.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function f(a){var b;return a&&a.state?(b=a.state,a.total_in=a.total_out=b.total=0,a.msg="",b.wrap&&(a.adler=1&b.wrap),b.mode=L,b.last=0,b.havedict=0,b.dmax=32768,b.head=null,b.hold=0,b.bits=0,b.lencode=b.lendyn=new s.Buf32(pa),b.distcode=b.distdyn=new s.Buf32(qa),b.sane=1,b.back=-1,D):G}function g(a){var b;return a&&a.state?(b=a.state,b.wsize=0,b.whave=0,b.wnext=0,f(a)):G}function h(a,b){var c,d;return a&&a.state?(d=a.state,b<0?(c=0,b=-b):(c=(b>>4)+1,b<48&&(b&=15)),b&&(b<8||b>15)?G:(null!==d.window&&d.wbits!==b&&(d.window=null),d.wrap=c,d.wbits=b,g(a))):G}function i(a,b){var c,d;return a?(d=new e,a.state=d,d.window=null,c=h(a,b),c!==D&&(a.state=null),c):G}function j(a){return i(a,sa)}function k(a){if(ta){var b;for(q=new s.Buf32(512),r=new s.Buf32(32),b=0;b<144;)a.lens[b++]=8;for(;b<256;)a.lens[b++]=9;for(;b<280;)a.lens[b++]=7;for(;b<288;)a.lens[b++]=8;for(w(y,a.lens,0,288,q,0,a.work,{bits:9}),b=0;b<32;)a.lens[b++]=5;w(z,a.lens,0,32,r,0,a.work,{bits:5}),ta=!1}a.lencode=q,a.lenbits=9,a.distcode=r,a.distbits=5}function l(a,b,c,d){var e,f=a.state;return null===f.window&&(f.wsize=1<=f.wsize?(s.arraySet(f.window,b,c-f.wsize,f.wsize,0),f.wnext=0,f.whave=f.wsize):(e=f.wsize-f.wnext,e>d&&(e=d),s.arraySet(f.window,b,c-d,e,f.wnext),d-=e,d?(s.arraySet(f.window,b,c-d,d,0),f.wnext=d,f.whave=f.wsize):(f.wnext+=e,f.wnext===f.wsize&&(f.wnext=0),f.whave>>8&255,c.check=u(c.check,Ba,2,0),m=0,n=0,c.mode=M;break}if(c.flags=0,c.head&&(c.head.done=!1),!(1&c.wrap)||(((255&m)<<8)+(m>>8))%31){a.msg="incorrect header check",c.mode=ma;break}if((15&m)!==K){a.msg="unknown compression method",c.mode=ma;break}if(m>>>=4,n-=4,wa=(15&m)+8,0===c.wbits)c.wbits=wa;else if(wa>c.wbits){a.msg="invalid window size",c.mode=ma;break}c.dmax=1<>8&1),512&c.flags&&(Ba[0]=255&m,Ba[1]=m>>>8&255,c.check=u(c.check,Ba,2,0)),m=0,n=0,c.mode=N;case N:for(;n<32;){if(0===i)break a;i--,m+=e[g++]<>>8&255,Ba[2]=m>>>16&255,Ba[3]=m>>>24&255,c.check=u(c.check,Ba,4,0)),m=0,n=0,c.mode=O;case O:for(;n<16;){if(0===i)break a;i--,m+=e[g++]<>8),512&c.flags&&(Ba[0]=255&m,Ba[1]=m>>>8&255,c.check=u(c.check,Ba,2,0)),m=0,n=0,c.mode=P;case P:if(1024&c.flags){for(;n<16;){if(0===i)break a;i--,m+=e[g++]<>>8&255,c.check=u(c.check,Ba,2,0)),m=0,n=0}else c.head&&(c.head.extra=null);c.mode=Q;case Q:if(1024&c.flags&&(q=c.length,q>i&&(q=i),q&&(c.head&&(wa=c.head.extra_len-c.length,c.head.extra||(c.head.extra=new Array(c.head.extra_len)),s.arraySet(c.head.extra,e,g,q,wa)),512&c.flags&&(c.check=u(c.check,e,q,g)),i-=q,g+=q,c.length-=q),c.length))break a;c.length=0,c.mode=R;case R:if(2048&c.flags){if(0===i)break a;q=0;do wa=e[g+q++],c.head&&wa&&c.length<65536&&(c.head.name+=String.fromCharCode(wa));while(wa&&q>9&1,c.head.done=!0),a.adler=c.check=0,c.mode=W;break;case U:for(;n<32;){if(0===i)break a;i--,m+=e[g++]<>>=7&n,n-=7&n,c.mode=ja;break}for(;n<3;){if(0===i)break a;i--,m+=e[g++]<>>=1,n-=1,3&m){case 0:c.mode=Y;break;case 1:if(k(c),c.mode=ca,b===C){m>>>=2,n-=2;break a}break;case 2:c.mode=_;break;case 3:a.msg="invalid block type",c.mode=ma}m>>>=2,n-=2;break;case Y:for(m>>>=7&n,n-=7&n;n<32;){if(0===i)break a;i--,m+=e[g++]<>>16^65535)){a.msg="invalid stored block lengths",c.mode=ma;break}if(c.length=65535&m,m=0,n=0,c.mode=Z,b===C)break a;case Z:c.mode=$;case $:if(q=c.length){if(q>i&&(q=i),q>j&&(q=j),0===q)break a;s.arraySet(f,e,g,q,h),i-=q,g+=q,j-=q,h+=q,c.length-=q;break}c.mode=W;break;case _:for(;n<14;){if(0===i)break a;i--,m+=e[g++]<>>=5,n-=5,c.ndist=(31&m)+1,m>>>=5,n-=5,c.ncode=(15&m)+4,m>>>=4,n-=4,c.nlen>286||c.ndist>30){a.msg="too many length or distance symbols",c.mode=ma;break}c.have=0,c.mode=aa;case aa:for(;c.have>>=3,n-=3}for(;c.have<19;)c.lens[Ca[c.have++]]=0;if(c.lencode=c.lendyn,c.lenbits=7,ya={bits:c.lenbits},xa=w(x,c.lens,0,19,c.lencode,0,c.work,ya),c.lenbits=ya.bits,xa){a.msg="invalid code lengths set",c.mode=ma;break}c.have=0,c.mode=ba;case ba:for(;c.have>>24,ra=Aa>>>16&255,sa=65535&Aa,!(qa<=n);){if(0===i)break a;i--,m+=e[g++]<>>=qa,n-=qa,c.lens[c.have++]=sa;else{if(16===sa){for(za=qa+2;n>>=qa,n-=qa,0===c.have){a.msg="invalid bit length repeat",c.mode=ma;break}wa=c.lens[c.have-1],q=3+(3&m),m>>>=2,n-=2}else if(17===sa){for(za=qa+3;n>>=qa,n-=qa,wa=0,q=3+(7&m),m>>>=3,n-=3}else{for(za=qa+7;n>>=qa,n-=qa,wa=0,q=11+(127&m),m>>>=7,n-=7}if(c.have+q>c.nlen+c.ndist){a.msg="invalid bit length repeat",c.mode=ma;break}for(;q--;)c.lens[c.have++]=wa}}if(c.mode===ma)break;if(0===c.lens[256]){a.msg="invalid code -- missing end-of-block",c.mode=ma;break}if(c.lenbits=9,ya={bits:c.lenbits},xa=w(y,c.lens,0,c.nlen,c.lencode,0,c.work,ya),c.lenbits=ya.bits,xa){a.msg="invalid literal/lengths set",c.mode=ma;break}if(c.distbits=6,c.distcode=c.distdyn,ya={bits:c.distbits},xa=w(z,c.lens,c.nlen,c.ndist,c.distcode,0,c.work,ya),c.distbits=ya.bits,xa){a.msg="invalid distances set",c.mode=ma;break}if(c.mode=ca,b===C)break a;case ca:c.mode=da;case da:if(i>=6&&j>=258){a.next_out=h,a.avail_out=j,a.next_in=g,a.avail_in=i,c.hold=m,c.bits=n,v(a,p),h=a.next_out,f=a.output,j=a.avail_out,g=a.next_in,e=a.input,i=a.avail_in,m=c.hold,n=c.bits,c.mode===W&&(c.back=-1);break}for(c.back=0;Aa=c.lencode[m&(1<>>24,ra=Aa>>>16&255,sa=65535&Aa,!(qa<=n);){if(0===i)break a;i--,m+=e[g++]<>ta)],qa=Aa>>>24,ra=Aa>>>16&255,sa=65535&Aa,!(ta+qa<=n);){if(0===i)break a;i--,m+=e[g++]<>>=ta,n-=ta,c.back+=ta}if(m>>>=qa,n-=qa,c.back+=qa,c.length=sa,0===ra){c.mode=ia;break}if(32&ra){c.back=-1,c.mode=W;break}if(64&ra){a.msg="invalid literal/length code",c.mode=ma;break}c.extra=15&ra,c.mode=ea;case ea:if(c.extra){for(za=c.extra;n>>=c.extra,n-=c.extra,c.back+=c.extra}c.was=c.length,c.mode=fa;case fa:for(;Aa=c.distcode[m&(1<>>24,ra=Aa>>>16&255,sa=65535&Aa,!(qa<=n);){if(0===i)break a;i--,m+=e[g++]<>ta)],qa=Aa>>>24,ra=Aa>>>16&255,sa=65535&Aa,!(ta+qa<=n);){if(0===i)break a;i--,m+=e[g++]<>>=ta,n-=ta,c.back+=ta}if(m>>>=qa,n-=qa,c.back+=qa,64&ra){a.msg="invalid distance code",c.mode=ma;break}c.offset=sa,c.extra=15&ra,c.mode=ga;case ga:if(c.extra){for(za=c.extra;n>>=c.extra,n-=c.extra,c.back+=c.extra}if(c.offset>c.dmax){a.msg="invalid distance too far back",c.mode=ma;break}c.mode=ha;case ha:if(0===j)break a;if(q=p-j,c.offset>q){if(q=c.offset-q,q>c.whave&&c.sane){a.msg="invalid distance too far back",c.mode=ma;break}q>c.wnext?(q-=c.wnext,r=c.wsize-q):r=c.wnext-q,q>c.length&&(q=c.length),pa=c.window}else pa=f,r=h-c.offset,q=c.length;q>j&&(q=j),j-=q,c.length-=q;do f[h++]=pa[r++];while(--q);0===c.length&&(c.mode=da);break;case ia:if(0===j)break a;f[h++]=c.length,j--,c.mode=da;break;case ja:if(c.wrap){for(;n<32;){if(0===i)break a;i--,m|=e[g++]<=1&&0===P[G];G--);if(H>G&&(H=G),0===G)return p[q++]=20971520,p[q++]=20971520,s.bits=1,0;for(F=1;F0&&(a===h||1!==G))return-1;for(Q[1]=0,D=1;Df||a===j&&L>g)return 1;for(var T=0;;){T++,z=D-J,r[E]y?(A=R[S+r[E]],B=N[O+r[E]]):(A=96,B=0),t=1<>J)+u]=z<<24|A<<16|B|0;while(0!==u);for(t=1<>=1;if(0!==t?(M&=t-1,M+=t):M=0,E++,0===--P[D]){if(D===G)break;D=b[c+r[E]]}if(D>H&&(M&w)!==v){for(0===J&&(J=H),x+=F,I=D-J,K=1<f||a===j&&L>g)return 1;v=M&w,p[v]=H<<24|I<<16|x-q|0}}return 0!==M&&(p[x+M]=D-J<<24|64<<16|0),s.bits=H,0}},{"../utils/common":62}],72:[function(a,b,c){"use strict";b.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],73:[function(a,b,c){"use strict";function d(a){for(var b=a.length;--b>=0;)a[b]=0}function e(a,b,c,d,e){this.static_tree=a,this.extra_bits=b,this.extra_base=c,this.elems=d,this.max_length=e,this.has_stree=a&&a.length}function f(a,b){this.dyn_tree=a,this.max_code=0,this.stat_desc=b}function g(a){return a<256?ia[a]:ia[256+(a>>>7)]}function h(a,b){a.pending_buf[a.pending++]=255&b,a.pending_buf[a.pending++]=b>>>8&255}function i(a,b,c){a.bi_valid>X-c?(a.bi_buf|=b<>X-a.bi_valid,a.bi_valid+=c-X):(a.bi_buf|=b<>>=1,c<<=1;while(--b>0);return c>>>1}function l(a){16===a.bi_valid?(h(a,a.bi_buf),a.bi_buf=0,a.bi_valid=0):a.bi_valid>=8&&(a.pending_buf[a.pending++]=255&a.bi_buf,a.bi_buf>>=8,a.bi_valid-=8)}function m(a,b){var c,d,e,f,g,h,i=b.dyn_tree,j=b.max_code,k=b.stat_desc.static_tree,l=b.stat_desc.has_stree,m=b.stat_desc.extra_bits,n=b.stat_desc.extra_base,o=b.stat_desc.max_length,p=0;for(f=0;f<=W;f++)a.bl_count[f]=0;for(i[2*a.heap[a.heap_max]+1]=0,c=a.heap_max+1;co&&(f=o,p++),i[2*d+1]=f,d>j||(a.bl_count[f]++,g=0,d>=n&&(g=m[d-n]),h=i[2*d],a.opt_len+=h*(f+g),l&&(a.static_len+=h*(k[2*d+1]+g)));if(0!==p){do{for(f=o-1;0===a.bl_count[f];)f--;a.bl_count[f]--,a.bl_count[f+1]+=2,a.bl_count[o]--,p-=2}while(p>0);for(f=o;0!==f;f--)for(d=a.bl_count[f];0!==d;)e=a.heap[--c],e>j||(i[2*e+1]!==f&&(a.opt_len+=(f-i[2*e+1])*i[2*e],i[2*e+1]=f),d--)}}function n(a,b,c){var d,e,f=new Array(W+1),g=0; 15 | for(d=1;d<=W;d++)f[d]=g=g+c[d-1]<<1;for(e=0;e<=b;e++){var h=a[2*e+1];0!==h&&(a[2*e]=k(f[h]++,h))}}function o(){var a,b,c,d,f,g=new Array(W+1);for(c=0,d=0;d>=7;d8?h(a,a.bi_buf):a.bi_valid>0&&(a.pending_buf[a.pending++]=a.bi_buf),a.bi_buf=0,a.bi_valid=0}function r(a,b,c,d){q(a),d&&(h(a,c),h(a,~c)),G.arraySet(a.pending_buf,a.window,b,c,a.pending),a.pending+=c}function s(a,b,c,d){var e=2*b,f=2*c;return a[e]>1;c>=1;c--)t(a,f,c);e=i;do c=a.heap[1],a.heap[1]=a.heap[a.heap_len--],t(a,f,1),d=a.heap[1],a.heap[--a.heap_max]=c,a.heap[--a.heap_max]=d,f[2*e]=f[2*c]+f[2*d],a.depth[e]=(a.depth[c]>=a.depth[d]?a.depth[c]:a.depth[d])+1,f[2*c+1]=f[2*d+1]=e,a.heap[1]=e++,t(a,f,1);while(a.heap_len>=2);a.heap[--a.heap_max]=a.heap[1],m(a,b),n(f,j,a.bl_count)}function w(a,b,c){var d,e,f=-1,g=b[1],h=0,i=7,j=4;for(0===g&&(i=138,j=3),b[2*(c+1)+1]=65535,d=0;d<=c;d++)e=g,g=b[2*(d+1)+1],++h=3&&0===a.bl_tree[2*ea[b]+1];b--);return a.opt_len+=3*(b+1)+5+5+4,b}function z(a,b,c,d){var e;for(i(a,b-257,5),i(a,c-1,5),i(a,d-4,4),e=0;e>>=1)if(1&c&&0!==a.dyn_ltree[2*b])return I;if(0!==a.dyn_ltree[18]||0!==a.dyn_ltree[20]||0!==a.dyn_ltree[26])return J;for(b=32;b0?(a.strm.data_type===K&&(a.strm.data_type=A(a)),v(a,a.l_desc),v(a,a.d_desc),g=y(a),e=a.opt_len+3+7>>>3,f=a.static_len+3+7>>>3,f<=e&&(e=f)):e=f=c+5,c+4<=e&&b!==-1?C(a,b,c,d):a.strategy===H||f===e?(i(a,(M<<1)+(d?1:0),3),u(a,ga,ha)):(i(a,(N<<1)+(d?1:0),3),z(a,a.l_desc.max_code+1,a.d_desc.max_code+1,g+1),u(a,a.dyn_ltree,a.dyn_dtree)),p(a),d&&q(a)}function F(a,b,c){return a.pending_buf[a.d_buf+2*a.last_lit]=b>>>8&255,a.pending_buf[a.d_buf+2*a.last_lit+1]=255&b,a.pending_buf[a.l_buf+a.last_lit]=255&c,a.last_lit++,0===b?a.dyn_ltree[2*c]++:(a.matches++,b--,a.dyn_ltree[2*(ja[c]+R+1)]++,a.dyn_dtree[2*g(b)]++),a.last_lit===a.lit_bufsize-1}var G=a("../utils/common"),H=4,I=0,J=1,K=2,L=0,M=1,N=2,O=3,P=258,Q=29,R=256,S=R+1+Q,T=30,U=19,V=2*S+1,W=15,X=16,Y=7,Z=256,$=16,_=17,aa=18,ba=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],ca=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],da=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],ea=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],fa=512,ga=new Array(2*(S+2));d(ga);var ha=new Array(2*T);d(ha);var ia=new Array(fa);d(ia);var ja=new Array(P-O+1);d(ja);var ka=new Array(Q);d(ka);var la=new Array(T);d(la);var ma,na,oa,pa=!1;c._tr_init=B,c._tr_stored_block=C,c._tr_flush_block=E,c._tr_tally=F,c._tr_align=D},{"../utils/common":62}],74:[function(a,b,c){"use strict";function d(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}b.exports=d},{}]},{},[10])(10)}); -------------------------------------------------------------------------------- /main.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = { 4 | load: function () {}, 5 | 6 | unload: function () {}, 7 | 8 | messages: { 9 | export () { 10 | Editor.Panel.open('package-asset.export'); 11 | Editor.Metrics.trackEvent({ 12 | category: 'Packages', 13 | label: 'package-asset', 14 | action: 'Export Asset' 15 | }, null); 16 | }, 17 | 18 | import () { 19 | Editor.Panel.open('package-asset.import'); 20 | Editor.Metrics.trackEvent({ 21 | category: 'Packages', 22 | label: 'package-asset', 23 | action: 'Import Asset' 24 | }, null); 25 | } 26 | } 27 | }; -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "package-asset", 3 | "version": "0.0.1", 4 | "description": "导入导出资源插件", 5 | "author": "Knox", 6 | "main": "main.js", 7 | "scene-script": "scene-walker.js", 8 | "panel.export": { 9 | "main": "panel/export/index.js", 10 | "type": "dockable", 11 | "title": "Export Asset", 12 | "min-width": 400, 13 | "max-width": 400, 14 | "width": 400, 15 | "min-height": 480, 16 | "max-height": 480, 17 | "height": 480, 18 | 19 | "profiles": { 20 | "local": { 21 | "current-resource": "", 22 | "export-resource-path": "", 23 | "select-all": false, 24 | "folded-all": true 25 | } 26 | } 27 | }, 28 | 29 | "panel.import": { 30 | "main": "panel/import/index.js", 31 | "type": "dockable", 32 | "title": "Import Asset", 33 | "min-width": 450, 34 | "max-width": 450, 35 | "width": 450, 36 | "min-height": 510, 37 | "max-height": 510, 38 | "height": 510, 39 | "profiles": { 40 | "local": { 41 | "import-folder-path": "", 42 | "out-path": "" 43 | } 44 | } 45 | } 46 | } -------------------------------------------------------------------------------- /panel/export/asset-item.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.template = ` 4 | 5 |
6 |
7 | 8 | 9 | 10 | {{assettree ? assettree.name : ''}} 11 |
12 | 13 |
14 |
15 | 16 | 17 |

{{item.name}}

18 |
19 | 20 |
21 |
22 | 23 | `; 24 | 25 | exports.props = ['assettree']; 26 | 27 | exports.created = function () { 28 | this._clickCheckbox = false; 29 | }; 30 | 31 | exports.methods = { 32 | 33 | // 统一修改一个文件下的所以资源的选择状态 34 | _setFileSelectd: function (assettree, val) { 35 | assettree.selected = val; 36 | assettree.children && assettree.children.forEach((file)=>{ 37 | this._setFileSelectd(file, val); 38 | }); 39 | }, 40 | 41 | _onDirectorySelectClick: function (event) { 42 | event.stopPropagation(); 43 | this._clickCheckbox = true; 44 | this._setFileSelectd(this.assettree, event.detail.value); 45 | }, 46 | 47 | _folded () { 48 | return this.assettree ? this.assettree.folded : true; 49 | }, 50 | 51 | _isDirectory (item) { 52 | return item.type === 'directory'; 53 | }, 54 | 55 | _foldIconClass () { 56 | if (this.assettree && this.assettree.folded) 57 | return 'fa fa-caret-down'; 58 | 59 | return 'fa fa-caret-right'; 60 | }, 61 | 62 | _onDbFoldItemClick (item) { 63 | Editor.Ipc.sendToAll('assets:hint', item.info.uuid); 64 | }, 65 | 66 | _clickFold (event) { 67 | this._onStopDefault(event); 68 | this.assettree.folded = !this.assettree.folded; 69 | this.$root._changedAssetTreeFoldedState(); 70 | }, 71 | 72 | _onFoldClick (event) { 73 | this._clickCheckbox = false; 74 | this._clickFold(event); 75 | }, 76 | 77 | _onStopDefault (event) { 78 | event.stopPropagation(); 79 | event.preventDefault(); 80 | }, 81 | 82 | _onDbFoldClick (event) { 83 | if (this._clickCheckbox) { 84 | return; 85 | } 86 | this._clickFold(event); 87 | } 88 | }; 89 | -------------------------------------------------------------------------------- /panel/export/index.js: -------------------------------------------------------------------------------- 1 | var Electron = require('electron'); 2 | var Fs = require('fire-fs'); 3 | var Path = require('fire-path'); 4 | 5 | var Utils = Editor.require('packages://package-asset/utils.js'); 6 | var Export = Editor.require('packages://package-asset/parse/export.js'); 7 | var Depend = Editor.require('packages://package-asset/parse/depend.js'); 8 | var JSZip = Editor.require('packages://package-asset/lib/jszip.min.js'); 9 | var jsZip = new JSZip(); 10 | 11 | let ASSET_ITEM = Editor.require('packages://package-asset/panel/export/asset-item.js'); 12 | 13 | Vue.component('package-export-asset-item', ASSET_ITEM); 14 | 15 | Editor.Panel.extend({ 16 | 17 | style: Fs.readFileSync(Editor.url('packages://package-asset/panel/style.css')) + '', 18 | template: Fs.readFileSync(Editor.url('packages://package-asset/panel/export/panel.html')) + '', 19 | 20 | ready () { 21 | Utils.init(this.profiles); 22 | let vm = this._vm = new window.Vue({ 23 | el: this.shadowRoot, 24 | 25 | created () { 26 | // this.assetUuid = '988a02bf-0b53-4709-a52a-9090224558bc'; 27 | }, 28 | 29 | data: { 30 | assetUuid: '', 31 | assetTree: null, 32 | foldedAll: Utils.getDataByKey('folded-all'), 33 | allAssets: [] 34 | }, 35 | 36 | watch: { 37 | assetUuid: { 38 | handler (val) { 39 | this.allAssets.length = 0; 40 | if (!val) { 41 | this.assetTree = null; 42 | return; 43 | } 44 | this._queryDependAsset(val); 45 | } 46 | } 47 | }, 48 | 49 | methods: { 50 | 51 | T: Editor.T, 52 | 53 | // 显示进度条 54 | _showLoadBar () { 55 | return this.assetUuid && !this.assetTree; 56 | }, 57 | 58 | // 是否显示内容 59 | _showContent () { 60 | return this.assetUuid && this.assetTree; 61 | }, 62 | 63 | // 是否禁用 64 | _isDisabled () { 65 | return this.assetUuid === '' || this.allAssets.length === 0; 66 | }, 67 | 68 | // 设置是否展开 69 | _setAssetTreeFolded (assetTree, val) { 70 | if (assetTree.folded !== undefined) { 71 | assetTree.folded = val; 72 | } 73 | assetTree.children && assetTree.children.forEach((file) => { 74 | if (file.type === 'directory') { 75 | this._setAssetTreeFolded(file, val); 76 | } 77 | }); 78 | }, 79 | 80 | // 获取是否展开 81 | _getAssetTreeFolded (assetTree, self) { 82 | if (assetTree.folded !== undefined && !assetTree.folded) { 83 | self.foldedAll = false; 84 | return; 85 | } 86 | assetTree.children && assetTree.children.forEach((file)=>{ 87 | if (file.type === 'directory') { 88 | this._getAssetTreeFolded(file, self); 89 | } 90 | }); 91 | }, 92 | 93 | _changedAssetTreeFoldedState (val) { 94 | if (val === undefined) { 95 | this.foldedAll = true; 96 | this._getAssetTreeFolded(this.assetTree, this); 97 | return; 98 | } 99 | this._setAssetTreeFolded(this.assetTree, val); 100 | this.foldedAll = val; 101 | }, 102 | 103 | // 选择场景 104 | onChooseScene (event) { 105 | Utils.showExportResDialog((err, data) => { 106 | this.assetUuid = data.uuid; 107 | }); 108 | }, 109 | 110 | // 获取 Asset 依赖的 uuid 111 | _queryDependAsset (uuid) { 112 | Editor.Scene.callSceneScript('package-asset', 'query-depend-asset', uuid, (err, uuidList) => { 113 | if (err) { 114 | return; 115 | } 116 | Export.queryAssetTreeByUuidList(uuidList, (err, info) => { 117 | this.assetTree = info.assetTree; 118 | this.allAssets = info.allAssets; 119 | this._setAssetTreeFolded(info.assetTree, this.foldedAll); 120 | }); 121 | }); 122 | }, 123 | 124 | onRefresh (event) { 125 | this._queryDependAsset(this.assetUuid); 126 | }, 127 | 128 | // 修改资源 129 | onAssetChanged (event) { 130 | this.assetUuid = event.detail.value; 131 | }, 132 | 133 | onClearAll () { 134 | this.assetUuid = ''; 135 | }, 136 | 137 | // 全部展开 138 | onFoldedAll (event) { 139 | let value = event.detail.value; 140 | this._changedAssetTreeFoldedState(value); 141 | Utils.save('folded-all', value); 142 | }, 143 | 144 | // 导出 145 | onExport () { 146 | let folderList = []; 147 | // 创建文件夹 148 | function createDirectory (item) { 149 | if (item.parent.name === 'Assets') { 150 | let folder = jsZip.folder(item.name); 151 | jsZip.file(item.name + ".meta", Fs.readFileSync(item.url + ".meta")); 152 | folderList[item.name] = folder; 153 | return folder; 154 | } 155 | else { 156 | let parentFolder = folderList[item.parent.name]; 157 | if (!parentFolder) { 158 | parentFolder = createDirectory(item.parent); 159 | folderList[item.parent.name] = folder; 160 | parentFolder.file(item.name + ".meta", Fs.readFileSync(item.url + ".meta")); 161 | } 162 | let folder = parentFolder.folder(item.name); 163 | folderList[item.name] = folder; 164 | return folder 165 | } 166 | } 167 | // 文件 168 | function createFile (item) { 169 | if (item.parent.name === 'Assets') { 170 | let file = jsZip.file(item.name, Fs.readFileSync(item.url)); 171 | jsZip.file(item.name + ".meta", Fs.readFileSync(item.url + ".meta")); 172 | } 173 | else { 174 | let folder = folderList[item.parent.name]; 175 | if (!folder) { 176 | folder = createDirectory(item.parent); 177 | } 178 | let file = folder.file(item.name, Fs.readFileSync(item.url)); 179 | folder.file(item.name + ".meta", Fs.readFileSync(item.url + ".meta")); 180 | } 181 | } 182 | 183 | let config = {}; 184 | Utils.showExportOutPathDialog((err, outPath) => { 185 | if (err) { 186 | return; 187 | } 188 | 189 | let rootPath = Editor.projectInfo.path + '\\assets\\'; 190 | let path; 191 | for (let i = 0; i < this.allAssets.length; ++i) { 192 | let item = this.allAssets[i]; 193 | path = item.url.replace(rootPath, ''); 194 | if (item.type === 'directory') { 195 | createDirectory(item); 196 | } 197 | else { 198 | createFile(item); 199 | config[item.name] = item.type; 200 | } 201 | } 202 | let parsePath = Path.parse(outPath); 203 | jsZip.file("&asset&type&.json", JSON.stringify(config)); 204 | jsZip.generateNodeStream({ type:"nodebuffer" }) 205 | .pipe(Fs.createWriteStream(outPath)) 206 | .on('finish', function () { 207 | let outTips = Editor.T('EXPORT_ASSET.export_tips', {outPath: outPath}); 208 | Editor.log(outTips); 209 | }); 210 | 211 | Electron.shell.showItemInFolder(outPath); 212 | }); 213 | } 214 | } 215 | }); 216 | } 217 | }); 218 | -------------------------------------------------------------------------------- /panel/export/panel.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 |

{{T('EXPORT_ASSET.title')}}

5 |
6 |

{{T('EXPORT_ASSET.asset')}}

7 | 11 | 12 | {{T('EXPORT_ASSET.select_path')}} 13 | {{T('EXPORT_ASSET.clear_all')}} 14 |
15 |
16 | 17 |
18 | 19 |

{{T('EXPORT_ASSET.content_tips')}}

20 | Loading 21 | 23 | 24 |
25 |
26 | 27 |
28 | {{T('EXPORT_ASSET.folded_all')}} 32 | 33 | {{T('EXPORT_ASSET.refresh')}} 35 | {{T('EXPORT_ASSET.export')}} 37 |
38 | 39 |
40 | -------------------------------------------------------------------------------- /panel/import/asset-item.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.template = ` 4 | 5 |
6 |
7 | 8 | 9 | 10 | {{filetree ? filetree.name : ''}} 11 |
12 | 13 |
14 |
15 | 16 | 17 |

{{item.name}}

18 |
19 | 20 |
21 |
22 | 23 | `; 24 | 25 | exports.props = ['filetree']; 26 | 27 | exports.created = function () { 28 | this._clickCheckbox = false; 29 | }; 30 | 31 | exports.methods = { 32 | 33 | // 统一修改一个文件下的所以资源的选择状态 34 | _setFileSelectd: function (fileTree, val) { 35 | fileTree.selected = val; 36 | fileTree.children && fileTree.children.forEach((file)=>{ 37 | this._setFileSelectd(file, val); 38 | }); 39 | }, 40 | 41 | _onDirectorySelectClick: function (event) { 42 | event.stopPropagation(); 43 | this._clickCheckbox = true; 44 | this._setFileSelectd(this.filetree, event.detail.value); 45 | }, 46 | 47 | _folded () { 48 | return this.filetree ? this.filetree.folded : true; 49 | }, 50 | 51 | _isDirectory (item) { 52 | return item.type === 'directory'; 53 | }, 54 | 55 | _foldIconClass () { 56 | if (this.filetree && this.filetree.folded) 57 | return 'fa fa-caret-down'; 58 | 59 | return 'fa fa-caret-right'; 60 | }, 61 | 62 | _clickFold (event) { 63 | this._onStopDefault(event); 64 | this.filetree.folded = !this.filetree.folded; 65 | this.$root._changedFileTreeFoldedState(); 66 | }, 67 | 68 | _onFoldClick (event) { 69 | this._clickCheckbox = false; 70 | this._clickFold(event); 71 | }, 72 | 73 | _onStopDefault (event) { 74 | event.stopPropagation(); 75 | event.preventDefault(); 76 | }, 77 | 78 | _onDbFoldClick (event) { 79 | if (this._clickCheckbox) { 80 | return; 81 | } 82 | this._clickFold(event); 83 | } 84 | }; 85 | -------------------------------------------------------------------------------- /panel/import/index.js: -------------------------------------------------------------------------------- 1 | var Electron = require('electron'); 2 | var Fs = require('fire-fs'); 3 | var Path = require('fire-path'); 4 | 5 | var Utils = Editor.require('packages://package-asset/utils.js'); 6 | var Import = Editor.require('packages://package-asset/parse/import.js'); 7 | var JSZipUtils = Editor.require('packages://package-asset/lib/jszip-utils.min.js'); 8 | var JSZip = Editor.require('packages://package-asset/lib/jszip.min.js'); 9 | var jsZip = new JSZip(); 10 | 11 | let ASSET_ITEM = Editor.require('packages://package-asset/panel/import/asset-item.js'); 12 | 13 | Vue.component('package-import-asset-item', ASSET_ITEM); 14 | 15 | Editor.Panel.extend({ 16 | 17 | style: Fs.readFileSync(Editor.url('packages://package-asset/panel/style.css')) + '', 18 | template: Fs.readFileSync(Editor.url('packages://package-asset/panel/import/panel.html')) + '', 19 | 20 | ready () { 21 | Utils.init(this.profiles); 22 | let vm = this._vm = new window.Vue({ 23 | el: this.shadowRoot, 24 | 25 | created () { 26 | this.metaList = []; 27 | this.outPath = Utils.getDataByKey('out-path'); 28 | this.folderPath = Utils.getDataByKey('import-folder-path'); 29 | this._lastfolderPath = ''; 30 | }, 31 | 32 | data: { 33 | outPath: '', 34 | folderPath: '', 35 | filetree: [], 36 | foldedAll: true, 37 | progress: 0, 38 | progressState: Editor.T('IMPORT_ASSET.progress_state_wait') 39 | }, 40 | 41 | watch: { 42 | folderPath: { 43 | handler (val) { 44 | Utils.save('import-folder-path', val); 45 | if (!val) { 46 | this.filetree = null; 47 | this.progressState = Editor.T('IMPORT_ASSET.progress_state_wait'); 48 | return; 49 | } 50 | console.time(); 51 | Import.onFolderParse(val, (data) => { 52 | console.timeEnd(); 53 | if (!data) { 54 | this.folderPath = this._lastfolderPath; 55 | return; 56 | } 57 | this.filetree = data.fileTree; 58 | this.metaList = data.metaList; 59 | this.progressState = Editor.T('IMPORT_ASSET.progress_state_ready'); 60 | }); 61 | } 62 | }, 63 | outPath: { 64 | handler (val) { 65 | Utils.save('out-path', val); 66 | } 67 | } 68 | }, 69 | 70 | methods: { 71 | 72 | T: Editor.T, 73 | 74 | // 是否禁用 75 | _isDisabled () { 76 | return this.folderPath === '' || this.outPath === ''; 77 | }, 78 | 79 | // 设置是否展开 80 | _setFileTreeFolded (fileTree, val) { 81 | if (fileTree.folded !== undefined) { 82 | fileTree.folded = val; 83 | } 84 | fileTree.children && fileTree.children.forEach((file) => { 85 | if (file.type === 'directory') { 86 | this._setFileTreeFolded(file, val); 87 | } 88 | }); 89 | }, 90 | 91 | // 获取是否展开 92 | _getFileTreeFolded (fileTree, self) { 93 | if (fileTree.folded !== undefined && !fileTree.folded) { 94 | self.foldedAll = false; 95 | return; 96 | } 97 | fileTree.children && fileTree.children.forEach((file)=>{ 98 | if (file.type === 'directory') { 99 | this._getFileTreeFolded(file, self); 100 | } 101 | }); 102 | }, 103 | 104 | _changedFileTreeFoldedState (val) { 105 | if (val === undefined) { 106 | this.foldedAll = true; 107 | this._getFileTreeFolded(this.filetree, this); 108 | return; 109 | } 110 | this._setFileTreeFolded(this.filetree, val); 111 | this.foldedAll = val; 112 | }, 113 | 114 | // 选择 zip 文件 115 | onChooseImportFolder (event) { 116 | Utils.showImportZipDialog((err, path) => { 117 | this._lastfolderPath = this.folderPath; 118 | this.folderPath = path; 119 | }); 120 | }, 121 | 122 | // 需要导入的目标文件 123 | onChooseOutFolder (event) { 124 | Utils.showImportOutPathDialog((err, path) => { 125 | this.outPath = path; 126 | }); 127 | }, 128 | 129 | onClearAll () { 130 | this.progress = 0; 131 | this.folderPath = ''; 132 | }, 133 | 134 | onClearOutPath () { 135 | this.outPath = ''; 136 | }, 137 | 138 | _updateProgress (idx, total, file) { 139 | let isDir = file.dir ? Editor.T('IMPORT_ASSET.folder') : Editor.T('IMPORT_ASSET.file'); 140 | let outStrLog = Editor.T('IMPORT_ASSET.progress_state_import', { name: isDir + file.name, outPath: this.outPath }); 141 | Editor.log(outStrLog); 142 | this.progress = 100 * (idx / total); 143 | this.progressState = outStrLog; 144 | if (idx >= total) { 145 | Editor.assetdb.refresh('db://assets/'); 146 | this.progressState = Editor.T('IMPORT_ASSET.progress_state_end'); 147 | } 148 | }, 149 | 150 | _import () { 151 | this.progressState = Editor.T('IMPORT_ASSET.progress_state_start'); 152 | this.progress = 0; 153 | JSZipUtils.getBinaryContent(this.folderPath, (err, data) => { 154 | if (err) { 155 | throw err; 156 | } 157 | JSZip.loadAsync(data).then((zip) => { 158 | let total = Object.keys(zip.files).length; 159 | let idx = 1; 160 | for (let key in zip.files) { 161 | let file = zip.files[key]; 162 | if (file.name === Utils.ASSET_TYPE) { 163 | continue; 164 | } 165 | let fileInfo = Path.parse(file.name); 166 | Utils.copyFolder(this.outPath + fileInfo.dir); 167 | if (!file.dir) { 168 | file.nodeStream() 169 | .pipe(Fs.createWriteStream(this.outPath + file.name)) 170 | .on('finish', () => { 171 | idx++; 172 | this._updateProgress(idx, total, file); 173 | }); 174 | } 175 | else { 176 | idx++; 177 | this._updateProgress(idx, total, file); 178 | } 179 | } 180 | }); 181 | }); 182 | }, 183 | 184 | 185 | _chackMeta () { 186 | let parseRootPath = Path.parse(this.outPath); 187 | let msg = ''; 188 | let result = true; 189 | this.metaList.forEach((info)=> { 190 | let uuid = info.meta.uuid; 191 | // 目标项目中相同 uuid 的路径 192 | let oldPath = Editor.remote.assetdb._uuid2path[uuid]; 193 | if (oldPath) { 194 | oldPath = Path.normalize(oldPath.replace(Editor.projectInfo.path + '\\', '')); 195 | let newPath = Path.normalize(parseRootPath.name + '\\' + info.path); 196 | if (oldPath !== newPath) { 197 | msg += (Path.normalize(info.path) + '\n'); 198 | result = false; 199 | } 200 | } 201 | }); 202 | return { 203 | result: result, 204 | msg: msg 205 | } 206 | }, 207 | 208 | // 导入 209 | onImport () { 210 | // 不存在文件夹就报错 211 | if (!Fs.existsSync(this.outPath)) { 212 | Utils.showErrorMessageBox(Editor.T('IMPORT_ASSET.err_title'), Editor.T('IMPORT_ASSET.err_info_not_exist', {outPath: this.outPath})); 213 | return; 214 | } 215 | // 导入的资源和项目中原有资源 uuid 相同,无法完成导入 216 | // 除非路径相同 217 | let info = this._chackMeta(); 218 | if (!info.result) { 219 | Utils.showErrorMessageBox(Editor.T('IMPORT_ASSET.err_title'), Editor.T('IMPORT_ASSET.err_info_repeat_asset', {msg: info.msg})); 220 | return; 221 | } 222 | 223 | Utils.showImportMessageBox(Editor.T('IMPORT_ASSET.confirmation_box_title'), Editor.T('IMPORT_ASSET.confirmation_box_content', {outPath: this.outPath}),(err, result) => { 224 | if (result) { 225 | this._import(); 226 | } 227 | }); 228 | } 229 | } 230 | }); 231 | } 232 | }); 233 | 234 | 235 | -------------------------------------------------------------------------------- /panel/import/panel.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 |

{{T('IMPORT_ASSET.title')}}

5 |
6 | 7 |
8 | {{progressState}} 9 |
10 |
11 |
12 |
13 | 14 | 15 | 16 | 17 | 19 | {{T('IMPORT_ASSET.select_path')}} 20 | 21 | 24 | {{T('IMPORT_ASSET.clear_all')}} 25 | 26 |
27 | 28 |
29 | 30 | 31 | 32 | 34 | {{T('IMPORT_ASSET.select_path')}} 35 | 36 | 39 | {{T('IMPORT_ASSET.clear_all')}} 40 | 41 |
42 |
43 |
44 | 45 |
46 | 47 |

{{T('IMPORT_ASSET.content_tips')}}

48 | 50 | 51 |
52 |
53 | 54 | 63 | 64 |
65 | -------------------------------------------------------------------------------- /panel/style.css: -------------------------------------------------------------------------------- 1 | 2 | @import url('app://bower_components/fontawesome/css/font-awesome.min.css'); 3 | 4 | h3 { 5 | padding: 10px 15px; 6 | 7 | margin-bottom: 5px; 8 | margin-top: 5px; 9 | 10 | border-bottom: 1px solid #656566; 11 | 12 | font-size: 18px; 13 | font-family: '微软雅黑', "Microsoft YaHei"; 14 | } 15 | 16 | .title { 17 | margin: auto; 18 | height: 30px; 19 | } 20 | 21 | .icon { 22 | margin-left: 2px; 23 | margin-right: 5px; 24 | height: 18px; 25 | width: 18px; 26 | } 27 | 28 | .asset-name { 29 | margin-top: auto; 30 | margin-bottom: auto; 31 | } 32 | 33 | .asset-scene { 34 | margin-top: auto; 35 | margin-bottom: auto; 36 | 37 | width: 150px; 38 | } 39 | 40 | .btn-brower { 41 | margin-top: auto; 42 | margin-bottom: auto; 43 | } 44 | 45 | .btn-clear { 46 | margin-top: auto; 47 | margin-bottom: auto; 48 | } 49 | 50 | 51 | .btn-selectAll { 52 | position: absolute; 53 | margin-top: 5%; 54 | margin-left: 5%; 55 | } 56 | 57 | .btn-foldedAll { 58 | position: absolute; 59 | margin-top: 5%; 60 | margin-left: 20%; 61 | } 62 | 63 | .btn-refresh { 64 | position: absolute; 65 | margin-top: 3.5%; 66 | margin-left: 55%; 67 | width: 80px; 68 | } 69 | 70 | .btn-export { 71 | position: absolute; 72 | margin-top: 3.5%; 73 | margin-left: 76%; 74 | width: 80px; 75 | } 76 | 77 | ui-box-container { 78 | background: #333; 79 | 80 | min-height: 320px; 81 | max-height: 320px; 82 | 83 | overflow-y: auto; 84 | overflow-x: hidden; 85 | } 86 | 87 | footer { 88 | margin: auto; 89 | 90 | max-width: 100%; 91 | min-height: 50px; 92 | } 93 | 94 | .item { 95 | height: 5%; 96 | margin-left: 27px; 97 | transition: transform 0.1s; 98 | transform: scale(1) 99 | } 100 | 101 | .item:hover { 102 | color: #eeede2; 103 | background-color: #a29494; 104 | /*transform: scale(1.05)*/ 105 | } 106 | 107 | .item-content { 108 | margin-left: 22px; 109 | } 110 | 111 | .item-checkbox { 112 | margin-top: auto; 113 | margin-right: 3.5px; 114 | margin-bottom: auto; 115 | } 116 | 117 | .item-img { 118 | margin-top: auto; 119 | margin-bottom: auto; 120 | 121 | margin-left: 2px; 122 | 123 | max-width: 20px; 124 | max-height: 20px; 125 | } 126 | 127 | .item-name { 128 | margin-top: auto; 129 | margin-bottom: auto; 130 | margin-left: 1%; 131 | } 132 | 133 | .wrapper { 134 | display: flex; 135 | flex-direction: row; 136 | flex-wrap: nowrap; 137 | align-items: flex-end; 138 | 139 | white-space: nowrap; 140 | height: 16px; 141 | 142 | color: #aaa; 143 | cursor: default; 144 | 145 | margin-top: 2px; 146 | 147 | /*color: rgba(255,255,255,.25)*/ 148 | } 149 | 150 | .wrapper:hover { 151 | color: #eeede2; 152 | background-color: #a29494; 153 | } 154 | 155 | #foldIcon { 156 | flex: none; 157 | 158 | font-size: 14px; 159 | width: 25px; 160 | margin-right: 2px; 161 | 162 | cursor: pointer; 163 | text-align: center; 164 | 165 | visibility: visible; 166 | } 167 | 168 | /*-------------------------------------------------------------------------*/ 169 | 170 | .folder-path { 171 | margin-top: auto; 172 | margin-bottom: auto; 173 | 174 | width: 180px; 175 | } 176 | 177 | .choosePath { 178 | margin-left: -4% 179 | } 180 | 181 | .chooseBtn { 182 | margin-left: 3px; 183 | margin-top: 4px; 184 | } 185 | 186 | .progress { 187 | position: relative; 188 | } 189 | 190 | .progress ui-progress { 191 | width: 100%; 192 | } 193 | 194 | .progressState { 195 | position: absolute; 196 | top: 0; 197 | line-height: 20px; 198 | width: 100%; 199 | overflow: hidden; 200 | text-overflow: ellipsis; 201 | text-align: center; 202 | color: white; 203 | } -------------------------------------------------------------------------------- /parse/depend.js: -------------------------------------------------------------------------------- 1 | const Fs = require('fire-fs'); 2 | const Url = require('fire-url'); 3 | const Path = require('fire-path'); 4 | const Async = require('async'); 5 | const Detective = require('detective'); 6 | 7 | let library = Editor.remote.importPath; 8 | 9 | module.exports = { 10 | 11 | // 内置资源路径 12 | INTERNAL: 'db://internal', 13 | 14 | isScript (assetType) { 15 | return assetType === 'javascript' || assetType === 'coffeescript' || assetType === 'typescript'; 16 | }, 17 | 18 | // 进行字母排序 19 | sortAssetTree (assetNode, callback) { 20 | if (!assetNode.children) { 21 | return callback(); 22 | } 23 | 24 | assetNode.children.sort((a, b) => { 25 | return (a.name + a.type) > (b.name + b.type); 26 | }); 27 | 28 | Async.each(assetNode.children, this.sortAssetTree.bind(this), callback); 29 | }, 30 | 31 | queryDependScriptByUuid (uuid, callback) { 32 | let visitedScripts = [] 33 | Editor.assetdb.queryAssets(null, null, (err, allAssets) => { 34 | this._queryDependScriptByUuid(uuid, visitedScripts, allAssets, () => { 35 | callback(null, Object.keys(visitedScripts)); 36 | }); 37 | }); 38 | }, 39 | 40 | _queryDependScriptByUuid (uuid, visitedScripts, allAssets, callback) { 41 | let visited = visitedScripts[uuid]; 42 | if (visited) { 43 | return callback(); 44 | } 45 | visitedScripts[uuid] = true; 46 | 47 | let relative = uuid.slice(0, 2) + Path.sep + uuid + '.js'; 48 | let path = Path.join(library, relative); 49 | let src = Fs.readFileSync(path, 'utf-8'); 50 | let requires = Detective(src); 51 | 52 | if (requires.length === 0) { 53 | return callback(); 54 | } 55 | else { 56 | Async.each(requires, 57 | (dependName, next) => { 58 | for (let i = 0; i < allAssets.length; ++i) { 59 | let result = allAssets[i]; 60 | if (this.isScript(result.type)) { 61 | let name = Path.basenameNoExt(result.path); 62 | if (dependName === name) { 63 | // 递归查找 64 | this._queryDependScriptByUuid(result.uuid, visitedScripts, allAssets, next); 65 | return; 66 | } 67 | } 68 | } 69 | next(); 70 | }, callback); 71 | } 72 | }, 73 | 74 | queryDependsOfRawAssetByUrl (url, callback) { 75 | let dir = Url.dirname(url); 76 | let glob = Url.join(dir, '*'); 77 | Editor.assetdb.queryAssets(glob, 'texture', (err, results) => { 78 | return callback(null, results); 79 | }); 80 | } 81 | }; -------------------------------------------------------------------------------- /parse/export.js: -------------------------------------------------------------------------------- 1 | const Url = require('fire-url'); 2 | const Async = require('async'); 3 | const Depend = require('./depend'); 4 | 5 | let visitedFolders = []; 6 | let visitedFiles = []; 7 | let allAssets = []; 8 | 9 | let ResInfo = function (info) { 10 | this.info = info; 11 | this.type = info.type || ''; 12 | this.icon = Utils.getIcon(info.uuid); 13 | this.selected = true; 14 | this.parent = null; 15 | if (info.type === 'sprite-frame') { 16 | let meta = Editor.assetdb.remote.loadMetaByUuid(info.uuid); 17 | this.url = Editor.assetdb.remote.uuidToFspath(meta.rawTextureUuid); 18 | this.name = Path.basename(this.url); 19 | } 20 | else { 21 | this.url = info.path; 22 | this.name = Path.basename(info.path); 23 | } 24 | }; 25 | 26 | let FileRoot = function (name, url) { 27 | this.name = name || ''; 28 | this.url = url || ''; 29 | this.children = []; 30 | this.type = 'directory'; 31 | this.folded = true; 32 | this.selected = true; 33 | this.parent = null; 34 | }; 35 | 36 | function _getFileInfo (url) { 37 | for (let i = 0; i < visitedFolders.length; ++i) { 38 | let file = visitedFolders[i]; 39 | if (file.url === url) { 40 | return file; 41 | } 42 | } 43 | return null; 44 | } 45 | 46 | function _hasContainRes (uuid) { 47 | return visitedFiles.indexOf(uuid) !== -1; 48 | } 49 | 50 | function _analysisUrl (idx, rootPath, assetTree, urlArr, info) { 51 | idx++; 52 | let name = urlArr[idx]; 53 | rootPath += ('\\' + name); 54 | let stat = Fs.statSync(rootPath); 55 | if (stat.isDirectory()) { 56 | let fileInfo = _getFileInfo(rootPath); 57 | if (!fileInfo) { 58 | fileInfo = new FileRoot(name, rootPath); 59 | fileInfo.parent = assetTree; 60 | assetTree.children.push(fileInfo); 61 | visitedFolders.push(fileInfo); 62 | allAssets.push(fileInfo); 63 | } 64 | _analysisUrl(idx, rootPath, fileInfo, urlArr, info); 65 | } 66 | else { 67 | if (!_hasContainRes(info.uuid)) { 68 | let resInfo = new ResInfo(info); 69 | resInfo.parent = assetTree; 70 | assetTree.children.push(resInfo); 71 | visitedFiles.push(info.uuid); 72 | allAssets.push(resInfo); 73 | } 74 | } 75 | } 76 | 77 | function _addFileAndResInfo (info, assetTree) { 78 | let url = info.url.slice('db://assets/'.length); 79 | let urlArr = url.split('/'); 80 | if (urlArr.length === 1) { 81 | let resInfo = new ResInfo(info); 82 | resInfo.parent = assetTree; 83 | assetTree.children.push(resInfo); 84 | visitedFiles.push(info.uuid); 85 | allAssets.push(resInfo); 86 | } 87 | else { 88 | let idx = -1; 89 | let rootPath = Editor.projectInfo.path + '\\assets'; 90 | _analysisUrl(idx, rootPath, assetTree, urlArr, info); 91 | } 92 | } 93 | 94 | function _onInitData () { 95 | visitedFolders = []; 96 | visitedFiles = []; 97 | allAssets = []; 98 | } 99 | 100 | module.exports = { 101 | 102 | queryAssetTreeByUuidList: function (uuidList, callback) { 103 | _onInitData(); 104 | let assetTree = new FileRoot('Assets'); 105 | Async.each(uuidList, 106 | (uuid, next) => { 107 | Editor.assetdb.queryInfoByUuid(uuid, (err, info) => { 108 | if (err) { 109 | return next(); 110 | } 111 | 112 | // 判断是否是内置资源,如果是则不需要导出 113 | if (info.url.indexOf(Depend.INTERNAL) !== -1) { 114 | return next(); 115 | } 116 | 117 | _addFileAndResInfo(info, assetTree); 118 | next(); 119 | }); 120 | }, 121 | () => { 122 | // 排序 asset tree 123 | Depend.sortAssetTree(assetTree, () => { 124 | callback(null, { 125 | assetTree: assetTree, 126 | allAssets: allAssets 127 | }); 128 | }); 129 | } 130 | ); 131 | } 132 | }; 133 | -------------------------------------------------------------------------------- /parse/import.js: -------------------------------------------------------------------------------- 1 | let directoryList = []; 2 | let allFileList = []; 3 | let assetTypeList = null; 4 | let imgList = []; 5 | let metaList = []; 6 | 7 | let ResInfo = function (path, parent) { 8 | let info = Path.parse(path); 9 | this.name = info.name + info.ext; 10 | this.path = path; 11 | this.type = assetTypeList[this.name]; 12 | if (this.type === 'texture' || this.type === 'sprite-frame') { 13 | this.icon = imgList[info.name]; 14 | } 15 | else { 16 | this.icon = 'unpack://static/icon/assets/' + this.type + '.png'; 17 | } 18 | this.selected = true; 19 | this.parent = parent; 20 | }; 21 | 22 | let FileRoot = function (path, parent) { 23 | let info = Path.parse(path); 24 | this.name = info.name; 25 | this.path = path; 26 | this.children = []; 27 | this.type = 'directory'; 28 | this.folded = true; 29 | this.selected = true; 30 | this.parent = parent; 31 | }; 32 | 33 | function _getDirectoryInfo (dir) { 34 | return directoryList[dir]; 35 | } 36 | 37 | function getParent (path) { 38 | let parseInfo = Path.parse(path); 39 | if (!parseInfo.dir) { 40 | return null; 41 | } 42 | let parent = _getDirectoryInfo(parseInfo.dir); 43 | if (!parent) { 44 | return getParent(parseInfo.dir); 45 | } 46 | return parent; 47 | } 48 | 49 | function _createFileTree (path, root) { 50 | let parseInfo = Path.parse(path); 51 | if (!parseInfo.dir && root) { 52 | if (!parseInfo.ext) { 53 | let dirInfo = new FileRoot(path, root); 54 | if (root.children.indexOf(dirInfo) === -1) { 55 | root.children.push(dirInfo); 56 | directoryList[parseInfo.name] = dirInfo; 57 | allFileList.push(dirInfo); 58 | } 59 | } 60 | else { 61 | let resInfo = new ResInfo(path, root); 62 | if (root.children.indexOf(resInfo) === -1) { 63 | root.children.push(resInfo); 64 | allFileList.push(resInfo); 65 | } 66 | } 67 | } 68 | else { 69 | let parentDir = _getDirectoryInfo(parseInfo.dir); 70 | if (!parentDir) { 71 | parentDir = new FileRoot(parseInfo.dir, getParent(parseInfo.dir)); 72 | directoryList[parseInfo.dir] = parseInfo; 73 | } 74 | if (!parseInfo.ext) { 75 | let dirInfo = new FileRoot(path, parentDir); 76 | if (parentDir.children.indexOf(dirInfo) === -1) { 77 | parentDir.children.push(dirInfo); 78 | let dir = parseInfo.dir + '/' + parseInfo.name; 79 | directoryList[dir] = dirInfo; 80 | allFileList.push(dirInfo); 81 | } 82 | } 83 | else { 84 | let resInfo = new ResInfo(path, parentDir); 85 | if (parentDir.children.indexOf(resInfo) === -1) { 86 | parentDir.children.push(resInfo); 87 | allFileList.push(resInfo); 88 | } 89 | } 90 | } 91 | } 92 | 93 | function _onInit () { 94 | allFileList = []; 95 | directoryList = []; 96 | assetTypeList = []; 97 | imgList = []; 98 | metaList = []; 99 | } 100 | 101 | function _arrayBufferToBase64( buffer ) { 102 | let binary = ''; 103 | let bytes = new Uint8Array(buffer); 104 | let len = bytes.byteLength; 105 | for (let i = 0; i < len; i++) { 106 | binary += String.fromCharCode(bytes[i]); 107 | } 108 | return window.btoa(binary); 109 | } 110 | 111 | exports.onFolderParse = function (path, callback) { 112 | _onInit(); 113 | 114 | let fileTree = new FileRoot(path); 115 | JSZipUtils.getBinaryContent(path, function (err, data) { 116 | if (err) { 117 | throw err; 118 | } 119 | JSZip.loadAsync(data).then((zip) => { 120 | try { 121 | // 解决后缀名的问题 122 | zip.file(Utils.ASSET_TYPE) 123 | .async("string") 124 | .then((content) => { 125 | assetTypeList = JSON.parse(content); 126 | for (let key in zip.files) { 127 | console.log(key); 128 | let file = zip.files[key]; 129 | if (key === Utils.ASSET_TYPE) { 130 | continue; 131 | } 132 | if (key.endsWith('.meta')) { 133 | // 存储 meta 文件,用来判断是否有相同 uuid 但是路径不同的问题 134 | // 如果是这样要提示用户不能导入 135 | file.async("string") 136 | .then((content) => { 137 | metaList.push({ 138 | meta: JSON.parse(content), 139 | path: key.replace('.meta', '') 140 | }); 141 | }); 142 | continue; 143 | } 144 | let info = Path.parse(key); 145 | if (info.ext === '.png' || info.ext === '.jpg') { 146 | file.async("arraybuffer") 147 | .then((buffer) => { 148 | let str = _arrayBufferToBase64(buffer); 149 | let pIndex = key.indexOf('.'); 150 | let type = key.substr(pIndex + 1); 151 | imgList[info.name] = 'data:image/' + type + ';base64,' + str; 152 | _createFileTree(key, fileTree); 153 | }); 154 | } 155 | else { 156 | _createFileTree(key, fileTree); 157 | } 158 | } 159 | }); 160 | 161 | callback && callback({ 162 | fileTree: fileTree, 163 | allFileList: allFileList, 164 | metaList: metaList 165 | }); 166 | } 167 | catch (err) { 168 | Utils.showErrorMessageBox(Editor.T('IMPORT_ASSET.parse_zip_err_title'), Editor.T('IMPORT_ASSET.parse_zip_err_content')); 169 | callback && callback(null); 170 | } 171 | 172 | }); 173 | }); 174 | }; 175 | -------------------------------------------------------------------------------- /scene-walker.js: -------------------------------------------------------------------------------- 1 | const Fs = require('fire-fs'); 2 | const Url = require('fire-url'); 3 | const Path = require('fire-path'); 4 | const Async = require('async'); 5 | const Depend = require('./parse/depend'); 6 | 7 | let getClassById = cc.js._getClassById; 8 | let library = Editor.remote.importPath; 9 | let deserializeDetails = new cc.deserialize.Details(); 10 | 11 | module.exports = { 12 | 13 | _queryDependAsset (uuid, visitedUuids, callback) { 14 | 15 | // 判断是否是内置资源,如果是则不需要导出 16 | let url = Editor.remote.assetdb.uuidToUrl(uuid); 17 | if (url.indexOf(Depend.INTERNAL) !== -1) { 18 | return callback(); 19 | } 20 | 21 | let visited = visitedUuids[uuid]; 22 | if (visited) { 23 | return callback(); 24 | } 25 | 26 | // 如果有依赖的 subAsset,应该导出 mainAsset 27 | let isSubAsset = Editor.remote.assetdb.isSubAssetByUuid(uuid); 28 | if (isSubAsset) { 29 | let url = Editor.remote.assetdb.uuidToUrl(uuid); 30 | let mainUrl = Url.dirname(url); 31 | let mainUuid = Editor.remote.assetdb.urlToUuid(mainUrl); 32 | let visited = visitedUuids[mainUuid]; 33 | if (!visited) { 34 | visitedUuids[mainUuid] = true; 35 | } 36 | Depend.queryDependsOfRawAssetByUrl(mainUrl, (err, results) => { 37 | Async.each(results, (result, next) => { 38 | this._queryDependAsset(result.uuid, visitedUuids, next); 39 | }, callback); 40 | }); 41 | return; 42 | } 43 | 44 | visitedUuids[uuid] = true; 45 | 46 | Editor.assetdb.queryInfoByUuid(uuid, (err, info) => { 47 | deserializeDetails.reset(); 48 | 49 | let ctor = Editor.assets[info.type]; 50 | let isRaw = !ctor || cc.RawAsset.isRawAssetType(ctor); 51 | 52 | // 获取 Raw Asset 的依赖资源 53 | if (isRaw) { 54 | Depend.queryDependsOfRawAssetByUrl(info.url, (err, results) => { 55 | Async.each(results, (result, next) => { 56 | this._queryDependAsset(result.uuid, visitedUuids, next); 57 | }, callback); 58 | }); 59 | return; 60 | } 61 | 62 | // 获取赖脚本资源 63 | if (Depend.isScript(info.type)) { 64 | Depend.queryDependScriptByUuid(info.uuid, (err, spUuidList) => { 65 | Async.each(spUuidList, (spUuid, next) => { 66 | visited = visitedUuids[spUuid]; 67 | if (!visited) { 68 | visitedUuids[spUuid] = true; 69 | } 70 | next(); 71 | }, callback); 72 | }); 73 | return; 74 | } 75 | 76 | let relative = uuid.slice(0, 2) + Path.sep + uuid + '.json'; 77 | let src = Path.join(library, relative); 78 | let buffer = Fs.readFileSync(src); 79 | cc.deserialize(buffer, deserializeDetails, { 80 | classFinder: function (id) { 81 | 82 | if (Editor.Utils.UuidUtils.isUuid(id)) { 83 | let scriptUuid = Editor.Utils.UuidUtils.decompressUuid(id); 84 | deserializeDetails.uuidList.push(scriptUuid); 85 | } 86 | 87 | let cls = getClassById(id); 88 | if (cls) { 89 | return cls; 90 | } 91 | return null; 92 | } 93 | }); 94 | 95 | if (deserializeDetails.uuidList.length === 0) { 96 | callback(); 97 | } 98 | else { 99 | Async.each(deserializeDetails.uuidList, (uuid, next) => { 100 | this._queryDependAsset(uuid, visitedUuids, next); 101 | }, callback); 102 | } 103 | }); 104 | 105 | }, 106 | 107 | queryDependAsset (uuid, callback) { 108 | let visitedUuids = []; 109 | this._queryDependAsset(uuid, visitedUuids, () => { 110 | callback(null, Object.keys(visitedUuids)); 111 | }); 112 | }, 113 | 114 | 'query-depend-asset' (event, uuid) { 115 | this.queryDependAsset(uuid, (err, uuids) => { 116 | event.reply && event.reply(null, uuids); 117 | }); 118 | } 119 | }; -------------------------------------------------------------------------------- /utils.js: -------------------------------------------------------------------------------- 1 | const Electron = require('electron'); 2 | const dialog = Electron.remote.dialog; 3 | 4 | exports.ASSET_TYPE = '&asset&type&.json'; 5 | 6 | exports.init = function (profiles) { 7 | this.localProfiles = profiles.local; 8 | }; 9 | 10 | exports.getDataByKey = function (key) { 11 | return this.localProfiles.data[key] || ''; 12 | }; 13 | 14 | exports.save = function (key, value) { 15 | this.localProfiles.data[key] = value; 16 | this.localProfiles.save(); 17 | }; 18 | 19 | exports.showErrorMessageBox = function (title, content) { 20 | dialog.showErrorBox(title, content); 21 | }; 22 | 23 | exports.showImportMessageBox = function (title, message, callback) { 24 | dialog.showMessageBox({ 25 | type: 'info', 26 | title: title, 27 | message: message, 28 | buttons: [Editor.T('MESSAGE.yes'), Editor.T('MESSAGE.no')] 29 | }, (index) => { 30 | // index = 0 是,1 = 否 31 | callback && callback(null, index === 0); 32 | }); 33 | }; 34 | 35 | exports.showImportZipDialog = function (callback) { 36 | let ext = 'zip'; 37 | dialog.showOpenDialog( 38 | { 39 | defaultPath: this.localProfiles.data['import-folder-path'] || Editor.projectInfo.path, 40 | properties: ['openFile'], 41 | filters: [{ 42 | name: ext, 43 | extensions: [ext.toLowerCase()] 44 | }] 45 | }, 46 | (paths) => { 47 | if (!callback || !paths) { 48 | return; 49 | } 50 | let savePath = paths[0]; 51 | callback(null, savePath); 52 | this.save('import-folder-path', savePath); 53 | } 54 | ); 55 | }; 56 | 57 | exports.showImportOutPathDialog = function (callback) { 58 | dialog.showOpenDialog( 59 | { 60 | defaultPath: this.localProfiles.data['out-path'] || Editor.projectInfo.path + '\\assets\\', 61 | properties: ['openDirectory'] 62 | }, 63 | (paths) => { 64 | if (!callback || !paths) { 65 | return; 66 | } 67 | let outPath = paths[0] + '\\'; 68 | callback(null, outPath); 69 | this.save('out-path', outPath); 70 | } 71 | ); 72 | }; 73 | 74 | exports.showExportResDialog = function (callback) { 75 | dialog.showOpenDialog( 76 | { 77 | defaultPath: this.localProfiles.data['current-resource'] || Editor.projectInfo.path, 78 | properties: ['openFile'], 79 | filters: [ 80 | { 81 | name: 'resource', 82 | extensions: ['fire', 'prefab'] 83 | } 84 | ] 85 | }, 86 | (paths) => { 87 | if (!callback || !paths) { 88 | return; 89 | } 90 | let path = paths[0]; 91 | let meta = Editor.assetdb.remote.loadMetaByPath(path); 92 | callback(null, { 93 | path: path, 94 | uuid: meta.uuid 95 | }); 96 | this.save('current-resource', path); 97 | } 98 | ); 99 | }; 100 | 101 | exports.showExportOutPathDialog = function (callback) { 102 | let path = this.localProfiles.data['export-resource-path'] || Editor.projectInfo.path; 103 | let savePath = dialog.showSaveDialog( 104 | { 105 | title: Editor.T('EXPORT_ASSET.title'), 106 | defaultPath: path, 107 | filters: [ 108 | //{ name: 'All Files', extensions: ['*'] } 109 | { name: 'Package', extensions: ['zip'] } 110 | ] 111 | } 112 | ); 113 | 114 | if ( savePath ) { 115 | callback(null, savePath); 116 | this.save('export-resource-path', savePath); 117 | } 118 | }; 119 | 120 | exports.isDirectory = function (path) { 121 | return Fs.existsSync(path); 122 | }; 123 | 124 | exports.copyFolder = function (dst) { 125 | if (!Fs.existsSync(dst)) { 126 | Fs.mkdirSync(dst); 127 | } 128 | }; 129 | 130 | exports.copyFile = function (src, dst) { 131 | let readStream = Fs.createReadStream(src); 132 | let writeStream = Fs.createWriteStream(dst); 133 | let stat = Fs.statSync(src); 134 | 135 | readStream.on('data', function (chunk) { 136 | if (writeStream.write(chunk) === false) { 137 | readStream.pause(); 138 | } 139 | }); 140 | 141 | readStream.on('end', function () { 142 | writeStream.end(); 143 | }); 144 | 145 | writeStream.on('drain', function () { 146 | readStream.resume(); 147 | }); 148 | }; 149 | 150 | exports.getIcon = function (uuid) { 151 | let meta = Editor.assetdb.remote.loadMetaByUuid(uuid); 152 | let assetType = meta.assetType(); 153 | if (assetType === 'texture') { 154 | return `thumbnail://${uuid}?32`; 155 | } 156 | else if (assetType === 'sprite-frame') { 157 | return `thumbnail://${meta.rawTextureUuid}?32`; 158 | } 159 | else if (assetType === 'dragonbones') { 160 | assetType = 'spine' 161 | } 162 | return 'unpack://static/icon/assets/' + assetType + '.png'; 163 | }; --------------------------------------------------------------------------------