diff --git a/assets/js/browserfs.min.js b/assets/js/browserfs.min.js new file mode 100644 index 0000000000..a9eca25caf --- /dev/null +++ b/assets/js/browserfs.min.js @@ -0,0 +1,8 @@ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.BrowserFS=e():t.BrowserFS=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,e),i.l=!0,i.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=19)}([function(t,e,n){"use strict";function r(t){if(!(this instanceof r))return new r(t);u.call(this,t),f.call(this,t),t&&!1===t.readable&&(this.readable=!1),t&&!1===t.writable&&(this.writable=!1),this.allowHalfOpen=!0,t&&!1===t.allowHalfOpen&&(this.allowHalfOpen=!1),this.once("end",i)}function i(){this.allowHalfOpen||this._writableState.ended||s(o,this)}function o(t){t.end()}var s=n(7),a=Object.keys||function(t){var e=[];for(var n in t)e.push(n);return e};t.exports=r;var c=n(3);c.inherits=n(1);var u=n(14),f=n(12);c.inherits(r,u);for(var h=a(f.prototype),p=0;pK)throw new RangeError("Invalid typed array length");var e=new Uint8Array(t);return e.__proto__=i.prototype,e}function i(t,e,n){if("number"==typeof t){if("string"==typeof e)throw new Error("If encoding is specified then the first argument must be a string");return c(t)}return o(t,e,n)}function o(t,e,n){if("number"==typeof t)throw new TypeError('"value" argument must not be a number');return H(t)?h(t,e,n):"string"==typeof t?u(t,e):p(t)}function s(t){if("number"!=typeof t)throw new TypeError('"size" argument must be a number');if(t<0)throw new RangeError('"size" argument must not be negative')}function a(t,e,n){return s(t),t<=0?r(t):void 0!==e?"string"==typeof n?r(t).fill(e,n):r(t).fill(e):r(t)}function c(t){return s(t),r(t<0?0:0|l(t))}function u(t,e){if("string"==typeof e&&""!==e||(e="utf8"),!i.isEncoding(e))throw new TypeError('"encoding" must be a valid string encoding');var n=0|y(t,e),o=r(n),s=o.write(t,e);return s!==n&&(o=o.slice(0,s)),o}function f(t){for(var e=t.length<0?0:0|l(t.length),n=r(e),i=0;i=K)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+K.toString(16)+" bytes");return 0|t}function d(t){return+t!=t&&(t=0),i.alloc(+t)}function y(t,e){if(i.isBuffer(t))return t.length;if(Z(t)||H(t))return t.byteLength;"string"!=typeof t&&(t=""+t);var n=t.length;if(0===n)return 0;for(var r=!1;;)switch(e){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return B(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return V(t).length;default:if(r)return B(t).length;e=(""+e).toLowerCase(),r=!0}}function g(t,e,n){var r=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if(n>>>=0,e>>>=0,n<=e)return"";for(t||(t="utf8");;)switch(t){case"hex":return L(this,e,n);case"utf8":case"utf-8":return F(this,e,n);case"ascii":return R(this,e,n);case"latin1":case"binary":return T(this,e,n);case"base64":return O(this,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return x(this,e,n);default:if(r)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),r=!0}}function _(t,e,n){var r=t[e];t[e]=t[n],t[n]=r}function m(t,e,n,r,o){if(0===t.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,Y(n)&&(n=o?0:t.length-1),n<0&&(n=t.length+n),n>=t.length){if(o)return-1;n=t.length-1}else if(n<0){if(!o)return-1;n=0}if("string"==typeof e&&(e=i.from(e,r)),i.isBuffer(e))return 0===e.length?-1:w(t,e,n,r,o);if("number"==typeof e)return e&=255,"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(t,e,n):Uint8Array.prototype.lastIndexOf.call(t,e,n):w(t,[e],n,r,o);throw new TypeError("val must be string, number or Buffer")}function w(t,e,n,r,i){function o(t,e){return 1===s?t[e]:t.readUInt16BE(e*s)}var s=1,a=t.length,c=e.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(t.length<2||e.length<2)return-1;s=2,a/=2,c/=2,n/=2}var u;if(i){var f=-1;for(u=n;ua&&(n=a-c),u=n;u>=0;u--){for(var h=!0,p=0;pi&&(r=i):r=i;var o=e.length;if(o%2!=0)throw new TypeError("Invalid hex string");r>o/2&&(r=o/2);for(var s=0;s239?4:o>223?3:o>191?2:1;if(i+a<=n){var c,u,f,h;switch(a){case 1:o<128&&(s=o);break;case 2:c=t[i+1],128==(192&c)&&(h=(31&o)<<6|63&c)>127&&(s=h);break;case 3:c=t[i+1],u=t[i+2],128==(192&c)&&128==(192&u)&&(h=(15&o)<<12|(63&c)<<6|63&u)>2047&&(h<55296||h>57343)&&(s=h);break;case 4:c=t[i+1],u=t[i+2],f=t[i+3],128==(192&c)&&128==(192&u)&&128==(192&f)&&(h=(15&o)<<18|(63&c)<<12|(63&u)<<6|63&f)>65535&&h<1114112&&(s=h)}}null===s?(s=65533,a=1):s>65535&&(s-=65536,r.push(s>>>10&1023|55296),s=56320|1023&s),r.push(s),i+=a}return N(r)}function N(t){var e=t.length;if(e<=G)return String.fromCharCode.apply(String,t);for(var n="",r=0;rr)&&(n=r);for(var i="",o=e;on)throw new RangeError("Trying to access beyond buffer length")}function A(t,e,n,r,o,s){if(!i.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>o||et.length)throw new RangeError("Index out of range")}function P(t,e,n,r,i,o){if(n+r>t.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function C(t,e,n,r,i){return e=+e,n>>>=0,i||P(t,e,n,4,3.4028234663852886e38,-3.4028234663852886e38),J.write(t,e,n,r,23,4),n+4}function U(t,e,n,r,i){return e=+e,n>>>=0,i||P(t,e,n,8,1.7976931348623157e308,-1.7976931348623157e308),J.write(t,e,n,r,52,8),n+8}function M(t){if(t=t.trim().replace(Q,""),t.length<2)return"";for(;t.length%4!=0;)t+="=";return t}function j(t){return t<16?"0"+t.toString(16):t.toString(16)}function B(t,e){e=e||1/0;for(var n,r=t.length,i=null,o=[],s=0;s55295&&n<57344){if(!i){if(n>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(s+1===r){(e-=3)>-1&&o.push(239,191,189);continue}i=n;continue}if(n<56320){(e-=3)>-1&&o.push(239,191,189),i=n;continue}n=65536+(i-55296<<10|n-56320)}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,n<128){if((e-=1)<0)break;o.push(n)}else if(n<2048){if((e-=2)<0)break;o.push(n>>6|192,63&n|128)}else if(n<65536){if((e-=3)<0)break;o.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return o}function z(t){for(var e=[],n=0;n>8,i=n%256,o.push(i),o.push(r);return o}function V(t){return X.toByteArray(M(t))}function W(t,e,n,r){for(var i=0;i=e.length||i>=t.length);++i)e[i+n]=t[i];return i}function H(t){return t instanceof ArrayBuffer||null!=t&&null!=t.constructor&&"ArrayBuffer"===t.constructor.name&&"number"==typeof t.byteLength}function Z(t){return"function"==typeof ArrayBuffer.isView&&ArrayBuffer.isView(t)}function Y(t){return t!==t}/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ +var X=n(20),J=n(21);e.Buffer=i,e.SlowBuffer=d,e.INSPECT_MAX_BYTES=50;var K=2147483647;e.kMaxLength=K,i.TYPED_ARRAY_SUPPORT=function(){try{var t=new Uint8Array(1);return t.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===t.foo()}catch(t){return!1}}(),i.TYPED_ARRAY_SUPPORT||"undefined"==typeof console||"function"!=typeof console.error||console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."),"undefined"!=typeof Symbol&&Symbol.species&&i[Symbol.species]===i&&Object.defineProperty(i,Symbol.species,{value:null,configurable:!0,enumerable:!1,writable:!1}),i.poolSize=8192,i.from=function(t,e,n){return o(t,e,n)},i.prototype.__proto__=Uint8Array.prototype,i.__proto__=Uint8Array,i.alloc=function(t,e,n){return a(t,e,n)},i.allocUnsafe=function(t){return c(t)},i.allocUnsafeSlow=function(t){return c(t)},i.isBuffer=function(t){return null!=t&&!0===t._isBuffer},i.compare=function(t,e){if(!i.isBuffer(t)||!i.isBuffer(e))throw new TypeError("Arguments must be Buffers");if(t===e)return 0;for(var n=t.length,r=e.length,o=0,s=Math.min(n,r);o0&&(t=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(t+=" ... ")),""},i.prototype.compare=function(t,e,n,r,o){if(!i.isBuffer(t))throw new TypeError("Argument must be a Buffer");if(void 0===e&&(e=0),void 0===n&&(n=t?t.length:0),void 0===r&&(r=0),void 0===o&&(o=this.length),e<0||n>t.length||r<0||o>this.length)throw new RangeError("out of range index");if(r>=o&&e>=n)return 0;if(r>=o)return-1;if(e>=n)return 1;if(e>>>=0,n>>>=0,r>>>=0,o>>>=0,this===t)return 0;for(var s=o-r,a=n-e,c=Math.min(s,a),u=this.slice(r,o),f=t.slice(e,n),h=0;h>>=0,isFinite(n)?(n>>>=0,void 0===r&&(r="utf8")):(r=n,n=void 0)}var i=this.length-e;if((void 0===n||n>i)&&(n=i),t.length>0&&(n<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var o=!1;;)switch(r){case"hex":return v(this,t,e,n);case"utf8":case"utf-8":return b(this,t,e,n);case"ascii":return S(this,t,e,n);case"latin1":case"binary":return E(this,t,e,n);case"base64":return k(this,t,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return I(this,t,e,n);default:if(o)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),o=!0}},i.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var G=4096;i.prototype.slice=function(t,e){var n=this.length;t=~~t,e=void 0===e?n:~~e,t<0?(t+=n)<0&&(t=0):t>n&&(t=n),e<0?(e+=n)<0&&(e=0):e>n&&(e=n),e>>=0,e>>>=0,n||D(t,e,this.length);for(var r=this[t],i=1,o=0;++o>>=0,e>>>=0,n||D(t,e,this.length);for(var r=this[t+--e],i=1;e>0&&(i*=256);)r+=this[t+--e]*i;return r},i.prototype.readUInt8=function(t,e){return t>>>=0,e||D(t,1,this.length),this[t]},i.prototype.readUInt16LE=function(t,e){return t>>>=0,e||D(t,2,this.length),this[t]|this[t+1]<<8},i.prototype.readUInt16BE=function(t,e){return t>>>=0,e||D(t,2,this.length),this[t]<<8|this[t+1]},i.prototype.readUInt32LE=function(t,e){return t>>>=0,e||D(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},i.prototype.readUInt32BE=function(t,e){return t>>>=0,e||D(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},i.prototype.readIntLE=function(t,e,n){t>>>=0,e>>>=0,n||D(t,e,this.length);for(var r=this[t],i=1,o=0;++o=i&&(r-=Math.pow(2,8*e)),r},i.prototype.readIntBE=function(t,e,n){t>>>=0,e>>>=0,n||D(t,e,this.length);for(var r=e,i=1,o=this[t+--r];r>0&&(i*=256);)o+=this[t+--r]*i;return i*=128,o>=i&&(o-=Math.pow(2,8*e)),o},i.prototype.readInt8=function(t,e){return t>>>=0,e||D(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},i.prototype.readInt16LE=function(t,e){t>>>=0,e||D(t,2,this.length);var n=this[t]|this[t+1]<<8;return 32768&n?4294901760|n:n},i.prototype.readInt16BE=function(t,e){t>>>=0,e||D(t,2,this.length);var n=this[t+1]|this[t]<<8;return 32768&n?4294901760|n:n},i.prototype.readInt32LE=function(t,e){return t>>>=0,e||D(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},i.prototype.readInt32BE=function(t,e){return t>>>=0,e||D(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},i.prototype.readFloatLE=function(t,e){return t>>>=0,e||D(t,4,this.length),J.read(this,t,!0,23,4)},i.prototype.readFloatBE=function(t,e){return t>>>=0,e||D(t,4,this.length),J.read(this,t,!1,23,4)},i.prototype.readDoubleLE=function(t,e){return t>>>=0,e||D(t,8,this.length),J.read(this,t,!0,52,8)},i.prototype.readDoubleBE=function(t,e){return t>>>=0,e||D(t,8,this.length),J.read(this,t,!1,52,8)},i.prototype.writeUIntLE=function(t,e,n,r){if(t=+t,e>>>=0,n>>>=0,!r){A(this,t,e,n,Math.pow(2,8*n)-1,0)}var i=1,o=0;for(this[e]=255&t;++o>>=0,n>>>=0,!r){A(this,t,e,n,Math.pow(2,8*n)-1,0)}var i=n-1,o=1;for(this[e+i]=255&t;--i>=0&&(o*=256);)this[e+i]=t/o&255;return e+n},i.prototype.writeUInt8=function(t,e,n){return t=+t,e>>>=0,n||A(this,t,e,1,255,0),this[e]=255&t,e+1},i.prototype.writeUInt16LE=function(t,e,n){return t=+t,e>>>=0,n||A(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},i.prototype.writeUInt16BE=function(t,e,n){return t=+t,e>>>=0,n||A(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},i.prototype.writeUInt32LE=function(t,e,n){return t=+t,e>>>=0,n||A(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},i.prototype.writeUInt32BE=function(t,e,n){return t=+t,e>>>=0,n||A(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},i.prototype.writeIntLE=function(t,e,n,r){if(t=+t,e>>>=0,!r){var i=Math.pow(2,8*n-1);A(this,t,e,n,i-1,-i)}var o=0,s=1,a=0;for(this[e]=255&t;++o>0)-a&255;return e+n},i.prototype.writeIntBE=function(t,e,n,r){if(t=+t,e>>>=0,!r){var i=Math.pow(2,8*n-1);A(this,t,e,n,i-1,-i)}var o=n-1,s=1,a=0;for(this[e+o]=255&t;--o>=0&&(s*=256);)t<0&&0===a&&0!==this[e+o+1]&&(a=1),this[e+o]=(t/s>>0)-a&255;return e+n},i.prototype.writeInt8=function(t,e,n){return t=+t,e>>>=0,n||A(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},i.prototype.writeInt16LE=function(t,e,n){return t=+t,e>>>=0,n||A(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},i.prototype.writeInt16BE=function(t,e,n){return t=+t,e>>>=0,n||A(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},i.prototype.writeInt32LE=function(t,e,n){return t=+t,e>>>=0,n||A(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},i.prototype.writeInt32BE=function(t,e,n){return t=+t,e>>>=0,n||A(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},i.prototype.writeFloatLE=function(t,e,n){return C(this,t,e,!0,n)},i.prototype.writeFloatBE=function(t,e,n){return C(this,t,e,!1,n)},i.prototype.writeDoubleLE=function(t,e,n){return U(this,t,e,!0,n)},i.prototype.writeDoubleBE=function(t,e,n){return U(this,t,e,!1,n)},i.prototype.copy=function(t,e,n,r){if(n||(n=0),r||0===r||(r=this.length),e>=t.length&&(e=t.length),e||(e=0),r>0&&r=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),t.length-e=0;--i)t[i+e]=this[i+n];else if(o<1e3)for(i=0;i>>=0,n=void 0===n?this.length:n>>>0,t||(t=0);var s;if("number"==typeof t)for(s=e;s0&&this._events[t].length>i&&(this._events[t].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[t].length),"function"==typeof console.trace&&console.trace()),this},n.prototype.on=n.prototype.addListener,n.prototype.once=function(t,e){function n(){this.removeListener(t,n),i||(i=!0,e.apply(this,arguments))}if(!r(e))throw TypeError("listener must be a function");var i=!1;return n.listener=e,this.on(t,n),this},n.prototype.removeListener=function(t,e){var n,i,s,a;if(!r(e))throw TypeError("listener must be a function");if(!this._events||!this._events[t])return this;if(n=this._events[t],s=n.length,i=-1,n===e||r(n.listener)&&n.listener===e)delete this._events[t],this._events.removeListener&&this.emit("removeListener",t,e);else if(o(n)){for(a=s;a-- >0;)if(n[a]===e||n[a].listener&&n[a].listener===e){i=a;break}if(i<0)return this;1===n.length?(n.length=0,delete this._events[t]):n.splice(i,1),this._events.removeListener&&this.emit("removeListener",t,e)}return this},n.prototype.removeAllListeners=function(t){var e,n;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[t]&&delete this._events[t],this;if(0===arguments.length){for(e in this._events)"removeListener"!==e&&this.removeAllListeners(e);return this.removeAllListeners("removeListener"),this._events={},this}if(n=this._events[t],r(n))this.removeListener(t,n);else if(n)for(;n.length;)this.removeListener(t,n[n.length-1]);return delete this._events[t],this},n.prototype.listeners=function(t){return this._events&&this._events[t]?r(this._events[t])?[this._events[t]]:this._events[t].slice():[]},n.prototype.listenerCount=function(t){if(this._events){var e=this._events[t];if(r(e))return 1;if(e)return e.length}return 0},n.listenerCount=function(t,e){return t.listenerCount(e)}},function(t,e,n){"use strict";(function(e){function n(t,n,r,i){if("function"!=typeof t)throw new TypeError('"callback" argument must be a function');var o,s,a=arguments.length;switch(a){case 0:case 1:return e.nextTick(t);case 2:return e.nextTick(function(){t.call(null,n)});case 3:return e.nextTick(function(){t.call(null,n,r)});case 4:return e.nextTick(function(){t.call(null,n,r,i)});default:for(o=new Array(a-1),s=0;s-1?setImmediate:F;u.WritableState=c;var T=n(3);T.inherits=n(1);var L={deprecate:n(28)},x=n(15),D=n(11).Buffer,A=r.Uint8Array||function(){},P=n(16);T.inherits(u,x),c.prototype.getBuffer=function(){for(var t=this.bufferedRequest,e=[];t;)e.push(t),t=t.next;return e},function(){try{Object.defineProperty(c.prototype,"buffer",{get:L.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(t){}}();var C;"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(C=Function.prototype[Symbol.hasInstance],Object.defineProperty(u,Symbol.hasInstance,{value:function(t){return!!C.call(this,t)||t&&t._writableState instanceof c}})):C=function(t){return t instanceof this},u.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},u.prototype.write=function(t,e,n){var r=this._writableState,i=!1,c=s(t)&&!r.objectMode;return c&&!D.isBuffer(t)&&(t=o(t)),"function"==typeof e&&(n=e,e=null),c?e="buffer":e||(e=r.defaultEncoding),"function"!=typeof n&&(n=a),r.ended?f(this,n):(c||h(this,r,t,n))&&(r.pendingcb++,i=l(this,r,c,t,e,n)),i},u.prototype.cork=function(){this._writableState.corked++},u.prototype.uncork=function(){var t=this._writableState;t.corked&&(t.corked--,t.writing||t.corked||t.finished||t.bufferProcessing||!t.bufferedRequest||v(this,t))},u.prototype.setDefaultEncoding=function(t){if("string"==typeof t&&(t=t.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((t+"").toLowerCase())>-1))throw new TypeError("Unknown encoding: "+t);return this._writableState.defaultEncoding=t,this},u.prototype._write=function(t,e,n){n(new Error("_write() is not implemented"))},u.prototype._writev=null,u.prototype.end=function(t,e,n){var r=this._writableState;"function"==typeof t?(n=t,t=null,e=null):"function"==typeof e&&(n=e,e=null),null!==t&&void 0!==t&&this.write(t,e),r.corked&&(r.corked=1,this.uncork()),r.ending||r.finished||I(this,r,n)},Object.defineProperty(u.prototype,"destroyed",{get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(t){this._writableState&&(this._writableState.destroyed=t)}}),u.prototype.destroy=P.destroy,u.prototype._undestroy=P.undestroy,u.prototype._destroy=function(t,e){this.end(),e(t)}}).call(e,n(2),n(5))},function(t,e,n){"use strict";(function(e){function n(t){var e=r.exec(t);return e.shift(),e}var r=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/,i=function(){function t(){}return t.normalize=function(e){""===e&&(e=".");var n=e.charAt(0)===t.sep;e=t._removeDuplicateSeps(e);for(var r=e.split(t.sep),i=[],o=0;o0&&".."!==i[0])?i.pop():i.push(s))}if(!n&&i.length<2)switch(i.length){case 1:""===i[0]&&i.unshift(".");break;default:i.push(".")}return e=i.join(t.sep),n&&e.charAt(0)!==t.sep&&(e=t.sep+e),e},t.join=function(){for(var e=[],n=0;n1&&a.charAt(a.length-1)===t.sep)return a.substr(0,a.length-1);if(a.charAt(0)!==t.sep){"."!==a.charAt(0)||1!==a.length&&a.charAt(1)!==t.sep||(a=1===a.length?"":a.substr(2));var c=e.cwd();a=""!==a?this.normalize(c+("/"!==c?t.sep:"")+a):c}return a},t.relative=function(e,n){var r;e=t.resolve(e),n=t.resolve(n);var i=e.split(t.sep),o=n.split(t.sep);o.shift(),i.shift();var s=0,a=[];for(r=0;ri.length&&(s=i.length);var c="";for(r=0;r1&&c.charAt(c.length-1)===t.sep&&(c=c.substr(0,c.length-1)),c},t.dirname=function(e){e=t._removeDuplicateSeps(e);var n=e.charAt(0)===t.sep,r=e.split(t.sep);return""===r.pop()&&r.length>0&&r.pop(),r.length>1||1===r.length&&!n?r.join(t.sep):n?t.sep:"."},t.basename=function(e,n){if(void 0===n&&(n=""),""===e)return e;e=t.normalize(e);var r=e.split(t.sep),i=r[r.length-1];if(""===i&&r.length>1)return r[r.length-2];if(n.length>0){if(i.substr(i.length-n.length)===n)return i.substr(0,i.length-n.length)}return i},t.extname=function(e){e=t.normalize(e);var n=e.split(t.sep);if(e=n.pop(),""===e&&n.length>0&&(e=n.pop()),".."===e)return"";var r=e.lastIndexOf(".");return-1===r||0===r?"":e.substr(r)},t.isAbsolute=function(e){return e.length>0&&e.charAt(0)===t.sep},t._makeLong=function(t){return t},t.parse=function(t){var e=n(t);return{root:e[0],dir:e[0]+e[1].slice(0,-1),base:e[2],ext:e[3],name:e[2].slice(0,e[2].length-e[3].length)}},t.format=function(e){if(null===e||"object"!=typeof e)throw new TypeError("Parameter 'pathObject' must be an object, not "+typeof e);if("string"!=typeof(e.root||""))throw new TypeError("'pathObject.root' must be a string or undefined, not "+typeof e.root);return(e.dir?e.dir+t.sep:"")+(e.base||"")},t._removeDuplicateSeps=function(t){return t=t.replace(this._replaceRegex,this.sep)},t.sep="/",t._replaceRegex=new RegExp("//+","g"),t.delimiter=":",t.posix=t,t.win32=t,t}();t.exports=i}).call(e,n(2))},function(t,e,n){"use strict";(function(e,r){function i(t){return U.from(t)}function o(t){return U.isBuffer(t)||t instanceof M}function s(t,e,n){if("function"==typeof t.prependListener)return t.prependListener(e,n);t._events&&t._events[e]?A(t._events[e])?t._events[e].unshift(n):t._events[e]=[n,t._events[e]]:t.on(e,n)}function a(t,e){D=D||n(0),t=t||{},this.objectMode=!!t.objectMode,e instanceof D&&(this.objectMode=this.objectMode||!!t.readableObjectMode);var r=t.highWaterMark,i=this.objectMode?16:16384;this.highWaterMark=r||0===r?r:i,this.highWaterMark=Math.floor(this.highWaterMark),this.buffer=new V,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.destroyed=!1,this.defaultEncoding=t.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,t.encoding&&(q||(q=n(17).StringDecoder),this.decoder=new q(t.encoding),this.encoding=t.encoding)}function c(t){if(D=D||n(0),!(this instanceof c))return new c(t);this._readableState=new a(t,this),this.readable=!0,t&&("function"==typeof t.read&&(this._read=t.read),"function"==typeof t.destroy&&(this._destroy=t.destroy)),C.call(this)}function u(t,e,n,r,o){var s=t._readableState;if(null===e)s.reading=!1,y(t,s);else{var a;o||(a=h(s,e)),a?t.emit("error",a):s.objectMode||e&&e.length>0?("string"==typeof e||s.objectMode||Object.getPrototypeOf(e)===U.prototype||(e=i(e)),r?s.endEmitted?t.emit("error",new Error("stream.unshift() after end event")):f(t,s,e,!0):s.ended?t.emit("error",new Error("stream.push() after EOF")):(s.reading=!1,s.decoder&&!n?(e=s.decoder.write(e),s.objectMode||0!==e.length?f(t,s,e,!1):m(t,s)):f(t,s,e,!1))):r||(s.reading=!1)}return p(s)}function f(t,e,n,r){e.flowing&&0===e.length&&!e.sync?(t.emit("data",n),t.read(0)):(e.length+=e.objectMode?1:n.length,r?e.buffer.unshift(n):e.buffer.push(n),e.needReadable&&g(t)),m(t,e)}function h(t,e){var n;return o(e)||"string"==typeof e||void 0===e||t.objectMode||(n=new TypeError("Invalid non-string/buffer chunk")),n}function p(t){return!t.ended&&(t.needReadable||t.length=Z?t=Z:(t--,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,t|=t>>>16,t++),t}function d(t,e){return t<=0||0===e.length&&e.ended?0:e.objectMode?1:t!==t?e.flowing&&e.length?e.buffer.head.data.length:e.length:(t>e.highWaterMark&&(e.highWaterMark=l(t)),t<=e.length?t:e.ended?e.length:(e.needReadable=!0,0))}function y(t,e){if(!e.ended){if(e.decoder){var n=e.decoder.end();n&&n.length&&(e.buffer.push(n),e.length+=e.objectMode?1:n.length)}e.ended=!0,g(t)}}function g(t){var e=t._readableState;e.needReadable=!1,e.emittedReadable||(z("emitReadable",e.flowing),e.emittedReadable=!0,e.sync?x(_,t):_(t))}function _(t){z("emit readable"),t.emit("readable"),k(t)}function m(t,e){e.readingMore||(e.readingMore=!0,x(w,t,e))}function w(t,e){for(var n=e.length;!e.reading&&!e.flowing&&!e.ended&&e.length=e.length?(n=e.decoder?e.buffer.join(""):1===e.buffer.length?e.buffer.head.data:e.buffer.concat(e.length),e.buffer.clear()):n=O(t,e.buffer,e.decoder),n}function O(t,e,n){var r;return to.length?o.length:t;if(s===o.length?i+=o:i+=o.slice(0,t),0===(t-=s)){s===o.length?(++r,n.next?e.head=n.next:e.head=e.tail=null):(e.head=n,n.data=o.slice(s));break}++r}return e.length-=r,i}function N(t,e){var n=U.allocUnsafe(t),r=e.head,i=1;for(r.data.copy(n),t-=r.data.length;r=r.next;){var o=r.data,s=t>o.length?o.length:t;if(o.copy(n,n.length-t,0,s),0===(t-=s)){s===o.length?(++i,r.next?e.head=r.next:e.head=e.tail=null):(e.head=r,r.data=o.slice(s));break}++i}return e.length-=i,n}function R(t){var e=t._readableState;if(e.length>0)throw new Error('"endReadable()" called on non-empty stream');e.endEmitted||(e.ended=!0,x(T,e,t))}function T(t,e){t.endEmitted||0!==t.length||(t.endEmitted=!0,e.readable=!1,e.emit("end"))}function L(t,e){for(var n=0,r=t.length;n=e.highWaterMark||e.ended))return z("read: emitReadable",e.length,e.ended),0===e.length&&e.ended?R(this):g(this),null;if(0===(t=d(t,e))&&e.ended)return 0===e.length&&R(this),null;var r=e.needReadable;z("need readable",r),(0===e.length||e.length-t0?I(t,e):null,null===i?(e.needReadable=!0,t=0):e.length-=t,0===e.length&&(e.ended||(e.needReadable=!0),n!==t&&e.ended&&R(this)),null!==i&&this.emit("data",i),i},c.prototype._read=function(t){this.emit("error",new Error("_read() is not implemented"))},c.prototype.pipe=function(t,e){function n(t,e){z("onunpipe"),t===p&&e&&!1===e.hasUnpiped&&(e.hasUnpiped=!0,o())}function i(){z("onend"),t.end()}function o(){z("cleanup"),t.removeListener("close",u),t.removeListener("finish",f),t.removeListener("drain",g),t.removeListener("error",c),t.removeListener("unpipe",n),p.removeListener("end",i),p.removeListener("end",h),p.removeListener("data",a),_=!0,!l.awaitDrain||t._writableState&&!t._writableState.needDrain||g()}function a(e){z("ondata"),m=!1,!1!==t.write(e)||m||((1===l.pipesCount&&l.pipes===t||l.pipesCount>1&&-1!==L(l.pipes,t))&&!_&&(z("false write response, pause",p._readableState.awaitDrain),p._readableState.awaitDrain++,m=!0),p.pause())}function c(e){z("onerror",e),h(),t.removeListener("error",c),0===P(t,"error")&&t.emit("error",e)}function u(){t.removeListener("finish",f),h()}function f(){z("onfinish"),t.removeListener("close",u),h()}function h(){z("unpipe"),p.unpipe(t)}var p=this,l=this._readableState;switch(l.pipesCount){case 0:l.pipes=t;break;case 1:l.pipes=[l.pipes,t];break;default:l.pipes.push(t)}l.pipesCount+=1,z("pipe count=%d opts=%j",l.pipesCount,e);var d=(!e||!1!==e.end)&&t!==r.stdout&&t!==r.stderr,y=d?i:h;l.endEmitted?x(y):p.once("end",y),t.on("unpipe",n);var g=v(p);t.on("drain",g);var _=!1,m=!1;return p.on("data",a),s(t,"error",c),t.once("close",u),t.once("finish",f),t.emit("pipe",p),l.flowing||(z("pipe resume"),p.resume()),t},c.prototype.unpipe=function(t){var e=this._readableState,n={hasUnpiped:!1};if(0===e.pipesCount)return this;if(1===e.pipesCount)return t&&t!==e.pipes?this:(t||(t=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,t&&t.emit("unpipe",this,n),this);if(!t){var r=e.pipes,i=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var o=0;o=this.charLength-this.charReceived?this.charLength-this.charReceived:t.length;if(t.copy(this.charBuffer,this.charReceived,0,n),this.charReceived+=n,this.charReceived=55296&&r<=56319)){if(this.charReceived=this.charLength=0,0===t.length)return e;break}this.charLength+=this.surrogateSize,e=""}this.detectIncompleteChar(t);var i=t.length;this.charLength&&(t.copy(this.charBuffer,0,t.length-this.charReceived,i),i-=this.charReceived),e+=t.toString(this.encoding,0,i);var i=e.length-1,r=e.charCodeAt(i);if(r>=55296&&r<=56319){var o=this.surrogateSize;return this.charLength+=o,this.charReceived+=o,this.charBuffer.copy(this.charBuffer,o,0,o),t.copy(this.charBuffer,0,0,o),e.substring(0,i)}return e},u.prototype.detectIncompleteChar=function(t){for(var e=t.length>=3?3:t.length;e>0;e--){var n=t[t.length-e];if(1==e&&n>>5==6){this.charLength=2;break}if(e<=2&&n>>4==14){this.charLength=3;break}if(e<=3&&n>>3==30){this.charLength=4;break}}this.charReceived=e},u.prototype.end=function(t){var e="";if(t&&t.length&&(e=this.write(t)),this.charReceived){var n=this.charReceived,r=this.charBuffer,i=this.encoding;e+=r.slice(0,n).toString(i)}return e}},function(t,e,n){"use strict";function r(t){this.afterTransform=function(e,n){return i(t,e,n)},this.needTransform=!1,this.transforming=!1,this.writecb=null,this.writechunk=null,this.writeencoding=null}function i(t,e,n){var r=t._transformState;r.transforming=!1;var i=r.writecb;if(!i)return t.emit("error",new Error("write callback called multiple times"));r.writechunk=null,r.writecb=null,null!==n&&void 0!==n&&t.push(n),i(e);var o=t._readableState;o.reading=!1,(o.needReadable||o.length=0)throw new ke(we.EINVAL,"Path must be a string without null bytes.");if(""===t)throw new ke(we.EINVAL,"Path must not be empty.");return be.resolve(t)}function f(t,e,n,r){switch(typeof t){case"object":return{encoding:void 0!==t.encoding?t.encoding:e,flag:void 0!==t.flag?t.flag:n,mode:a(t.mode,r)};case"string":return{encoding:t,flag:n,mode:r};default:return{encoding:e,flag:n,mode:r}}}function h(){}function p(t,e,n,r,i){return tn?n+1:t+1:r===i?e:e+1}function l(t,e){if(t===e)return 0;if(t.length>e.length){var n=t;t=e,e=n}for(var r=t.length,i=e.length;r>0&&t.charCodeAt(r-1)===e.charCodeAt(i-1);)r--,i--;for(var o=0;oS?S+1:I+1:E===s[r+k]?u:u+1,u=I}}return S}function d(t,e,n){t&&console.warn("["+e+"] Direct file system constructor usage is deprecated for this file system, and will be removed in the next major version. Please use the '"+e+".Create("+JSON.stringify(n)+", callback)' method instead. See https://github.com/jvilk/BrowserFS/issues/176 for more details.")}function y(){throw new Error("BFS has reached an impossible code path; please file a bug.")}function g(t,e,n){n.existsSync(t)||(g(be.dirname(t),e,n),n.mkdirSync(t,e))}function _(t){var e=m(t),n=e.byteOffset,r=e.byteLength;return 0===n&&r===e.buffer.byteLength?e.buffer:e.buffer.slice(n,n+r)}function m(t){return t instanceof Uint8Array?t:new Uint8Array(t)}function w(e){return e instanceof t?e:e instanceof Uint8Array?v(e):t.from(e)}function v(e){return e instanceof t?e:0===e.byteOffset&&e.byteLength===e.buffer.byteLength?b(e.buffer):t.from(e.buffer,e.byteOffset,e.byteLength)}function b(e){return t.from(e)}function S(t,e,n){if(void 0===e&&(e=0),void 0===n&&(n=t.length),e<0||n<0||n>t.length||e>n)throw new TypeError("Invalid slice bounds on buffer of length "+t.length+": ["+e+", "+n+"]");if(0===t.length)return E();var r=m(t),i=t[0],o=(i+1)%255;return t[0]=o,r[0]===o?(r[0]=i,v(r.slice(e,n))):(t[0]=i,v(r.subarray(e,n)))}function E(){return Ce||(Ce=t.alloc(0))}function k(e,n){t.isBuffer(e)?n():n(new ke(we.EINVAL,"option must be a Buffer."))}function I(t,e,n){function r(t){a||(t&&(a=!0,n(t)),0===--s&&c&&n())}var i=t.Options,o=t.Name,s=0,a=!1,c=!1;for(var u in i){var f=function(t){if(i.hasOwnProperty(t)){var c=i[t],u=e[t];if(void 0===u||null===u){if(!c.optional){var f=Object.keys(e).filter(function(t){return!(t in i)}).map(function(e){return{str:e,distance:l(t,e)}}).filter(function(t){return t.distance<5}).sort(function(t,e){return t.distance-e.distance});return a?{}:(a=!0,{v:n(new ke(we.EINVAL,"["+o+"] Required option '"+t+"' not provided."+(f.length>0?" You provided unrecognized option '"+f[0].str+"'; perhaps you meant to type '"+t+"'.":"")+"\nOption description: "+c.description))})}}else{if(!(Array.isArray(c.type)?-1!==c.type.indexOf(typeof u):typeof u===c.type))return a?{}:(a=!0,{v:n(new ke(we.EINVAL,"["+o+"] Value provided for option "+t+" is not the proper type. Expected "+(Array.isArray(c.type)?"one of {"+c.type.join(", ")+"}":c.type)+", but received "+typeof u+"\nOption description: "+c.description))});c.validator&&(s++,c.validator(u,r))}}}(u);if(f)return f.v}c=!0,0!==s||a||n()}function O(t){return"/"===t?"":t}function F(t){var e=t.error;if(e[".tag"])return e;if(e.error){var n=e.error;return n[".tag"]?n:n.reason&&n.reason[".tag"]?n.reason:n}if("string"==typeof e)try{var r=JSON.parse(e);if(r.error&&r.error.reason&&r.error.reason[".tag"])return r.error.reason}catch(t){}return e}function N(t){if(t.user_message)return t.user_message.text;if(t.error_summary)return t.error_summary;if("string"==typeof t.error)return t.error;if("object"==typeof t.error)return N(t.error);throw new Error("Dropbox's servers gave us a garbage error message: "+JSON.stringify(t))}function R(t,e,n){switch(t[".tag"]){case"malformed_path":return new ke(we.EBADF,n,e);case"not_found":return ke.ENOENT(e);case"not_file":return ke.EISDIR(e);case"not_folder":return ke.ENOTDIR(e);case"restricted_content":return ke.EPERM(e);case"other":default:return new ke(we.EIO,n,e)}}function T(t,e,n){switch(t[".tag"]){case"malformed_path":case"disallowed_name":return new ke(we.EBADF,n,e);case"conflict":case"no_write_permission":case"team_folder":return ke.EPERM(e);case"insufficient_space":return new ke(we.ENOSPC,n);case"other":default:return new ke(we.EIO,n,e)}}function L(t,e,n){var r={path:O(e)};t.filesDeleteV2(r).then(function(){n()}).catch(function(r){var i=F(r);switch(i[".tag"]){case"path_lookup":n(R(i.path_lookup,e,N(r)));break;case"path_write":n(T(i.path_write,e,N(r)));break;case"too_many_write_operations":setTimeout(function(){return L(t,e,n)},500+300*Math.random());break;case"other":default:n(new ke(we.EIO,N(r),e))}})}function x(t,e,n){var r=F(t);switch(r[".tag"]){case"path":n(R(r.path,e,N(t)));break;case"other":default:n(new ke(we.EIO,N(t),e))}}function D(t,e,n,r,i){var o=n.entries.map(function(t){return t.path_display}).filter(function(t){return!!t}),s=r.concat(o);if(n.has_more){var a={cursor:n.cursor};t.filesListFolderContinue(a).then(function(n){D(t,e,n,s,i)}).catch(function(t){x(t,e,i)})}else i(null,s)}function A(t,e){void 0===e&&(e="");for(var n=t.errno,r=t.node,i=[];r&&(i.unshift(r.name),r!==r.parent);)r=r.parent;return new ke(n,Se[n],i.length>0?"/"+i.join("/"):e)}function P(t,e){if(null!==e&&"object"==typeof e){var n=e,r=n.path;r&&(r="/"+be.relative(t,r),n.message=n.message.replace(n.path,r),n.path=r)}return e}function C(t,e){return"function"==typeof e?function(n){arguments.length>0&&(arguments[0]=P(t,n)),e.apply(null,arguments)}:e}function U(t,e,n){return"Sync"!==t.slice(t.length-4)?function(){return arguments.length>0&&(e&&(arguments[0]=be.join(this._folder,arguments[0])),n&&(arguments[1]=be.join(this._folder,arguments[1])),arguments[arguments.length-1]=C(this._folder,arguments[arguments.length-1])),this._wrapped[t].apply(this._wrapped,arguments)}:function(){try{return e&&(arguments[0]=be.join(this._folder,arguments[0])),n&&(arguments[1]=be.join(this._folder,arguments[1])),this._wrapped[t].apply(this._wrapped,arguments)}catch(t){throw P(this._folder,t)}}}function M(t,e){e|=0;for(var n=Math.max(t.length-e,0),r=Array(n),i=0;i-1&&t%1==0&&t<=Tn}function G(t){return null!=t&&K(t.length)&&!J(t)}function Q(){}function $(t){return function(){if(null!==t){var e=t;t=null,e.apply(this,arguments)}}}function tt(t,e){for(var n=-1,r=Array(t);++n-1&&t%1==0&&t0&&t[0]instanceof ke&&e.standardizeError(t[0],o.path,i),s.apply(null,t)}}return o.fs[t].apply(o.fs,n)}}function Lt(t){return 146|t}function xt(t){return Oe.getFileFlag(t)}function Dt(t){return{type:Xr.API_ERROR,errorData:zt(t.writeToBuffer())}}function At(t){return ke.fromBuffer(qt(t.errorData))}function Pt(t){return{type:Xr.ERROR,name:t.name,message:t.message,stack:t.stack}}function Ct(t){var e=Je[t.name];"function"!=typeof e&&(e=Error);var n=new e(t.message);return n.stack=t.stack,n}function Ut(t){return{type:Xr.STATS,statsData:zt(t.toBuffer())}}function Mt(t){return Ne.fromBuffer(qt(t.statsData))}function jt(t){return{type:Xr.FILEFLAG,flagStr:t.getFlagString()}}function Bt(t){return Oe.getFileFlag(t.flagStr)}function zt(t){return _(t)}function qt(t){return b(t)}function Vt(t){return{type:Xr.BUFFER,data:zt(t)}}function Wt(t){return qt(t.data)}function Ht(t){return t&&"object"==typeof t&&t.hasOwnProperty("browserfsMessage")&&t.browserfsMessage}function Zt(t){return t&&"object"==typeof t&&t.hasOwnProperty("browserfsMessage")&&t.browserfsMessage}function Yt(e,n,r){var i=new XMLHttpRequest;i.open("GET",e,!0);var o=!0;switch(n){case"buffer":i.responseType="arraybuffer";break;case"json":try{i.responseType="json",o="json"===i.responseType}catch(t){o=!1}break;default:return r(new ke(we.EINVAL,"Invalid download type: "+n))}i.onreadystatechange=function(e){if(4===i.readyState){if(200!==i.status)return r(new ke(we.EIO,"XHR error: response returned code "+i.status));switch(n){case"buffer":return r(null,i.response?t.from(i.response):E());case"json":return o?r(null,i.response):r(null,JSON.parse(i.responseText))}}},i.send()}function Xt(e,n){var r=new XMLHttpRequest;r.open("GET",e,!1);var i=null,o=null;if(r.overrideMimeType("text/plain; charset=x-user-defined"),r.onreadystatechange=function(e){if(4===r.readyState){if(200!==r.status)return void(o=new ke(we.EIO,"XHR error: response returned code "+r.status));switch(n){case"buffer":var s=r.responseText;i=t.alloc(s.length);for(var a=0;a>5&15)-1,i=1980+(e>>9),o=31&t,s=t>>5&63,a=t>>11;return new Date(i,r,n,a,s,o)}function se(t,e,n,r){return 0===r?"":e?t.toString("utf8",n,n+r):ai.byte2str(t.slice(n,n+r))}function ae(t,e,n){return t.toString("ascii",e,e+n).trim()}function ce(t,e,n){if(1===n)return String.fromCharCode(t[e]);for(var r=Math.floor(n/2),i=new Array(r),o=0;othis._buffer.length){var n=t.alloc(e-this._buffer.length,0);return this.writeSync(n,0,n.length,this._buffer.length),void(this._flag.isSynchronous()&&xe.getRootFS().supportsSynch()&&this.syncSync())}this._stat.size=e;var r=t.alloc(e);this._buffer.copy(r,0,0,e),this._buffer=r,this._flag.isSynchronous()&&xe.getRootFS().supportsSynch()&&this.syncSync()},n.prototype.write=function(t,e,n,r,i){try{i(null,this.writeSync(t,e,n,r),t)}catch(t){i(t)}},n.prototype.writeSync=function(e,n,r,i){if(this._dirty=!0,void 0!==i&&null!==i||(i=this.getPos()),!this._flag.isWriteable())throw new ke(we.EPERM,"File not opened with a writeable mode.");var o=i+r;if(o>this._stat.size&&(this._stat.size=o,o>this._buffer.length)){var s=t.alloc(o);this._buffer.copy(s),this._buffer=s}var a=e.copy(this._buffer,i,n,n+r);return this._stat.mtime=new Date,this._flag.isSynchronous()?(this.syncSync(),a):(this.setPos(i+a),a)},n.prototype.read=function(t,e,n,r,i){try{i(null,this.readSync(t,e,n,r),t)}catch(t){i(t)}},n.prototype.readSync=function(t,e,n,r){if(!this._flag.isReadable())throw new ke(we.EPERM,"File not opened with a readable mode.");void 0!==r&&null!==r||(r=this.getPos()),r+n>this._stat.size&&(n=this._stat.size-r);var i=this._buffer.copy(t,e,r,r+n);return this._stat.atime=new Date,this._pos=r+n,i},n.prototype.chmod=function(t,e){try{this.chmodSync(t),e()}catch(t){e(t)}},n.prototype.chmodSync=function(t){if(!this._fs.supportsProps())throw new ke(we.ENOTSUP);this._dirty=!0,this._stat.chmod(t),this.syncSync()},n.prototype.isDirty=function(){return this._dirty},n.prototype.resetDirty=function(){this._dirty=!1},n}(Ve),He=function(t){function e(e,n,r,i,o){t.call(this,e,n,r,i,o)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.sync=function(t){t()},e.prototype.syncSync=function(){},e.prototype.close=function(t){t()},e.prototype.closeSync=function(){},e}(We),Ze=function(t){function e(e,n,r,i,o){t.call(this,e,n,r,i,o)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.syncSync=function(){this.isDirty()&&(this._fs._syncSync(this),this.resetDirty())},e.prototype.closeSync=function(){this.syncSync()},e}(We),Ye=function(t){function e(e,n){t.call(this),this._queue=[],this._queueRunning=!1,this._isInitialized=!1,this._initializeCallbacks=[],this._sync=e,this._async=n}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.Create=function(t,n){try{var r=new e(t.sync,t.async);r._initialize(function(t){t?n(t):n(null,r)})}catch(t){n(t)}},e.isAvailable=function(){return!0},e.prototype.getName=function(){return e.Name},e.prototype._syncSync=function(t){this._sync.writeFileSync(t.getPath(),t.getBuffer(),null,Oe.getFileFlag("w"),t.getStats().mode),this.enqueueOp({apiMethod:"writeFile",arguments:[t.getPath(),t.getBuffer(),null,t.getFlag(),t.getStats().mode]})},e.prototype.isReadOnly=function(){return!1},e.prototype.supportsSynch=function(){return!0},e.prototype.supportsLinks=function(){return!1},e.prototype.supportsProps=function(){return this._sync.supportsProps()&&this._async.supportsProps()},e.prototype.renameSync=function(t,e){this._sync.renameSync(t,e),this.enqueueOp({apiMethod:"rename",arguments:[t,e]})},e.prototype.statSync=function(t,e){return this._sync.statSync(t,e)},e.prototype.openSync=function(t,e,n){return this._sync.openSync(t,e,n).closeSync(),new Ze(this,t,e,this._sync.statSync(t,!1),this._sync.readFileSync(t,null,Oe.getFileFlag("r")))},e.prototype.unlinkSync=function(t){this._sync.unlinkSync(t),this.enqueueOp({apiMethod:"unlink",arguments:[t]})},e.prototype.rmdirSync=function(t){this._sync.rmdirSync(t),this.enqueueOp({apiMethod:"rmdir",arguments:[t]})},e.prototype.mkdirSync=function(t,e){this._sync.mkdirSync(t,e),this.enqueueOp({apiMethod:"mkdir",arguments:[t,e]})},e.prototype.readdirSync=function(t){return this._sync.readdirSync(t)},e.prototype.existsSync=function(t){return this._sync.existsSync(t)},e.prototype.chmodSync=function(t,e,n){this._sync.chmodSync(t,e,n),this.enqueueOp({apiMethod:"chmod",arguments:[t,e,n]})},e.prototype.chownSync=function(t,e,n,r){this._sync.chownSync(t,e,n,r),this.enqueueOp({apiMethod:"chown",arguments:[t,e,n,r]})},e.prototype.utimesSync=function(t,e,n){this._sync.utimesSync(t,e,n),this.enqueueOp({apiMethod:"utimes",arguments:[t,e,n]})},e.prototype._initialize=function(t){var e=this,n=this._initializeCallbacks,r=function(t){e._isInitialized=!t,e._initializeCallbacks=[],n.forEach(function(e){return e(t)})};if(this._isInitialized)t();else if(1===n.push(t)){var i=function(t,n,r){"/"!==t&&e._sync.mkdirSync(t,n),e._async.readdir(t,function(e,n){function i(e){e?r(e):o0){var r=e._queue.shift(),i=r.arguments;i.push(n),e._async[r.apiMethod].apply(e._async,i)}else e._queueRunning=!1};n()}},e}(qe);Ye.Name="AsyncMirror",Ye.Options={sync:{type:"object",description:"The synchronous file system to mirror the asynchronous file system to.",validator:function(t,e){t&&"function"==typeof t.supportsSynch&&t.supportsSynch()?e():e(new ke(we.EINVAL,"'sync' option must be a file system that supports synchronous operations"))}},async:{type:"object",description:"The asynchronous file system to mirror."}};var Xe,Je="undefined"!=typeof window?window:"undefined"!=typeof self?self:r;if("undefined"!=typeof setImmediate)Xe=setImmediate;else{var Ke=Je,Ge=[];if(function(){if(void 0!==Ke.importScripts||!Ke.postMessage)return!1;var t=!0,e=Ke.onmessage;return Ke.onmessage=function(){t=!1},Ke.postMessage("","*"),Ke.onmessage=e,t}()){Xe=function(t){Ge.push(t),Ke.postMessage("zero-timeout-message","*")};var Qe=function(t){if(t.source===self&&"zero-timeout-message"===t.data&&(t.stopPropagation?t.stopPropagation():t.cancelBubble=!0,Ge.length>0)){return Ge.shift()()}};Ke.addEventListener?Ke.addEventListener("message",Qe,!0):Ke.attachEvent("onmessage",Qe)}else if(Ke.MessageChannel){var $e=new Ke.MessageChannel;$e.port1.onmessage=function(t){if(Ge.length>0)return Ge.shift()()},Xe=function(t){Ge.push(t),$e.port2.postMessage("")}}else Xe=function(t){return setTimeout(t,0)}}var tn=Xe,en=function(t){function e(e,n,r,i,o){t.call(this,e,n,r,i,o)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.sync=function(t){this._fs._syncFile(this.getPath(),this.getBuffer(),t)},e.prototype.close=function(t){this.sync(t)},e}(We),nn=function(e){function n(t){e.call(this),this._client=t}return e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n,n.Create=function(t,e){e(null,new n(t.client))},n.isAvailable=function(){return"undefined"!=typeof Dropbox},n.prototype.getName=function(){return n.Name},n.prototype.isReadOnly=function(){return!1},n.prototype.supportsSymlinks=function(){return!1},n.prototype.supportsProps=function(){return!1},n.prototype.supportsSynch=function(){return!1},n.prototype.empty=function(t){var e=this;this.readdir("/",function(n,r){if(r){var i=function(n){0===r.length?t():L(e._client,r.shift(),i)};i()}else t(n)})},n.prototype.rename=function(t,e,n){var r=this;this.stat(e,!1,function(i,o){var s=function(){var i={from_path:O(t),to_path:O(e)};r._client.filesMoveV2(i).then(function(){return n()}).catch(function(r){var i=F(r);switch(i[".tag"]){case"from_lookup":n(R(i.from_lookup,t,N(r)));break;case"from_write":n(T(i.from_write,t,N(r)));break;case"to":n(T(i.to,e,N(r)));break;case"cant_copy_shared_folder":case"cant_nest_shared_folder":n(new ke(we.EPERM,N(r),t));break;case"cant_move_folder_into_itself":case"duplicated_or_nested_paths":n(new ke(we.EBADF,N(r),t));break;case"too_many_files":n(new ke(we.ENOSPC,N(r),t));break;case"other":default:n(new ke(we.EIO,N(r),t))}})};i?s():t===e?i?n(ke.ENOENT(e)):n():o&&o.isDirectory()?n(ke.EISDIR(e)):r.unlink(e,function(t){t?n(t):s()})})},n.prototype.stat=function(t,e,n){if("/"===t)return void tn(function(){n(null,new Ne(Fe.DIRECTORY,4096))});var r={path:O(t)};this._client.filesGetMetadata(r).then(function(e){switch(e[".tag"]){case"file":var r=e;n(null,new Ne(Fe.FILE,r.size));break;case"folder":n(null,new Ne(Fe.DIRECTORY,4096));break;case"deleted":n(ke.ENOENT(t))}}).catch(function(e){var r=F(e);switch(r[".tag"]){case"path":n(R(r.path,t,N(e)));break;default:n(new ke(we.EIO,N(e),t))}})},n.prototype.openFile=function(t,e,n){var r=this,i={path:O(t)};this._client.filesDownload(i).then(function(i){var o=i.fileBlob,s=new FileReader;s.onload=function(){var i=s.result;n(null,new en(r,t,e,new Ne(Fe.FILE,i.byteLength),b(i)))},s.readAsArrayBuffer(o)}).catch(function(e){var r=F(e);switch(r[".tag"]){case"path":n(R(r.path,t,N(e)));break;case"other":default:n(new ke(we.EIO,N(e),t))}})},n.prototype.createFile=function(e,n,r,i){var o=this,s=t.alloc(0),a=new Blob([_(s)],{type:"octet/stream"}),c={contents:a,path:O(e)};this._client.filesUpload(c).then(function(t){i(null,new en(o,e,n,new Ne(Fe.FILE,0),s))}).catch(function(t){var s=F(t);switch(s[".tag"]){case"path":i(T(s.path.reason,e,N(t)));break;case"too_many_write_operations":setTimeout(function(){return o.createFile(e,n,r,i)},500+300*Math.random());break;case"other":default:i(new ke(we.EIO,N(t),e))}})},n.prototype.unlink=function(t,e){var n=this;this.stat(t,!1,function(r,i){i?i.isDirectory()?e(ke.EISDIR(t)):L(n._client,t,e):e(r)})},n.prototype.rmdir=function(t,e){var n=this;this.readdir(t,function(r,i){i?i.length>0?e(ke.ENOTEMPTY(t)):L(n._client,t,e):e(r)})},n.prototype.mkdir=function(t,e,n){var r=this,i=be.dirname(t);this.stat(i,!1,function(o,s){if(o)n(o);else if(s&&!s.isDirectory())n(ke.ENOTDIR(i));else{var a={path:O(t)};r._client.filesCreateFolderV2(a).then(function(){return n()}).catch(function(i){"too_many_write_operations"===F(i)[".tag"]?setTimeout(function(){return r.mkdir(t,e,n)},500+300*Math.random()):n(T(F(i).path,t,N(i)))})}})},n.prototype.readdir=function(t,e){var n=this,r={path:O(t)};this._client.filesListFolder(r).then(function(r){D(n._client,t,r,[],e)}).catch(function(n){x(n,t,e)})},n.prototype._syncFile=function(t,e,n){var r=this,i=new Blob([_(e)],{type:"octet/stream"}),o={contents:i,path:O(t),mode:{".tag":"overwrite"}};this._client.filesUpload(o).then(function(){n()}).catch(function(i){var o=F(i);switch(o[".tag"]){case"path":n(T(o.path.reason,t,N(i)));break;case"too_many_write_operations":setTimeout(function(){return r._syncFile(t,e,n)},500+300*Math.random());break;case"other":default:n(new ke(we.EIO,N(i),t))}})},n}(ze);nn.Name="DropboxV2",nn.Options={client:{type:"object",description:"An *authenticated* Dropbox client. Must be from the 2.5.x JS SDK."}};var rn=function(t){function e(e,n,r,i){t.call(this),this._fs=e,this._FS=n,this._path=r,this._stream=i}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getPos=function(){},e.prototype.close=function(t){var e=null;try{this.closeSync()}catch(t){e=t}finally{t(e)}},e.prototype.closeSync=function(){try{this._FS.close(this._stream)}catch(t){throw A(t,this._path)}},e.prototype.stat=function(t){try{t(null,this.statSync())}catch(e){t(e)}},e.prototype.statSync=function(){try{return this._fs.statSync(this._path,!1)}catch(t){throw A(t,this._path)}},e.prototype.truncate=function(t,e){var n=null;try{this.truncateSync(t)}catch(t){n=t}finally{e(n)}},e.prototype.truncateSync=function(t){try{this._FS.ftruncate(this._stream.fd,t)}catch(t){throw A(t,this._path)}},e.prototype.write=function(t,e,n,r,i){try{i(null,this.writeSync(t,e,n,r),t)}catch(t){i(t)}},e.prototype.writeSync=function(t,e,n,r){try{var i=m(t),o=null===r?void 0:r;return this._FS.write(this._stream,i,e,n,o)}catch(t){throw A(t,this._path)}},e.prototype.read=function(t,e,n,r,i){try{i(null,this.readSync(t,e,n,r),t)}catch(t){i(t)}},e.prototype.readSync=function(t,e,n,r){try{var i=m(t),o=null===r?void 0:r;return this._FS.read(this._stream,i,e,n,o)}catch(t){throw A(t,this._path)}},e.prototype.sync=function(t){t()},e.prototype.syncSync=function(){},e.prototype.chown=function(t,e,n){var r=null;try{this.chownSync(t,e)}catch(t){r=t}finally{n(r)}},e.prototype.chownSync=function(t,e){try{this._FS.fchown(this._stream.fd,t,e)}catch(t){throw A(t,this._path)}},e.prototype.chmod=function(t,e){var n=null;try{this.chmodSync(t)}catch(t){n=t}finally{e(n)}},e.prototype.chmodSync=function(t){try{this._FS.fchmod(this._stream.fd,t)}catch(t){throw A(t,this._path)}},e.prototype.utimes=function(t,e,n){var r=null;try{this.utimesSync(t,e)}catch(t){r=t}finally{n(r)}},e.prototype.utimesSync=function(t,e){this._fs.utimesSync(this._path,t,e)},e}(Ve),on=function(e){function n(t){e.call(this),this._FS=t}return e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n,n.Create=function(t,e){e(null,new n(t.FS))},n.isAvailable=function(){return!0},n.prototype.getName=function(){return this._FS.DB_NAME()},n.prototype.isReadOnly=function(){return!1},n.prototype.supportsLinks=function(){return!0},n.prototype.supportsProps=function(){return!0},n.prototype.supportsSynch=function(){return!0},n.prototype.renameSync=function(t,e){try{this._FS.rename(t,e)}catch(n){throw n.errno===we.ENOENT?A(n,this.existsSync(t)?e:t):A(n)}},n.prototype.statSync=function(t,e){try{var n=e?this._FS.lstat(t):this._FS.stat(t),r=this.modeToFileType(n.mode);return new Ne(r,n.size,n.mode,n.atime,n.mtime,n.ctime)}catch(e){throw A(e,t)}},n.prototype.openSync=function(t,e,n){try{var r=this._FS.open(t,e.getFlagString(),n);if(this._FS.isDir(r.node.mode))throw this._FS.close(r),ke.EISDIR(t);return new rn(this,this._FS,t,r)}catch(e){throw A(e,t)}},n.prototype.unlinkSync=function(t){try{this._FS.unlink(t)}catch(e){throw A(e,t)}},n.prototype.rmdirSync=function(t){try{this._FS.rmdir(t)}catch(e){throw A(e,t)}},n.prototype.mkdirSync=function(t,e){try{this._FS.mkdir(t,e)}catch(e){throw A(e,t)}},n.prototype.readdirSync=function(t){try{return this._FS.readdir(t).filter(function(t){return"."!==t&&".."!==t})}catch(e){throw A(e,t)}},n.prototype.truncateSync=function(t,e){try{this._FS.truncate(t,e)}catch(e){throw A(e,t)}},n.prototype.readFileSync=function(t,e,n){try{var r=this._FS.readFile(t,{flags:n.getFlagString()}),i=v(r);return e?i.toString(e):i}catch(e){throw A(e,t)}},n.prototype.writeFileSync=function(e,n,r,i,o){try{r&&(n=t.from(n,r));var s=m(n);this._FS.writeFile(e,s,{flags:i.getFlagString(),encoding:"binary"}),this._FS.chmod(e,o)}catch(t){throw A(t,e)}},n.prototype.chmodSync=function(t,e,n){try{e?this._FS.lchmod(t,n):this._FS.chmod(t,n)}catch(e){throw A(e,t)}},n.prototype.chownSync=function(t,e,n,r){try{e?this._FS.lchown(t,n,r):this._FS.chown(t,n,r)}catch(e){throw A(e,t)}},n.prototype.symlinkSync=function(t,e,n){try{this._FS.symlink(t,e)}catch(t){throw A(t)}},n.prototype.readlinkSync=function(t){try{return this._FS.readlink(t)}catch(e){throw A(e,t)}},n.prototype.utimesSync=function(t,e,n){try{this._FS.utime(t,e.getTime(),n.getTime())}catch(e){throw A(e,t)}},n.prototype.modeToFileType=function(t){if(this._FS.isDir(t))return Fe.DIRECTORY;if(this._FS.isFile(t))return Fe.FILE;if(this._FS.isLink(t))return Fe.SYMLINK;throw ke.EPERM("Invalid mode: "+t)},n}(qe);on.Name="EmscriptenFileSystem",on.Options={FS:{type:"object",description:"The Emscripten file system to use (the `FS` variable)"}};var sn=function(t){function e(e,n){t.call(this),this._folder=e,this._wrapped=n}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.Create=function(t,n){var r=new e(t.folder,t.wrapped);r._initialize(function(t){t?n(t):n(null,r)})},e.isAvailable=function(){return!0},e.prototype.getName=function(){return this._wrapped.getName()},e.prototype.isReadOnly=function(){return this._wrapped.isReadOnly()},e.prototype.supportsProps=function(){return this._wrapped.supportsProps()},e.prototype.supportsSynch=function(){return this._wrapped.supportsSynch()},e.prototype.supportsLinks=function(){return!1},e.prototype._initialize=function(t){var e=this;this._wrapped.exists(this._folder,function(n){n?t():e._wrapped.isReadOnly()?t(ke.ENOENT(e._folder)):e._wrapped.mkdir(e._folder,511,t)})},e}(ze);sn.Name="FolderAdapter",sn.Options={folder:{type:"string",description:"The folder to use as the root directory"},wrapped:{type:"object",description:"The file system to wrap"}},["diskSpace","stat","statSync","open","openSync","unlink","unlinkSync","rmdir","rmdirSync","mkdir","mkdirSync","readdir","readdirSync","exists","existsSync","realpath","realpathSync","truncate","truncateSync","readFile","readFileSync","writeFile","writeFileSync","appendFile","appendFileSync","chmod","chmodSync","chown","chownSync","utimes","utimesSync","readlink","readlinkSync"].forEach(function(t){sn.prototype[t]=U(t,!0,!1)}),["rename","renameSync","link","linkSync","symlink","symlinkSync"].forEach(function(t){sn.prototype[t]=U(t,!0,!0)});var an,cn=function(t){return function(){var e=M(arguments),n=e.pop();t.call(this,e,n)}},un="function"==typeof setImmediate&&setImmediate,fn="object"==typeof i&&"function"==typeof i.nextTick;an=un?setImmediate:fn?i.nextTick:B;var hn=function(t){return function(e){var n=M(arguments,1);t(function(){e.apply(null,n)})}}(an),pn="function"==typeof Symbol,ln="object"==typeof r&&r&&r.Object===Object&&r,dn="object"==typeof self&&self&&self.Object===Object&&self,yn=ln||dn||Function("return this")(),gn=yn.Symbol,_n=Object.prototype,mn=_n.hasOwnProperty,wn=_n.toString,vn=gn?gn.toStringTag:void 0,bn=Object.prototype,Sn=bn.toString,En="[object Null]",kn="[object Undefined]",In=gn?gn.toStringTag:void 0,On="[object AsyncFunction]",Fn="[object Function]",Nn="[object GeneratorFunction]",Rn="[object Proxy]",Tn=9007199254740991,Ln={},xn="function"==typeof Symbol&&Symbol.iterator,Dn=function(t){return xn&&t[xn]&&t[xn]()},An="[object Arguments]",Pn=Object.prototype,Cn=Pn.hasOwnProperty,Un=Pn.propertyIsEnumerable,Mn=nt(function(){return arguments}())?nt:function(t){return et(t)&&Cn.call(t,"callee")&&!Un.call(t,"callee")},jn=Array.isArray,Bn="object"==typeof e&&e&&!e.nodeType&&e,zn=Bn&&"object"==typeof o&&o&&!o.nodeType&&o,qn=zn&&zn.exports===Bn,Vn=qn?yn.Buffer:void 0,Wn=Vn?Vn.isBuffer:void 0,Hn=Wn||rt,Zn=9007199254740991,Yn=/^(?:0|[1-9]\d*)$/,Xn={};Xn["[object Float32Array]"]=Xn["[object Float64Array]"]=Xn["[object Int8Array]"]=Xn["[object Int16Array]"]=Xn["[object Int32Array]"]=Xn["[object Uint8Array]"]=Xn["[object Uint8ClampedArray]"]=Xn["[object Uint16Array]"]=Xn["[object Uint32Array]"]=!0,Xn["[object Arguments]"]=Xn["[object Array]"]=Xn["[object ArrayBuffer]"]=Xn["[object Boolean]"]=Xn["[object DataView]"]=Xn["[object Date]"]=Xn["[object Error]"]=Xn["[object Function]"]=Xn["[object Map]"]=Xn["[object Number]"]=Xn["[object Object]"]=Xn["[object RegExp]"]=Xn["[object Set]"]=Xn["[object String]"]=Xn["[object WeakMap]"]=!1;var Jn="object"==typeof e&&e&&!e.nodeType&&e,Kn=Jn&&"object"==typeof o&&o&&!o.nodeType&&o,Gn=Kn&&Kn.exports===Jn,Qn=Gn&&ln.process,$n=function(){try{return Qn&&Qn.binding&&Qn.binding("util")}catch(t){}}(),tr=$n&&$n.isTypedArray,er=tr?function(t){return function(e){return t(e)}}(tr):ot,nr=Object.prototype,rr=nr.hasOwnProperty,ir=Object.prototype,or=function(t,e){return function(n){return t(e(n))}}(Object.keys,Object),sr=Object.prototype,ar=sr.hasOwnProperty,cr=function(t,e){return function(n,r,i){return t(n,e,r,i)}}(gt,1/0),ur=function(t,e,n){(G(t)?_t:cr)(t,H(e),n)},fr=(function(t){}(),"[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]"),hr="(?:\\ud83c[\\udde6-\\uddff]){2}",pr="[\\ud800-\\udbff][\\udc00-\\udfff]",lr="(?:[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|\\ud83c[\\udffb-\\udfff])?";["[^\\ud800-\\udfff]",hr,pr].join("|"),["[^\\ud800-\\udfff]"+fr+"?",fr,hr,pr,"[\\ud800-\\udfff]"].join("|");fn?i.nextTick:un&&setImmediate;var dr=(Math.ceil,Math.max,Je.webkitRequestFileSystem||Je.requestFileSystem||null),yr=function(t){function e(e,n,r,i,o,s){t.call(this,e,r,i,o,s),this._entry=n}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.sync=function(t){var e=this;if(!this.isDirty())return t();this._entry.createWriter(function(n){var r=e.getBuffer(),i=new Blob([_(r)]),o=i.size;n.onwriteend=function(r){n.onwriteend=null,n.onerror=null,n.truncate(o),e.resetDirty(),t()},n.onerror=function(n){t(Et(n,e.getPath(),!1))},n.write(i)})},e.prototype.close=function(t){this.sync(t)},e}(We),gr=function(t){function e(e,n){void 0===e&&(e=5),void 0===n&&(n=Je.PERSISTENT),t.call(this),this.size=1048576*e,this.type=n}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.Create=function(t,n){var r=new e(t.size,t.type);r._allocate(function(t){return t?n(t):n(null,r)})},e.isAvailable=function(){return!!dr},e.prototype.getName=function(){return e.Name},e.prototype.isReadOnly=function(){return!1},e.prototype.supportsSymlinks=function(){return!1},e.prototype.supportsProps=function(){return!1},e.prototype.supportsSynch=function(){return!1},e.prototype.empty=function(t){this._readdir("/",function(e,n){if(e)t(e);else{var r=function(n){e?t(e):t()};wt(n,function(t,e){var n=function(){e()},r=function(n){e(Et(n,t.fullPath,!t.isDirectory))};vt(t)?t.removeRecursively(n,r):t.remove(n,r)},r)}})},e.prototype.rename=function(t,e,n){var r=this,i=2,o=0,s=this.fs.root,a=t,c=function(t){--i<=0&&n(Et(t,a,!1))},u=function(i){return 2==++o?n(new ke(we.EINVAL,"Something was identified as both a file and a directory. This should never happen.")):t===e?n():(a=be.dirname(e),void s.getDirectory(a,{},function(o){a=be.basename(e),i.moveTo(o,a,function(t){n()},function(o){i.isDirectory?(a=e,r.unlink(e,function(i){i?c(o):r.rename(t,e,n)})):c(o)})},c))};s.getFile(t,{},u,c),s.getDirectory(t,{},u,c)},e.prototype.stat=function(t,e,n){var r=this,i={create:!1},o=function(t){var e=function(t){var e=new Ne(Fe.FILE,t.size);n(null,e)};t.file(e,a)},s=function(t){var e=new Ne(Fe.DIRECTORY,4096);n(null,e)},a=function(e){n(Et(e,t,!1))},c=function(){r.fs.root.getDirectory(t,i,s,a)};this.fs.root.getFile(t,i,o,c)},e.prototype.open=function(t,e,n,r){var i=this,o=function(n){r("InvalidModificationError"===n.name&&e.isExclusive()?ke.EEXIST(t):Et(n,t,!1))};this.fs.root.getFile(t,{create:e.pathNotExistsAction()===Ee.CREATE_FILE,exclusive:e.isExclusive()},function(n){n.file(function(s){var a=new FileReader;a.onloadend=function(o){var c=i._makeFile(t,n,e,s,a.result);r(null,c)},a.onerror=function(t){o(a.error)},a.readAsArrayBuffer(s)},o)},o)},e.prototype.unlink=function(t,e){this._remove(t,e,!0)},e.prototype.rmdir=function(t,e){var n=this;this.readdir(t,function(r,i){r?e(r):i.length>0?e(ke.ENOTEMPTY(t)):n._remove(t,e,!1)})},e.prototype.mkdir=function(t,e,n){var r={create:!0,exclusive:!0},i=function(t){n()},o=function(e){n(Et(e,t,!0))};this.fs.root.getDirectory(t,r,i,o)},e.prototype.readdir=function(t,e){this._readdir(t,function(t,n){if(!n)return e(t);for(var r=[],i=0,o=n;i0)throw ke.ENOTEMPTY(t);this.removeEntry(t,!0)},n.prototype.mkdirSync=function(e,n){var r=this.store.beginTransaction("readwrite"),i=t.from("{}");this.commitNewFile(r,e,Fe.DIRECTORY,n,i)},n.prototype.readdirSync=function(t){var e=this.store.beginTransaction("readonly");return Object.keys(this.getDirListing(e,t,this.findINode(e,t)))},n.prototype._syncSync=function(t,e,n){var r=this.store.beginTransaction("readwrite"),i=this._findINode(r,be.dirname(t),be.basename(t)),o=this.getINode(r,t,i),s=o.update(n);try{r.put(o.id,e,!0),s&&r.put(i,o.toBuffer(),!0)}catch(t){throw r.abort(),t}r.commit()},n.prototype.makeRootDirectory=function(){var t=this.store.beginTransaction("readwrite");if(void 0===t.get("/")){var e=(new Date).getTime(),n=new _r(It(),4096,511|Fe.DIRECTORY,e,e,e);t.put(n.id,kt(),!1),t.put("/",n.toBuffer(),!1),t.commit()}},n.prototype._findINode=function(t,e,n){var r=this,i=function(i){var o=r.getDirListing(t,e,i);if(o[n])return o[n];throw ke.ENOENT(be.resolve(e,n))};return"/"===e?""===n?"/":i(this.getINode(t,e,"/")):i(this.getINode(t,e+be.sep+n,this._findINode(t,be.dirname(e),be.basename(e))))},n.prototype.findINode=function(t,e){return this.getINode(t,e,this._findINode(t,be.dirname(e),be.basename(e)))},n.prototype.getINode=function(t,e,n){var r=t.get(n);if(void 0===r)throw ke.ENOENT(e);return _r.fromBuffer(r)},n.prototype.getDirListing=function(t,e,n){if(!n.isDirectory())throw ke.ENOTDIR(e);var r=t.get(n.id);if(void 0===r)throw ke.ENOENT(e);return JSON.parse(r.toString())},n.prototype.addNewNode=function(t,e){for(var n;;)try{return n=It(),t.put(n,e,!1),n}catch(t){}throw new ke(we.EIO,"Unable to commit data to key-value store.")},n.prototype.commitNewFile=function(e,n,r,i,o){var s=be.dirname(n),a=be.basename(n),c=this.findINode(e,s),u=this.getDirListing(e,s,c),f=(new Date).getTime();if("/"===n)throw ke.EEXIST(n);if(u[a])throw ke.EEXIST(n);var h;try{var p=this.addNewNode(e,o);h=new _r(p,o.length,i|r,f,f,f);var l=this.addNewNode(e,h.toBuffer());u[a]=l,e.put(c.id,t.from(JSON.stringify(u)),!0)}catch(t){throw e.abort(),t}return e.commit(),h},n.prototype.removeEntry=function(e,n){var r=this.store.beginTransaction("readwrite"),i=be.dirname(e),o=this.findINode(r,i),s=this.getDirListing(r,i,o),a=be.basename(e);if(!s[a])throw ke.ENOENT(e);var c=s[a];delete s[a];var u=this.getINode(r,e,c);if(!n&&u.isDirectory())throw ke.EISDIR(e);if(n&&!u.isDirectory())throw ke.ENOTDIR(e);try{r.del(u.id),r.del(c),r.put(o.id,t.from(JSON.stringify(s)),!0)}catch(t){throw r.abort(),t}r.commit()},n}(qe),Sr=function(t){function e(e,n,r,i,o){t.call(this,e,n,r,i,o)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.sync=function(t){var e=this;this.isDirty()?this._fs._sync(this.getPath(),this.getBuffer(),this.getStats(),function(n){n||e.resetDirty(),t(n)}):t()},e.prototype.close=function(t){this.sync(t)},e}(We),Er=function(e){function n(){e.apply(this,arguments)}return e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n,n.isAvailable=function(){return!0},n.prototype.init=function(t,e){this.store=t,this.makeRootDirectory(e)},n.prototype.getName=function(){return this.store.name()},n.prototype.isReadOnly=function(){return!1},n.prototype.supportsSymlinks=function(){return!1},n.prototype.supportsProps=function(){return!1},n.prototype.supportsSynch=function(){return!1},n.prototype.empty=function(t){var e=this;this.store.clear(function(n){Ot(n,t)&&e.makeRootDirectory(t)})},n.prototype.rename=function(e,n,r){var i=this,o=this.store.beginTransaction("readwrite"),s=be.dirname(e),a=be.basename(e),c=be.dirname(n),u=be.basename(n),f={},h={},p=!1;if(0===(c+"/").indexOf(e+"/"))return r(new ke(we.EBUSY,s));var l=function(){if(!p&&h.hasOwnProperty(s)&&h.hasOwnProperty(c)){var l=h[s],d=f[s],y=h[c],g=f[c];if(l[a]){var _=l[a];delete l[a];var m=function(){y[u]=_,o.put(d.id,t.from(JSON.stringify(l)),!0,function(e){Ft(e,o,r)&&(s===c?o.commit(r):o.put(g.id,t.from(JSON.stringify(y)),!0,function(t){Ft(t,o,r)&&o.commit(r)}))})};y[u]?i.getINode(o,n,y[u],function(t,e){Ft(t,o,r)&&(e.isFile()?o.del(e.id,function(t){Ft(t,o,r)&&o.del(y[u],function(t){Ft(t,o,r)&&m()})}):o.abort(function(t){r(ke.EPERM(n))}))}):m()}else r(ke.ENOENT(e))}},d=function(t){i.findINodeAndDirListing(o,t,function(e,n,i){e?p||(p=!0,o.abort(function(){r(e)})):(f[t]=n,h[t]=i,l())})};d(s),s!==c&&d(c)},n.prototype.stat=function(t,e,n){var r=this.store.beginTransaction("readonly");this.findINode(r,t,function(t,e){Ot(t,n)&&n(null,e.toStats())})},n.prototype.createFile=function(t,e,n,r){var i=this,o=this.store.beginTransaction("readwrite"),s=E();this.commitNewFile(o,t,Fe.FILE,n,s,function(n,o){Ot(n,r)&&r(null,new Sr(i,t,e,o.toStats(),s))})},n.prototype.openFile=function(t,e,n){var r=this,i=this.store.beginTransaction("readonly");this.findINode(i,t,function(o,s){Ot(o,n)&&i.get(s.id,function(i,o){Ot(i,n)&&(void 0===o?n(ke.ENOENT(t)):n(null,new Sr(r,t,e,s.toStats(),o)))})})},n.prototype.unlink=function(t,e){this.removeEntry(t,!1,e)},n.prototype.rmdir=function(t,e){var n=this;this.readdir(t,function(r,i){r?e(r):i.length>0?e(ke.ENOTEMPTY(t)):n.removeEntry(t,!0,e)})},n.prototype.mkdir=function(e,n,r){var i=this.store.beginTransaction("readwrite"),o=t.from("{}");this.commitNewFile(i,e,Fe.DIRECTORY,n,o,r)},n.prototype.readdir=function(t,e){var n=this,r=this.store.beginTransaction("readonly");this.findINode(r,t,function(i,o){Ot(i,e)&&n.getDirListing(r,t,o,function(t,n){Ot(t,e)&&e(null,Object.keys(n))})})},n.prototype._sync=function(t,e,n,r){var i=this,o=this.store.beginTransaction("readwrite");this._findINode(o,be.dirname(t),be.basename(t),function(s,a){Ft(s,o,r)&&i.getINode(o,t,a,function(t,i){if(Ft(t,o,r)){var s=i.update(n);o.put(i.id,e,!0,function(t){Ft(t,o,r)&&(s?o.put(a,i.toBuffer(),!0,function(t){Ft(t,o,r)&&o.commit(r)}):o.commit(r))})}})})},n.prototype.makeRootDirectory=function(t){var e=this.store.beginTransaction("readwrite");e.get("/",function(n,r){if(n||void 0===r){var i=(new Date).getTime(),o=new _r(It(),4096,511|Fe.DIRECTORY,i,i,i);e.put(o.id,kt(),!1,function(n){Ft(n,e,t)&&e.put("/",o.toBuffer(),!1,function(n){n?e.abort(function(){t(n)}):e.commit(t)})})}else e.commit(t)})},n.prototype._findINode=function(t,e,n,r){var i=this,o=function(t,i,o){t?r(t):o[n]?r(null,o[n]):r(ke.ENOENT(be.resolve(e,n)))};"/"===e?""===n?r(null,"/"):this.getINode(t,e,"/",function(n,s){Ot(n,r)&&i.getDirListing(t,e,s,function(t,e){o(t,0,e)})}):this.findINodeAndDirListing(t,e,o)},n.prototype.findINode=function(t,e,n){var r=this;this._findINode(t,be.dirname(e),be.basename(e),function(i,o){Ot(i,n)&&r.getINode(t,e,o,n)})},n.prototype.getINode=function(t,e,n,r){t.get(n,function(t,n){Ot(t,r)&&(void 0===n?r(ke.ENOENT(e)):r(null,_r.fromBuffer(n)))})},n.prototype.getDirListing=function(t,e,n,r){n.isDirectory()?t.get(n.id,function(t,n){if(Ot(t,r))try{r(null,JSON.parse(n.toString()))}catch(t){r(ke.ENOENT(e))}}):r(ke.ENOTDIR(e))},n.prototype.findINodeAndDirListing=function(t,e,n){var r=this;this.findINode(t,e,function(i,o){Ot(i,n)&&r.getDirListing(t,e,o,function(t,e){Ot(t,n)&&n(null,o,e)})})},n.prototype.addNewNode=function(t,e,n){var r,i=0,o=function(){5==++i?n(new ke(we.EIO,"Unable to commit data to key-value store.")):(r=It(),t.put(r,e,!1,function(t,e){t||!e?o():n(null,r)}))};o()},n.prototype.commitNewFile=function(e,n,r,i,o,s){var a=this,c=be.dirname(n),u=be.basename(n),f=(new Date).getTime();if("/"===n)return s(ke.EEXIST(n));this.findINodeAndDirListing(e,c,function(c,h,p){Ft(c,e,s)&&(p[u]?e.abort(function(){s(ke.EEXIST(n))}):a.addNewNode(e,o,function(n,c){if(Ft(n,e,s)){var l=new _r(c,o.length,i|r,f,f,f);a.addNewNode(e,l.toBuffer(),function(n,r){Ft(n,e,s)&&(p[u]=r,e.put(h.id,t.from(JSON.stringify(p)),!0,function(t){Ft(t,e,s)&&e.commit(function(t){Ft(t,e,s)&&s(null,l)})}))})}}))})},n.prototype.removeEntry=function(e,n,r){var i=this,o=this.store.beginTransaction("readwrite"),s=be.dirname(e),a=be.basename(e);this.findINodeAndDirListing(o,s,function(s,c,u){if(Ft(s,o,r))if(u[a]){var f=u[a];delete u[a],i.getINode(o,e,f,function(i,s){Ft(i,o,r)&&(!n&&s.isDirectory()?o.abort(function(){r(ke.EISDIR(e))}):n&&!s.isDirectory()?o.abort(function(){r(ke.ENOTDIR(e))}):o.del(s.id,function(e){Ft(e,o,r)&&o.del(f,function(e){Ft(e,o,r)&&o.put(c.id,t.from(JSON.stringify(u)),!0,function(t){Ft(t,o,r)&&o.commit(r)})})}))})}else o.abort(function(){r(ke.ENOENT(e))})})},n}(ze),kr=function(){this.store={}};kr.prototype.name=function(){return Ir.Name},kr.prototype.clear=function(){this.store={}},kr.prototype.beginTransaction=function(t){return new wr(this)},kr.prototype.get=function(t){return this.store[t]},kr.prototype.put=function(t,e,n){return!(!n&&this.store.hasOwnProperty(t))&&(this.store[t]=e,!0)},kr.prototype.del=function(t){delete this.store[t]};var Ir=function(t){function e(){t.call(this,{store:new kr})}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.Create=function(t,n){n(null,new e)},e}(br);Ir.Name="InMemory",Ir.Options={};var Or=Je.indexedDB||Je.mozIndexedDB||Je.webkitIndexedDB||Je.msIndexedDB,Fr=function(t,e){this.tx=t,this.store=e};Fr.prototype.get=function(t,e){try{var n=this.store.get(t);n.onerror=Rt(e),n.onsuccess=function(t){var n=t.target.result;void 0===n?e(null,n):e(null,b(n))}}catch(t){e(Nt(t))}};var Nr=function(t){function e(e,n){t.call(this,e,n)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.put=function(t,e,n,r){try{var i,o=_(e);i=n?this.store.put(o,t):this.store.add(o,t),i.onerror=Rt(r),i.onsuccess=function(t){r(null,!0)}}catch(t){r(Nt(t))}},e.prototype.del=function(t,e){try{var n=this.store.delete(t);n.onerror=Rt(e),n.onsuccess=function(t){e()}}catch(t){e(Nt(t))}},e.prototype.commit=function(t){setTimeout(t,0)},e.prototype.abort=function(t){var e=null;try{this.tx.abort()}catch(t){e=Nt(t)}finally{t(e)}},e}(Fr),Rr=function(t,e){this.db=t,this.storeName=e};Rr.Create=function(t,e){var n=Or.open(t,1);n.onupgradeneeded=function(e){var n=e.target.result;n.objectStoreNames.contains(t)&&n.deleteObjectStore(t),n.createObjectStore(t)},n.onsuccess=function(n){e(null,new Rr(n.target.result,t))},n.onerror=Rt(e,we.EACCES)},Rr.prototype.name=function(){return Tr.Name+" - "+this.storeName},Rr.prototype.clear=function(t){try{var e=this.db.transaction(this.storeName,"readwrite"),n=e.objectStore(this.storeName),r=n.clear();r.onsuccess=function(e){setTimeout(t,0)},r.onerror=Rt(t)}catch(e){t(Nt(e))}},Rr.prototype.beginTransaction=function(t){void 0===t&&(t="readonly");var e=this.db.transaction(this.storeName,t),n=e.objectStore(this.storeName);if("readwrite"===t)return new Nr(e,n);if("readonly"===t)return new Fr(e,n);throw new ke(we.EINVAL,"Invalid transaction type.")};var Tr=function(t){function e(e){t.call(this),this.store=e}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.Create=function(t,n){Rr.Create(t.storeName?t.storeName:"browserfs",function(t,r){r?n(null,new e(r)):n(t)})},e.isAvailable=function(){try{return void 0!==Or&&null!==Or.open("__browserfs_test__")}catch(t){return!1}},e}(Er);Tr.Name="IndexedDB",Tr.Options={storeName:{type:"string",optional:!0,description:"The name of this file system. You can have multiple IndexedDB file systems operating at once, but each must have a different name."}};var Lr,xr=!1;try{Je.localStorage.setItem("__test__",String.fromCharCode(55296)),xr=Je.localStorage.getItem("__test__")===String.fromCharCode(55296)}catch(t){xr=!1}Lr=xr?"binary_string":"binary_string_ie",t.isEncoding(Lr)||(Lr="base64");var Dr=function(){};Dr.prototype.name=function(){return Ar.Name},Dr.prototype.clear=function(){Je.localStorage.clear()},Dr.prototype.beginTransaction=function(t){return new wr(this)},Dr.prototype.get=function(e){try{var n=Je.localStorage.getItem(e);if(null!==n)return t.from(n,Lr)}catch(t){}},Dr.prototype.put=function(t,e,n){try{return!(!n&&null!==Je.localStorage.getItem(t))&&(Je.localStorage.setItem(t,e.toString(Lr)),!0)}catch(t){throw new ke(we.ENOSPC,"LocalStorage is full.")}},Dr.prototype.del=function(t){try{Je.localStorage.removeItem(t)}catch(e){throw new ke(we.EIO,"Unable to delete key "+t+": "+e)}};var Ar=function(t){function e(){t.call(this,{store:new Dr})}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.Create=function(t,n){n(null,new e)},e.isAvailable=function(){return void 0!==Je.localStorage},e}(br);Ar.Name="LocalStorage",Ar.Options={};var Pr=function(t){function e(e){t.call(this),this.mountList=[],this.mntMap={},this.rootFs=e}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.Create=function(t,n){Ir.Create({},function(r,i){if(i){var o=new e(i);try{Object.keys(t).forEach(function(e){o.mount(e,t[e])})}catch(r){return n(r)}n(null,o)}else n(r)})},e.isAvailable=function(){return!0},e.prototype.mount=function(t,e){if("/"!==t[0]&&(t="/"+t),t=be.resolve(t),this.mntMap[t])throw new ke(we.EINVAL,"Mount point "+t+" is already taken.");g(t,511,this.rootFs),this.mntMap[t]=e,this.mountList.push(t),this.mountList=this.mountList.sort(function(t,e){return e.length-t.length})},e.prototype.umount=function(t){var e=this;if("/"!==t[0]&&(t="/"+t),t=be.resolve(t),!this.mntMap[t])throw new ke(we.EINVAL,"Mount point "+t+" is already unmounted.");for(delete this.mntMap[t],this.mountList.splice(this.mountList.indexOf(t),1);"/"!==t&&0===e.rootFs.readdirSync(t).length;)e.rootFs.rmdirSync(t),t=be.dirname(t)},e.prototype._getFs=function(t){for(var e=this,n=this.mountList,r=n.length,i=0;i1?o.length:0),""===t&&(t="/"),{fs:e.mntMap[o],path:t}}return{fs:this.rootFs,path:t}},e.prototype.getName=function(){return e.Name},e.prototype.diskSpace=function(t,e){e(0,0)},e.prototype.isReadOnly=function(){return!1},e.prototype.supportsLinks=function(){return!1},e.prototype.supportsProps=function(){return!1},e.prototype.supportsSynch=function(){return!0},e.prototype.standardizeError=function(t,e,n){var r=t.message.indexOf(e);return-1!==r&&(t.message=t.message.substr(0,r)+n+t.message.substr(r+e.length),t.path=n),t},e.prototype.rename=function(t,e,n){var r=this,i=this._getFs(t),o=this._getFs(e);return i.fs===o.fs?i.fs.rename(i.path,o.path,function(s){s&&r.standardizeError(r.standardizeError(s,i.path,t),o.path,e),n(s)}):xe.readFile(t,function(r,i){if(r)return n(r);xe.writeFile(e,i,function(e){if(e)return n(e);xe.unlink(t,n)})})},e.prototype.renameSync=function(t,e){var n=this._getFs(t),r=this._getFs(e);if(n.fs===r.fs)try{return n.fs.renameSync(n.path,r.path)}catch(i){throw this.standardizeError(this.standardizeError(i,n.path,t),r.path,e),i}var i=xe.readFileSync(t);return xe.writeFileSync(e,i),xe.unlinkSync(t)},e.prototype.readdirSync=function(t){var e=this._getFs(t),n=null;if(e.fs!==this.rootFs)try{n=this.rootFs.readdirSync(t)}catch(t){}try{var r=e.fs.readdirSync(e.path);return null===n?r:r.concat(n.filter(function(t){return-1===r.indexOf(t)}))}catch(r){if(null===n)throw this.standardizeError(r,e.path,t);return n}},e.prototype.readdir=function(t,e){var n=this,r=this._getFs(t);r.fs.readdir(r.path,function(i,o){if(r.fs!==n.rootFs)try{var s=n.rootFs.readdirSync(t);o=o?o.concat(s.filter(function(t){return-1===o.indexOf(t)})):s}catch(o){if(i)return e(n.standardizeError(i,r.path,t))}else if(i)return e(n.standardizeError(i,r.path,t));e(null,o)})},e.prototype.rmdirSync=function(t){var e=this._getFs(t);if(this._containsMountPt(t))throw ke.ENOTEMPTY(t);try{e.fs.rmdirSync(e.path)}catch(n){throw this.standardizeError(n,e.path,t)}},e.prototype.rmdir=function(t,e){var n=this,r=this._getFs(t);this._containsMountPt(t)?e(ke.ENOTEMPTY(t)):r.fs.rmdir(r.path,function(i){e(i?n.standardizeError(i,r.path,t):null)})},e.prototype._containsMountPt=function(t){for(var e=this.mountList,n=e.length,r=0;r=t.length&&i.slice(0,t.length)===t)return!0}return!1},e}(ze);Pr.Name="MountableFileSystem",Pr.Options={};for(var Cr=[["exists","unlink","readlink"],["stat","mkdir","realpath","truncate"],["open","readFile","chmod","utimes"],["chown"],["writeFile","appendFile"]],Ur=0;Ur"},Vr.prototype.getFSUnlocked=function(){return this._fs},Vr.prototype.diskSpace=function(t,e){this._fs.diskSpace(t,e)},Vr.prototype.isReadOnly=function(){return this._fs.isReadOnly()},Vr.prototype.supportsLinks=function(){return this._fs.supportsLinks()},Vr.prototype.supportsProps=function(){return this._fs.supportsProps()},Vr.prototype.supportsSynch=function(){return this._fs.supportsSynch()},Vr.prototype.rename=function(t,e,n){var r=this;this._mu.lock(function(){r._fs.rename(t,e,function(t){r._mu.unlock(),n(t)})})},Vr.prototype.renameSync=function(t,e){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.renameSync(t,e)},Vr.prototype.stat=function(t,e,n){var r=this;this._mu.lock(function(){r._fs.stat(t,e,function(t,e){r._mu.unlock(),n(t,e)})})},Vr.prototype.statSync=function(t,e){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.statSync(t,e)},Vr.prototype.open=function(t,e,n,r){var i=this;this._mu.lock(function(){i._fs.open(t,e,n,function(t,e){i._mu.unlock(),r(t,e)})})},Vr.prototype.openSync=function(t,e,n){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.openSync(t,e,n)},Vr.prototype.unlink=function(t,e){var n=this;this._mu.lock(function(){n._fs.unlink(t,function(t){n._mu.unlock(),e(t)})})},Vr.prototype.unlinkSync=function(t){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.unlinkSync(t)},Vr.prototype.rmdir=function(t,e){var n=this;this._mu.lock(function(){n._fs.rmdir(t,function(t){n._mu.unlock(),e(t)})})},Vr.prototype.rmdirSync=function(t){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.rmdirSync(t)},Vr.prototype.mkdir=function(t,e,n){var r=this;this._mu.lock(function(){r._fs.mkdir(t,e,function(t){r._mu.unlock(),n(t)})})},Vr.prototype.mkdirSync=function(t,e){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.mkdirSync(t,e)},Vr.prototype.readdir=function(t,e){var n=this;this._mu.lock(function(){n._fs.readdir(t,function(t,r){n._mu.unlock(),e(t,r)})})},Vr.prototype.readdirSync=function(t){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.readdirSync(t)},Vr.prototype.exists=function(t,e){var n=this;this._mu.lock(function(){n._fs.exists(t,function(t){n._mu.unlock(),e(t)})})},Vr.prototype.existsSync=function(t){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.existsSync(t)},Vr.prototype.realpath=function(t,e,n){var r=this;this._mu.lock(function(){r._fs.realpath(t,e,function(t,e){r._mu.unlock(),n(t,e)})})},Vr.prototype.realpathSync=function(t,e){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.realpathSync(t,e)},Vr.prototype.truncate=function(t,e,n){var r=this;this._mu.lock(function(){r._fs.truncate(t,e,function(t){r._mu.unlock(),n(t)})})},Vr.prototype.truncateSync=function(t,e){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.truncateSync(t,e)},Vr.prototype.readFile=function(t,e,n,r){var i=this;this._mu.lock(function(){i._fs.readFile(t,e,n,function(t,e){i._mu.unlock(),r(t,e)})})},Vr.prototype.readFileSync=function(t,e,n){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.readFileSync(t,e,n)},Vr.prototype.writeFile=function(t,e,n,r,i,o){var s=this;this._mu.lock(function(){s._fs.writeFile(t,e,n,r,i,function(t){s._mu.unlock(),o(t)})})},Vr.prototype.writeFileSync=function(t,e,n,r,i){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.writeFileSync(t,e,n,r,i)},Vr.prototype.appendFile=function(t,e,n,r,i,o){var s=this;this._mu.lock(function(){s._fs.appendFile(t,e,n,r,i,function(t){s._mu.unlock(),o(t)})})},Vr.prototype.appendFileSync=function(t,e,n,r,i){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.appendFileSync(t,e,n,r,i)},Vr.prototype.chmod=function(t,e,n,r){var i=this;this._mu.lock(function(){i._fs.chmod(t,e,n,function(t){i._mu.unlock(),r(t)})})},Vr.prototype.chmodSync=function(t,e,n){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.chmodSync(t,e,n)},Vr.prototype.chown=function(t,e,n,r,i){var o=this;this._mu.lock(function(){o._fs.chown(t,e,n,r,function(t){o._mu.unlock(),i(t)})})},Vr.prototype.chownSync=function(t,e,n,r){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.chownSync(t,e,n,r)},Vr.prototype.utimes=function(t,e,n,r){var i=this;this._mu.lock(function(){i._fs.utimes(t,e,n,function(t){i._mu.unlock(),r(t)})})},Vr.prototype.utimesSync=function(t,e,n){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.utimesSync(t,e,n)},Vr.prototype.link=function(t,e,n){var r=this;this._mu.lock(function(){r._fs.link(t,e,function(t){r._mu.unlock(),n(t)})})},Vr.prototype.linkSync=function(t,e){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.linkSync(t,e)},Vr.prototype.symlink=function(t,e,n,r){var i=this;this._mu.lock(function(){i._fs.symlink(t,e,n,function(t){i._mu.unlock(),r(t)})})},Vr.prototype.symlinkSync=function(t,e,n){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.symlinkSync(t,e,n)},Vr.prototype.readlink=function(t,e){var n=this;this._mu.lock(function(){n._fs.readlink(t,function(t,r){n._mu.unlock(),e(t,r)})})},Vr.prototype.readlinkSync=function(t){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.readlinkSync(t)};var Wr="/.deletedFiles.log",Hr=function(t){function e(e,n,r,i,o){t.call(this,e,n,r,i,o)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.sync=function(t){var e=this;if(!this.isDirty())return void t(null);this._fs._syncAsync(this,function(n){e.resetDirty(),t(n)})},e.prototype.syncSync=function(){this.isDirty()&&(this._fs._syncSync(this),this.resetDirty())},e.prototype.close=function(t){this.sync(t)},e.prototype.closeSync=function(){this.syncSync()},e}(We),Zr=function(t){function e(e,n){if(t.call(this),this._isInitialized=!1,this._initializeCallbacks=[],this._deletedFiles={},this._deleteLog="",this._deleteLogUpdatePending=!1,this._deleteLogUpdateNeeded=!1,this._deleteLogError=null,this._writable=e,this._readable=n,this._writable.isReadOnly())throw new ke(we.EINVAL,"Writable file system must be writable.")}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.isAvailable=function(){return!0},e.prototype.getOverlayedFileSystems=function(){return{readable:this._readable,writable:this._writable}},e.prototype._syncAsync=function(t,e){var n=this;this.createParentDirectoriesAsync(t.getPath(),function(r){if(r)return e(r);n._writable.writeFile(t.getPath(),t.getBuffer(),null,xt("w"),t.getStats().mode,e)})},e.prototype._syncSync=function(t){this.createParentDirectories(t.getPath()),this._writable.writeFileSync(t.getPath(),t.getBuffer(),null,xt("w"),t.getStats().mode)},e.prototype.getName=function(){return Yr.Name},e.prototype._initialize=function(t){var e=this,n=this._initializeCallbacks,r=function(t){e._isInitialized=!t,e._initializeCallbacks=[],n.forEach(function(e){return e(t)})};if(this._isInitialized)return t();n.push(t),1===n.length&&this._writable.readFile(Wr,"utf8",xt("r"),function(t,n){if(t){if(t.errno!==we.ENOENT)return r(t)}else e._deleteLog=n;e._reparseDeletionLog(),r()})},e.prototype.isReadOnly=function(){return!1},e.prototype.supportsSynch=function(){return this._readable.supportsSynch()&&this._writable.supportsSynch()},e.prototype.supportsLinks=function(){return!1},e.prototype.supportsProps=function(){return this._readable.supportsProps()&&this._writable.supportsProps()},e.prototype.getDeletionLog=function(){return this._deleteLog},e.prototype.restoreDeletionLog=function(t){this._deleteLog=t,this._reparseDeletionLog(),this.updateLog("")},e.prototype.rename=function(t,e,n){var r=this;if(this.checkInitAsync(n)&&!this.checkPathAsync(t,n)&&!this.checkPathAsync(e,n))return t===Wr||e===Wr?n(ke.EPERM("Cannot rename deletion log.")):t===e?n():void this.stat(t,!1,function(i,o){return i?n(i):r.stat(e,!1,function(i,s){function a(r){var i=r.shift();if(!i)return n();var o=be.resolve(t,i),s=be.resolve(e,i);c.rename(o,s,function(t){if(t)return n(t);a(r)})}var c=r,u=511;if(o.isDirectory()){if(i)return i.errno!==we.ENOENT?n(i):r._writable.exists(t,function(i){if(i)return r._writable.rename(t,e,n);r._writable.mkdir(e,u,function(e){if(e)return n(e);r._readable.readdir(t,function(t,e){if(t)return n();a(e)})})});if(u=s.mode,!s.isDirectory())return n(ke.ENOTDIR(e));r.readdir(e,function(i,o){if(o&&o.length)return n(ke.ENOTEMPTY(e));r._readable.readdir(t,function(t,e){if(t)return n();a(e)})})}if(s&&s.isDirectory())return n(ke.EISDIR(e));r.readFile(t,null,xt("r"),function(i,s){return i?n(i):r.writeFile(e,s,null,xt("w"),o.mode,function(e){return e?n(e):r.unlink(t,n)})})})})},e.prototype.renameSync=function(t,e){var n=this;if(this.checkInitialized(),this.checkPath(t),this.checkPath(e),t===Wr||e===Wr)throw ke.EPERM("Cannot rename deletion log.");var r=this.statSync(t,!1);if(r.isDirectory()){if(t===e)return;var i=511;if(this.existsSync(e)){var o=this.statSync(e,!1);if(i=o.mode,!o.isDirectory())throw ke.ENOTDIR(e);if(this.readdirSync(e).length>0)throw ke.ENOTEMPTY(e)}this._writable.existsSync(t)?this._writable.renameSync(t,e):this._writable.existsSync(e)||this._writable.mkdirSync(e,i),this._readable.existsSync(t)&&this._readable.readdirSync(t).forEach(function(r){n.renameSync(be.resolve(t,r),be.resolve(e,r))})}else{if(this.existsSync(e)&&this.statSync(e,!1).isDirectory())throw ke.EISDIR(e);this.writeFileSync(e,this.readFileSync(t,null,xt("r")),null,xt("w"),r.mode)}t!==e&&this.existsSync(t)&&this.unlinkSync(t)},e.prototype.stat=function(t,e,n){var r=this;this.checkInitAsync(n)&&this._writable.stat(t,e,function(i,o){i&&i.errno===we.ENOENT?(r._deletedFiles[t]&&n(ke.ENOENT(t)),r._readable.stat(t,e,function(t,e){e&&(e=Ne.clone(e),e.mode=Lt(e.mode)),n(t,e)})):n(i,o)})},e.prototype.statSync=function(t,e){this.checkInitialized();try{return this._writable.statSync(t,e)}catch(r){if(this._deletedFiles[t])throw ke.ENOENT(t);var n=Ne.clone(this._readable.statSync(t,e));return n.mode=Lt(n.mode),n}},e.prototype.open=function(t,e,n,r){var i=this;this.checkInitAsync(r)&&!this.checkPathAsync(t,r)&&this.stat(t,!1,function(o,s){if(s)switch(e.pathExistsAction()){case Ee.TRUNCATE_FILE:return i.createParentDirectoriesAsync(t,function(o){if(o)return r(o);i._writable.open(t,e,n,r)});case Ee.NOP:return i._writable.exists(t,function(o){o?i._writable.open(t,e,n,r):(s=Ne.clone(s),s.mode=n,i._readable.readFile(t,null,xt("r"),function(n,o){if(n)return r(n);-1===s.size&&(s.size=o.length);var a=new Hr(i,t,e,s,o);r(null,a)}))});default:return r(ke.EEXIST(t))}else switch(e.pathNotExistsAction()){case Ee.CREATE_FILE:return i.createParentDirectoriesAsync(t,function(o){return o?r(o):i._writable.open(t,e,n,r)});default:return r(ke.ENOENT(t))}})},e.prototype.openSync=function(t,e,n){if(this.checkInitialized(),this.checkPath(t),t===Wr)throw ke.EPERM("Cannot open deletion log.");if(this.existsSync(t))switch(e.pathExistsAction()){case Ee.TRUNCATE_FILE:return this.createParentDirectories(t),this._writable.openSync(t,e,n);case Ee.NOP:if(this._writable.existsSync(t))return this._writable.openSync(t,e,n);var r=this._readable.readFileSync(t,null,xt("r")),i=Ne.clone(this._readable.statSync(t,!1));return i.mode=n,new Hr(this,t,e,i,r);default:throw ke.EEXIST(t)}else switch(e.pathNotExistsAction()){case Ee.CREATE_FILE:return this.createParentDirectories(t),this._writable.openSync(t,e,n);default:throw ke.ENOENT(t)}},e.prototype.unlink=function(t,e){var n=this;this.checkInitAsync(e)&&!this.checkPathAsync(t,e)&&this.exists(t,function(r){if(!r)return e(ke.ENOENT(t));n._writable.exists(t,function(r){if(r)return n._writable.unlink(t,function(r){if(r)return e(r);n.exists(t,function(r){r&&n.deletePath(t),e(null)})});n.deletePath(t),e(null)})})},e.prototype.unlinkSync=function(t){if(this.checkInitialized(),this.checkPath(t),!this.existsSync(t))throw ke.ENOENT(t);this._writable.existsSync(t)&&this._writable.unlinkSync(t),this.existsSync(t)&&this.deletePath(t)},e.prototype.rmdir=function(t,e){var n=this;if(this.checkInitAsync(e)){var r=function(){n.readdir(t,function(r,i){return r?e(r):i.length?e(ke.ENOTEMPTY(t)):(n.deletePath(t),void e(null))})};this.exists(t,function(i){if(!i)return e(ke.ENOENT(t));n._writable.exists(t,function(i){i?n._writable.rmdir(t,function(i){if(i)return e(i);n._readable.exists(t,function(t){t?r():e()})}):r()})})}},e.prototype.rmdirSync=function(t){if(this.checkInitialized(),!this.existsSync(t))throw ke.ENOENT(t);if(this._writable.existsSync(t)&&this._writable.rmdirSync(t),this.existsSync(t)){if(this.readdirSync(t).length>0)throw ke.ENOTEMPTY(t);this.deletePath(t)}},e.prototype.mkdir=function(t,e,n){var r=this;this.checkInitAsync(n)&&this.exists(t,function(i){if(i)return n(ke.EEXIST(t));r.createParentDirectoriesAsync(t,function(i){if(i)return n(i);r._writable.mkdir(t,e,n)})})},e.prototype.mkdirSync=function(t,e){if(this.checkInitialized(),this.existsSync(t))throw ke.EEXIST(t);this.createParentDirectories(t),this._writable.mkdirSync(t,e)},e.prototype.readdir=function(t,e){var n=this;this.checkInitAsync(e)&&this.stat(t,!1,function(r,i){return r?e(r):i.isDirectory()?void n._writable.readdir(t,function(r,i){if(r&&"ENOENT"!==r.code)return e(r);!r&&i||(i=[]),n._readable.readdir(t,function(r,o){!r&&o||(o=[]);var s={},a=i.concat(o.filter(function(e){return!n._deletedFiles[t+"/"+e]})).filter(function(t){var e=!s[t];return s[t]=!0,e});e(null,a)})}):e(ke.ENOTDIR(t))})},e.prototype.readdirSync=function(t){var e=this;if(this.checkInitialized(),!this.statSync(t,!1).isDirectory())throw ke.ENOTDIR(t);var n=[];try{n=n.concat(this._writable.readdirSync(t))}catch(t){}try{n=n.concat(this._readable.readdirSync(t).filter(function(n){return!e._deletedFiles[t+"/"+n]}))}catch(t){}var r={};return n.filter(function(t){var e=!r[t];return r[t]=!0,e})},e.prototype.exists=function(t,e){var n=this;this.checkInitialized(),this._writable.exists(t,function(r){if(r)return e(!0);n._readable.exists(t,function(r){e(r&&!0!==n._deletedFiles[t])})})},e.prototype.existsSync=function(t){return this.checkInitialized(),this._writable.existsSync(t)||this._readable.existsSync(t)&&!0!==this._deletedFiles[t]},e.prototype.chmod=function(t,e,n,r){var i=this;this.checkInitAsync(r)&&this.operateOnWritableAsync(t,function(o){if(o)return r(o);i._writable.chmod(t,e,n,r)})},e.prototype.chmodSync=function(t,e,n){var r=this;this.checkInitialized(),this.operateOnWritable(t,function(){r._writable.chmodSync(t,e,n)})},e.prototype.chown=function(t,e,n,r,i){var o=this;this.checkInitAsync(i)&&this.operateOnWritableAsync(t,function(s){if(s)return i(s);o._writable.chown(t,e,n,r,i)})},e.prototype.chownSync=function(t,e,n,r){var i=this;this.checkInitialized(),this.operateOnWritable(t,function(){i._writable.chownSync(t,e,n,r)})},e.prototype.utimes=function(t,e,n,r){var i=this;this.checkInitAsync(r)&&this.operateOnWritableAsync(t,function(o){if(o)return r(o);i._writable.utimes(t,e,n,r)})},e.prototype.utimesSync=function(t,e,n){var r=this;this.checkInitialized(),this.operateOnWritable(t,function(){r._writable.utimesSync(t,e,n)})},e.prototype.deletePath=function(t){this._deletedFiles[t]=!0,this.updateLog("d"+t+"\n")},e.prototype.updateLog=function(t){var e=this;this._deleteLog+=t,this._deleteLogUpdatePending?this._deleteLogUpdateNeeded=!0:(this._deleteLogUpdatePending=!0,this._writable.writeFile(Wr,this._deleteLog,"utf8",Oe.getFileFlag("w"),420,function(t){e._deleteLogUpdatePending=!1,t?e._deleteLogError=t:e._deleteLogUpdateNeeded&&(e._deleteLogUpdateNeeded=!1,e.updateLog(""))}))},e.prototype._reparseDeletionLog=function(){var t=this;this._deletedFiles={},this._deleteLog.split("\n").forEach(function(e){t._deletedFiles[e.slice(1)]="d"===e.slice(0,1)})},e.prototype.checkInitialized=function(){if(!this._isInitialized)throw new ke(we.EPERM,"OverlayFS is not initialized. Please initialize OverlayFS using its initialize() method before using it.");if(null!==this._deleteLogError){var t=this._deleteLogError;throw this._deleteLogError=null,t}},e.prototype.checkInitAsync=function(t){if(!this._isInitialized)return t(new ke(we.EPERM,"OverlayFS is not initialized. Please initialize OverlayFS using its initialize() method before using it.")),!1;if(null!==this._deleteLogError){var e=this._deleteLogError;return this._deleteLogError=null,t(e),!1}return!0},e.prototype.checkPath=function(t){if(t===Wr)throw ke.EPERM(t)},e.prototype.checkPathAsync=function(t,e){return t===Wr&&(e(ke.EPERM(t)),!0)},e.prototype.createParentDirectoriesAsync=function(t,e){function n(t,e){t?(o.push(i),i=be.dirname(i),s._writable.stat(i,!1,n)):r()}function r(){if(!o.length)return e();var t=o.pop();s._readable.stat(t,!1,function(n,i){if(!i)return e();s._writable.mkdir(t,i.mode,function(t){if(t)return e(t);r()})})}var i=be.dirname(t),o=[],s=this;this._writable.stat(i,!1,n)},e.prototype.createParentDirectories=function(t){for(var e=this,n=be.dirname(t),r=[];!this._writable.existsSync(n);)r.push(n),n=be.dirname(n);r=r.reverse(),r.forEach(function(t){e._writable.mkdirSync(t,e.statSync(t,!1).mode)})},e.prototype.operateOnWritable=function(t,e){if(!this.existsSync(t))throw ke.ENOENT(t);this._writable.existsSync(t)||this.copyToWritable(t),e()},e.prototype.operateOnWritableAsync=function(t,e){var n=this;this.exists(t,function(r){if(!r)return e(ke.ENOENT(t));n._writable.exists(t,function(r){if(!r)return n.copyToWritableAsync(t,e);e()})})},e.prototype.copyToWritable=function(t){var e=this.statSync(t,!1);e.isDirectory()?this._writable.mkdirSync(t,e.mode):this.writeFileSync(t,this._readable.readFileSync(t,null,xt("r")),null,xt("w"),this.statSync(t,!1).mode)},e.prototype.copyToWritableAsync=function(t,e){var n=this;this.stat(t,!1,function(r,i){return r?e(r):i.isDirectory()?n._writable.mkdir(t,i.mode,e):void n._readable.readFile(t,null,xt("r"),function(r,o){if(r)return e(r);n.writeFile(t,o,null,xt("w"),i.mode,e)})})},e}(ze),Yr=function(t){function e(e,n){t.call(this,new Zr(e,n))}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.Create=function(t,n){try{var r=new e(t.writable,t.readable);r._initialize(function(t){n(t,r)})}catch(t){n(t)}},e.isAvailable=function(){return Zr.isAvailable()},e.prototype.getOverlayedFileSystems=function(){return t.prototype.getFSUnlocked.call(this).getOverlayedFileSystems()},e.prototype.unwrap=function(){return t.prototype.getFSUnlocked.call(this)},e.prototype._initialize=function(e){t.prototype.getFSUnlocked.call(this)._initialize(e)},e}(Vr);Yr.Name="OverlayFS",Yr.Options={writable:{type:"object",description:"The file system to write modified files to."},readable:{type:"object",description:"The file system that initially populates this file system."}};var Xr;!function(t){t[t.CB=0]="CB",t[t.FD=1]="FD",t[t.API_ERROR=2]="API_ERROR",t[t.STATS=3]="STATS",t[t.PROBE=4]="PROBE",t[t.FILEFLAG=5]="FILEFLAG",t[t.BUFFER=6]="BUFFER",t[t.ERROR=7]="ERROR"}(Xr||(Xr={}));var Jr=function(){this._callbacks={},this._nextId=0};Jr.prototype.toRemoteArg=function(t){var e=this._nextId++;return this._callbacks[e]=t,{type:Xr.CB,id:e}},Jr.prototype.toLocalArg=function(t){var e=this._callbacks[t];return delete this._callbacks[t],e};var Kr=function(){this._fileDescriptors={},this._nextId=0};Kr.prototype.toRemoteArg=function(e,n,r,i){var o,s,a=this._nextId++;this._fileDescriptors[a]=e,e.stat(function(c,u){c?i(c):(s=zt(u.toBuffer()),r.isReadable()?e.read(t.alloc(u.size),0,u.size,0,function(t,e,c){t?i(t):(o=zt(c),i(null,{type:Xr.FD,id:a,data:o,stat:s,path:n,flag:r.getFlagString()}))}):i(null,{type:Xr.FD,id:a,data:new ArrayBuffer(0),stat:s,path:n,flag:r.getFlagString()}))})},Kr.prototype.applyFdAPIRequest=function(t,e){var n=this,r=t.args[0];this._applyFdChanges(r,function(i,o){i?e(i):o[t.method](function(i){"close"===t.method&&delete n._fileDescriptors[r.id],e(i)})})},Kr.prototype._applyFdChanges=function(t,e){var n=this._fileDescriptors[t.id],r=qt(t.data),i=Ne.fromBuffer(qt(t.stat)),o=Oe.getFileFlag(t.flag);o.isWriteable()?n.write(r,0,r.length,o.isAppendable()?n.getPos():0,function(t){function s(){n.stat(function(t,r){t?e(t):r.mode!==i.mode?n.chmod(i.mode,function(t){e(t,n)}):e(t,n)})}t?e(t):o.isAppendable()?s():n.truncate(r.length,function(){s()})}):e(null,n)};var Gr=function(t){function e(e,n,r,i,o,s){t.call(this,e,n,r,i,s),this._remoteFdId=o}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getRemoteFdId=function(){return this._remoteFdId},e.prototype.toRemoteArg=function(){return{type:Xr.FD,id:this._remoteFdId,data:zt(this.getBuffer()),stat:zt(this.getStats().toBuffer()),path:this.getPath(),flag:this.getFlag().getFlagString()}},e.prototype.sync=function(t){this._syncClose("sync",t)},e.prototype.close=function(t){this._syncClose("close",t)},e.prototype._syncClose=function(t,e){var n=this;this.isDirty()?this._fs.syncClose(t,this,function(t){t||n.resetDirty(),e(t)}):e()},e}(We),Qr=function(e){function n(t){var n=this;e.call(this),this._callbackConverter=new Jr,this._isInitialized=!1,this._isReadOnly=!1,this._supportLinks=!1,this._supportProps=!1,this._worker=t,this._worker.addEventListener("message",function(t){var e=t.data;if(Zt(e)){var r,i=e.args,o=new Array(i.length);for(r=0;r0&&(u=-1,s={browserfsMessage:!0,cbId:o,args:[Dt(t)]},e.postMessage(s))}var i,s,a=arguments,c=new Array(arguments.length),u=arguments.length;for(i=0;i0;){var i=void 0,o=r.pop(),s=o[0],a=o[1],c=o[2];for(var u in a)if(a.hasOwnProperty(u)){var f=a[u],h=s+"/"+u;f?(e._index[h]=i=new oi,r.push([h,f,i])):i=new ii(new Ne(Fe.FILE,-1,365)),c&&(c._ls[u]=i)}}return e},ri.prototype.fileIterator=function(t){var e=this;for(var n in e._index)if(e._index.hasOwnProperty(n))for(var r=e._index[n],i=r.getListing(),o=0,s=i;o0&&"/"!==n.charAt(n.length-1)&&(n+="/"),this.prefixUrl=n,this._index=ri.fromListing(e),!ni||r&&$r?(this._requestFileAsyncInternal=ti,this._requestFileSizeAsyncInternal=Qt):(this._requestFileAsyncInternal=$t,this._requestFileSizeAsyncInternal=te),$r?(this._requestFileSyncInternal=ei,this._requestFileSizeSyncInternal=Gt):(this._requestFileSyncInternal=ie,this._requestFileSizeSyncInternal=ie)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.Create=function(t,n){void 0===t.index&&(t.index="index.json"),"string"==typeof t.index?ti(t.index,"json",function(r,i){r?n(r):n(null,new e(i,t.baseUrl))}):n(null,new e(t.index,t.baseUrl))},e.isAvailable=function(){return $r||ni},e.prototype.empty=function(){this._index.fileIterator(function(t){t.fileData=null})},e.prototype.getName=function(){return e.Name},e.prototype.diskSpace=function(t,e){e(0,0)},e.prototype.isReadOnly=function(){return!0},e.prototype.supportsLinks=function(){return!1},e.prototype.supportsProps=function(){return!1},e.prototype.supportsSynch=function(){return $r},e.prototype.preloadFile=function(t,e){var n=this._index.getInode(t);if(!ee(n))throw ke.EISDIR(t);if(null===n)throw ke.ENOENT(t);var r=n.getData();r.size=e.length,r.fileData=e},e.prototype.stat=function(t,e,n){var r=this._index.getInode(t);if(null===r)return n(ke.ENOENT(t));var i;ee(r)?(i=r.getData(),i.size<0?this._requestFileSizeAsync(t,function(t,e){if(t)return n(t);i.size=e,n(null,Ne.clone(i))}):n(null,Ne.clone(i))):ne(r)?(i=r.getStats(),n(null,i)):n(ke.FileError(we.EINVAL,t))},e.prototype.statSync=function(t,e){var n=this._index.getInode(t);if(null===n)throw ke.ENOENT(t);var r;if(ee(n))r=n.getData(),r.size<0&&(r.size=this._requestFileSizeSync(t));else{if(!ne(n))throw ke.FileError(we.EINVAL,t);r=n.getStats()}return r},e.prototype.open=function(t,e,n,r){if(e.isWriteable())return r(new ke(we.EPERM,t));var i=this,o=this._index.getInode(t);if(null===o)return r(ke.ENOENT(t));if(!ee(o))return r(ke.EISDIR(t));var s=o.getData();switch(e.pathExistsAction()){case Ee.THROW_EXCEPTION:case Ee.TRUNCATE_FILE:return r(ke.EEXIST(t));case Ee.NOP:if(s.fileData)return r(null,new He(i,t,e,Ne.clone(s),s.fileData));this._requestFileAsync(t,"buffer",function(n,o){return n?r(n):(s.size=o.length,s.fileData=o,r(null,new He(i,t,e,Ne.clone(s),o)))});break;default:return r(new ke(we.EINVAL,"Invalid FileMode object."))}},e.prototype.openSync=function(t,e,n){if(e.isWriteable())throw new ke(we.EPERM,t);var r=this._index.getInode(t);if(null===r)throw ke.ENOENT(t);if(!ee(r))throw ke.EISDIR(t);var i=r.getData();switch(e.pathExistsAction()){case Ee.THROW_EXCEPTION:case Ee.TRUNCATE_FILE:throw ke.EEXIST(t);case Ee.NOP:if(i.fileData)return new He(this,t,e,Ne.clone(i),i.fileData);var o=this._requestFileSync(t,"buffer");return i.size=o.length,i.fileData=o,new He(this,t,e,Ne.clone(i),o);default:throw new ke(we.EINVAL,"Invalid FileMode object.")}},e.prototype.readdir=function(t,e){try{e(null,this.readdirSync(t))}catch(t){e(t)}},e.prototype.readdirSync=function(t){var e=this._index.getInode(t);if(null===e)throw ke.ENOENT(t);if(ne(e))return e.getListing();throw ke.ENOTDIR(t)},e.prototype.readFile=function(t,e,n,r){var i=r;this.open(t,n,420,function(t,n){if(t)return r(t);r=function(t,e){n.close(function(n){return t||(t=n),i(t,e)})};var o=n,s=o.getBuffer();null===e?r(t,S(s)):re(s,e,r)})},e.prototype.readFileSync=function(t,e,n){var r=this.openSync(t,n,420);try{var i=r,o=i.getBuffer();return null===e?S(o):o.toString(e)}finally{r.closeSync()}},e.prototype._getHTTPPath=function(t){return"/"===t.charAt(0)&&(t=t.slice(1)),this.prefixUrl+t},e.prototype._requestFileAsync=function(t,e,n){this._requestFileAsyncInternal(this._getHTTPPath(t),e,n)},e.prototype._requestFileSync=function(t,e){return this._requestFileSyncInternal(this._getHTTPPath(t),e)},e.prototype._requestFileSizeAsync=function(t,e){this._requestFileSizeAsyncInternal(this._getHTTPPath(t),e)},e.prototype._requestFileSizeSync=function(t){return this._requestFileSizeSyncInternal(this._getHTTPPath(t))},e}(ze);si.Name="HTTPRequest",si.Options={index:{type:["string","object"],optional:!0,description:"URL to a file index as a JSON file or the file index object itself, generated with the make_http_index script. Defaults to `index.json`."},baseUrl:{type:"string",optional:!0,description:"Used as the URL prefix for fetched files. Default: Fetch files relative to the index."},preferXHR:{type:"boolean",optional:!0,description:"Whether to prefer XmlHttpRequest or fetch for async operations if both are available. Default: false"}};var ai=function(){};ai.str2byte=function(t,e){for(var n=t.length>e.length?e.length:t.length,r=0;r127){var o=ai.extendedChars.indexOf(t.charAt(r));o>-1&&(i=o+128)}e[i]=r}return n},ai.byte2str=function(t){for(var e=new Array(t.length),n=0;n127?ai.extendedChars[r-128]:String.fromCharCode(r)}return e.join("")},ai.byteLength=function(t){return t.length},ai.extendedChars=["Ç","ü","é","â","ä","à","å","ç","ê","ë","è","ï","î","ì","Ä","Å","É","æ","Æ","ô","ö","ò","û","ù","ÿ","Ö","Ü","ø","£","Ø","×","ƒ","á","í","ó","ú","ñ","Ñ","ª","º","¿","®","¬","½","¼","¡","«","»","_","_","_","¦","¦","Á","Â","À","©","¦","¦","+","+","¢","¥","+","+","-","-","+","-","+","ã","Ã","+","+","-","-","¦","-","+","¤","ð","Ð","Ê","Ë","È","i","Í","Î","Ï","+","+","_","_","¦","Ì","_","Ó","ß","Ô","Ò","õ","Õ","µ","þ","Þ","Ú","Û","Ù","ý","Ý","¯","´","­","±","_","¾","¶","§","÷","¸","°","¨","·","¹","³","²","_"," "];var ci,ui=n(35).inflateRaw,fi={};!function(t){t[t.MSDOS=0]="MSDOS",t[t.AMIGA=1]="AMIGA",t[t.OPENVMS=2]="OPENVMS",t[t.UNIX=3]="UNIX",t[t.VM_CMS=4]="VM_CMS",t[t.ATARI_ST=5]="ATARI_ST",t[t.OS2_HPFS=6]="OS2_HPFS",t[t.MAC=7]="MAC",t[t.Z_SYSTEM=8]="Z_SYSTEM",t[t.CP_M=9]="CP_M",t[t.NTFS=10]="NTFS",t[t.MVS=11]="MVS",t[t.VSE=12]="VSE",t[t.ACORN_RISC=13]="ACORN_RISC",t[t.VFAT=14]="VFAT",t[t.ALT_MVS=15]="ALT_MVS",t[t.BEOS=16]="BEOS",t[t.TANDEM=17]="TANDEM",t[t.OS_400=18]="OS_400",t[t.OSX=19]="OSX"}(ci||(ci={}));var hi;!function(t){t[t.STORED=0]="STORED",t[t.SHRUNK=1]="SHRUNK",t[t.REDUCED_1=2]="REDUCED_1",t[t.REDUCED_2=3]="REDUCED_2",t[t.REDUCED_3=4]="REDUCED_3",t[t.REDUCED_4=5]="REDUCED_4",t[t.IMPLODE=6]="IMPLODE",t[t.DEFLATE=8]="DEFLATE",t[t.DEFLATE64=9]="DEFLATE64",t[t.TERSE_OLD=10]="TERSE_OLD",t[t.BZIP2=12]="BZIP2",t[t.LZMA=14]="LZMA",t[t.TERSE_NEW=18]="TERSE_NEW",t[t.LZ77=19]="LZ77",t[t.WAVPACK=97]="WAVPACK",t[t.PPMD=98]="PPMD"}(hi||(hi={}));var pi=function(t){if(this.data=t,67324752!==t.readUInt32LE(0))throw new ke(we.EINVAL,"Invalid Zip file: Local file header has invalid signature: "+this.data.readUInt32LE(0))};pi.prototype.versionNeeded=function(){return this.data.readUInt16LE(4)},pi.prototype.flags=function(){return this.data.readUInt16LE(6)},pi.prototype.compressionMethod=function(){return this.data.readUInt16LE(8)},pi.prototype.lastModFileTime=function(){return oe(this.data.readUInt16LE(10),this.data.readUInt16LE(12))},pi.prototype.rawLastModFileTime=function(){return this.data.readUInt32LE(10)},pi.prototype.crc32=function(){return this.data.readUInt32LE(14)},pi.prototype.fileNameLength=function(){return this.data.readUInt16LE(26)},pi.prototype.extraFieldLength=function(){return this.data.readUInt16LE(28)},pi.prototype.fileName=function(){return se(this.data,this.useUTF8(),30,this.fileNameLength())},pi.prototype.extraField=function(){var t=30+this.fileNameLength();return this.data.slice(t,t+this.extraFieldLength())},pi.prototype.totalSize=function(){return 30+this.fileNameLength()+this.extraFieldLength()},pi.prototype.useUTF8=function(){return 2048==(2048&this.flags())};var li=function(t,e,n){this.header=t,this.record=e,this.data=n};li.prototype.decompress=function(){var t=this.header.compressionMethod(),e=fi[t];if(e)return e(this.data,this.record.compressedSize(),this.record.uncompressedSize(),this.record.flag());var n=hi[t];throw n||(n="Unknown: "+t),new ke(we.EINVAL,"Invalid compression method on file '"+this.header.fileName()+"': "+n)},li.prototype.getHeader=function(){return this.header},li.prototype.getRecord=function(){return this.record},li.prototype.getRawData=function(){return this.data};var di=function(t){this.data=t};di.prototype.crc32=function(){return this.data.readUInt32LE(0)},di.prototype.compressedSize=function(){return this.data.readUInt32LE(4)},di.prototype.uncompressedSize=function(){return this.data.readUInt32LE(8)};var yi=function(t){if(this.data=t,134630224!==this.data.readUInt32LE(0))throw new ke(we.EINVAL,"Invalid archive extra data record signature: "+this.data.readUInt32LE(0))};yi.prototype.length=function(){return this.data.readUInt32LE(4)},yi.prototype.extraFieldData=function(){return this.data.slice(8,8+this.length())};var gi=function(t){if(this.data=t,84233040!==this.data.readUInt32LE(0))throw new ke(we.EINVAL,"Invalid digital signature signature: "+this.data.readUInt32LE(0))};gi.prototype.size=function(){return this.data.readUInt16LE(4)},gi.prototype.signatureData=function(){return this.data.slice(6,6+this.size())};var _i=function(t,e){if(this.zipData=t,this.data=e,33639248!==this.data.readUInt32LE(0))throw new ke(we.EINVAL,"Invalid Zip file: Central directory record has invalid signature: "+this.data.readUInt32LE(0));this._filename=this.produceFilename()};_i.prototype.versionMadeBy=function(){return this.data.readUInt16LE(4)},_i.prototype.versionNeeded=function(){return this.data.readUInt16LE(6)},_i.prototype.flag=function(){return this.data.readUInt16LE(8)},_i.prototype.compressionMethod=function(){return this.data.readUInt16LE(10)},_i.prototype.lastModFileTime=function(){return oe(this.data.readUInt16LE(12),this.data.readUInt16LE(14))},_i.prototype.rawLastModFileTime=function(){return this.data.readUInt32LE(12)},_i.prototype.crc32=function(){return this.data.readUInt32LE(16)},_i.prototype.compressedSize=function(){return this.data.readUInt32LE(20)},_i.prototype.uncompressedSize=function(){return this.data.readUInt32LE(24)},_i.prototype.fileNameLength=function(){return this.data.readUInt16LE(28)},_i.prototype.extraFieldLength=function(){return this.data.readUInt16LE(30)},_i.prototype.fileCommentLength=function(){return this.data.readUInt16LE(32)},_i.prototype.diskNumberStart=function(){return this.data.readUInt16LE(34)},_i.prototype.internalAttributes=function(){return this.data.readUInt16LE(36)},_i.prototype.externalAttributes=function(){return this.data.readUInt32LE(38)},_i.prototype.headerRelativeOffset=function(){return this.data.readUInt32LE(42)},_i.prototype.produceFilename=function(){return se(this.data,this.useUTF8(),46,this.fileNameLength()).replace(/\\/g,"/")},_i.prototype.fileName=function(){return this._filename},_i.prototype.rawFileName=function(){return this.data.slice(46,46+this.fileNameLength())},_i.prototype.extraField=function(){var t=44+this.fileNameLength();return this.data.slice(t,t+this.extraFieldLength())},_i.prototype.fileComment=function(){var t=46+this.fileNameLength()+this.extraFieldLength();return se(this.data,this.useUTF8(),t,this.fileCommentLength())},_i.prototype.rawFileComment=function(){var t=46+this.fileNameLength()+this.extraFieldLength();return this.data.slice(t,t+this.fileCommentLength())},_i.prototype.totalSize=function(){return 46+this.fileNameLength()+this.extraFieldLength()+this.fileCommentLength()},_i.prototype.isDirectory=function(){var t=this.fileName();return!!(16&this.externalAttributes())||"/"===t.charAt(t.length-1)},_i.prototype.isFile=function(){return!this.isDirectory()},_i.prototype.useUTF8=function(){return 2048==(2048&this.flag())},_i.prototype.isEncrypted=function(){return 1==(1&this.flag())},_i.prototype.getFileData=function(){var t=this.headerRelativeOffset(),e=new pi(this.zipData.slice(t));return new li(e,this,this.zipData.slice(t+e.totalSize()))},_i.prototype.getData=function(){return this.getFileData().decompress()},_i.prototype.getRawData=function(){return this.getFileData().getRawData()},_i.prototype.getStats=function(){return new Ne(Fe.FILE,this.uncompressedSize(),365,new Date,this.lastModFileTime())};var mi=function(t){if(this.data=t,101010256!==this.data.readUInt32LE(0))throw new ke(we.EINVAL,"Invalid Zip file: End of central directory record has invalid signature: "+this.data.readUInt32LE(0))};mi.prototype.diskNumber=function(){return this.data.readUInt16LE(4)},mi.prototype.cdDiskNumber=function(){return this.data.readUInt16LE(6)},mi.prototype.cdDiskEntryCount=function(){return this.data.readUInt16LE(8)},mi.prototype.cdTotalEntryCount=function(){return this.data.readUInt16LE(10)},mi.prototype.cdSize=function(){return this.data.readUInt32LE(12)},mi.prototype.cdOffset=function(){return this.data.readUInt32LE(16)},mi.prototype.cdZipCommentLength=function(){return this.data.readUInt16LE(20)},mi.prototype.cdZipComment=function(){return se(this.data,!0,22,this.cdZipCommentLength())},mi.prototype.rawCdZipComment=function(){return this.data.slice(22,22+this.cdZipCommentLength())};var wi=function(t,e,n,r){this.index=t,this.directoryEntries=e,this.eocd=n,this.data=r},vi=function(t){function e(e,n){void 0===n&&(n=""),t.call(this),this.name=n,this._index=new ri,this._directoryEntries=[],this._eocd=null,this._index=e.index,this._directoryEntries=e.directoryEntries,this._eocd=e.eocd,this.data=e.data}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.Create=function(t,n){try{e._computeIndex(t.zipData,function(r,i){if(i){var o=new e(i,t.name);n(null,o)}else n(r)})}catch(t){n(t)}},e.isAvailable=function(){return!0},e.RegisterDecompressionMethod=function(t,e){fi[t]=e},e._getEOCD=function(t){for(var e=Math.min(65557,t.length-1),n=22;n-1},Ii.prototype.getRockRidgeOffset=function(){return this._rockRidgeOffset},Ii.prototype.rootCheckForRockRidge=function(t){var e=this.getDirectory(t);this._rockRidgeOffset=e.getDotEntry(t)._getRockRidgeOffset(t),this._rockRidgeOffset>-1&&(this._fileOrDir=null)},Ii.prototype.length=function(){return this._data[0]},Ii.prototype.extendedAttributeRecordLength=function(){return this._data[1]},Ii.prototype.lba=function(){return 2048*this._data.readUInt32LE(2)},Ii.prototype.dataLength=function(){return this._data.readUInt32LE(10)},Ii.prototype.recordingDate=function(){return fe(this._data,18)},Ii.prototype.fileFlags=function(){return this._data[25]},Ii.prototype.fileUnitSize=function(){return this._data[26]},Ii.prototype.interleaveGapSize=function(){return this._data[27]},Ii.prototype.volumeSequenceNumber=function(){return this._data.readUInt16LE(28)},Ii.prototype.identifier=function(){return this._getString(33,this._data[32])},Ii.prototype.fileName=function(t){if(this.hasRockRidge()){var e=this._rockRidgeFilename(t);if(null!==e)return e}var n=this.identifier();if(this.isDirectory(t))return n;var r=n.indexOf(";");return-1===r?n:"."===n[r-1]?n.slice(0,r-1):n.slice(0,r)},Ii.prototype.isDirectory=function(t){var e=!!(2&this.fileFlags());return!e&&this.hasRockRidge()&&(e=this.getSUEntries(t).filter(function(t){return t instanceof zi}).length>0),e},Ii.prototype.isSymlink=function(t){return this.hasRockRidge()&&this.getSUEntries(t).filter(function(t){return t instanceof Mi}).length>0},Ii.prototype.getSymlinkPath=function(t){for(var e="",n=this.getSUEntries(t),r=this._getGetString(),i=0,o=n;i1&&"/"===e[e.length-1]?e.slice(0,e.length-1):e},Ii.prototype.getFile=function(t){if(this.isDirectory(t))throw new Error("Tried to get a File from a directory.");return null===this._fileOrDir&&(this._fileOrDir=t.slice(this.lba(),this.lba()+this.dataLength())),this._fileOrDir},Ii.prototype.getDirectory=function(t){if(!this.isDirectory(t))throw new Error("Tried to get a Directory from a file.");return null===this._fileOrDir&&(this._fileOrDir=this._constructDirectory(t)),this._fileOrDir},Ii.prototype.getSUEntries=function(t){return this._suEntries||this._constructSUEntries(t),this._suEntries},Ii.prototype._rockRidgeFilename=function(t){var e=this.getSUEntries(t).filter(function(t){return t instanceof Bi});if(0===e.length||6&e[0].flags())return null;for(var n="",r=this._getGetString(),i=0,o=e;i0){var n=e[0];if(n instanceof Li&&n.checkBytesPass())for(var r=1;r0)throw new Error("Invalid string. Length must be a multiple of 4");return"="===t[e-2]?2:"="===t[e-1]?1:0}function i(t){return 3*t.length/4-r(t)}function o(t){var e,n,i,o,s,a=t.length;o=r(t),s=new h(3*a/4-o),n=o>0?a-4:a;var c=0;for(e=0;e>16&255,s[c++]=i>>8&255,s[c++]=255&i;return 2===o?(i=f[t.charCodeAt(e)]<<2|f[t.charCodeAt(e+1)]>>4,s[c++]=255&i):1===o&&(i=f[t.charCodeAt(e)]<<10|f[t.charCodeAt(e+1)]<<4|f[t.charCodeAt(e+2)]>>2,s[c++]=i>>8&255,s[c++]=255&i),s}function s(t){return u[t>>18&63]+u[t>>12&63]+u[t>>6&63]+u[63&t]}function a(t,e,n){for(var r,i=[],o=e;oc?c:s+16383));return 1===r?(e=t[n-1],i+=u[e>>2],i+=u[e<<4&63],i+="=="):2===r&&(e=(t[n-2]<<8)+t[n-1],i+=u[e>>10],i+=u[e>>4&63],i+=u[e<<2&63],i+="="),o.push(i),o.join("")}e.byteLength=i,e.toByteArray=o,e.fromByteArray=c;for(var u=[],f=[],h="undefined"!=typeof Uint8Array?Uint8Array:Array,p="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=0,d=p.length;l>1,f=-7,h=n?i-1:0,p=n?-1:1,l=t[e+h];for(h+=p,o=l&(1<<-f)-1,l>>=-f,f+=a;f>0;o=256*o+t[e+h],h+=p,f-=8);for(s=o&(1<<-f)-1,o>>=-f,f+=r;f>0;s=256*s+t[e+h],h+=p,f-=8);if(0===o)o=1-u;else{if(o===c)return s?NaN:1/0*(l?-1:1);s+=Math.pow(2,r),o-=u}return(l?-1:1)*s*Math.pow(2,o-r)},e.write=function(t,e,n,r,i,o){var s,a,c,u=8*o-i-1,f=(1<>1,p=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,l=r?0:o-1,d=r?1:-1,y=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=f):(s=Math.floor(Math.log(e)/Math.LN2),e*(c=Math.pow(2,-s))<1&&(s--,c*=2),e+=s+h>=1?p/c:p*Math.pow(2,1-h),e*c>=2&&(s++,c/=2),s+h>=f?(a=0,s=f):s+h>=1?(a=(e*c-1)*Math.pow(2,i),s+=h):(a=e*Math.pow(2,h-1)*Math.pow(2,i),s=0));i>=8;t[n+l]=255&a,l+=d,a/=256,i-=8);for(s=s<0;t[n+l]=255&s,l+=d,s/=256,u-=8);t[n+l-d]|=128*y}},function(t,e,n){"use strict";(function(e){var r=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},i=n(6),o=null,s=function(){function t(t,e){this.fun=t,this.array=e}return t.prototype.run=function(){this.fun.apply(null,this.array)},t}(),a=function(){function t(){this._queue=[],this._draining=!1,this._currentQueue=null,this._queueIndex=-1}return t.prototype.push=function(t){var e=this;1!==this._queue.push(t)||this._draining||setTimeout(function(){return e._drainQueue()},0)},t.prototype._cleanUpNextTick=function(){this._draining=!1,this._currentQueue&&this._currentQueue.length?this._queue=this._currentQueue.concat(this._queue):this._queueIndex=-1,this._queue.length&&this._drainQueue()},t.prototype._drainQueue=function(){var t=this;if(!this._draining){var e=setTimeout(function(){return t._cleanUpNextTick()});this._draining=!0;for(var n=this._queue.length;n;){for(this._currentQueue=this._queue,this._queue=[];++this._queueIndex0&&(this._waitingForWrites=this.push(this._bufferedWrites.shift()),this._waitingForWrites););},n}(i.Duplex);t.exports=o}).call(e,n(9))},function(t,e,n){function r(){i.call(this)}t.exports=r;var i=n(6).EventEmitter;n(1)(r,i),r.Readable=n(10),r.Writable=n(30),r.Duplex=n(31),r.Transform=n(32),r.PassThrough=n(33),r.Stream=r,r.prototype.pipe=function(t,e){function n(e){t.writable&&!1===t.write(e)&&u.pause&&u.pause()}function r(){u.readable&&u.resume&&u.resume()}function o(){f||(f=!0,t.end())}function s(){f||(f=!0,"function"==typeof t.destroy&&t.destroy())}function a(t){if(c(),0===i.listenerCount(this,"error"))throw t}function c(){u.removeListener("data",n),t.removeListener("drain",r),u.removeListener("end",o),u.removeListener("close",s),u.removeListener("error",a),t.removeListener("error",a),u.removeListener("end",c),u.removeListener("close",c),t.removeListener("close",c)}var u=this;u.on("data",n),t.on("drain",r),t._isStdio||e&&!1===e.end||(u.on("end",o),u.on("close",s));var f=!1;return u.on("error",a),t.on("error",a),u.on("end",c),u.on("close",c),t.on("close",c),t.emit("pipe",u),t}},function(t,e){var n={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==n.call(t)}},function(t,e){},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e,n){t.copy(e,n)}var o=n(11).Buffer;t.exports=function(){function t(){r(this,t),this.head=null,this.tail=null,this.length=0}return t.prototype.push=function(t){var e={data:t,next:null};this.length>0?this.tail.next=e:this.head=e,this.tail=e,++this.length},t.prototype.unshift=function(t){var e={data:t,next:this.head};0===this.length&&(this.tail=e),this.head=e,++this.length},t.prototype.shift=function(){if(0!==this.length){var t=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,t}},t.prototype.clear=function(){this.head=this.tail=null,this.length=0},t.prototype.join=function(t){if(0===this.length)return"";for(var e=this.head,n=""+e.data;e=e.next;)n+=t+e.data;return n},t.prototype.concat=function(t){if(0===this.length)return o.alloc(0);if(1===this.length)return this.head.data;for(var e=o.allocUnsafe(t>>>0),n=this.head,r=0;n;)i(n.data,e,r),r+=n.data.length,n=n.next;return e},t}()},function(t,e,n){(function(e){function n(t,e){function n(){if(!i){if(r("throwDeprecation"))throw new Error(e);r("traceDeprecation")?console.trace(e):console.warn(e),i=!0}return t.apply(this,arguments)}if(r("noDeprecation"))return t;var i=!1;return n}function r(t){try{if(!e.localStorage)return!1}catch(t){return!1}var n=e.localStorage[t];return null!=n&&"true"===String(n).toLowerCase()}t.exports=n}).call(e,n(5))},function(t,e,n){"use strict";function r(t){if(!(this instanceof r))return new r(t);i.call(this,t)}t.exports=r;var i=n(18),o=n(3);o.inherits=n(1),o.inherits(r,i),r.prototype._transform=function(t,e,n){n(null,t)}},function(t,e,n){t.exports=n(12)},function(t,e,n){t.exports=n(0)},function(t,e,n){t.exports=n(10).Transform},function(t,e,n){t.exports=n(10).PassThrough},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},function(t,e,n){"use strict";function r(t){if(!(this instanceof r))return new r(t);this.options=a.assign({chunkSize:16384,windowBits:0,to:""},t||{});var e=this.options;e.raw&&e.windowBits>=0&&e.windowBits<16&&(e.windowBits=-e.windowBits,0===e.windowBits&&(e.windowBits=-15)),!(e.windowBits>=0&&e.windowBits<16)||t&&t.windowBits||(e.windowBits+=32),e.windowBits>15&&e.windowBits<48&&0==(15&e.windowBits)&&(e.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new h,this.strm.avail_out=0;var n=s.inflateInit2(this.strm,e.windowBits);if(n!==u.Z_OK)throw new Error(f[n]);this.header=new p,s.inflateGetHeader(this.strm,this.header)}function i(t,e){var n=new r(e);if(n.push(t,!0),n.err)throw n.msg||f[n.err];return n.result}function o(t,e){return e=e||{},e.raw=!0,i(t,e)}var s=n(36),a=n(8),c=n(41),u=n(42),f=n(43),h=n(44),p=n(45),l=Object.prototype.toString;r.prototype.push=function(t,e){var n,r,i,o,f,h,p=this.strm,d=this.options.chunkSize,y=this.options.dictionary,g=!1;if(this.ended)return!1;r=e===~~e?e:!0===e?u.Z_FINISH:u.Z_NO_FLUSH,"string"==typeof t?p.input=c.binstring2buf(t):"[object ArrayBuffer]"===l.call(t)?p.input=new Uint8Array(t):p.input=t,p.next_in=0,p.avail_in=p.input.length;do{if(0===p.avail_out&&(p.output=new a.Buf8(d),p.next_out=0,p.avail_out=d),n=s.inflate(p,u.Z_NO_FLUSH),n===u.Z_NEED_DICT&&y&&(h="string"==typeof y?c.string2buf(y):"[object ArrayBuffer]"===l.call(y)?new Uint8Array(y):y,n=s.inflateSetDictionary(this.strm,h)),n===u.Z_BUF_ERROR&&!0===g&&(n=u.Z_OK,g=!1),n!==u.Z_STREAM_END&&n!==u.Z_OK)return this.onEnd(n),this.ended=!0,!1;p.next_out&&(0!==p.avail_out&&n!==u.Z_STREAM_END&&(0!==p.avail_in||r!==u.Z_FINISH&&r!==u.Z_SYNC_FLUSH)||("string"===this.options.to?(i=c.utf8border(p.output,p.next_out),o=p.next_out-i,f=c.buf2string(p.output,i),p.next_out=o,p.avail_out=d-o,o&&a.arraySet(p.output,p.output,i,o,0),this.onData(f)):this.onData(a.shrinkBuf(p.output,p.next_out)))),0===p.avail_in&&0===p.avail_out&&(g=!0)}while((p.avail_in>0||0===p.avail_out)&&n!==u.Z_STREAM_END);return n===u.Z_STREAM_END&&(r=u.Z_FINISH),r===u.Z_FINISH?(n=s.inflateEnd(this.strm),this.onEnd(n),this.ended=!0,n===u.Z_OK):r!==u.Z_SYNC_FLUSH||(this.onEnd(u.Z_OK),p.avail_out=0,!0)},r.prototype.onData=function(t){this.chunks.push(t)},r.prototype.onEnd=function(t){t===u.Z_OK&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=a.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg},e.Inflate=r,e.inflate=i,e.inflateRaw=o,e.ungzip=i},function(t,e,n){"use strict";function r(t){return(t>>>24&255)+(t>>>8&65280)+((65280&t)<<8)+((255&t)<<24)}function i(){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 m.Buf16(320),this.work=new m.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function o(t){var e;return t&&t.state?(e=t.state,t.total_in=t.total_out=e.total=0,t.msg="",e.wrap&&(t.adler=1&e.wrap),e.mode=U,e.last=0,e.havedict=0,e.dmax=32768,e.head=null,e.hold=0,e.bits=0,e.lencode=e.lendyn=new m.Buf32(yt),e.distcode=e.distdyn=new m.Buf32(gt),e.sane=1,e.back=-1,R):x}function s(t){var e;return t&&t.state?(e=t.state,e.wsize=0,e.whave=0,e.wnext=0,o(t)):x}function a(t,e){var n,r;return t&&t.state?(r=t.state,e<0?(n=0,e=-e):(n=1+(e>>4),e<48&&(e&=15)),e&&(e<8||e>15)?x:(null!==r.window&&r.wbits!==e&&(r.window=null),r.wrap=n,r.wbits=e,s(t))):x}function c(t,e){var n,r;return t?(r=new i,t.state=r,r.window=null,n=a(t,e),n!==R&&(t.state=null),n):x}function u(t){return c(t,_t)}function f(t){if(mt){var e;for(g=new m.Buf32(512),_=new m.Buf32(32),e=0;e<144;)t.lens[e++]=8;for(;e<256;)t.lens[e++]=9;for(;e<280;)t.lens[e++]=7;for(;e<288;)t.lens[e++]=8;for(S(k,t.lens,0,288,g,0,t.work,{bits:9}),e=0;e<32;)t.lens[e++]=5;S(I,t.lens,0,32,_,0,t.work,{bits:5}),mt=!1}t.lencode=g,t.lenbits=9,t.distcode=_,t.distbits=5}function h(t,e,n,r){var i,o=t.state;return null===o.window&&(o.wsize=1<=o.wsize?(m.arraySet(o.window,e,n-o.wsize,o.wsize,0),o.wnext=0,o.whave=o.wsize):(i=o.wsize-o.wnext,i>r&&(i=r),m.arraySet(o.window,e,n-r,i,o.wnext),r-=i,r?(m.arraySet(o.window,e,n-r,r,0),o.wnext=r,o.whave=o.wsize):(o.wnext+=i,o.wnext===o.wsize&&(o.wnext=0),o.whave>>8&255,n.check=v(n.check,Ft,2,0),p=0,l=0,n.mode=M;break}if(n.flags=0,n.head&&(n.head.done=!1),!(1&n.wrap)||(((255&p)<<8)+(p>>8))%31){t.msg="incorrect header check",n.mode=pt;break}if((15&p)!==C){t.msg="unknown compression method",n.mode=pt;break}if(p>>>=4,l-=4,St=8+(15&p),0===n.wbits)n.wbits=St;else if(St>n.wbits){t.msg="invalid window size",n.mode=pt;break}n.dmax=1<>8&1),512&n.flags&&(Ft[0]=255&p,Ft[1]=p>>>8&255,n.check=v(n.check,Ft,2,0)),p=0,l=0,n.mode=j;case j:for(;l<32;){if(0===c)break t;c--,p+=i[s++]<>>8&255,Ft[2]=p>>>16&255,Ft[3]=p>>>24&255,n.check=v(n.check,Ft,4,0)),p=0,l=0,n.mode=B;case B:for(;l<16;){if(0===c)break t;c--,p+=i[s++]<>8),512&n.flags&&(Ft[0]=255&p,Ft[1]=p>>>8&255,n.check=v(n.check,Ft,2,0)),p=0,l=0,n.mode=z;case z:if(1024&n.flags){for(;l<16;){if(0===c)break t;c--,p+=i[s++]<>>8&255,n.check=v(n.check,Ft,2,0)),p=0,l=0}else n.head&&(n.head.extra=null);n.mode=q;case q:if(1024&n.flags&&(g=n.length,g>c&&(g=c),g&&(n.head&&(St=n.head.extra_len-n.length,n.head.extra||(n.head.extra=new Array(n.head.extra_len)),m.arraySet(n.head.extra,i,s,g,St)),512&n.flags&&(n.check=v(n.check,i,g,s)),c-=g,s+=g,n.length-=g),n.length))break t;n.length=0,n.mode=V;case V:if(2048&n.flags){if(0===c)break t;g=0;do{St=i[s+g++],n.head&&St&&n.length<65536&&(n.head.name+=String.fromCharCode(St))}while(St&&g>9&1,n.head.done=!0),t.adler=n.check=0,n.mode=X;break;case Z:for(;l<32;){if(0===c)break t;c--,p+=i[s++]<>>=7&l,l-=7&l,n.mode=ut;break}for(;l<3;){if(0===c)break t;c--,p+=i[s++]<>>=1,l-=1,3&p){case 0:n.mode=K;break;case 1:if(f(n),n.mode=nt,e===N){p>>>=2,l-=2;break t}break;case 2:n.mode=$;break;case 3:t.msg="invalid block type",n.mode=pt}p>>>=2,l-=2;break;case K:for(p>>>=7&l,l-=7&l;l<32;){if(0===c)break t;c--,p+=i[s++]<>>16^65535)){t.msg="invalid stored block lengths",n.mode=pt;break}if(n.length=65535&p,p=0,l=0,n.mode=G,e===N)break t;case G:n.mode=Q;case Q:if(g=n.length){if(g>c&&(g=c),g>u&&(g=u),0===g)break t;m.arraySet(o,i,s,g,a),c-=g,s+=g,u-=g,a+=g,n.length-=g;break}n.mode=X;break;case $:for(;l<14;){if(0===c)break t;c--,p+=i[s++]<>>=5,l-=5,n.ndist=1+(31&p),p>>>=5,l-=5,n.ncode=4+(15&p),p>>>=4,l-=4,n.nlen>286||n.ndist>30){t.msg="too many length or distance symbols",n.mode=pt;break}n.have=0,n.mode=tt;case tt:for(;n.have>>=3,l-=3}for(;n.have<19;)n.lens[Nt[n.have++]]=0;if(n.lencode=n.lendyn,n.lenbits=7,kt={bits:n.lenbits},Et=S(E,n.lens,0,19,n.lencode,0,n.work,kt),n.lenbits=kt.bits,Et){t.msg="invalid code lengths set",n.mode=pt;break}n.have=0,n.mode=et;case et:for(;n.have>>24,_t=Ot>>>16&255,mt=65535&Ot,!(gt<=l);){if(0===c)break t;c--,p+=i[s++]<>>=gt,l-=gt,n.lens[n.have++]=mt;else{if(16===mt){for(It=gt+2;l>>=gt,l-=gt,0===n.have){t.msg="invalid bit length repeat",n.mode=pt;break}St=n.lens[n.have-1],g=3+(3&p),p>>>=2,l-=2}else if(17===mt){for(It=gt+3;l>>=gt,l-=gt,St=0,g=3+(7&p),p>>>=3,l-=3}else{for(It=gt+7;l>>=gt,l-=gt,St=0,g=11+(127&p),p>>>=7,l-=7}if(n.have+g>n.nlen+n.ndist){t.msg="invalid bit length repeat",n.mode=pt;break}for(;g--;)n.lens[n.have++]=St}}if(n.mode===pt)break;if(0===n.lens[256]){t.msg="invalid code -- missing end-of-block",n.mode=pt;break}if(n.lenbits=9,kt={bits:n.lenbits},Et=S(k,n.lens,0,n.nlen,n.lencode,0,n.work,kt),n.lenbits=kt.bits,Et){t.msg="invalid literal/lengths set",n.mode=pt;break}if(n.distbits=6,n.distcode=n.distdyn,kt={bits:n.distbits},Et=S(I,n.lens,n.nlen,n.ndist,n.distcode,0,n.work,kt),n.distbits=kt.bits,Et){t.msg="invalid distances set",n.mode=pt;break}if(n.mode=nt,e===N)break t;case nt:n.mode=rt;case rt:if(c>=6&&u>=258){t.next_out=a,t.avail_out=u,t.next_in=s,t.avail_in=c,n.hold=p,n.bits=l,b(t,y),a=t.next_out,o=t.output,u=t.avail_out,s=t.next_in,i=t.input,c=t.avail_in,p=n.hold,l=n.bits,n.mode===X&&(n.back=-1);break}for(n.back=0;Ot=n.lencode[p&(1<>>24,_t=Ot>>>16&255,mt=65535&Ot,!(gt<=l);){if(0===c)break t;c--,p+=i[s++]<>wt)],gt=Ot>>>24,_t=Ot>>>16&255,mt=65535&Ot,!(wt+gt<=l);){if(0===c)break t;c--,p+=i[s++]<>>=wt,l-=wt,n.back+=wt}if(p>>>=gt,l-=gt,n.back+=gt,n.length=mt,0===_t){n.mode=ct;break}if(32&_t){n.back=-1,n.mode=X;break}if(64&_t){t.msg="invalid literal/length code",n.mode=pt;break}n.extra=15&_t,n.mode=it;case it:if(n.extra){for(It=n.extra;l>>=n.extra,l-=n.extra,n.back+=n.extra}n.was=n.length,n.mode=ot;case ot:for(;Ot=n.distcode[p&(1<>>24,_t=Ot>>>16&255,mt=65535&Ot,!(gt<=l);){if(0===c)break t;c--,p+=i[s++]<>wt)],gt=Ot>>>24,_t=Ot>>>16&255,mt=65535&Ot,!(wt+gt<=l);){if(0===c)break t;c--,p+=i[s++]<>>=wt,l-=wt,n.back+=wt}if(p>>>=gt,l-=gt,n.back+=gt,64&_t){t.msg="invalid distance code",n.mode=pt;break}n.offset=mt,n.extra=15&_t,n.mode=st;case st:if(n.extra){for(It=n.extra;l>>=n.extra,l-=n.extra,n.back+=n.extra}if(n.offset>n.dmax){t.msg="invalid distance too far back",n.mode=pt;break}n.mode=at;case at:if(0===u)break t;if(g=y-u,n.offset>g){if((g=n.offset-g)>n.whave&&n.sane){t.msg="invalid distance too far back",n.mode=pt;break}g>n.wnext?(g-=n.wnext,_=n.wsize-g):_=n.wnext-g,g>n.length&&(g=n.length),yt=n.window}else yt=o,_=a-n.offset,g=n.length;g>u&&(g=u),u-=g,n.length-=g;do{o[a++]=yt[_++]}while(--g);0===n.length&&(n.mode=rt);break;case ct:if(0===u)break t;o[a++]=n.length,u--,n.mode=rt;break;case ut:if(n.wrap){for(;l<32;){if(0===c)break t;c--,p|=i[s++]<>>16&65535|0,s=0;0!==n;){s=n>2e3?2e3:n,n-=s;do{i=i+e[r++]|0,o=o+i|0}while(--s);i%=65521,o%=65521}return i|o<<16|0}t.exports=r},function(t,e,n){"use strict";function r(t,e,n,r){var o=i,s=r+n;t^=-1;for(var a=r;a>>8^o[255&(t^e[a])];return-1^t}var i=function(){for(var t,e=[],n=0;n<256;n++){t=n;for(var r=0;r<8;r++)t=1&t?3988292384^t>>>1:t>>>1;e[n]=t}return e}();t.exports=r},function(t,e,n){"use strict";t.exports=function(t,e){var n,r,i,o,s,a,c,u,f,h,p,l,d,y,g,_,m,w,v,b,S,E,k,I,O;n=t.state,r=t.next_in,I=t.input,i=r+(t.avail_in-5),o=t.next_out,O=t.output,s=o-(e-t.avail_out),a=o+(t.avail_out-257),c=n.dmax,u=n.wsize,f=n.whave,h=n.wnext,p=n.window,l=n.hold,d=n.bits,y=n.lencode,g=n.distcode,_=(1<>>24,l>>>=v,d-=v,0===(v=w>>>16&255))O[o++]=65535&w;else{if(!(16&v)){if(0==(64&v)){w=y[(65535&w)+(l&(1<>>=v,d-=v),d<15&&(l+=I[r++]<>>24,l>>>=v,d-=v,!(16&(v=w>>>16&255))){if(0==(64&v)){w=g[(65535&w)+(l&(1<c){t.msg="invalid distance too far back",n.mode=30;break t}if(l>>>=v,d-=v,v=o-s,S>v){if((v=S-v)>f&&n.sane){t.msg="invalid distance too far back",n.mode=30;break t}if(E=0,k=p,0===h){if(E+=u-v,v2;)O[o++]=k[E++],O[o++]=k[E++],O[o++]=k[E++],b-=3;b&&(O[o++]=k[E++],b>1&&(O[o++]=k[E++]))}else{E=o-S;do{O[o++]=O[E++],O[o++]=O[E++],O[o++]=O[E++],b-=3}while(b>2);b&&(O[o++]=O[E++],b>1&&(O[o++]=O[E++]))}break}}break}}while(r>3,r-=b,d-=b<<3,l&=(1<=1&&0===P[O];O--);if(F>O&&(F=O),0===O)return u[f++]=20971520,u[f++]=20971520,p.bits=1,0;for(I=1;I0&&(0===t||1!==O))return-1;for(C[1]=0,E=1;E<15;E++)C[E+1]=C[E]+P[E];for(k=0;k852||2===t&&L>592)return 1;for(;;){w=E-R,h[k]m?(v=U[M+h[k]],b=D[A+h[k]]):(v=96,b=0),l=1<>R)+d]=w<<24|v<<16|b|0}while(0!==d);for(l=1<>=1;if(0!==l?(x&=l-1,x+=l):x=0,k++,0==--P[E]){if(E===O)break;E=e[n+h[k]]}if(E>F&&(x&g)!==y){for(0===R&&(R=F),_+=I,N=E-R,T=1<852||2===t&&L>592)return 1;y=x&g,u[y]=F<<24|N<<16|_-f|0}}return 0!==x&&(u[_+x]=E-R<<24|64<<16|0),p.bits=F,0}},function(t,e,n){"use strict";function r(t,e){if(e<65537&&(t.subarray&&s||!t.subarray&&o))return String.fromCharCode.apply(null,i.shrinkBuf(t,e));for(var n="",r=0;r=252?6:c>=248?5:c>=240?4:c>=224?3:c>=192?2:1;a[254]=a[254]=1,e.string2buf=function(t){var e,n,r,o,s,a=t.length,c=0;for(o=0;o>>6,e[s++]=128|63&n):n<65536?(e[s++]=224|n>>>12,e[s++]=128|n>>>6&63,e[s++]=128|63&n):(e[s++]=240|n>>>18,e[s++]=128|n>>>12&63,e[s++]=128|n>>>6&63,e[s++]=128|63&n);return e},e.buf2binstring=function(t){return r(t,t.length)},e.binstring2buf=function(t){for(var e=new i.Buf8(t.length),n=0,r=e.length;n4)u[i++]=65533,n+=s-1;else{for(o&=2===s?31:3===s?15:7;s>1&&n1?u[i++]=65533:o<65536?u[i++]=o:(o-=65536,u[i++]=55296|o>>10&1023,u[i++]=56320|1023&o)}return r(u,i)},e.utf8border=function(t,e){var n;for(e=e||t.length,e>t.length&&(e=t.length),n=e-1;n>=0&&128==(192&t[n]);)n--;return n<0?e:0===n?e:n+a[t[n]]>e?n:e}},function(t,e,n){"use strict";t.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}},function(t,e,n){"use strict";t.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"}},function(t,e,n){"use strict";function r(){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}t.exports=r},function(t,e,n){"use strict";function r(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}t.exports=r}])}); +//# sourceMappingURL=browserfs.min.js.map \ No newline at end of file diff --git a/index.html b/index.html index 7df7dd3542..9cf2e13472 100644 --- a/index.html +++ b/index.html @@ -31,6 +31,7 @@ + @@ -76,9 +77,16 @@ document.head.appendChild(app) } window.onload = () => { - let app = document.createElement('script') - app.setAttribute('src', versions[versionToLoad]) - document.body.appendChild(app) + BrowserFS.install(window) + BrowserFS.configure({ + fs: "LocalStorage" + }, function(e) { + if (e) console.log(e) + let app = document.createElement('script') + app.setAttribute('src', versions[versionToLoad]) + document.body.appendChild(app) + window.remixFileSystem = require('fs') + }) } diff --git a/src/app.js b/src/app.js index 54c9b0e9f5..97c15480c0 100644 --- a/src/app.js +++ b/src/app.js @@ -12,15 +12,13 @@ var { OffsetToLineColumnConverter } = require('./lib/offsetToLineColumnConverter var QueryParams = require('./lib/query-params') var GistHandler = require('./lib/gist-handler') var Storage = remixLib.Storage -var LocalStorageProvider = require('./app/files/localStorageProvider') var RemixDProvider = require('./app/files/remixDProvider') var Config = require('./config') var Renderer = require('./app/ui/renderer') var examples = require('./app/editor/example-contracts') var modalDialogCustom = require('./app/ui/modal-dialog-custom') var FileManager = require('./app/files/fileManager') -var ReadonlyProvider = require('./app/files/readonlyProvider') -var BasicFileProvider = require('./app/files/basicFileProvider') +var FileProvider = require('./app/files/fileProvider') var toolTip = require('./app/ui/tooltip') var CompilerMetadata = require('./app/files/compiler-metadata') var CompilerImport = require('./app/compiler/compiler-imports') @@ -113,7 +111,7 @@ class App { // load file system self._components.filesProviders = {} - self._components.filesProviders['browser'] = new LocalStorageProvider(fileStorage) + self._components.filesProviders['browser'] = new FileProvider('browser', fileStorage) registry.put({api: self._components.filesProviders['browser'], name: 'fileproviders/browser'}) var remixd = new Remixd(65520) @@ -123,17 +121,7 @@ class App { }) self._components.filesProviders['localhost'] = new RemixDProvider(remixd) - self._components.filesProviders['swarm'] = new ReadonlyProvider('swarm') - self._components.filesProviders['github'] = new ReadonlyProvider('github') - self._components.filesProviders['gist'] = new BasicFileProvider('gist') - self._components.filesProviders['ipfs'] = new ReadonlyProvider('ipfs') - self._components.filesProviders['https'] = new ReadonlyProvider('https') - self._components.filesProviders['http'] = new ReadonlyProvider('http') registry.put({api: self._components.filesProviders['localhost'], name: 'fileproviders/localhost'}) - registry.put({api: self._components.filesProviders['swarm'], name: 'fileproviders/swarm'}) - registry.put({api: self._components.filesProviders['github'], name: 'fileproviders/github'}) - registry.put({api: self._components.filesProviders['gist'], name: 'fileproviders/gist'}) - registry.put({api: self._components.filesProviders['ipfs'], name: 'fileproviders/ipfs'}) registry.put({api: self._components.filesProviders, name: 'fileproviders'}) self._view = {} @@ -297,10 +285,8 @@ Please make a backup of your contracts and start using http://remix.ethereum.org editor, registry.get('config').api, new Renderer(), - registry.get('fileproviders/swarm').api, - registry.get('fileproviders/ipfs').api, - registry.get('filemanager').api, - registry.get('fileproviders').api, + registry.get('fileproviders/browser').api, + registry.get('filemanager').api ) const run = new RunTab( udapp, @@ -352,14 +338,11 @@ Please make a backup of your contracts and start using http://remix.ethereum.org const loadedFromGist = gistHandler.loadFromGist(queryParams.get(), fileManager) if (!loadedFromGist) { // insert ballot contract if there are no files to show - self._components.filesProviders['browser'].resolveDirectory('browser', (error, filesList) => { + self._components.filesProviders['browser'].resolveDirectory('/', (error, filesList) => { if (error) console.error(error) if (Object.keys(filesList).length === 0) { - if (!self._components.filesProviders['browser'].set(examples.ballot.name, examples.ballot.content)) { - modalDialogCustom.alert('Failed to store example contract in browser. Remix will not work properly. Please ensure Remix has access to LocalStorage. Safari in Private mode is known not to work.') - } else { - self._components.filesProviders['browser'].set(examples.ballot_test.name, examples.ballot_test.content) - } + fileManager.setFile(examples.ballot.name, examples.ballot.content) + fileManager.setFile(examples.ballot_test.name, examples.ballot_test.content) } }) } diff --git a/src/app/files/basicFileProvider.js b/src/app/files/basicFileProvider.js deleted file mode 100644 index e3c4f74c09..0000000000 --- a/src/app/files/basicFileProvider.js +++ /dev/null @@ -1,119 +0,0 @@ -'use strict' -const EventManager = require('../../lib/events') -const toolTip = require('../ui/tooltip') - -class BasicFileProvider { - constructor (type) { - this.event = new EventManager() - this.files = {} - this.paths = {} - this.normalizedNames = {} // contains the raw url associated with the displayed path - this.paths[type] = {} - this.type = type - this.readonly = true - } - - close (cb) { - this.files = {} - cb() - } - - init (cb) { - this.files = {} - } - - exists (path, cb) { - if (!this.files) return cb(null, false) - var unprefixedPath = this.removePrefix(path) - cb(null, this.files[unprefixedPath] !== undefined) - } - - get (path, cb) { - if (this.normalizedNames[path]) path = this.normalizedNames[path] // ensure we actually use the normalized path from here - var unprefixedPath = this.removePrefix(path) - var content = this.files[unprefixedPath] - if (!content) { - content = this.files[this.type + '/' + this.normalizedNames[path]] - } - if (cb) { - cb(null, content) - } - return content - } - - set (path, content, cb) { - this.addReadOnly(path, content) - if (cb) cb() - return true - } - - addReadOnly (path, content, rawPath) { - path = this.removePrefix(path) - try { // lazy try to format JSON - content = JSON.stringify(JSON.parse(content), null, '\t') - } catch (e) {} - if (!rawPath) rawPath = path - // splitting off the path in a tree structure, the json tree is used in `resolveDirectory` - var split = path - var folder = false - while (split.lastIndexOf('/') !== -1) { - var subitem = split.substring(split.lastIndexOf('/')) - split = split.substring(0, split.lastIndexOf('/')) - if (!this.paths[this.type + '/' + split]) { - this.paths[this.type + '/' + split] = {} - } - this.paths[this.type + '/' + split][split + subitem] = { isDirectory: folder } - folder = true - } - this.paths[this.type][split] = { isDirectory: folder } - this.files[path] = content - this.normalizedNames[rawPath] = path - this.event.trigger('fileAdded', [this.type + '/' + path, true]) - return true - } - - remove (path) { - var unprefixedPath = this.removePrefix(path) - var folderPath = path.substring(0, path.lastIndexOf('/')) - if (this.paths[folderPath]) { - delete this.paths[folderPath][unprefixedPath] - delete this.files[path] - } - this.event.trigger('fileRemoved', [this.type + '/' + unprefixedPath]) - return true - } - - rename (oldPath, newPath, isFolder) { - if (isFolder) { return toolTip('folder renaming is not handled by this explorer') } - var unprefixedoldPath = this.removePrefix(oldPath) - var unprefixednewPath = this.removePrefix(newPath) - this.get(oldPath, (error, content) => { - if (error) return console.log(error) - this.remove(oldPath) - this.set(newPath, content) - this.event.trigger('fileRenamed', [this.type + '/' + unprefixedoldPath, this.type + '/' + unprefixednewPath, isFolder]) - }) - } - - isReadOnly (path) { - return false - } - - list () { - return this.files - } - - resolveDirectory (path, callback) { - var self = this - if (path[0] === '/') path = path.substring(1) - if (!path) return callback(null, { [self.type]: { } }) - // we just return the json tree populated by `addReadOnly` - callback(null, this.paths[path]) - } - - removePrefix (path) { - return path.indexOf(this.type + '/') === 0 ? path.replace(this.type + '/', '') : path - } -} - -module.exports = BasicFileProvider diff --git a/src/app/files/compiler-metadata.js b/src/app/files/compiler-metadata.js index c0a1703543..69974afc58 100644 --- a/src/app/files/compiler-metadata.js +++ b/src/app/files/compiler-metadata.js @@ -18,6 +18,11 @@ class CompilerMetadata extends Plugin { self.fileManager = fileManager self.config = config self.networks = ['VM:-', 'main:1', 'ropsten:3', 'rinkeby:4', 'kovan:42', 'görli:5', 'Custom'] + self.innerPath = 'artifacts' + } + + _JSONFileName (path, contractName) { + return path + '/' + this.innerPath + '/' + contractName + '.json' } onActivation () { @@ -31,7 +36,7 @@ class CompilerMetadata extends Plugin { compiler.visitContracts((contract) => { if (contract.file !== source.target) return - var fileName = path + '/' + contract.name + '.json' + var fileName = self._JSONFileName(path, contract.name) provider.get(fileName, (error, content) => { if (!error) { content = content || '{}' @@ -96,7 +101,7 @@ class CompilerMetadata extends Plugin { if (err) { console.log(err) } else { - var fileName = path + '/' + contractName + '.json' + var fileName = self._JSONFileName(path, contractName) provider.get(fileName, (error, content) => { if (error) return reject(error) if (!content) return resolve() diff --git a/src/app/files/file-explorer.js b/src/app/files/file-explorer.js index 6cea03215e..a2841a4ed4 100644 --- a/src/app/files/file-explorer.js +++ b/src/app/files/file-explorer.js @@ -97,6 +97,7 @@ function fileExplorer (localRegistry, files, menuItems) { files.event.register('fileRenamed', fileRenamed) files.event.register('fileRenamedError', fileRenamedError) files.event.register('fileAdded', fileAdded) + files.event.register('folderAdded', folderAdded) function fileRenamedError (error) { modalDialogCustom.alert(error) @@ -124,6 +125,18 @@ function fileExplorer (localRegistry, files, menuItems) { }) } + function folderAdded (folderpath) { + self.ensureRoot(() => { + folderpath = folderpath.split('/').slice(0, -1).join('/') + self.files.resolveDirectory(folderpath, (error, fileTree) => { + if (error) console.error(error) + if (!fileTree) return + fileTree = normalize(folderpath, fileTree) + self.treeView.updateNodeFromJSON(folderpath, fileTree, true) + }) + }) + } + function fileRemoved (filepath) { var label = self.treeView.labelAt(filepath) if (label && label.parentElement) { @@ -462,7 +475,7 @@ fileExplorer.prototype.toGist = function (id) { // return all the files, except the temporary/readonly ones.. fileExplorer.prototype.packageFiles = function (filesProvider, callback) { var ret = {} - filesProvider.resolveDirectory(filesProvider.type, (error, files) => { + filesProvider.resolveDirectory('/', (error, files) => { if (error) callback(error) else { async.eachSeries(Object.keys(files), (path, cb) => { @@ -525,7 +538,7 @@ fileExplorer.prototype.updateGist = function () { fileExplorer.prototype.createNewFile = function () { let self = this - modalDialogCustom.prompt('Create new file', 'File Name', 'Untitled.sol', (input) => { + modalDialogCustom.prompt('Create new file', 'File Path (Untitled.sol, Folder1/Untitled.sol)', 'Untitled.sol', (input) => { helper.createNonClashingName(input, self.files, (error, newName) => { if (error) return modalDialogCustom.alert('Failed to create file ' + newName + ' ' + error) if (!self.files.set(newName, '')) { @@ -568,18 +581,16 @@ fileExplorer.prototype.ensureRoot = function (cb) { cb = cb || (() => {}) var self = this if (self.element) return cb() - - self.files.resolveDirectory('/', (error, files) => { - if (error) console.error(error) - var element = self.treeView.render(files, false) - element.classList.add(css.fileexplorer) - element.events = self.events - element.api = self.api - self.container.appendChild(element) - self.element = element - if (cb) cb() - self.treeView.expand(self.files.type) - }) + const root = {} + root[this.files.type] = {} + var element = self.treeView.render(root, false) + element.classList.add(css.fileexplorer) + element.events = self.events + element.api = self.api + self.container.appendChild(element) + self.element = element + if (cb) cb() + self.treeView.expand(self.files.type) } function normalize (path, filesList) { diff --git a/src/app/files/fileManager.js b/src/app/files/fileManager.js index 26452bcdbc..88ca3ff8d5 100644 --- a/src/app/files/fileManager.js +++ b/src/app/files/fileManager.js @@ -47,16 +47,13 @@ class FileManager extends Plugin { config: this._components.registry.get('config').api, browserExplorer: this._components.registry.get('fileproviders/browser').api, localhostExplorer: this._components.registry.get('fileproviders/localhost').api, - gistExplorer: this._components.registry.get('fileproviders/gist').api, filesProviders: this._components.registry.get('fileproviders').api } this._deps.browserExplorer.event.register('fileRenamed', (oldName, newName, isFolder) => { this.fileRenamedEvent(oldName, newName, isFolder) }) this._deps.localhostExplorer.event.register('fileRenamed', (oldName, newName, isFolder) => { this.fileRenamedEvent(oldName, newName, isFolder) }) - this._deps.gistExplorer.event.register('fileRenamed', (oldName, newName, isFolder) => { this.fileRenamedEvent(oldName, newName, isFolder) }) this._deps.browserExplorer.event.register('fileRemoved', (path) => { this.fileRemovedEvent(path) }) this._deps.localhostExplorer.event.register('fileRemoved', (path) => { this.fileRemovedEvent(path) }) - this._deps.gistExplorer.event.register('fileRemoved', (path) => { this.fileRemovedEvent(path) }) this._deps.localhostExplorer.event.register('errored', (event) => { this.removeTabsOf(this._deps.localhostExplorer) }) this._deps.localhostExplorer.event.register('closed', (event) => { this.removeTabsOf(this._deps.localhostExplorer) }) } @@ -309,18 +306,10 @@ class FileManager extends Plugin { } fileProviderOf (file) { - if (!file) return null - var provider = file.match(/[^/]*/) - if (provider !== null && this._deps.filesProviders[provider[0]]) { - return this._deps.filesProviders[provider[0]] - } else { - for (var handler of this._components.compilerImport.handlers()) { - if (handler.match.exec(file)) { - return this._deps.filesProviders[handler.type] - } - } + if (file.indexOf('localhost') === 0) { + return this._deps.filesProviders['localhost'] } - return null + return this._deps.filesProviders['browser'] } saveCurrentFile () { diff --git a/src/app/files/filePovider.js b/src/app/files/filePovider.js deleted file mode 100644 index a0c245bd56..0000000000 --- a/src/app/files/filePovider.js +++ /dev/null @@ -1,139 +0,0 @@ -'use strict' - -var EventManager = require('../../lib/events') - -class FileProvider { - constructor (name, storage) { - this.event = new EventManager() - this.storage = storage - this.type = name - this.structFile = '.' + name + '.tree' - this.tree = {} - } - - exists (path, cb) { - cb(null, this._exists(path)) - } - - updateRefs (path, type) { - var split = path.split('/') // this should be unprefixed path - var crawlpath = this.tree - var intermediatePath = '' - split.forEach((pathPart, index) => { - intermediatePath += pathPart - if (!crawlpath[pathPart]) crawlpath[intermediatePath] = {} - if (index < split.length - 1) { - crawlpath = crawlpath[intermediatePath] - intermediatePath += '/' - } else if (type === 'add') { - crawlpath[intermediatePath] = path - } else if (type === 'remove' && crawlpath[intermediatePath]) { - delete crawlpath[intermediatePath] - } - }) - this.storage.set(this.structFile, JSON.stringify(this.tree)) - } - - _exists (path) { - var unprefixedpath = this.removePrefix(path) - return this.storage.exists(unprefixedpath) - } - - init (cb) { - var tree = this.storage.get(this.structFile) - this.tree = tree ? JSON.parse(tree) : {} - if (cb) cb() - } - - get (path, cb) { - var unprefixedpath = this.removePrefix(path) - var content = this.storage.get(unprefixedpath) - if (cb) { - cb(null, content) - } - return content - } - - set (path, content, cb) { - var unprefixedpath = this.removePrefix(path) - this.updateRefs(unprefixedpath, 'add') - var exists = this.storage.exists(unprefixedpath) - if (!this.storage.set(unprefixedpath, content)) { - if (cb) cb('error updating ' + path) - return false - } - if (!exists) { - this.event.trigger('fileAdded', [this.type + '/' + unprefixedpath, false]) - } else { - this.event.trigger('fileChanged', [this.type + '/' + unprefixedpath]) - } - if (cb) cb() - return true - } - - addReadOnly (path, content) { - return this.set(path, content) - } - - isReadOnly (path) { - return false - } - - remove (path) { - var unprefixedpath = this.removePrefix(path) - this.updateRefs(unprefixedpath, 'remove') - if (!this._exists(unprefixedpath)) { - return false - } - if (!this.storage.remove(unprefixedpath)) { - return false - } - this.event.trigger('fileRemoved', [this.type + '/' + unprefixedpath]) - return true - } - - rename (oldPath, newPath, isFolder) { - var unprefixedoldPath = this.removePrefix(oldPath) - var unprefixednewPath = this.removePrefix(newPath) - this.updateRefs(unprefixedoldPath, 'remove') - this.updateRefs(unprefixednewPath, 'add') - if (this.storage.exists(unprefixedoldPath)) { - if (!this.storage.rename(unprefixedoldPath, unprefixednewPath)) { - return false - } - this.event.trigger('fileRenamed', [ - this.type + '/' + unprefixedoldPath, - this.type + '/' + unprefixednewPath, - isFolder - ]) - return true - } - return false - } - - resolveDirectory (path, callback) { - if (path[0] === '/') path = path.substring(1) - if (!path) return callback(null, { [this.type]: {} }) - var tree = {} - path = this.removePrefix(path) - - var split = path.split('/') // this should be unprefixed path - var crawlpath = this.tree - split.forEach((pathPart, index) => { - if (crawlpath[pathPart]) crawlpath = crawlpath[pathPart] - }) - - for (var item in crawlpath) { - tree[item] = { isDirectory: typeof crawlpath[item] !== 'string' } - } - callback(null, tree) - } - - removePrefix (path) { - path = path.indexOf(this.type) === 0 ? path.replace(this.type, '') : path - if (path[0] === '/') return path.substring(1) - return path - } -} - -module.exports = FileProvider diff --git a/src/app/files/fileProvider.js b/src/app/files/fileProvider.js new file mode 100644 index 0000000000..f3096d72e9 --- /dev/null +++ b/src/app/files/fileProvider.js @@ -0,0 +1,138 @@ +'use strict' + +var EventManager = require('../../lib/events') + +class FileProvider { + constructor (name) { + this.event = new EventManager() + this.type = name + } + + exists (path, cb) { + cb(null, this._exists(path)) + } + + _exists (path) { + var unprefixedpath = this.removePrefix(path) + return window.remixFileSystem.existsSync(unprefixedpath) + } + + init (cb) { + cb() + } + + get (path, cb) { + cb = cb || function () {} + var unprefixedpath = this.removePrefix(path) + var exists = window.remixFileSystem.existsSync(unprefixedpath) + if (!exists) return cb(null, null) + window.remixFileSystem.readFile(unprefixedpath, 'utf8', (err, content) => { + cb(err, content) + }) + } + + set (path, content, cb) { + cb = cb || function () {} + var unprefixedpath = this.removePrefix(path) + var exists = window.remixFileSystem.existsSync(unprefixedpath) + if (!exists && unprefixedpath.indexOf('/') !== -1) { + const paths = unprefixedpath.split('/') + paths.pop() // last element should the filename + if (paths.length && paths[0] === '') paths.shift() + let currentCheck = '' + paths.forEach((value) => { + currentCheck = currentCheck + '/' + value + if (!window.remixFileSystem.existsSync(currentCheck)) { + window.remixFileSystem.mkdirSync(currentCheck) + this.event.trigger('folderAdded', [this._normalizePath(currentCheck)]) + } + }) + } + try { + window.remixFileSystem.writeFileSync(unprefixedpath, content) + } catch (e) { + cb(e) + return false + } + if (!exists) { + this.event.trigger('fileAdded', [this._normalizePath(unprefixedpath), false]) + } else { + this.event.trigger('fileChanged', [this._normalizePath(unprefixedpath)]) + } + cb() + return true + } + + addReadOnly (path, content) { + return this.set(path, content) + } + + isReadOnly (path) { + return false + } + + remove (path) { + var unprefixedpath = this.removePrefix(path) + if (!this._exists(unprefixedpath)) { + return false + } + const stat = window.remixFileSystem.statSync(unprefixedpath) + try { + if (stat.isDirectory()) { + window.remixFileSystem.rmdirSync(unprefixedpath, console.log) + } else { + window.remixFileSystem.unlinkSync(unprefixedpath, console.log) + } + this.event.trigger('fileRemoved', [this._normalizePath(unprefixedpath)]) + return true + } catch (e) { + console.log(e) + return false + } + } + + rename (oldPath, newPath, isFolder) { + var unprefixedoldPath = this.removePrefix(oldPath) + var unprefixednewPath = this.removePrefix(newPath) + if (this._exists(unprefixedoldPath)) { + window.remixFileSystem.renameSync(unprefixedoldPath, unprefixednewPath) + this.event.trigger('fileRenamed', [ + this._normalizePath(unprefixedoldPath), + this._normalizePath(unprefixednewPath), + isFolder + ]) + return true + } + return false + } + + resolveDirectory (path, callback) { + if (!path) return callback(null, { [this.type]: {} }) + path = this.removePrefix(path) + if (path.indexOf('/') !== 0) path = '/' + path + + window.remixFileSystem.readdir(path, (error, files) => { + var ret = {} + if (files) { + files.forEach(element => { + const absPath = (path === '/' ? '' : path) + '/' + element + ret[absPath.indexOf('/') === 0 ? absPath.replace('/', '') : absPath] = { isDirectory: window.remixFileSystem.statSync(absPath).isDirectory() } + // ^ ret does not accept path starting with '/' + }) + } + callback(error, ret) + }) + } + + removePrefix (path) { + path = path.indexOf(this.type) === 0 ? path.replace(this.type, '') : path + return path + } + + _normalizePath (path) { + if (path.indexOf('/') !== 0) path = '/' + path + return this.type + path + } +} + +module.exports = FileProvider diff --git a/src/app/files/fileProviderBase.js b/src/app/files/fileProviderBase.js deleted file mode 100644 index 55fcd8936b..0000000000 --- a/src/app/files/fileProviderBase.js +++ /dev/null @@ -1,29 +0,0 @@ -'use strict' - -class FileProvider { - - exists (path, cb) { throw new Error(this.name + ' function is not implemented for ' + this.constructor.name + ' class') } - - init (cb) { throw new Error(this.name + ' function is not implemented for ' + this.constructor.name + ' class') } - - get (path, cb) { throw new Error(this.name + ' function is not implemented for ' + this.constructor.name + ' class') } - - set (path, content, cb) { throw new Error(this.name + ' function is not implemented for ' + this.constructor.name + ' class') } - - addReadOnly (path, content) { throw new Error(this.name + ' function is not implemented for ' + this.constructor.name + ' class') } - - isReadOnly (path) { throw new Error(this.name + ' function is not implemented for ' + this.constructor.name + ' class') } - - remove (path) { throw new Error(this.name + ' function is not implemented for ' + this.constructor.name + ' class') } - - rename (oldPath, newPath, isFolder) { throw new Error(this.name + ' function is not implemented for ' + this.constructor.name + ' class') } - - resolveDirectory (path, callback) { throw new Error(this.name + ' function is not implemented for ' + this.constructor.name + ' class') } - - removePrefix (path) { throw new Error(this.name + ' function is not implemented for ' + this.constructor.name + ' class') } - - updateRefs (path, type) { throw new Error(this.name + ' function is not implemented for ' + this.constructor.name + ' class') } - -} - -module.exports = FileProvider diff --git a/src/app/files/localStorageProvider.js b/src/app/files/localStorageProvider.js deleted file mode 100644 index 2422f8dc5c..0000000000 --- a/src/app/files/localStorageProvider.js +++ /dev/null @@ -1,148 +0,0 @@ -'use strict' - -var EventManager = require('../../lib/events') - -function LocalStorageProvider (storage) { - var event = new EventManager() - this.event = event - var readonly = {} - this.type = 'browser' - - this.exists = function (path, cb) { - cb(null, this._exists(path)) - } - - this._exists = function (path) { - var unprefixedpath = this.removePrefix(path) - // NOTE: ignore the config file - if (path === '.remix.config') return false - - return this.isReadOnly(unprefixedpath) || storage.exists(unprefixedpath) - } - - this.init = function (cb) { - cb() - } - - this.get = function (path, cb) { - var unprefixedpath = this.removePrefix(path) - // NOTE: ignore the config file - if (path === '.remix.config') { - return null - } - - var content = readonly[unprefixedpath] || storage.get(unprefixedpath) - if (cb) { - cb(null, content) - } - return content - } - - this.set = function (path, content, cb) { - var unprefixedpath = this.removePrefix(path) - // NOTE: ignore the config file - if (path === '.remix.config') { - if (cb) cb('change not allowed') - return false - } - - if (!this.isReadOnly(unprefixedpath)) { - var exists = storage.exists(unprefixedpath) - if (!storage.set(unprefixedpath, content)) { - if (cb) cb('error updating ' + path) - return false - } - if (!exists) { - event.trigger('fileAdded', [this.type + '/' + unprefixedpath, false]) - } else { - event.trigger('fileChanged', [this.type + '/' + unprefixedpath]) - } - if (cb) cb() - return true - } - if (cb) cb('is read only') - return false - } - - this.addReadOnly = function (path, content) { - var unprefixedpath = this.removePrefix(path) - if (!storage.exists(unprefixedpath)) { - readonly[unprefixedpath] = content - event.trigger('fileAdded', [this.type + '/' + unprefixedpath, true]) - return true - } - - return false - } - - this.isReadOnly = function (path) { - path = this.removePrefix(path) - return readonly[path] !== undefined - } - - this.remove = function (path) { - var unprefixedpath = this.removePrefix(path) - if (!this._exists(unprefixedpath)) { - return false - } - - if (this.isReadOnly(unprefixedpath)) { - readonly[unprefixedpath] = undefined - } else { - if (!storage.remove(unprefixedpath)) { - return false - } - } - event.trigger('fileRemoved', [this.type + '/' + unprefixedpath]) - return true - } - - this.rename = function (oldPath, newPath, isFolder) { - var unprefixedoldPath = this.removePrefix(oldPath) - var unprefixednewPath = this.removePrefix(newPath) - if (!this.isReadOnly(unprefixedoldPath) && storage.exists(unprefixedoldPath)) { - if (!storage.rename(unprefixedoldPath, unprefixednewPath)) { - return false - } - event.trigger('fileRenamed', [this.type + '/' + unprefixedoldPath, this.type + '/' + unprefixednewPath, isFolder]) - return true - } - return false - } - - this.resolveDirectory = function (path, callback) { - var self = this - if (path[0] === '/') path = path.substring(1) - if (!path) return callback(null, { [self.type]: { } }) - path = self.removePrefix(path) - var filesList = {} - var tree = {} - // add r/w filesList to the list - storage.keys().forEach((path) => { - // NOTE: as a temporary measure do not show the config file - if (path !== '.remix.config') { - filesList[path] = false - } - }) - // add r/o files to the list - Object.keys(readonly).forEach((path) => { - filesList[path] = true - }) - - Object.keys(filesList).forEach(function (path) { - tree[path] = { isDirectory: false } - }) - return callback(null, tree) - } - - this.removePrefix = function (path) { - return path.indexOf(this.type + '/') === 0 ? path.replace(this.type + '/', '') : path - } - - // rename .browser-solidity.json to .remix.config - if (this._exists('.browser-solidity.json')) { - this.rename('.browser-solidity.json', '.remix.config') - } -} - -module.exports = LocalStorageProvider diff --git a/src/app/files/readonlyProvider.js b/src/app/files/readonlyProvider.js deleted file mode 100644 index 16abfd2a10..0000000000 --- a/src/app/files/readonlyProvider.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict' -let BasicFileProvider = require('./basicFileProvider') - -class ReadonlyProvider extends BasicFileProvider { - - remove (path) { - return false - } - - rename (oldPath, newPath, isFolder) { - return false - } - - isReadOnly (path) { - return true - } -} -module.exports = ReadonlyProvider diff --git a/src/app/panels/file-panel.js b/src/app/panels/file-panel.js index 4be2a51942..5aacc97a87 100644 --- a/src/app/panels/file-panel.js +++ b/src/app/panels/file-panel.js @@ -52,21 +52,13 @@ module.exports = class Filepanel extends ViewPlugin { fileManager: self._components.registry.get('filemanager').api, config: self._components.registry.get('config').api } - var fileExplorer = new FileExplorer(self._components.registry, self._deps.fileProviders['browser'], - ['createNewFile', 'publishToGist', 'copyFiles', canUpload ? 'uploadFile' : ''] - ) function createProvider (key, menuItems) { return new FileExplorer(self._components.registry, self._deps.fileProviders[key], menuItems) } + var fileExplorer = createProvider('browser', ['createNewFile', 'publishToGist', 'copyFiles', canUpload ? 'uploadFile' : '']) var fileSystemExplorer = createProvider('localhost') - var swarmExplorer = createProvider('swarm') - var githubExplorer = createProvider('github') - var gistExplorer = createProvider('gist', ['updateGist']) - var httpExplorer = createProvider('http') - var httpsExplorer = createProvider('https') - var ipfsExplorer = createProvider('ipfs') self.remixdHandle = new RemixdHandle(fileSystemExplorer, self._deps.fileProviders['localhost'], appManager) @@ -74,12 +66,6 @@ module.exports = class Filepanel extends ViewPlugin {
${fileExplorer.init()}
${fileSystemExplorer.init()}
-
${swarmExplorer.init()}
-
${githubExplorer.init()}
-
${gistExplorer.init()}
-
${httpExplorer.init()}
-
${httpsExplorer.init()}
-
${ipfsExplorer.init()}
` diff --git a/src/app/tabs/compile-tab.js b/src/app/tabs/compile-tab.js index 8ff1595925..b24f428fb8 100644 --- a/src/app/tabs/compile-tab.js +++ b/src/app/tabs/compile-tab.js @@ -42,7 +42,7 @@ const profile = { class CompileTab extends ViewPlugin { - constructor (editor, config, renderer, swarmfileProvider, ipfsfileProvider, fileManager, fileProviders) { + constructor (editor, config, renderer, fileProvider, fileManager) { super(profile) this.events = new EventEmitter() this._view = { @@ -52,15 +52,12 @@ class CompileTab extends ViewPlugin { contractEl: null } this.queryParams = new QueryParams() - + this.fileProvider = fileProvider // dependencies this.editor = editor this.config = config this.renderer = renderer - this.swarmfileProvider = swarmfileProvider - this.ipfsfileProvider = ipfsfileProvider this.fileManager = fileManager - this.fileProviders = fileProviders this.data = { contractsDetails: {} @@ -68,7 +65,7 @@ class CompileTab extends ViewPlugin { } onActivationInternal () { - this.compileTabLogic = new CompileTabLogic(this.queryParams, this.fileManager, this.editor, this.config, this.fileProviders) + this.compileTabLogic = new CompileTabLogic(this.queryParams, this.fileManager, this.editor, this.config, this.fileProvider) this.compiler = this.compileTabLogic.compiler this.compileTabLogic.init() @@ -311,7 +308,7 @@ class CompileTab extends ViewPlugin { modalDialogCustom.alert(yo`Metadata published successfully.
${result}
`) } }, (item) => { // triggered each time there's a new verified publish (means hash correspond) - this.swarmfileProvider.addReadOnly('swarm/' + item.hash, item.content) + this.fileProvider.addReadOnly('swarm/' + item.hash, item.content) }) } else { publishOnIpfs(contract, this.fileManager, function (err, uploaded) { @@ -328,7 +325,7 @@ class CompileTab extends ViewPlugin { modalDialogCustom.alert(yo`Metadata published successfully.
${result}
`) } }, (item) => { // triggered each time there's a new verified publish (means hash correspond) - this.ipfsfileProvider.addReadOnly('ipfs/' + item.hash, item.content) + this.fileProvider.addReadOnly('ipfs/' + item.hash, item.content) }) } } diff --git a/src/app/tabs/compileTab/compileTab.js b/src/app/tabs/compileTab/compileTab.js index 1edbea26f3..f2751d1d8c 100644 --- a/src/app/tabs/compileTab/compileTab.js +++ b/src/app/tabs/compileTab/compileTab.js @@ -9,7 +9,7 @@ const addTooltip = require('../../ui/tooltip') class CompileTab { - constructor (queryParams, fileManager, editor, config, fileProviders) { + constructor (queryParams, fileManager, editor, config, fileProvider) { this.event = new EventEmitter() this.queryParams = queryParams this.compilerImport = new CompilerImport() @@ -17,7 +17,7 @@ class CompileTab { this.fileManager = fileManager this.editor = editor this.config = config - this.fileProviders = fileProviders + this.fileProvider = fileProvider } init () { @@ -92,8 +92,8 @@ class CompileTab { (error, content, cleanUrl, type, url) => { if (error) return cb(error) - if (this.fileProviders[type]) { - this.fileProviders[type].addReadOnly(cleanUrl, content, url) + if (this.fileProvider) { + this.fileProvider.addReadOnly(cleanUrl, content, url) } cb(null, content) }) diff --git a/src/lib/gist-handler.js b/src/lib/gist-handler.js index 9433cc1c2d..30b3e8bc08 100644 --- a/src/lib/gist-handler.js +++ b/src/lib/gist-handler.js @@ -42,7 +42,7 @@ function GistHandler (_window) { } this.loadFromGist = (params, fileManager) => { - const gistProvider = fileManager.fileProviderOf('gist') + const gistProvider = fileManager.fileProviderOf('browser') const self = this return self.handleLoad(params, function (gistId) { request.get({ @@ -53,7 +53,11 @@ function GistHandler (_window) { modalDialogCustom.alert(`Gist load error: ${error || data.message}`) return } - fileManager.setBatchFiles(data.files, 'gist', (errorLoadingFile) => { + let obj = {} + Object.keys(data.files).forEach((element) => { + obj['/gists/' + gistId + '/' + element] = data.files[element] + }) + fileManager.setBatchFiles(obj, 'browser', (errorLoadingFile) => { if (!errorLoadingFile) { gistProvider.id = gistId gistProvider.origGistFiles = data.files diff --git a/src/lib/helper.js b/src/lib/helper.js index 758fbef843..b72c3aa3a0 100644 --- a/src/lib/helper.js +++ b/src/lib/helper.js @@ -41,7 +41,7 @@ module.exports = { this.createNonClashingNameWithPrefix(name, fileProvider, '', cb) }, checkSpecialChars (name) { - return name.match(/[/:*?"<>\\'|]/) != null + return name.match(/[:*?"<>\\'|]/) != null }, find: find } diff --git a/test-browser/commands/switchFile.js b/test-browser/commands/switchFile.js index de88d4a2fd..44ccfe6aaa 100644 --- a/test-browser/commands/switchFile.js +++ b/test-browser/commands/switchFile.js @@ -1,9 +1,9 @@ const EventEmitter = require('events') class SwitchFile extends EventEmitter { - command (contractName) { + command (name) { this.api.perform((done) => { - switchFile(this.api, contractName, () => { + switchFile(this.api, name, () => { done() this.emit('complete') }) diff --git a/test-browser/tests/libraryDeployment.js b/test-browser/tests/libraryDeployment.js index 415b9c36fa..239a1258d6 100644 --- a/test-browser/tests/libraryDeployment.js +++ b/test-browser/tests/libraryDeployment.js @@ -56,7 +56,7 @@ module.exports = { function checkDeployShouldFail (browser, callback) { let config - browser.switchFile('browser/test.json') + browser.switchFile('browser/artifacts').switchFile('browser/artifacts/test.json') .getEditorValue((content) => { config = JSON.parse(content) config.deploy['VM:-'].autoDeployLib = false @@ -74,7 +74,7 @@ function checkDeployShouldFail (browser, callback) { function checkDeployShouldSucceed (browser, address, callback) { let addressRef let config - browser.switchFile('browser/test.json') + browser.switchFile('browser/artifacts').switchFile('browser/artifacts/test.json') .getEditorValue((content) => { config = JSON.parse(content) config.deploy['VM:-'].autoDeployLib = false