0) {
- if(p < this.DB && (d = this[i]>>p) > 0) { m = true; r = int2char(d); }
- while(i >= 0) {
- if(p < k) {
- d = (this[i]&((1<>(p+=this.DB-k);
- }
- else {
- d = (this[i]>>(p-=k))&km;
- if(p <= 0) { p += this.DB; --i; }
- }
- if(d > 0) m = true;
- if(m) r += int2char(d);
- }
- }
- return m?r:"0";
- }
-
- // (public) -this
- function bnNegate() { var r = nbi(); BigInteger.ZERO.subTo(this,r); return r; }
-
- // (public) |this|
- function bnAbs() { return (this.s<0)?this.negate():this; }
-
- // (public) return + if this > a, - if this < a, 0 if equal
- function bnCompareTo(a) {
- var r = this.s-a.s;
- if(r != 0) return r;
- var i = this.t;
- r = i-a.t;
- if(r != 0) return (this.s<0)?-r:r;
- while(--i >= 0) if((r=this[i]-a[i]) != 0) return r;
- return 0;
- }
-
- // returns bit length of the integer x
- function nbits(x) {
- var r = 1, t;
- if((t=x>>>16) != 0) { x = t; r += 16; }
- if((t=x>>8) != 0) { x = t; r += 8; }
- if((t=x>>4) != 0) { x = t; r += 4; }
- if((t=x>>2) != 0) { x = t; r += 2; }
- if((t=x>>1) != 0) { x = t; r += 1; }
- return r;
- }
-
- // (public) return the number of bits in "this"
- function bnBitLength() {
- if(this.t <= 0) return 0;
- return this.DB*(this.t-1)+nbits(this[this.t-1]^(this.s&this.DM));
- }
-
- // (protected) r = this << n*DB
- function bnpDLShiftTo(n,r) {
- var i;
- for(i = this.t-1; i >= 0; --i) r[i+n] = this[i];
- for(i = n-1; i >= 0; --i) r[i] = 0;
- r.t = this.t+n;
- r.s = this.s;
- }
-
- // (protected) r = this >> n*DB
- function bnpDRShiftTo(n,r) {
- for(var i = n; i < this.t; ++i) r[i-n] = this[i];
- r.t = Math.max(this.t-n,0);
- r.s = this.s;
- }
-
- // (protected) r = this << n
- function bnpLShiftTo(n,r) {
- var bs = n%this.DB;
- var cbs = this.DB-bs;
- var bm = (1<= 0; --i) {
- r[i+ds+1] = (this[i]>>cbs)|c;
- c = (this[i]&bm)<= 0; --i) r[i] = 0;
- r[ds] = c;
- r.t = this.t+ds+1;
- r.s = this.s;
- r.clamp();
- }
-
- // (protected) r = this >> n
- function bnpRShiftTo(n,r) {
- r.s = this.s;
- var ds = Math.floor(n/this.DB);
- if(ds >= this.t) { r.t = 0; return; }
- var bs = n%this.DB;
- var cbs = this.DB-bs;
- var bm = (1<>bs;
- for(var i = ds+1; i < this.t; ++i) {
- r[i-ds-1] |= (this[i]&bm)<>bs;
- }
- if(bs > 0) r[this.t-ds-1] |= (this.s&bm)<>= this.DB;
- }
- if(a.t < this.t) {
- c -= a.s;
- while(i < this.t) {
- c += this[i];
- r[i++] = c&this.DM;
- c >>= this.DB;
- }
- c += this.s;
- }
- else {
- c += this.s;
- while(i < a.t) {
- c -= a[i];
- r[i++] = c&this.DM;
- c >>= this.DB;
- }
- c -= a.s;
- }
- r.s = (c<0)?-1:0;
- if(c < -1) r[i++] = this.DV+c;
- else if(c > 0) r[i++] = c;
- r.t = i;
- r.clamp();
- }
-
- // (protected) r = this * a, r != this,a (HAC 14.12)
- // "this" should be the larger one if appropriate.
- function bnpMultiplyTo(a,r) {
- var x = this.abs(), y = a.abs();
- var i = x.t;
- r.t = i+y.t;
- while(--i >= 0) r[i] = 0;
- for(i = 0; i < y.t; ++i) r[i+x.t] = x.am(0,y[i],r,i,0,x.t);
- r.s = 0;
- r.clamp();
- if(this.s != a.s) BigInteger.ZERO.subTo(r,r);
- }
-
- // (protected) r = this^2, r != this (HAC 14.16)
- function bnpSquareTo(r) {
- var x = this.abs();
- var i = r.t = 2*x.t;
- while(--i >= 0) r[i] = 0;
- for(i = 0; i < x.t-1; ++i) {
- var c = x.am(i,x[i],r,2*i,0,1);
- if((r[i+x.t]+=x.am(i+1,2*x[i],r,2*i+1,c,x.t-i-1)) >= x.DV) {
- r[i+x.t] -= x.DV;
- r[i+x.t+1] = 1;
- }
- }
- if(r.t > 0) r[r.t-1] += x.am(i,x[i],r,2*i,0,1);
- r.s = 0;
- r.clamp();
- }
-
- // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
- // r != q, this != m. q or r may be null.
- function bnpDivRemTo(m,q,r) {
- var pm = m.abs();
- if(pm.t <= 0) return;
- var pt = this.abs();
- if(pt.t < pm.t) {
- if(q != null) q.fromInt(0);
- if(r != null) this.copyTo(r);
- return;
- }
- if(r == null) r = nbi();
- var y = nbi(), ts = this.s, ms = m.s;
- var nsh = this.DB-nbits(pm[pm.t-1]); // normalize modulus
- if(nsh > 0) { pm.lShiftTo(nsh,y); pt.lShiftTo(nsh,r); }
- else { pm.copyTo(y); pt.copyTo(r); }
- var ys = y.t;
- var y0 = y[ys-1];
- if(y0 == 0) return;
- var yt = y0*(1<1)?y[ys-2]>>this.F2:0);
- var d1 = this.FV/yt, d2 = (1<= 0) {
- r[r.t++] = 1;
- r.subTo(t,r);
- }
- BigInteger.ONE.dlShiftTo(ys,t);
- t.subTo(y,y); // "negative" y so we can replace sub with am later
- while(y.t < ys) y[y.t++] = 0;
- while(--j >= 0) {
- // Estimate quotient digit
- var qd = (r[--i]==y0)?this.DM:Math.floor(r[i]*d1+(r[i-1]+e)*d2);
- if((r[i]+=y.am(0,qd,r,j,0,ys)) < qd) { // Try it out
- y.dlShiftTo(j,t);
- r.subTo(t,r);
- while(r[i] < --qd) r.subTo(t,r);
- }
- }
- if(q != null) {
- r.drShiftTo(ys,q);
- if(ts != ms) BigInteger.ZERO.subTo(q,q);
- }
- r.t = ys;
- r.clamp();
- if(nsh > 0) r.rShiftTo(nsh,r); // Denormalize remainder
- if(ts < 0) BigInteger.ZERO.subTo(r,r);
- }
-
- // (public) this mod a
- function bnMod(a) {
- var r = nbi();
- this.abs().divRemTo(a,null,r);
- if(this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r,r);
- return r;
- }
-
- // Modular reduction using "classic" algorithm
- function Classic(m) { this.m = m; }
- function cConvert(x) {
- if(x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m);
- else return x;
- }
- function cRevert(x) { return x; }
- function cReduce(x) { x.divRemTo(this.m,null,x); }
- function cMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }
- function cSqrTo(x,r) { x.squareTo(r); this.reduce(r); }
-
- Classic.prototype.convert = cConvert;
- Classic.prototype.revert = cRevert;
- Classic.prototype.reduce = cReduce;
- Classic.prototype.mulTo = cMulTo;
- Classic.prototype.sqrTo = cSqrTo;
-
- // (protected) return "-1/this % 2^DB"; useful for Mont. reduction
- // justification:
- // xy == 1 (mod m)
- // xy = 1+km
- // xy(2-xy) = (1+km)(1-km)
- // x[y(2-xy)] = 1-k^2m^2
- // x[y(2-xy)] == 1 (mod m^2)
- // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
- // should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
- // JS multiply "overflows" differently from C/C++, so care is needed here.
- function bnpInvDigit() {
- if(this.t < 1) return 0;
- var x = this[0];
- if((x&1) == 0) return 0;
- var y = x&3; // y == 1/x mod 2^2
- y = (y*(2-(x&0xf)*y))&0xf; // y == 1/x mod 2^4
- y = (y*(2-(x&0xff)*y))&0xff; // y == 1/x mod 2^8
- y = (y*(2-(((x&0xffff)*y)&0xffff)))&0xffff; // y == 1/x mod 2^16
- // last step - calculate inverse mod DV directly;
- // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
- y = (y*(2-x*y%this.DV))%this.DV; // y == 1/x mod 2^dbits
- // we really want the negative inverse, and -DV < y < DV
- return (y>0)?this.DV-y:-y;
- }
-
- // Montgomery reduction
- function Montgomery(m) {
- this.m = m;
- this.mp = m.invDigit();
- this.mpl = this.mp&0x7fff;
- this.mph = this.mp>>15;
- this.um = (1<<(m.DB-15))-1;
- this.mt2 = 2*m.t;
- }
-
- // xR mod m
- function montConvert(x) {
- var r = nbi();
- x.abs().dlShiftTo(this.m.t,r);
- r.divRemTo(this.m,null,r);
- if(x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r,r);
- return r;
- }
-
- // x/R mod m
- function montRevert(x) {
- var r = nbi();
- x.copyTo(r);
- this.reduce(r);
- return r;
- }
-
- // x = x/R mod m (HAC 14.32)
- function montReduce(x) {
- while(x.t <= this.mt2) // pad x so am has enough room later
- x[x.t++] = 0;
- for(var i = 0; i < this.m.t; ++i) {
- // faster way of calculating u0 = x[i]*mp mod DV
- var j = x[i]&0x7fff;
- var u0 = (j*this.mpl+(((j*this.mph+(x[i]>>15)*this.mpl)&this.um)<<15))&x.DM;
- // use am to combine the multiply-shift-add into one call
- j = i+this.m.t;
- x[j] += this.m.am(0,u0,x,i,0,this.m.t);
- // propagate carry
- while(x[j] >= x.DV) { x[j] -= x.DV; x[++j]++; }
- }
- x.clamp();
- x.drShiftTo(this.m.t,x);
- if(x.compareTo(this.m) >= 0) x.subTo(this.m,x);
- }
-
- // r = "x^2/R mod m"; x != r
- function montSqrTo(x,r) { x.squareTo(r); this.reduce(r); }
-
- // r = "xy/R mod m"; x,y != r
- function montMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }
-
- Montgomery.prototype.convert = montConvert;
- Montgomery.prototype.revert = montRevert;
- Montgomery.prototype.reduce = montReduce;
- Montgomery.prototype.mulTo = montMulTo;
- Montgomery.prototype.sqrTo = montSqrTo;
-
- // (protected) true iff this is even
- function bnpIsEven() { return ((this.t>0)?(this[0]&1):this.s) == 0; }
-
- // (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
- function bnpExp(e,z) {
- if(e > 0xffffffff || e < 1) return BigInteger.ONE;
- var r = nbi(), r2 = nbi(), g = z.convert(this), i = nbits(e)-1;
- g.copyTo(r);
- while(--i >= 0) {
- z.sqrTo(r,r2);
- if((e&(1< 0) z.mulTo(r2,g,r);
- else { var t = r; r = r2; r2 = t; }
- }
- return z.revert(r);
- }
-
- // (public) this^e % m, 0 <= e < 2^32
- function bnModPowInt(e,m) {
- var z;
- if(e < 256 || m.isEven()) z = new Classic(m); else z = new Montgomery(m);
- return this.exp(e,z);
- }
-
- // protected
- BigInteger.prototype.copyTo = bnpCopyTo;
- BigInteger.prototype.fromInt = bnpFromInt;
- BigInteger.prototype.fromString = bnpFromString;
- BigInteger.prototype.clamp = bnpClamp;
- BigInteger.prototype.dlShiftTo = bnpDLShiftTo;
- BigInteger.prototype.drShiftTo = bnpDRShiftTo;
- BigInteger.prototype.lShiftTo = bnpLShiftTo;
- BigInteger.prototype.rShiftTo = bnpRShiftTo;
- BigInteger.prototype.subTo = bnpSubTo;
- BigInteger.prototype.multiplyTo = bnpMultiplyTo;
- BigInteger.prototype.squareTo = bnpSquareTo;
- BigInteger.prototype.divRemTo = bnpDivRemTo;
- BigInteger.prototype.invDigit = bnpInvDigit;
- BigInteger.prototype.isEven = bnpIsEven;
- BigInteger.prototype.exp = bnpExp;
-
- // public
- BigInteger.prototype.toString = bnToString;
- BigInteger.prototype.negate = bnNegate;
- BigInteger.prototype.abs = bnAbs;
- BigInteger.prototype.compareTo = bnCompareTo;
- BigInteger.prototype.bitLength = bnBitLength;
- BigInteger.prototype.mod = bnMod;
- BigInteger.prototype.modPowInt = bnModPowInt;
-
- // "constants"
- BigInteger.ZERO = nbv(0);
- BigInteger.ONE = nbv(1);
-
- // Copyright (c) 2005-2009 Tom Wu
- // All Rights Reserved.
- // See "LICENSE" for details.
-
- // Extended JavaScript BN functions, required for RSA private ops.
-
- // Version 1.1: new BigInteger("0", 10) returns "proper" zero
- // Version 1.2: square() API, isProbablePrime fix
-
- // (public)
- function bnClone() { var r = nbi(); this.copyTo(r); return r; }
-
- // (public) return value as integer
- function bnIntValue() {
- if(this.s < 0) {
- if(this.t == 1) return this[0]-this.DV;
- else if(this.t == 0) return -1;
- }
- else if(this.t == 1) return this[0];
- else if(this.t == 0) return 0;
- // assumes 16 < DB < 32
- return ((this[1]&((1<<(32-this.DB))-1))<>24; }
-
- // (public) return value as short (assumes DB>=16)
- function bnShortValue() { return (this.t==0)?this.s:(this[0]<<16)>>16; }
-
- // (protected) return x s.t. r^x < DV
- function bnpChunkSize(r) { return Math.floor(Math.LN2*this.DB/Math.log(r)); }
-
- // (public) 0 if this == 0, 1 if this > 0
- function bnSigNum() {
- if(this.s < 0) return -1;
- else if(this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0;
- else return 1;
- }
-
- // (protected) convert to radix string
- function bnpToRadix(b) {
- if(b == null) b = 10;
- if(this.signum() == 0 || b < 2 || b > 36) return "0";
- var cs = this.chunkSize(b);
- var a = Math.pow(b,cs);
- var d = nbv(a), y = nbi(), z = nbi(), r = "";
- this.divRemTo(d,y,z);
- while(y.signum() > 0) {
- r = (a+z.intValue()).toString(b).substr(1) + r;
- y.divRemTo(d,y,z);
- }
- return z.intValue().toString(b) + r;
- }
-
- // (protected) convert from radix string
- function bnpFromRadix(s,b) {
- this.fromInt(0);
- if(b == null) b = 10;
- var cs = this.chunkSize(b);
- var d = Math.pow(b,cs), mi = false, j = 0, w = 0;
- for(var i = 0; i < s.length; ++i) {
- var x = intAt(s,i);
- if(x < 0) {
- if(s.charAt(i) == "-" && this.signum() == 0) mi = true;
- continue;
- }
- w = b*w+x;
- if(++j >= cs) {
- this.dMultiply(d);
- this.dAddOffset(w,0);
- j = 0;
- w = 0;
- }
- }
- if(j > 0) {
- this.dMultiply(Math.pow(b,j));
- this.dAddOffset(w,0);
- }
- if(mi) BigInteger.ZERO.subTo(this,this);
- }
-
- // (protected) alternate constructor
- function bnpFromNumber(a,b,c) {
- if("number" == typeof b) {
- // new BigInteger(int,int,RNG)
- if(a < 2) this.fromInt(1);
- else {
- this.fromNumber(a,c);
- if(!this.testBit(a-1)) // force MSB set
- this.bitwiseTo(BigInteger.ONE.shiftLeft(a-1),op_or,this);
- if(this.isEven()) this.dAddOffset(1,0); // force odd
- while(!this.isProbablePrime(b)) {
- this.dAddOffset(2,0);
- if(this.bitLength() > a) this.subTo(BigInteger.ONE.shiftLeft(a-1),this);
- }
- }
- }
- else {
- // new BigInteger(int,RNG)
- var x = new Array(), t = a&7;
- x.length = (a>>3)+1;
- b.nextBytes(x);
- if(t > 0) x[0] &= ((1< 0) {
- if(p < this.DB && (d = this[i]>>p) != (this.s&this.DM)>>p)
- r[k++] = d|(this.s<<(this.DB-p));
- while(i >= 0) {
- if(p < 8) {
- d = (this[i]&((1<>(p+=this.DB-8);
- }
- else {
- d = (this[i]>>(p-=8))&0xff;
- if(p <= 0) { p += this.DB; --i; }
- }
- if((d&0x80) != 0) d |= -256;
- if(k == 0 && (this.s&0x80) != (d&0x80)) ++k;
- if(k > 0 || d != this.s) r[k++] = d;
- }
- }
- return r;
- }
-
- function bnEquals(a) { return(this.compareTo(a)==0); }
- function bnMin(a) { return(this.compareTo(a)<0)?this:a; }
- function bnMax(a) { return(this.compareTo(a)>0)?this:a; }
-
- // (protected) r = this op a (bitwise)
- function bnpBitwiseTo(a,op,r) {
- var i, f, m = Math.min(a.t,this.t);
- for(i = 0; i < m; ++i) r[i] = op(this[i],a[i]);
- if(a.t < this.t) {
- f = a.s&this.DM;
- for(i = m; i < this.t; ++i) r[i] = op(this[i],f);
- r.t = this.t;
- }
- else {
- f = this.s&this.DM;
- for(i = m; i < a.t; ++i) r[i] = op(f,a[i]);
- r.t = a.t;
- }
- r.s = op(this.s,a.s);
- r.clamp();
- }
-
- // (public) this & a
- function op_and(x,y) { return x&y; }
- function bnAnd(a) { var r = nbi(); this.bitwiseTo(a,op_and,r); return r; }
-
- // (public) this | a
- function op_or(x,y) { return x|y; }
- function bnOr(a) { var r = nbi(); this.bitwiseTo(a,op_or,r); return r; }
-
- // (public) this ^ a
- function op_xor(x,y) { return x^y; }
- function bnXor(a) { var r = nbi(); this.bitwiseTo(a,op_xor,r); return r; }
-
- // (public) this & ~a
- function op_andnot(x,y) { return x&~y; }
- function bnAndNot(a) { var r = nbi(); this.bitwiseTo(a,op_andnot,r); return r; }
-
- // (public) ~this
- function bnNot() {
- var r = nbi();
- for(var i = 0; i < this.t; ++i) r[i] = this.DM&~this[i];
- r.t = this.t;
- r.s = ~this.s;
- return r;
- }
-
- // (public) this << n
- function bnShiftLeft(n) {
- var r = nbi();
- if(n < 0) this.rShiftTo(-n,r); else this.lShiftTo(n,r);
- return r;
- }
-
- // (public) this >> n
- function bnShiftRight(n) {
- var r = nbi();
- if(n < 0) this.lShiftTo(-n,r); else this.rShiftTo(n,r);
- return r;
- }
-
- // return index of lowest 1-bit in x, x < 2^31
- function lbit(x) {
- if(x == 0) return -1;
- var r = 0;
- if((x&0xffff) == 0) { x >>= 16; r += 16; }
- if((x&0xff) == 0) { x >>= 8; r += 8; }
- if((x&0xf) == 0) { x >>= 4; r += 4; }
- if((x&3) == 0) { x >>= 2; r += 2; }
- if((x&1) == 0) ++r;
- return r;
- }
-
- // (public) returns index of lowest 1-bit (or -1 if none)
- function bnGetLowestSetBit() {
- for(var i = 0; i < this.t; ++i)
- if(this[i] != 0) return i*this.DB+lbit(this[i]);
- if(this.s < 0) return this.t*this.DB;
- return -1;
- }
-
- // return number of 1 bits in x
- function cbit(x) {
- var r = 0;
- while(x != 0) { x &= x-1; ++r; }
- return r;
- }
-
- // (public) return number of set bits
- function bnBitCount() {
- var r = 0, x = this.s&this.DM;
- for(var i = 0; i < this.t; ++i) r += cbit(this[i]^x);
- return r;
- }
-
- // (public) true iff nth bit is set
- function bnTestBit(n) {
- var j = Math.floor(n/this.DB);
- if(j >= this.t) return(this.s!=0);
- return((this[j]&(1<<(n%this.DB)))!=0);
- }
-
- // (protected) this op (1<>= this.DB;
- }
- if(a.t < this.t) {
- c += a.s;
- while(i < this.t) {
- c += this[i];
- r[i++] = c&this.DM;
- c >>= this.DB;
- }
- c += this.s;
- }
- else {
- c += this.s;
- while(i < a.t) {
- c += a[i];
- r[i++] = c&this.DM;
- c >>= this.DB;
- }
- c += a.s;
- }
- r.s = (c<0)?-1:0;
- if(c > 0) r[i++] = c;
- else if(c < -1) r[i++] = this.DV+c;
- r.t = i;
- r.clamp();
- }
-
- // (public) this + a
- function bnAdd(a) { var r = nbi(); this.addTo(a,r); return r; }
-
- // (public) this - a
- function bnSubtract(a) { var r = nbi(); this.subTo(a,r); return r; }
-
- // (public) this * a
- function bnMultiply(a) { var r = nbi(); this.multiplyTo(a,r); return r; }
-
- // (public) this^2
- function bnSquare() { var r = nbi(); this.squareTo(r); return r; }
-
- // (public) this / a
- function bnDivide(a) { var r = nbi(); this.divRemTo(a,r,null); return r; }
-
- // (public) this % a
- function bnRemainder(a) { var r = nbi(); this.divRemTo(a,null,r); return r; }
-
- // (public) [this/a,this%a]
- function bnDivideAndRemainder(a) {
- var q = nbi(), r = nbi();
- this.divRemTo(a,q,r);
- return new Array(q,r);
- }
-
- // (protected) this *= n, this >= 0, 1 < n < DV
- function bnpDMultiply(n) {
- this[this.t] = this.am(0,n-1,this,0,0,this.t);
- ++this.t;
- this.clamp();
- }
-
- // (protected) this += n << w words, this >= 0
- function bnpDAddOffset(n,w) {
- if(n == 0) return;
- while(this.t <= w) this[this.t++] = 0;
- this[w] += n;
- while(this[w] >= this.DV) {
- this[w] -= this.DV;
- if(++w >= this.t) this[this.t++] = 0;
- ++this[w];
- }
- }
-
- // A "null" reducer
- function NullExp() {}
- function nNop(x) { return x; }
- function nMulTo(x,y,r) { x.multiplyTo(y,r); }
- function nSqrTo(x,r) { x.squareTo(r); }
-
- NullExp.prototype.convert = nNop;
- NullExp.prototype.revert = nNop;
- NullExp.prototype.mulTo = nMulTo;
- NullExp.prototype.sqrTo = nSqrTo;
-
- // (public) this^e
- function bnPow(e) { return this.exp(e,new NullExp()); }
-
- // (protected) r = lower n words of "this * a", a.t <= n
- // "this" should be the larger one if appropriate.
- function bnpMultiplyLowerTo(a,n,r) {
- var i = Math.min(this.t+a.t,n);
- r.s = 0; // assumes a,this >= 0
- r.t = i;
- while(i > 0) r[--i] = 0;
- var j;
- for(j = r.t-this.t; i < j; ++i) r[i+this.t] = this.am(0,a[i],r,i,0,this.t);
- for(j = Math.min(a.t,n); i < j; ++i) this.am(0,a[i],r,i,0,n-i);
- r.clamp();
- }
-
- // (protected) r = "this * a" without lower n words, n > 0
- // "this" should be the larger one if appropriate.
- function bnpMultiplyUpperTo(a,n,r) {
- --n;
- var i = r.t = this.t+a.t-n;
- r.s = 0; // assumes a,this >= 0
- while(--i >= 0) r[i] = 0;
- for(i = Math.max(n-this.t,0); i < a.t; ++i)
- r[this.t+i-n] = this.am(n-i,a[i],r,0,0,this.t+i-n);
- r.clamp();
- r.drShiftTo(1,r);
- }
-
- // Barrett modular reduction
- function Barrett(m) {
- // setup Barrett
- this.r2 = nbi();
- this.q3 = nbi();
- BigInteger.ONE.dlShiftTo(2*m.t,this.r2);
- this.mu = this.r2.divide(m);
- this.m = m;
- }
-
- function barrettConvert(x) {
- if(x.s < 0 || x.t > 2*this.m.t) return x.mod(this.m);
- else if(x.compareTo(this.m) < 0) return x;
- else { var r = nbi(); x.copyTo(r); this.reduce(r); return r; }
- }
-
- function barrettRevert(x) { return x; }
-
- // x = x mod m (HAC 14.42)
- function barrettReduce(x) {
- x.drShiftTo(this.m.t-1,this.r2);
- if(x.t > this.m.t+1) { x.t = this.m.t+1; x.clamp(); }
- this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3);
- this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);
- while(x.compareTo(this.r2) < 0) x.dAddOffset(1,this.m.t+1);
- x.subTo(this.r2,x);
- while(x.compareTo(this.m) >= 0) x.subTo(this.m,x);
- }
-
- // r = x^2 mod m; x != r
- function barrettSqrTo(x,r) { x.squareTo(r); this.reduce(r); }
-
- // r = x*y mod m; x,y != r
- function barrettMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }
-
- Barrett.prototype.convert = barrettConvert;
- Barrett.prototype.revert = barrettRevert;
- Barrett.prototype.reduce = barrettReduce;
- Barrett.prototype.mulTo = barrettMulTo;
- Barrett.prototype.sqrTo = barrettSqrTo;
-
- // (public) this^e % m (HAC 14.85)
- function bnModPow(e,m) {
- var i = e.bitLength(), k, r = nbv(1), z;
- if(i <= 0) return r;
- else if(i < 18) k = 1;
- else if(i < 48) k = 3;
- else if(i < 144) k = 4;
- else if(i < 768) k = 5;
- else k = 6;
- if(i < 8)
- z = new Classic(m);
- else if(m.isEven())
- z = new Barrett(m);
- else
- z = new Montgomery(m);
-
- // precomputation
- var g = new Array(), n = 3, k1 = k-1, km = (1< 1) {
- var g2 = nbi();
- z.sqrTo(g[1],g2);
- while(n <= km) {
- g[n] = nbi();
- z.mulTo(g2,g[n-2],g[n]);
- n += 2;
- }
- }
-
- var j = e.t-1, w, is1 = true, r2 = nbi(), t;
- i = nbits(e[j])-1;
- while(j >= 0) {
- if(i >= k1) w = (e[j]>>(i-k1))&km;
- else {
- w = (e[j]&((1<<(i+1))-1))<<(k1-i);
- if(j > 0) w |= e[j-1]>>(this.DB+i-k1);
- }
-
- n = k;
- while((w&1) == 0) { w >>= 1; --n; }
- if((i -= n) < 0) { i += this.DB; --j; }
- if(is1) { // ret == 1, don't bother squaring or multiplying it
- g[w].copyTo(r);
- is1 = false;
- }
- else {
- while(n > 1) { z.sqrTo(r,r2); z.sqrTo(r2,r); n -= 2; }
- if(n > 0) z.sqrTo(r,r2); else { t = r; r = r2; r2 = t; }
- z.mulTo(r2,g[w],r);
- }
-
- while(j >= 0 && (e[j]&(1< 0) {
- x.rShiftTo(g,x);
- y.rShiftTo(g,y);
- }
- while(x.signum() > 0) {
- if((i = x.getLowestSetBit()) > 0) x.rShiftTo(i,x);
- if((i = y.getLowestSetBit()) > 0) y.rShiftTo(i,y);
- if(x.compareTo(y) >= 0) {
- x.subTo(y,x);
- x.rShiftTo(1,x);
- }
- else {
- y.subTo(x,y);
- y.rShiftTo(1,y);
- }
- }
- if(g > 0) y.lShiftTo(g,y);
- return y;
- }
-
- // (protected) this % n, n < 2^26
- function bnpModInt(n) {
- if(n <= 0) return 0;
- var d = this.DV%n, r = (this.s<0)?n-1:0;
- if(this.t > 0)
- if(d == 0) r = this[0]%n;
- else for(var i = this.t-1; i >= 0; --i) r = (d*r+this[i])%n;
- return r;
- }
-
- // (public) 1/this % m (HAC 14.61)
- function bnModInverse(m) {
- var ac = m.isEven();
- if((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO;
- var u = m.clone(), v = this.clone();
- var a = nbv(1), b = nbv(0), c = nbv(0), d = nbv(1);
- while(u.signum() != 0) {
- while(u.isEven()) {
- u.rShiftTo(1,u);
- if(ac) {
- if(!a.isEven() || !b.isEven()) { a.addTo(this,a); b.subTo(m,b); }
- a.rShiftTo(1,a);
- }
- else if(!b.isEven()) b.subTo(m,b);
- b.rShiftTo(1,b);
- }
- while(v.isEven()) {
- v.rShiftTo(1,v);
- if(ac) {
- if(!c.isEven() || !d.isEven()) { c.addTo(this,c); d.subTo(m,d); }
- c.rShiftTo(1,c);
- }
- else if(!d.isEven()) d.subTo(m,d);
- d.rShiftTo(1,d);
- }
- if(u.compareTo(v) >= 0) {
- u.subTo(v,u);
- if(ac) a.subTo(c,a);
- b.subTo(d,b);
- }
- else {
- v.subTo(u,v);
- if(ac) c.subTo(a,c);
- d.subTo(b,d);
- }
- }
- if(v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO;
- if(d.compareTo(m) >= 0) return d.subtract(m);
- if(d.signum() < 0) d.addTo(m,d); else return d;
- if(d.signum() < 0) return d.add(m); else return d;
- }
-
- var lowprimes = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997];
- var lplim = (1<<26)/lowprimes[lowprimes.length-1];
-
- // (public) test primality with certainty >= 1-.5^t
- function bnIsProbablePrime(t) {
- var i, x = this.abs();
- if(x.t == 1 && x[0] <= lowprimes[lowprimes.length-1]) {
- for(i = 0; i < lowprimes.length; ++i)
- if(x[0] == lowprimes[i]) return true;
- return false;
- }
- if(x.isEven()) return false;
- i = 1;
- while(i < lowprimes.length) {
- var m = lowprimes[i], j = i+1;
- while(j < lowprimes.length && m < lplim) m *= lowprimes[j++];
- m = x.modInt(m);
- while(i < j) if(m%lowprimes[i++] == 0) return false;
- }
- return x.millerRabin(t);
- }
-
- // (protected) true if probably prime (HAC 4.24, Miller-Rabin)
- function bnpMillerRabin(t) {
- var n1 = this.subtract(BigInteger.ONE);
- var k = n1.getLowestSetBit();
- if(k <= 0) return false;
- var r = n1.shiftRight(k);
- t = (t+1)>>1;
- if(t > lowprimes.length) t = lowprimes.length;
- var a = nbi();
- for(var i = 0; i < t; ++i) {
- //Pick bases at random, instead of starting at 2
- a.fromInt(lowprimes[Math.floor(Math.random()*lowprimes.length)]);
- var y = a.modPow(r,this);
- if(y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
- var j = 1;
- while(j++ < k && y.compareTo(n1) != 0) {
- y = y.modPowInt(2,this);
- if(y.compareTo(BigInteger.ONE) == 0) return false;
- }
- if(y.compareTo(n1) != 0) return false;
- }
- }
- return true;
- }
-
- // protected
- BigInteger.prototype.chunkSize = bnpChunkSize;
- BigInteger.prototype.toRadix = bnpToRadix;
- BigInteger.prototype.fromRadix = bnpFromRadix;
- BigInteger.prototype.fromNumber = bnpFromNumber;
- BigInteger.prototype.bitwiseTo = bnpBitwiseTo;
- BigInteger.prototype.changeBit = bnpChangeBit;
- BigInteger.prototype.addTo = bnpAddTo;
- BigInteger.prototype.dMultiply = bnpDMultiply;
- BigInteger.prototype.dAddOffset = bnpDAddOffset;
- BigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo;
- BigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo;
- BigInteger.prototype.modInt = bnpModInt;
- BigInteger.prototype.millerRabin = bnpMillerRabin;
-
- // public
- BigInteger.prototype.clone = bnClone;
- BigInteger.prototype.intValue = bnIntValue;
- BigInteger.prototype.byteValue = bnByteValue;
- BigInteger.prototype.shortValue = bnShortValue;
- BigInteger.prototype.signum = bnSigNum;
- BigInteger.prototype.toByteArray = bnToByteArray;
- BigInteger.prototype.equals = bnEquals;
- BigInteger.prototype.min = bnMin;
- BigInteger.prototype.max = bnMax;
- BigInteger.prototype.and = bnAnd;
- BigInteger.prototype.or = bnOr;
- BigInteger.prototype.xor = bnXor;
- BigInteger.prototype.andNot = bnAndNot;
- BigInteger.prototype.not = bnNot;
- BigInteger.prototype.shiftLeft = bnShiftLeft;
- BigInteger.prototype.shiftRight = bnShiftRight;
- BigInteger.prototype.getLowestSetBit = bnGetLowestSetBit;
- BigInteger.prototype.bitCount = bnBitCount;
- BigInteger.prototype.testBit = bnTestBit;
- BigInteger.prototype.setBit = bnSetBit;
- BigInteger.prototype.clearBit = bnClearBit;
- BigInteger.prototype.flipBit = bnFlipBit;
- BigInteger.prototype.add = bnAdd;
- BigInteger.prototype.subtract = bnSubtract;
- BigInteger.prototype.multiply = bnMultiply;
- BigInteger.prototype.divide = bnDivide;
- BigInteger.prototype.remainder = bnRemainder;
- BigInteger.prototype.divideAndRemainder = bnDivideAndRemainder;
- BigInteger.prototype.modPow = bnModPow;
- BigInteger.prototype.modInverse = bnModInverse;
- BigInteger.prototype.pow = bnPow;
- BigInteger.prototype.gcd = bnGCD;
- BigInteger.prototype.isProbablePrime = bnIsProbablePrime;
-
- // JSBN-specific extension
- BigInteger.prototype.square = bnSquare;
-
- // Expose the Barrett function
- BigInteger.prototype.Barrett = Barrett
-
- // BigInteger interfaces not implemented in jsbn:
-
- // BigInteger(int signum, byte[] magnitude)
- // double doubleValue()
- // float floatValue()
- // int hashCode()
- // long longValue()
- // static BigInteger valueOf(long val)
-
- // Random number generator - requires a PRNG backend, e.g. prng4.js
-
- // For best results, put code like
- //
- // in your main HTML document.
-
- var rng_state;
- var rng_pool;
- var rng_pptr;
-
- // Mix in a 32-bit integer into the pool
- function rng_seed_int(x) {
- rng_pool[rng_pptr++] ^= x & 255;
- rng_pool[rng_pptr++] ^= (x >> 8) & 255;
- rng_pool[rng_pptr++] ^= (x >> 16) & 255;
- rng_pool[rng_pptr++] ^= (x >> 24) & 255;
- if(rng_pptr >= rng_psize) rng_pptr -= rng_psize;
- }
-
- // Mix in the current time (w/milliseconds) into the pool
- function rng_seed_time() {
- rng_seed_int(new Date().getTime());
- }
-
- // Initialize the pool with junk if needed.
- if(rng_pool == null) {
- rng_pool = new Array();
- rng_pptr = 0;
- var t;
- if(typeof window !== "undefined" && window.crypto) {
- if (window.crypto.getRandomValues) {
- // Use webcrypto if available
- var ua = new Uint8Array(32);
- window.crypto.getRandomValues(ua);
- for(t = 0; t < 32; ++t)
- rng_pool[rng_pptr++] = ua[t];
- }
- else if(navigator.appName == "Netscape" && navigator.appVersion < "5") {
- // Extract entropy (256 bits) from NS4 RNG if available
- var z = window.crypto.random(32);
- for(t = 0; t < z.length; ++t)
- rng_pool[rng_pptr++] = z.charCodeAt(t) & 255;
- }
- }
- while(rng_pptr < rng_psize) { // extract some randomness from Math.random()
- t = Math.floor(65536 * Math.random());
- rng_pool[rng_pptr++] = t >>> 8;
- rng_pool[rng_pptr++] = t & 255;
- }
- rng_pptr = 0;
- rng_seed_time();
- //rng_seed_int(window.screenX);
- //rng_seed_int(window.screenY);
- }
-
- function rng_get_byte() {
- if(rng_state == null) {
- rng_seed_time();
- rng_state = prng_newstate();
- rng_state.init(rng_pool);
- for(rng_pptr = 0; rng_pptr < rng_pool.length; ++rng_pptr)
- rng_pool[rng_pptr] = 0;
- rng_pptr = 0;
- //rng_pool = null;
- }
- // TODO: allow reseeding after first request
- return rng_state.next();
- }
-
- function rng_get_bytes(ba) {
- var i;
- for(i = 0; i < ba.length; ++i) ba[i] = rng_get_byte();
- }
-
- function SecureRandom() {}
-
- SecureRandom.prototype.nextBytes = rng_get_bytes;
-
- // prng4.js - uses Arcfour as a PRNG
-
- function Arcfour() {
- this.i = 0;
- this.j = 0;
- this.S = new Array();
- }
-
- // Initialize arcfour context from key, an array of ints, each from [0..255]
- function ARC4init(key) {
- var i, j, t;
- for(i = 0; i < 256; ++i)
- this.S[i] = i;
- j = 0;
- for(i = 0; i < 256; ++i) {
- j = (j + this.S[i] + key[i % key.length]) & 255;
- t = this.S[i];
- this.S[i] = this.S[j];
- this.S[j] = t;
- }
- this.i = 0;
- this.j = 0;
- }
-
- function ARC4next() {
- var t;
- this.i = (this.i + 1) & 255;
- this.j = (this.j + this.S[this.i]) & 255;
- t = this.S[this.i];
- this.S[this.i] = this.S[this.j];
- this.S[this.j] = t;
- return this.S[(t + this.S[this.i]) & 255];
- }
-
- Arcfour.prototype.init = ARC4init;
- Arcfour.prototype.next = ARC4next;
-
- // Plug in your RNG constructor here
- function prng_newstate() {
- return new Arcfour();
- }
-
- // Pool size must be a multiple of 4 and greater than 32.
- // An array of bytes the size of the pool will be passed to init()
- var rng_psize = 256;
-
- BigInteger.SecureRandom = SecureRandom;
- BigInteger.BigInteger = BigInteger;
- if (typeof exports !== 'undefined') {
- exports = module.exports = BigInteger;
- } else {
- this.BigInteger = BigInteger;
- this.SecureRandom = SecureRandom;
- }
-
-}).call(this);
diff --git a/deps/npm/node_modules/jsbn/package.json b/deps/npm/node_modules/jsbn/package.json
deleted file mode 100644
index 7220c19f575eb7..00000000000000
--- a/deps/npm/node_modules/jsbn/package.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "name": "jsbn",
- "version": "0.1.1",
- "description": "The jsbn library is a fast, portable implementation of large-number math in pure JavaScript, enabling public-key crypto and other applications on desktop and mobile browsers.",
- "main": "index.js",
- "scripts": {
- "test": "mocha test.js"
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/andyperlitch/jsbn.git"
- },
- "keywords": [
- "biginteger",
- "bignumber",
- "big",
- "integer"
- ],
- "author": "Tom Wu",
- "license": "MIT"
-}
diff --git a/deps/npm/node_modules/json-schema-traverse/LICENSE b/deps/npm/node_modules/json-schema-traverse/LICENSE
deleted file mode 100644
index 7f1543566f6abb..00000000000000
--- a/deps/npm/node_modules/json-schema-traverse/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2017 Evgeny Poberezkin
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/deps/npm/node_modules/json-schema-traverse/index.js b/deps/npm/node_modules/json-schema-traverse/index.js
deleted file mode 100644
index d4a18dfc7b1c53..00000000000000
--- a/deps/npm/node_modules/json-schema-traverse/index.js
+++ /dev/null
@@ -1,89 +0,0 @@
-'use strict';
-
-var traverse = module.exports = function (schema, opts, cb) {
- // Legacy support for v0.3.1 and earlier.
- if (typeof opts == 'function') {
- cb = opts;
- opts = {};
- }
-
- cb = opts.cb || cb;
- var pre = (typeof cb == 'function') ? cb : cb.pre || function() {};
- var post = cb.post || function() {};
-
- _traverse(opts, pre, post, schema, '', schema);
-};
-
-
-traverse.keywords = {
- additionalItems: true,
- items: true,
- contains: true,
- additionalProperties: true,
- propertyNames: true,
- not: true
-};
-
-traverse.arrayKeywords = {
- items: true,
- allOf: true,
- anyOf: true,
- oneOf: true
-};
-
-traverse.propsKeywords = {
- definitions: true,
- properties: true,
- patternProperties: true,
- dependencies: true
-};
-
-traverse.skipKeywords = {
- default: true,
- enum: true,
- const: true,
- required: true,
- maximum: true,
- minimum: true,
- exclusiveMaximum: true,
- exclusiveMinimum: true,
- multipleOf: true,
- maxLength: true,
- minLength: true,
- pattern: true,
- format: true,
- maxItems: true,
- minItems: true,
- uniqueItems: true,
- maxProperties: true,
- minProperties: true
-};
-
-
-function _traverse(opts, pre, post, schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) {
- if (schema && typeof schema == 'object' && !Array.isArray(schema)) {
- pre(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);
- for (var key in schema) {
- var sch = schema[key];
- if (Array.isArray(sch)) {
- if (key in traverse.arrayKeywords) {
- for (var i=0; i
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-]>
-
-
-
-
-
-
-
-
- A JSON Media Type for Describing the Structure and Meaning of JSON Documents
-
-
- SitePen (USA)
-
-
- 530 Lytton Avenue
- Palo Alto, CA 94301
- USA
-
- +1 650 968 8787
- kris@sitepen.com
-
-
-
-
-
-
-
- Calgary, AB
- Canada
-
- gary.court@gmail.com
-
-
-
-
- Internet Engineering Task Force
- JSON
- Schema
- JavaScript
- Object
- Notation
- Hyper Schema
- Hypermedia
-
-
-
- JSON (JavaScript Object Notation) Schema defines the media type "application/schema+json",
- a JSON based format for defining
- the structure of JSON data. JSON Schema provides a contract for what JSON
- data is required for a given application and how to interact with it. JSON
- Schema is intended to define validation, documentation, hyperlink
- navigation, and interaction control of JSON data.
-
-
-
-
-
-
-
- JSON (JavaScript Object Notation) Schema is a JSON media type for defining
- the structure of JSON data. JSON Schema provides a contract for what JSON
- data is required for a given application and how to interact with it. JSON
- Schema is intended to define validation, documentation, hyperlink
- navigation, and interaction control of JSON data.
-
-
-
-
-
-
-
- The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
- "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be
- interpreted as described in RFC 2119 .
-
-
-
-
-
-
-
- JSON Schema defines the media type "application/schema+json" for
- describing the structure of other
- JSON documents. JSON Schema is JSON-based and includes facilities
- for describing the structure of JSON documents in terms of
- allowable values, descriptions, and interpreting relations with other resources.
-
-
- JSON Schema format is organized into several separate definitions. The first
- definition is the core schema specification. This definition is primary
- concerned with describing a JSON structure and specifying valid elements
- in the structure. The second definition is the Hyper Schema specification
- which is intended define elements in a structure that can be interpreted as
- hyperlinks.
- Hyper Schema builds on JSON Schema to describe the hyperlink structure of
- other JSON documents and elements of interaction. This allows user agents to be able to successfully navigate
- JSON documents based on their schemas.
-
-
- Cumulatively JSON Schema acts as a meta-document that can be used to define the required type and constraints on
- property values, as well as define the meaning of the property values
- for the purpose of describing a resource and determining hyperlinks
- within the representation.
-
-
- An example JSON Schema that describes products might look like:
-
-
-
-
- This schema defines the properties of the instance JSON documents,
- the required properties (id, name, and price), as well as an optional
- property (tags). This also defines the link relations of the instance
- JSON documents.
-
-
-
-
-
- For this specification, schema will be used to denote a JSON Schema
- definition, and an instance refers to a JSON value that the schema
- will be describing and validating.
-
-
-
-
-
- The JSON Schema media type does not attempt to dictate the structure of JSON
- representations that contain data, but rather provides a separate format
- for flexibly communicating how a JSON representation should be
- interpreted and validated, such that user agents can properly understand
- acceptable structures and extrapolate hyperlink information
- with the JSON document. It is acknowledged that JSON documents come
- in a variety of structures, and JSON is unique in that the structure
- of stored data structures often prescribes a non-ambiguous definite
- JSON representation. Attempting to force a specific structure is generally
- not viable, and therefore JSON Schema allows for a great flexibility
- in the structure of the JSON data that it describes.
-
-
- This specification is protocol agnostic.
- The underlying protocol (such as HTTP) should sufficiently define the
- semantics of the client-server interface, the retrieval of resource
- representations linked to by JSON representations, and modification of
- those resources. The goal of this
- format is to sufficiently describe JSON structures such that one can
- utilize existing information available in existing JSON
- representations from a large variety of services that leverage a representational state transfer
- architecture using existing protocols.
-
-
-
-
-
-
- JSON Schema instances are correlated to their schema by the "describedby"
- relation, where the schema is defined to be the target of the relation.
- Instance representations may be of the "application/json" media type or
- any other subtype. Consequently, dictating how an instance
- representation should specify the relation to the schema is beyond the normative scope
- of this document (since this document specifically defines the JSON
- Schema media type, and no other), but it is recommended that instances
- specify their schema so that user agents can interpret the instance
- representation and messages may retain the self-descriptive
- characteristic, avoiding the need for out-of-band information about
- instance data. Two approaches are recommended for declaring the
- relation to the schema that describes the meaning of a JSON instance's (or collection
- of instances) structure. A MIME type parameter named
- "profile" or a relation of "describedby" (which could be defined by a Link header) may be used:
-
-
-
-
-
-
-
- or if the content is being transferred by a protocol (such as HTTP) that
- provides headers, a Link header can be used:
-
-
-
-; rel="describedby"
-]]>
-
-
-
- Instances MAY specify multiple schemas, to indicate all the schemas that
- are applicable to the data, and the data SHOULD be valid by all the schemas.
- The instance data MAY have multiple schemas
- that it is defined by (the instance data SHOULD be valid for those schemas).
- Or if the document is a collection of instances, the collection MAY contain
- instances from different schemas. When collections contain heterogeneous
- instances, the "pathStart" attribute MAY be specified in the
- schema to disambiguate which schema should be applied for each item in the
- collection. However, ultimately, the mechanism for referencing a schema is up to the
- media type of the instance documents (if they choose to specify that schemas
- can be referenced).
-
-
-
-
- JSON Schemas can themselves be described using JSON Schemas.
- A self-describing JSON Schema for the core JSON Schema can
- be found at http://json-schema.org/schema for the latest version or
- http://json-schema.org/draft-03/schema for the draft-03 version. The hyper schema
- self-description can be found at http://json-schema.org/hyper-schema
- or http://json-schema.org/draft-03/hyper-schema . All schemas
- used within a protocol with media type definitions
- SHOULD include a MIME parameter that refers to the self-descriptive
- hyper schema or another schema that extends this hyper schema:
-
-
-
-
-
-
-
-
-
-
-
-
- A JSON Schema is a JSON Object that defines various attributes
- (including usage and valid values) of a JSON value. JSON
- Schema has recursive capabilities; there are a number of elements
- in the structure that allow for nested JSON Schemas.
-
-
-
- An example JSON Schema definition could look like:
-
-
-
-
-
-
- A JSON Schema object may have any of the following properties, called schema
- attributes (all attributes are optional):
-
-
-
-
- This attribute defines what the primitive type or the schema of the instance MUST be in order to validate.
- This attribute can take one of two forms:
-
-
-
- A string indicating a primitive or simple type. The following are acceptable string values:
-
-
- Value MUST be a string.
- Value MUST be a number, floating point numbers are allowed.
- Value MUST be an integer, no floating point numbers are allowed. This is a subset of the number type.
- Value MUST be a boolean.
- Value MUST be an object.
- Value MUST be an array.
- Value MUST be null. Note this is mainly for purpose of being able use union types to define nullability. If this type is not included in a union, null values are not allowed (the primitives listed above do not allow nulls on their own).
- Value MAY be of any type including null.
-
-
- If the property is not defined or is not in this list, then any type of value is acceptable.
- Other type values MAY be used for custom purposes, but minimal validators of the specification
- implementation can allow any instance value on unknown type values.
-
-
-
- An array of two or more simple type definitions. Each item in the array MUST be a simple type definition or a schema.
- The instance value is valid if it is of the same type as one of the simple type definitions, or valid by one of the schemas, in the array.
-
-
-
-
-
- For example, a schema that defines if an instance can be a string or a number would be:
-
-
-
-
-
-
- This attribute is an object with property definitions that define the valid values of instance object property values. When the instance value is an object, the property values of the instance object MUST conform to the property definitions in this object. In this object, each property definition's value MUST be a schema, and the property's name MUST be the name of the instance property that it defines. The instance property value MUST be valid according to the schema from the property definition. Properties are considered unordered, the order of the instance properties MAY be in any order.
-
-
-
- This attribute is an object that defines the schema for a set of property names of an object instance. The name of each property of this attribute's object is a regular expression pattern in the ECMA 262/Perl 5 format, while the value is a schema. If the pattern matches the name of a property on the instance object, the value of the instance's property MUST be valid against the pattern name's schema value.
-
-
-
- This attribute defines a schema for all properties that are not explicitly defined in an object type definition. If specified, the value MUST be a schema or a boolean. If false is provided, no additional properties are allowed beyond the properties defined in the schema. The default value is an empty schema which allows any value for additional properties.
-
-
-
- This attribute defines the allowed items in an instance array, and MUST be a schema or an array of schemas. The default value is an empty schema which allows any value for items in the instance array.
- When this attribute value is a schema and the instance value is an array, then all the items in the array MUST be valid according to the schema.
- When this attribute value is an array of schemas and the instance value is an array, each position in the instance array MUST conform to the schema in the corresponding position for this array. This called tuple typing. When tuple typing is used, additional items are allowed, disallowed, or constrained by the "additionalItems" attribute using the same rules as "additionalProperties" for objects.
-
-
-
- This provides a definition for additional items in an array instance when tuple definitions of the items is provided. This can be false to indicate additional items in the array are not allowed, or it can be a schema that defines the schema of the additional items.
-
-
-
- This attribute indicates if the instance must have a value, and not be undefined. This is false by default, making the instance optional.
-
-
-
- This attribute is an object that defines the requirements of a property on an instance object. If an object instance has a property with the same name as a property in this attribute's object, then the instance must be valid against the attribute's property value (hereafter referred to as the "dependency value").
-
- The dependency value can take one of two forms:
-
-
-
- If the dependency value is a string, then the instance object MUST have a property with the same name as the dependency value.
- If the dependency value is an array of strings, then the instance object MUST have a property with the same name as each string in the dependency value's array.
-
-
- If the dependency value is a schema, then the instance object MUST be valid against the schema.
-
-
-
-
-
-
- This attribute defines the minimum value of the instance property when the type of the instance value is a number.
-
-
-
- This attribute defines the maximum value of the instance property when the type of the instance value is a number.
-
-
-
- This attribute indicates if the value of the instance (if the instance is a number) can not equal the number defined by the "minimum" attribute. This is false by default, meaning the instance value can be greater then or equal to the minimum value.
-
-
-
- This attribute indicates if the value of the instance (if the instance is a number) can not equal the number defined by the "maximum" attribute. This is false by default, meaning the instance value can be less then or equal to the maximum value.
-
-
-
- This attribute defines the minimum number of values in an array when the array is the instance value.
-
-
-
- This attribute defines the maximum number of values in an array when the array is the instance value.
-
-
-
- This attribute indicates that all items in an array instance MUST be unique (contains no two identical values).
-
- Two instance are consider equal if they are both of the same type and:
-
-
- are null; or
- are booleans/numbers/strings and have the same value; or
- are arrays, contains the same number of items, and each item in the array is equal to the corresponding item in the other array; or
- are objects, contains the same property names, and each property in the object is equal to the corresponding property in the other object.
-
-
-
-
-
- When the instance value is a string, this provides a regular expression that a string instance MUST match in order to be valid. Regular expressions SHOULD follow the regular expression specification from ECMA 262/Perl 5
-
-
-
- When the instance value is a string, this defines the minimum length of the string.
-
-
-
- When the instance value is a string, this defines the maximum length of the string.
-
-
-
- This provides an enumeration of all possible values that are valid for the instance property. This MUST be an array, and each item in the array represents a possible value for the instance value. If this attribute is defined, the instance value MUST be one of the values in the array in order for the schema to be valid. Comparison of enum values uses the same algorithm as defined in "uniqueItems" .
-
-
-
- This attribute defines the default value of the instance when the instance is undefined.
-
-
-
- This attribute is a string that provides a short description of the instance property.
-
-
-
- This attribute is a string that provides a full description of the of purpose the instance property.
-
-
-
- This property defines the type of data, content type, or microformat to be expected in the instance property values. A format attribute MAY be one of the values listed below, and if so, SHOULD adhere to the semantics describing for the format. A format SHOULD only be used to give meaning to primitive types (string, integer, number, or boolean). Validators MAY (but are not required to) validate that the instance values conform to a format.
-
-
- The following formats are predefined:
-
-
- This SHOULD be a date in ISO 8601 format of YYYY-MM-DDThh:mm:ssZ in UTC time. This is the recommended form of date/timestamp.
- This SHOULD be a date in the format of YYYY-MM-DD. It is recommended that you use the "date-time" format instead of "date" unless you need to transfer only the date part.
- This SHOULD be a time in the format of hh:mm:ss. It is recommended that you use the "date-time" format instead of "time" unless you need to transfer only the time part.
- This SHOULD be the difference, measured in milliseconds, between the specified time and midnight, 00:00 of January 1, 1970 UTC. The value SHOULD be a number (integer or float).
- A regular expression, following the regular expression specification from ECMA 262/Perl 5.
- This is a CSS color (like "#FF0000" or "red"), based on CSS 2.1 .
- This is a CSS style definition (like "color: red; background-color:#FFF"), based on CSS 2.1 .
- This SHOULD be a phone number (format MAY follow E.123).
- This value SHOULD be a URI.
- This SHOULD be an email address.
- This SHOULD be an ip version 4 address.
- This SHOULD be an ip version 6 address.
- This SHOULD be a host-name.
-
-
-
- Additional custom formats MAY be created. These custom formats MAY be expressed as an URI, and this URI MAY reference a schema of that format.
-
-
-
- This attribute defines what value the number instance must be divisible by with no remainder (the result of the division must be an integer.) The value of this attribute SHOULD NOT be 0.
-
-
-
- This attribute takes the same values as the "type" attribute, however if the instance matches the type or if this value is an array and the instance matches any type or schema in the array, then this instance is not valid.
-
-
-
- The value of this property MUST be another schema which will provide a base schema which the current schema will inherit from. The inheritance rules are such that any instance that is valid according to the current schema MUST be valid according to the referenced schema. This MAY also be an array, in which case, the instance MUST be valid for all the schemas in the array. A schema that extends another schema MAY define additional attributes, constrain existing attributes, or add other constraints.
-
- Conceptually, the behavior of extends can be seen as validating an
- instance against all constraints in the extending schema as well as
- the extended schema(s). More optimized implementations that merge
- schemas are possible, but are not required. Some examples of using "extends":
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- This attribute defines the current URI of this schema (this attribute is
- effectively a "self" link). This URI MAY be relative or absolute. If
- the URI is relative it is resolved against the current URI of the parent
- schema it is contained in. If this schema is not contained in any
- parent schema, the current URI of the parent schema is held to be the
- URI under which this schema was addressed. If id is missing, the current URI of a schema is
- defined to be that of the parent schema. The current URI of the schema
- is also used to construct relative references such as for $ref.
-
-
-
-
-
- This attribute defines a URI of a schema that contains the full representation of this schema.
- When a validator encounters this attribute, it SHOULD replace the current schema with the schema referenced by the value's URI (if known and available) and re-validate the instance.
- This URI MAY be relative or absolute, and relative URIs SHOULD be resolved against the URI of the current schema.
-
-
-
-
-
- This attribute defines a URI of a JSON Schema that is the schema of the current schema.
- When this attribute is defined, a validator SHOULD use the schema referenced by the value's URI (if known and available) when resolving Hyper Schema links .
-
-
-
- A validator MAY use this attribute's value to determine which version of JSON Schema the current schema is written in, and provide the appropriate validation features and behavior.
- Therefore, it is RECOMMENDED that all schema authors include this attribute in their schemas to prevent conflicts with future JSON Schema specification changes.
-
-
-
-
-
-
- The following attributes are specified in addition to those
- attributes that already provided by the core schema with the specific
- purpose of informing user agents of relations between resources based
- on JSON data. Just as with JSON
- schema attributes, all the attributes in hyper schemas are optional.
- Therefore, an empty object is a valid (non-informative) schema, and
- essentially describes plain JSON (no constraints on the structures).
- Addition of attributes provides additive information for user agents.
-
-
-
-
- The value of the links property MUST be an array, where each item
- in the array is a link description object which describes the link
- relations of the instances.
-
-
-
-
- A link description object is used to describe link relations. In
- the context of a schema, it defines the link relations of the
- instances of the schema, and can be parameterized by the instance
- values. The link description format can be used on its own in
- regular (non-schema documents), and use of this format can
- be declared by referencing the normative link description
- schema as the the schema for the data structure that uses the
- links. The URI of the normative link description schema is:
- http://json-schema.org/links (latest version) or
- http://json-schema.org/draft-03/links (draft-03 version).
-
-
-
-
- The value of the "href" link description property
- indicates the target URI of the related resource. The value
- of the instance property SHOULD be resolved as a URI-Reference per RFC 3986
- and MAY be a relative URI. The base URI to be used for relative resolution
- SHOULD be the URI used to retrieve the instance object (not the schema)
- when used within a schema. Also, when links are used within a schema, the URI
- SHOULD be parametrized by the property values of the instance
- object, if property values exist for the corresponding variables
- in the template (otherwise they MAY be provided from alternate sources, like user input).
-
-
-
- Instance property values SHOULD be substituted into the URIs where
- matching braces ('{', '}') are found surrounding zero or more characters,
- creating an expanded URI. Instance property value substitutions are resolved
- by using the text between the braces to denote the property name
- from the instance to get the value to substitute.
-
-
- For example, if an href value is defined:
-
-
-
- Then it would be resolved by replace the value of the "id" property value from the instance object.
-
-
-
- If the value of the "id" property was "45", the expanded URI would be:
-
-
-
-
-
- If matching braces are found with the string "@" (no quotes) between the braces, then the
- actual instance value SHOULD be used to replace the braces, rather than a property value.
- This should only be used in situations where the instance is a scalar (string,
- boolean, or number), and not for objects or arrays.
-
-
-
-
-
- The value of the "rel" property indicates the name of the
- relation to the target resource. The relation to the target SHOULD be interpreted as specifically from the instance object that the schema (or sub-schema) applies to, not just the top level resource that contains the object within its hierarchy. If a resource JSON representation contains a sub object with a property interpreted as a link, that sub-object holds the relation with the target. A relation to target from the top level resource MUST be indicated with the schema describing the top level JSON representation.
-
-
-
- Relationship definitions SHOULD NOT be media type dependent, and users are encouraged to utilize existing accepted relation definitions, including those in existing relation registries (see RFC 4287 ). However, we define these relations here for clarity of normative interpretation within the context of JSON hyper schema defined relations:
-
-
-
- If the relation value is "self", when this property is encountered in
- the instance object, the object represents a resource and the instance object is
- treated as a full representation of the target resource identified by
- the specified URI.
-
-
-
- This indicates that the target of the link is the full representation for the instance object. The object that contains this link possibly may not be the full representation.
-
-
-
- This indicates the target of the link is the schema for the instance object. This MAY be used to specifically denote the schemas of objects within a JSON object hierarchy, facilitating polymorphic type data structures.
-
-
-
- This relation indicates that the target of the link
- SHOULD be treated as the root or the body of the representation for the
- purposes of user agent interaction or fragment resolution. All other
- properties of the instance objects can be regarded as meta-data
- descriptions for the data.
-
-
-
-
-
- The following relations are applicable for schemas (the schema as the "from" resource in the relation):
-
-
- This indicates the target resource that represents collection of instances of a schema.
- This indicates a target to use for creating new instances of a schema. This link definition SHOULD be a submission link with a non-safe method (like POST).
-
-
-
-
-
- For example, if a schema is defined:
-
-
-
-
-
-
- And if a collection of instance resource's JSON representation was retrieved:
-
-
-
-
-
- This would indicate that for the first item in the collection, its own
- (self) URI would resolve to "/Resource/thing" and the first item's "up"
- relation SHOULD be resolved to the resource at "/Resource/parent".
- The "children" collection would be located at "/Resource/?upId=thing".
-
-
-
-
- This property value is a schema that defines the expected structure of the JSON representation of the target of the link.
-
-
-
-
- The following properties also apply to link definition objects, and
- provide functionality analogous to HTML forms, in providing a
- means for submitting extra (often user supplied) information to send to a server.
-
-
-
-
- This attribute defines which method can be used to access the target resource.
- In an HTTP environment, this would be "GET" or "POST" (other HTTP methods
- such as "PUT" and "DELETE" have semantics that are clearly implied by
- accessed resources, and do not need to be defined here).
- This defaults to "GET".
-
-
-
-
-
- If present, this property indicates a query media type format that the server
- supports for querying or posting to the collection of instances at the target
- resource. The query can be
- suffixed to the target URI to query the collection with
- property-based constraints on the resources that SHOULD be returned from
- the server or used to post data to the resource (depending on the method).
-
-
- For example, with the following schema:
-
-
-
- This indicates that the client can query the server for instances that have a specific name.
-
-
-
- For example:
-
-
-
-
-
- If no enctype or method is specified, only the single URI specified by
- the href property is defined. If the method is POST, "application/json" is
- the default media type.
-
-
-
-
-
- This attribute contains a schema which defines the acceptable structure of the submitted
- request (for a GET request, this schema would define the properties for the query string
- and for a POST request, this would define the body).
-
-
-
-
-
-
-
-
- This property indicates the fragment resolution protocol to use for
- resolving fragment identifiers in URIs within the instance
- representations. This applies to the instance object URIs and all
- children of the instance object's URIs. The default fragment resolution
- protocol is "slash-delimited", which is defined below. Other fragment
- resolution protocols MAY be used, but are not defined in this document.
-
-
-
- The fragment identifier is based on RFC 2396, Sec 5 , and defines the
- mechanism for resolving references to entities within a document.
-
-
-
-
- With the slash-delimited fragment resolution protocol, the fragment
- identifier is interpreted as a series of property reference tokens that start with and
- are delimited by the "/" character (\x2F). Each property reference token
- is a series of unreserved or escaped URI characters. Each property
- reference token SHOULD be interpreted, starting from the beginning of
- the fragment identifier, as a path reference in the target JSON
- structure. The final target value of the fragment can be determined by
- starting with the root of the JSON structure from the representation of
- the resource identified by the pre-fragment URI. If the target is a JSON
- object, then the new target is the value of the property with the name
- identified by the next property reference token in the fragment. If the
- target is a JSON array, then the target is determined by finding the
- item in array the array with the index defined by the next property
- reference token (which MUST be a number). The target is successively
- updated for each property reference token, until the entire fragment has
- been traversed.
-
-
-
- Property names SHOULD be URI-encoded. In particular, any "/" in a
- property name MUST be encoded to avoid being interpreted as a property
- delimiter.
-
-
-
-
- For example, for the following JSON representation:
-
-
-
-
-
-
- The following fragment identifiers would be resolved:
-
-
-
-
-
-
-
-
-
- The dot-delimited fragment resolution protocol is the same as
- slash-delimited fragment resolution protocol except that the "." character
- (\x2E) is used as the delimiter between property names (instead of "/") and
- the path does not need to start with a ".". For example, #.foo and #foo are a valid fragment
- identifiers for referencing the value of the foo propery.
-
-
-
-
-
- This attribute indicates that the instance property SHOULD NOT be changed. Attempts by a user agent to modify the value of this property are expected to be rejected by a server.
-
-
-
- If the instance property value is a string, this attribute defines that the string SHOULD be interpreted as binary data and decoded using the encoding named by this schema property. RFC 2045, Sec 6.1 lists the possible values for this property.
-
-
-
-
- This attribute is a URI that defines what the instance's URI MUST start with in order to validate.
- The value of the "pathStart" attribute MUST be resolved as per RFC 3986, Sec 5 ,
- and is relative to the instance's URI.
-
-
-
- When multiple schemas have been referenced for an instance, the user agent
- can determine if this schema is applicable for a particular instance by
- determining if the URI of the instance begins with the the value of the "pathStart"
- attribute. If the URI of the instance does not start with this URI,
- or if another schema specifies a starting URI that is longer and also matches the
- instance, this schema SHOULD NOT be applied to the instance. Any schema
- that does not have a pathStart attribute SHOULD be considered applicable
- to all the instances for which it is referenced.
-
-
-
-
- This attribute defines the media type of the instance representations that this schema is defining.
-
-
-
-
-
- This specification is a sub-type of the JSON format, and
- consequently the security considerations are generally the same as RFC 4627 .
- However, an additional issue is that when link relation of "self"
- is used to denote a full representation of an object, the user agent
- SHOULD NOT consider the representation to be the authoritative representation
- of the resource denoted by the target URI if the target URI is not
- equivalent to or a sub-path of the the URI used to request the resource
- representation which contains the target URI with the "self" link.
-
-
- For example, if a hyper schema was defined:
-
-
-
-
-
-
- And a resource was requested from somesite.com:
-
-
-
-
-
-
- With a response of:
-
-
-
-
-
-
-
-
- The proposed MIME media type for JSON Schema is "application/schema+json".
- Type name: application
- Subtype name: schema+json
- Required parameters: profile
-
- The value of the profile parameter SHOULD be a URI (relative or absolute) that
- refers to the schema used to define the structure of this structure (the
- meta-schema). Normally the value would be http://json-schema.org/draft-03/hyper-schema,
- but it is allowable to use other schemas that extend the hyper schema's meta-
- schema.
-
- Optional parameters: pretty
- The value of the pretty parameter MAY be true or false to indicate if additional whitespace has been included to make the JSON representation easier to read.
-
-
-
- This registry is maintained by IANA per RFC 4287 and this specification adds
- four values: "full", "create", "instances", "root". New
- assignments are subject to IESG Approval, as outlined in RFC 5226 .
- Requests should be made by email to IANA, which will then forward the
- request to the IESG, requesting approval.
-
-
-
-
-
-
-
-
- &rfc2045;
- &rfc2119;
- &rfc2396;
- &rfc3339;
- &rfc3986;
- &rfc4287;
-
-
- &rfc2616;
- &rfc4627;
- &rfc5226;
- &iddiscovery;
- &uritemplate;
- &linkheader;
- &html401;
- &css21;
-
-
-
-
-
-
-
- Added example and verbiage to "extends" attribute.
- Defined slash-delimited to use a leading slash.
- Made "root" a relation instead of an attribute.
- Removed address values, and MIME media type from format to reduce confusion (mediaType already exists, so it can be used for MIME types).
- Added more explanation of nullability.
- Removed "alternate" attribute.
- Upper cased many normative usages of must, may, and should.
- Replaced the link submission "properties" attribute to "schema" attribute.
- Replaced "optional" attribute with "required" attribute.
- Replaced "maximumCanEqual" attribute with "exclusiveMaximum" attribute.
- Replaced "minimumCanEqual" attribute with "exclusiveMinimum" attribute.
- Replaced "requires" attribute with "dependencies" attribute.
- Moved "contentEncoding" attribute to hyper schema.
- Added "additionalItems" attribute.
- Added "id" attribute.
- Switched self-referencing variable substitution from "-this" to "@" to align with reserved characters in URI template.
- Added "patternProperties" attribute.
- Schema URIs are now namespace versioned.
- Added "$ref" and "$schema" attributes.
-
-
-
-
-
- Replaced "maxDecimal" attribute with "divisibleBy" attribute.
- Added slash-delimited fragment resolution protocol and made it the default.
- Added language about using links outside of schemas by referencing its normative URI.
- Added "uniqueItems" attribute.
- Added "targetSchema" attribute to link description object.
-
-
-
-
-
- Fixed category and updates from template.
-
-
-
-
-
- Initial draft.
-
-
-
-
-
-
-
-
-
- Should we give a preference to MIME headers over Link headers (or only use one)?
- Should "root" be a MIME parameter?
- Should "format" be renamed to "mediaType" or "contentType" to reflect the usage MIME media types that are allowed?
- How should dates be handled?
-
-
-
-
-
diff --git a/deps/npm/node_modules/json-schema/draft-zyp-json-schema-04.xml b/deps/npm/node_modules/json-schema/draft-zyp-json-schema-04.xml
deleted file mode 100644
index 8ede6bf9ebdce9..00000000000000
--- a/deps/npm/node_modules/json-schema/draft-zyp-json-schema-04.xml
+++ /dev/null
@@ -1,1072 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-]>
-
-
-
-
-
-
-
-
- A JSON Media Type for Describing the Structure and Meaning of JSON Documents
-
-
- SitePen (USA)
-
-
- 530 Lytton Avenue
- Palo Alto, CA 94301
- USA
-
- +1 650 968 8787
- kris@sitepen.com
-
-
-
-
-
-
-
- Calgary, AB
- Canada
-
- gary.court@gmail.com
-
-
-
-
- Internet Engineering Task Force
- JSON
- Schema
- JavaScript
- Object
- Notation
- Hyper Schema
- Hypermedia
-
-
-
- JSON (JavaScript Object Notation) Schema defines the media type "application/schema+json",
- a JSON based format for defining the structure of JSON data. JSON Schema provides a contract for what JSON
- data is required for a given application and how to interact with it. JSON
- Schema is intended to define validation, documentation, hyperlink
- navigation, and interaction control of JSON data.
-
-
-
-
-
-
-
- JSON (JavaScript Object Notation) Schema is a JSON media type for defining
- the structure of JSON data. JSON Schema provides a contract for what JSON
- data is required for a given application and how to interact with it. JSON
- Schema is intended to define validation, documentation, hyperlink
- navigation, and interaction control of JSON data.
-
-
-
-
-
-
-
- The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
- "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be
- interpreted as described in RFC 2119 .
-
-
-
- The terms "JSON", "JSON text", "JSON value", "member", "element", "object",
- "array", "number", "string", "boolean", "true", "false", and "null" in this
- document are to be interpreted as defined in RFC 4627 .
-
-
-
- This specification also uses the following defined terms:
-
-
- A JSON Schema object.
- Equivalent to "JSON value" as defined in RFC 4627 .
- Equivalent to "member" as defined in RFC 4627 .
- Equivalent to "element" as defined in RFC 4627 .
- A property of a JSON Schema object.
-
-
-
-
-
-
- JSON Schema defines the media type "application/schema+json" for
- describing the structure of JSON text. JSON Schemas are also written in JSON and includes facilities
- for describing the structure of JSON in terms of
- allowable values, descriptions, and interpreting relations with other resources.
-
-
- This document is organized into several separate definitions. The first
- definition is the core schema specification. This definition is primary
- concerned with describing a JSON structure and specifying valid elements
- in the structure. The second definition is the Hyper Schema specification
- which is intended to define elements in a structure that can be interpreted as
- hyperlinks.
- Hyper Schema builds on JSON Schema to describe the hyperlink structure of
- JSON values. This allows user agents to be able to successfully navigate
- documents containing JSON based on their schemas.
-
-
- Cumulatively JSON Schema acts as meta-JSON that can be used to define the
- required type and constraints on JSON values, as well as define the meaning
- of the JSON values for the purpose of describing a resource and determining
- hyperlinks within the representation.
-
-
- An example JSON Schema that describes products might look like:
-
-
-
-
- This schema defines the properties of the instance,
- the required properties (id, name, and price), as well as an optional
- property (tags). This also defines the link relations of the instance.
-
-
-
-
-
- The JSON Schema media type does not attempt to dictate the structure of JSON
- values that contain data, but rather provides a separate format
- for flexibly communicating how a JSON value should be
- interpreted and validated, such that user agents can properly understand
- acceptable structures and extrapolate hyperlink information
- from the JSON. It is acknowledged that JSON values come
- in a variety of structures, and JSON is unique in that the structure
- of stored data structures often prescribes a non-ambiguous definite
- JSON representation. Attempting to force a specific structure is generally
- not viable, and therefore JSON Schema allows for a great flexibility
- in the structure of the JSON data that it describes.
-
-
- This specification is protocol agnostic.
- The underlying protocol (such as HTTP) should sufficiently define the
- semantics of the client-server interface, the retrieval of resource
- representations linked to by JSON representations, and modification of
- those resources. The goal of this
- format is to sufficiently describe JSON structures such that one can
- utilize existing information available in existing JSON
- representations from a large variety of services that leverage a representational state transfer
- architecture using existing protocols.
-
-
-
-
-
-
- JSON values are correlated to their schema by the "describedby"
- relation, where the schema is the target of the relation.
- JSON values MUST be of the "application/json" media type or
- any other subtype. Consequently, dictating how a JSON value should
- specify the relation to the schema is beyond the normative scope
- of this document since this document specifically defines the JSON
- Schema media type, and no other. It is RECOMMNENDED that JSON values
- specify their schema so that user agents can interpret the instance
- and retain the self-descriptive characteristics. This avoides the need for out-of-band information about
- instance data. Two approaches are recommended for declaring the
- relation to the schema that describes the meaning of a JSON instance's (or collection
- of instances) structure. A MIME type parameter named
- "profile" or a relation of "describedby" (which could be specified by a Link header) may be used:
-
-
-
-
-
-
-
- or if the content is being transferred by a protocol (such as HTTP) that
- provides headers, a Link header can be used:
-
-
-
-; rel="describedby"
-]]>
-
-
-
- Instances MAY specify multiple schemas, to indicate all the schemas that
- are applicable to the data, and the data SHOULD be valid by all the schemas.
- The instance data MAY have multiple schemas
- that it is described by (the instance data SHOULD be valid for those schemas).
- Or if the document is a collection of instances, the collection MAY contain
- instances from different schemas. The mechanism for referencing a schema is
- determined by the media type of the instance (if it provides a method for
- referencing schemas).
-
-
-
-
- JSON Schemas can themselves be described using JSON Schemas.
- A self-describing JSON Schema for the core JSON Schema can
- be found at http://json-schema.org/schema for the latest version or
- http://json-schema.org/draft-04/schema for the draft-04 version. The hyper schema
- self-description can be found at http://json-schema.org/hyper-schema
- or http://json-schema.org/draft-04/hyper-schema . All schemas
- used within a protocol with a media type specified SHOULD include a MIME parameter that refers to the self-descriptive
- hyper schema or another schema that extends this hyper schema:
-
-
-
-
-
-
-
-
-
-
-
-
- A JSON Schema is a JSON object that defines various attributes
- (including usage and valid values) of a JSON value. JSON
- Schema has recursive capabilities; there are a number of elements
- in the structure that allow for nested JSON Schemas.
-
-
-
- An example JSON Schema could look like:
-
-
-
-
-
-
- A JSON Schema object MAY have any of the following optional properties:
-
-
-
-
-
-
-
- This attribute defines what the primitive type or the schema of the instance MUST be in order to validate.
- This attribute can take one of two forms:
-
-
-
- A string indicating a primitive or simple type. The string MUST be one of the following values:
-
-
- Instance MUST be an object.
- Instance MUST be an array.
- Instance MUST be a string.
- Instance MUST be a number, including floating point numbers.
- Instance MUST be the JSON literal "true" or "false".
- Instance MUST be the JSON literal "null". Note that without this type, null values are not allowed.
- Instance MAY be of any type, including null.
-
-
-
-
- An array of one or more simple or schema types.
- The instance value is valid if it is of the same type as one of the simple types, or valid by one of the schemas, in the array.
-
-
-
- If this attribute is not specified, then all value types are accepted.
-
-
-
- For example, a schema that defines if an instance can be a string or a number would be:
-
-
-
-
-
-
-
- This attribute is an object with properties that specify the schemas for the properties of the instance object.
- In this attribute's object, each property value MUST be a schema.
- When the instance value is an object, the value of the instance's properties MUST be valid according to the schemas with the same property names specified in this attribute.
- Objects are unordered, so therefore the order of the instance properties or attribute properties MUST NOT determine validation success.
-
-
-
-
-
- This attribute is an object that defines the schema for a set of property names of an object instance.
- The name of each property of this attribute's object is a regular expression pattern in the ECMA 262/Perl 5 format, while the value is a schema.
- If the pattern matches the name of a property on the instance object, the value of the instance's property MUST be valid against the pattern name's schema value.
-
-
-
-
- This attribute specifies how any instance property that is not explicitly defined by either the "properties" or "patternProperties" attributes (hereafter referred to as "additional properties") is handled. If specified, the value MUST be a schema or a boolean.
- If a schema is provided, then all additional properties MUST be valid according to the schema.
- If false is provided, then no additional properties are allowed.
- The default value is an empty schema, which allows any value for additional properties.
-
-
-
- This attribute provides the allowed items in an array instance. If specified, this attribute MUST be a schema or an array of schemas.
- When this attribute value is a schema and the instance value is an array, then all the items in the array MUST be valid according to the schema.
- When this attribute value is an array of schemas and the instance value is an array, each position in the instance array MUST be valid according to the schema in the corresponding position for this array. This called tuple typing. When tuple typing is used, additional items are allowed, disallowed, or constrained by the "additionalItems" attribute the same way as "additionalProperties" for objects is.
-
-
-
- This attribute specifies how any item in the array instance that is not explicitly defined by "items" (hereafter referred to as "additional items") is handled. If specified, the value MUST be a schema or a boolean.
- If a schema is provided:
-
- If the "items" attribute is unspecified, then all items in the array instance must be valid against this schema.
- If the "items" attribute is a schema, then this attribute is ignored.
- If the "items" attribute is an array (during tuple typing), then any additional items MUST be valid against this schema.
-
-
- If false is provided, then any additional items in the array are not allowed.
- The default value is an empty schema, which allows any value for additional items.
-
-
-
- This attribute is an array of strings that defines all the property names that must exist on the object instance.
-
-
-
- This attribute is an object that specifies the requirements of a property on an object instance. If an object instance has a property with the same name as a property in this attribute's object, then the instance must be valid against the attribute's property value (hereafter referred to as the "dependency value").
-
- The dependency value can take one of two forms:
-
-
-
- If the dependency value is a string, then the instance object MUST have a property with the same name as the dependency value.
- If the dependency value is an array of strings, then the instance object MUST have a property with the same name as each string in the dependency value's array.
-
-
- If the dependency value is a schema, then the instance object MUST be valid against the schema.
-
-
-
-
-
-
- This attribute defines the minimum value of the instance property when the type of the instance value is a number.
-
-
-
- This attribute defines the maximum value of the instance property when the type of the instance value is a number.
-
-
-
- This attribute indicates if the value of the instance (if the instance is a number) can not equal the number defined by the "minimum" attribute. This is false by default, meaning the instance value can be greater then or equal to the minimum value.
-
-
-
- This attribute indicates if the value of the instance (if the instance is a number) can not equal the number defined by the "maximum" attribute. This is false by default, meaning the instance value can be less then or equal to the maximum value.
-
-
-
- This attribute defines the minimum number of values in an array when the array is the instance value.
-
-
-
- This attribute defines the maximum number of values in an array when the array is the instance value.
-
-
-
- This attribute defines the minimum number of properties required on an object instance.
-
-
-
- This attribute defines the maximum number of properties the object instance can have.
-
-
-
- This attribute indicates that all items in an array instance MUST be unique (contains no two identical values).
-
- Two instance are consider equal if they are both of the same type and:
-
-
- are null; or
- are booleans/numbers/strings and have the same value; or
- are arrays, contains the same number of items, and each item in the array is equal to the item at the corresponding index in the other array; or
- are objects, contains the same property names, and each property in the object is equal to the corresponding property in the other object.
-
-
-
-
-
- When the instance value is a string, this provides a regular expression that a string instance MUST match in order to be valid. Regular expressions SHOULD follow the regular expression specification from ECMA 262/Perl 5
-
-
-
- When the instance value is a string, this defines the minimum length of the string.
-
-
-
- When the instance value is a string, this defines the maximum length of the string.
-
-
-
- This provides an enumeration of all possible values that are valid for the instance property. This MUST be an array, and each item in the array represents a possible value for the instance value. If this attribute is defined, the instance value MUST be one of the values in the array in order for the schema to be valid. Comparison of enum values uses the same algorithm as defined in "uniqueItems" .
-
-
-
- This attribute defines the default value of the instance when the instance is undefined.
-
-
-
- This attribute is a string that provides a short description of the instance property.
-
-
-
- This attribute is a string that provides a full description of the of purpose the instance property.
-
-
-
- This attribute defines what value the number instance must be divisible by with no remainder (the result of the division must be an integer.) The value of this attribute SHOULD NOT be 0.
-
-
-
- This attribute takes the same values as the "type" attribute, however if the instance matches the type or if this value is an array and the instance matches any type or schema in the array, then this instance is not valid.
-
-
-
- The value of this property MUST be another schema which will provide a base schema which the current schema will inherit from. The inheritance rules are such that any instance that is valid according to the current schema MUST be valid according to the referenced schema. This MAY also be an array, in which case, the instance MUST be valid for all the schemas in the array. A schema that extends another schema MAY define additional attributes, constrain existing attributes, or add other constraints.
-
- Conceptually, the behavior of extends can be seen as validating an
- instance against all constraints in the extending schema as well as
- the extended schema(s). More optimized implementations that merge
- schemas are possible, but are not required. Some examples of using "extends":
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- This attribute defines the current URI of this schema (this attribute is
- effectively a "self" link). This URI MAY be relative or absolute. If
- the URI is relative it is resolved against the current URI of the parent
- schema it is contained in. If this schema is not contained in any
- parent schema, the current URI of the parent schema is held to be the
- URI under which this schema was addressed. If id is missing, the current URI of a schema is
- defined to be that of the parent schema. The current URI of the schema
- is also used to construct relative references such as for $ref.
-
-
-
-
-
- This attribute defines a URI of a schema that contains the full representation of this schema.
- When a validator encounters this attribute, it SHOULD replace the current schema with the schema referenced by the value's URI (if known and available) and re-validate the instance.
- This URI MAY be relative or absolute, and relative URIs SHOULD be resolved against the URI of the current schema.
-
-
-
-
-
- This attribute defines a URI of a JSON Schema that is the schema of the current schema.
- When this attribute is defined, a validator SHOULD use the schema referenced by the value's URI (if known and available) when resolving Hyper Schema links .
-
-
-
- A validator MAY use this attribute's value to determine which version of JSON Schema the current schema is written in, and provide the appropriate validation features and behavior.
- Therefore, it is RECOMMENDED that all schema authors include this attribute in their schemas to prevent conflicts with future JSON Schema specification changes.
-
-
-
-
-
-
- The following attributes are specified in addition to those
- attributes that already provided by the core schema with the specific
- purpose of informing user agents of relations between resources based
- on JSON data. Just as with JSON
- schema attributes, all the attributes in hyper schemas are optional.
- Therefore, an empty object is a valid (non-informative) schema, and
- essentially describes plain JSON (no constraints on the structures).
- Addition of attributes provides additive information for user agents.
-
-
-
-
- The value of the links property MUST be an array, where each item
- in the array is a link description object which describes the link
- relations of the instances.
-
-
-
-
-
-
- A link description object is used to describe link relations. In
- the context of a schema, it defines the link relations of the
- instances of the schema, and can be parameterized by the instance
- values. The link description format can be used without JSON Schema,
- and use of this format can
- be declared by referencing the normative link description
- schema as the the schema for the data structure that uses the
- links. The URI of the normative link description schema is:
- http://json-schema.org/links (latest version) or
- http://json-schema.org/draft-04/links (draft-04 version).
-
-
-
-
- The value of the "href" link description property
- indicates the target URI of the related resource. The value
- of the instance property SHOULD be resolved as a URI-Reference per RFC 3986
- and MAY be a relative URI. The base URI to be used for relative resolution
- SHOULD be the URI used to retrieve the instance object (not the schema)
- when used within a schema. Also, when links are used within a schema, the URI
- SHOULD be parametrized by the property values of the instance
- object, if property values exist for the corresponding variables
- in the template (otherwise they MAY be provided from alternate sources, like user input).
-
-
-
- Instance property values SHOULD be substituted into the URIs where
- matching braces ('{', '}') are found surrounding zero or more characters,
- creating an expanded URI. Instance property value substitutions are resolved
- by using the text between the braces to denote the property name
- from the instance to get the value to substitute.
-
-
- For example, if an href value is defined:
-
-
-
- Then it would be resolved by replace the value of the "id" property value from the instance object.
-
-
-
- If the value of the "id" property was "45", the expanded URI would be:
-
-
-
-
-
- If matching braces are found with the string "@" (no quotes) between the braces, then the
- actual instance value SHOULD be used to replace the braces, rather than a property value.
- This should only be used in situations where the instance is a scalar (string,
- boolean, or number), and not for objects or arrays.
-
-
-
-
-
- The value of the "rel" property indicates the name of the
- relation to the target resource. The relation to the target SHOULD be interpreted as specifically from the instance object that the schema (or sub-schema) applies to, not just the top level resource that contains the object within its hierarchy. If a resource JSON representation contains a sub object with a property interpreted as a link, that sub-object holds the relation with the target. A relation to target from the top level resource MUST be indicated with the schema describing the top level JSON representation.
-
-
-
- Relationship definitions SHOULD NOT be media type dependent, and users are encouraged to utilize existing accepted relation definitions, including those in existing relation registries (see RFC 4287 ). However, we define these relations here for clarity of normative interpretation within the context of JSON hyper schema defined relations:
-
-
-
- If the relation value is "self", when this property is encountered in
- the instance object, the object represents a resource and the instance object is
- treated as a full representation of the target resource identified by
- the specified URI.
-
-
-
- This indicates that the target of the link is the full representation for the instance object. The object that contains this link possibly may not be the full representation.
-
-
-
- This indicates the target of the link is the schema for the instance object. This MAY be used to specifically denote the schemas of objects within a JSON object hierarchy, facilitating polymorphic type data structures.
-
-
-
- This relation indicates that the target of the link
- SHOULD be treated as the root or the body of the representation for the
- purposes of user agent interaction or fragment resolution. All other
- properties of the instance objects can be regarded as meta-data
- descriptions for the data.
-
-
-
-
-
- The following relations are applicable for schemas (the schema as the "from" resource in the relation):
-
-
- This indicates the target resource that represents collection of instances of a schema.
- This indicates a target to use for creating new instances of a schema. This link definition SHOULD be a submission link with a non-safe method (like POST).
-
-
-
-
-
- For example, if a schema is defined:
-
-
-
-
-
-
- And if a collection of instance resource's JSON representation was retrieved:
-
-
-
-
-
- This would indicate that for the first item in the collection, its own
- (self) URI would resolve to "/Resource/thing" and the first item's "up"
- relation SHOULD be resolved to the resource at "/Resource/parent".
- The "children" collection would be located at "/Resource/?upId=thing".
-
-
-
-
- This property value is a string that defines the templating language used in the "href" attribute. If no templating language is defined, then the default Link Description Object templating langauge is used.
-
-
-
- This property value is a schema that defines the expected structure of the JSON representation of the target of the link.
-
-
-
-
- The following properties also apply to link definition objects, and
- provide functionality analogous to HTML forms, in providing a
- means for submitting extra (often user supplied) information to send to a server.
-
-
-
-
- This attribute defines which method can be used to access the target resource.
- In an HTTP environment, this would be "GET" or "POST" (other HTTP methods
- such as "PUT" and "DELETE" have semantics that are clearly implied by
- accessed resources, and do not need to be defined here).
- This defaults to "GET".
-
-
-
-
-
- If present, this property indicates a query media type format that the server
- supports for querying or posting to the collection of instances at the target
- resource. The query can be
- suffixed to the target URI to query the collection with
- property-based constraints on the resources that SHOULD be returned from
- the server or used to post data to the resource (depending on the method).
-
-
- For example, with the following schema:
-
-
-
- This indicates that the client can query the server for instances that have a specific name.
-
-
-
- For example:
-
-
-
-
-
- If no enctype or method is specified, only the single URI specified by
- the href property is defined. If the method is POST, "application/json" is
- the default media type.
-
-
-
-
-
- This attribute contains a schema which defines the acceptable structure of the submitted
- request (for a GET request, this schema would define the properties for the query string
- and for a POST request, this would define the body).
-
-
-
-
-
-
-
-
- This property indicates the fragment resolution protocol to use for
- resolving fragment identifiers in URIs within the instance
- representations. This applies to the instance object URIs and all
- children of the instance object's URIs. The default fragment resolution
- protocol is "json-pointer", which is defined below. Other fragment
- resolution protocols MAY be used, but are not defined in this document.
-
-
-
- The fragment identifier is based on RFC 3986, Sec 5 , and defines the
- mechanism for resolving references to entities within a document.
-
-
-
- The "json-pointer" fragment resolution protocol uses a JSON Pointer to resolve fragment identifiers in URIs within instance representations.
-
-
-
-
-
-
- This attribute indicates that the instance value SHOULD NOT be changed. Attempts by a user agent to modify the value of this property are expected to be rejected by a server.
-
-
-
- If the instance property value is a string, this attribute defines that the string SHOULD be interpreted as binary data and decoded using the encoding named by this schema property. RFC 2045, Sec 6.1 lists the possible values for this property.
-
-
-
-
- This attribute is a URI that defines what the instance's URI MUST start with in order to validate.
- The value of the "pathStart" attribute MUST be resolved as per RFC 3986, Sec 5 ,
- and is relative to the instance's URI.
-
-
-
- When multiple schemas have been referenced for an instance, the user agent
- can determine if this schema is applicable for a particular instance by
- determining if the URI of the instance begins with the the value of the "pathStart"
- attribute. If the URI of the instance does not start with this URI,
- or if another schema specifies a starting URI that is longer and also matches the
- instance, this schema SHOULD NOT be applied to the instance. Any schema
- that does not have a pathStart attribute SHOULD be considered applicable
- to all the instances for which it is referenced.
-
-
-
-
- This attribute defines the media type of the instance representations that this schema is defining.
-
-
-
-
-
- This specification is a sub-type of the JSON format, and
- consequently the security considerations are generally the same as RFC 4627 .
- However, an additional issue is that when link relation of "self"
- is used to denote a full representation of an object, the user agent
- SHOULD NOT consider the representation to be the authoritative representation
- of the resource denoted by the target URI if the target URI is not
- equivalent to or a sub-path of the the URI used to request the resource
- representation which contains the target URI with the "self" link.
-
-
- For example, if a hyper schema was defined:
-
-
-
-
-
-
- And a resource was requested from somesite.com:
-
-
-
-
-
-
- With a response of:
-
-
-
-
-
-
-
-
- The proposed MIME media type for JSON Schema is "application/schema+json".
- Type name: application
- Subtype name: schema+json
- Required parameters: profile
-
- The value of the profile parameter SHOULD be a URI (relative or absolute) that
- refers to the schema used to define the structure of this structure (the
- meta-schema). Normally the value would be http://json-schema.org/draft-04/hyper-schema,
- but it is allowable to use other schemas that extend the hyper schema's meta-
- schema.
-
- Optional parameters: pretty
- The value of the pretty parameter MAY be true or false to indicate if additional whitespace has been included to make the JSON representation easier to read.
-
-
-
- This registry is maintained by IANA per RFC 4287 and this specification adds
- four values: "full", "create", "instances", "root". New
- assignments are subject to IESG Approval, as outlined in RFC 5226 .
- Requests should be made by email to IANA, which will then forward the
- request to the IESG, requesting approval.
-
-
-
-
-
-
-
-
- &rfc2045;
- &rfc2119;
- &rfc3339;
- &rfc3986;
- &rfc4287;
-
-
- JSON Pointer
-
- ForgeRock US, Inc.
-
-
- SitePen (USA)
-
-
-
-
-
-
- &rfc2616;
- &rfc4627;
- &rfc5226;
- &iddiscovery;
- &uritemplate;
- &linkheader;
- &html401;
- &css21;
-
-
-
-
-
-
-
- Changed "required" attribute to an array of strings.
- Removed "format" attribute.
- Added "minProperties" and "maxProperties" attributes.
- Replaced "slash-delimited" fragment resolution with "json-pointer".
- Added "template" LDO attribute.
- Removed irrelevant "Open Issues" section.
- Merged Conventions and Terminology sections.
- Defined terms used in specification.
- Removed "integer" type in favor of {"type":"number", "divisibleBy":1}.
- Restricted "type" to only the core JSON types.
- Improved wording of many sections.
-
-
-
-
-
- Added example and verbiage to "extends" attribute.
- Defined slash-delimited to use a leading slash.
- Made "root" a relation instead of an attribute.
- Removed address values, and MIME media type from format to reduce confusion (mediaType already exists, so it can be used for MIME types).
- Added more explanation of nullability.
- Removed "alternate" attribute.
- Upper cased many normative usages of must, may, and should.
- Replaced the link submission "properties" attribute to "schema" attribute.
- Replaced "optional" attribute with "required" attribute.
- Replaced "maximumCanEqual" attribute with "exclusiveMaximum" attribute.
- Replaced "minimumCanEqual" attribute with "exclusiveMinimum" attribute.
- Replaced "requires" attribute with "dependencies" attribute.
- Moved "contentEncoding" attribute to hyper schema.
- Added "additionalItems" attribute.
- Added "id" attribute.
- Switched self-referencing variable substitution from "-this" to "@" to align with reserved characters in URI template.
- Added "patternProperties" attribute.
- Schema URIs are now namespace versioned.
- Added "$ref" and "$schema" attributes.
-
-
-
-
-
- Replaced "maxDecimal" attribute with "divisibleBy" attribute.
- Added slash-delimited fragment resolution protocol and made it the default.
- Added language about using links outside of schemas by referencing its normative URI.
- Added "uniqueItems" attribute.
- Added "targetSchema" attribute to link description object.
-
-
-
-
-
- Fixed category and updates from template.
-
-
-
-
-
- Initial draft.
-
-
-
-
-
-
-
diff --git a/deps/npm/node_modules/json-schema/lib/links.js b/deps/npm/node_modules/json-schema/lib/links.js
deleted file mode 100644
index 8a87f02d16216d..00000000000000
--- a/deps/npm/node_modules/json-schema/lib/links.js
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
- * JSON Schema link handler
- * Copyright (c) 2007 Kris Zyp SitePen (www.sitepen.com)
- * Licensed under the MIT (MIT-LICENSE.txt) license.
- */
-(function (root, factory) {
- if (typeof define === 'function' && define.amd) {
- // AMD. Register as an anonymous module.
- define([], function () {
- return factory();
- });
- } else if (typeof module === 'object' && module.exports) {
- // Node. Does not work with strict CommonJS, but
- // only CommonJS-like environments that support module.exports,
- // like Node.
- module.exports = factory();
- } else {
- // Browser globals
- root.jsonSchemaLinks = factory();
- }
-}(this, function () {// setup primitive classes to be JSON Schema types
-var exports = {};
-exports.cacheLinks = true;
-exports.getLink = function(relation, instance, schema){
- // gets the URI of the link for the given relation based on the instance and schema
- // for example:
- // getLink(
- // "brother",
- // {"brother_id":33},
- // {links:[{rel:"brother", href:"Brother/{brother_id}"}]}) ->
- // "Brother/33"
- var links = schema.__linkTemplates;
- if(!links){
- links = {};
- var schemaLinks = schema.links;
- if(schemaLinks && schemaLinks instanceof Array){
- schemaLinks.forEach(function(link){
- /* // TODO: allow for multiple same-name relations
- if(links[link.rel]){
- if(!(links[link.rel] instanceof Array)){
- links[link.rel] = [links[link.rel]];
- }
- }*/
- links[link.rel] = link.href;
- });
- }
- if(exports.cacheLinks){
- schema.__linkTemplates = links;
- }
- }
- var linkTemplate = links[relation];
- return linkTemplate && exports.substitute(linkTemplate, instance);
-};
-
-exports.substitute = function(linkTemplate, instance){
- return linkTemplate.replace(/\{([^\}]*)\}/g, function(t, property){
- var value = instance[decodeURIComponent(property)];
- if(value instanceof Array){
- // the value is an array, it should produce a URI like /Table/(4,5,8) and store.get() should handle that as an array of values
- return '(' + value.join(',') + ')';
- }
- return value;
- });
-};
-return exports;
-}));
\ No newline at end of file
diff --git a/deps/npm/node_modules/json-schema/lib/validate.js b/deps/npm/node_modules/json-schema/lib/validate.js
deleted file mode 100644
index e4dc1511611152..00000000000000
--- a/deps/npm/node_modules/json-schema/lib/validate.js
+++ /dev/null
@@ -1,273 +0,0 @@
-/**
- * JSONSchema Validator - Validates JavaScript objects using JSON Schemas
- * (http://www.json.com/json-schema-proposal/)
- *
- * Copyright (c) 2007 Kris Zyp SitePen (www.sitepen.com)
- * Licensed under the MIT (MIT-LICENSE.txt) license.
-To use the validator call the validate function with an instance object and an optional schema object.
-If a schema is provided, it will be used to validate. If the instance object refers to a schema (self-validating),
-that schema will be used to validate and the schema parameter is not necessary (if both exist,
-both validations will occur).
-The validate method will return an array of validation errors. If there are no errors, then an
-empty list will be returned. A validation error will have two properties:
-"property" which indicates which property had the error
-"message" which indicates what the error was
- */
-(function (root, factory) {
- if (typeof define === 'function' && define.amd) {
- // AMD. Register as an anonymous module.
- define([], function () {
- return factory();
- });
- } else if (typeof module === 'object' && module.exports) {
- // Node. Does not work with strict CommonJS, but
- // only CommonJS-like environments that support module.exports,
- // like Node.
- module.exports = factory();
- } else {
- // Browser globals
- root.jsonSchema = factory();
- }
-}(this, function () {// setup primitive classes to be JSON Schema types
-var exports = validate
-exports.Integer = {type:"integer"};
-var primitiveConstructors = {
- String: String,
- Boolean: Boolean,
- Number: Number,
- Object: Object,
- Array: Array,
- Date: Date
-}
-exports.validate = validate;
-function validate(/*Any*/instance,/*Object*/schema) {
- // Summary:
- // To use the validator call JSONSchema.validate with an instance object and an optional schema object.
- // If a schema is provided, it will be used to validate. If the instance object refers to a schema (self-validating),
- // that schema will be used to validate and the schema parameter is not necessary (if both exist,
- // both validations will occur).
- // The validate method will return an object with two properties:
- // valid: A boolean indicating if the instance is valid by the schema
- // errors: An array of validation errors. If there are no errors, then an
- // empty list will be returned. A validation error will have two properties:
- // property: which indicates which property had the error
- // message: which indicates what the error was
- //
- return validate(instance, schema, {changing: false});//, coerce: false, existingOnly: false});
- };
-exports.checkPropertyChange = function(/*Any*/value,/*Object*/schema, /*String*/property) {
- // Summary:
- // The checkPropertyChange method will check to see if an value can legally be in property with the given schema
- // This is slightly different than the validate method in that it will fail if the schema is readonly and it will
- // not check for self-validation, it is assumed that the passed in value is already internally valid.
- // The checkPropertyChange method will return the same object type as validate, see JSONSchema.validate for
- // information.
- //
- return validate(value, schema, {changing: property || "property"});
- };
-var validate = exports._validate = function(/*Any*/instance,/*Object*/schema,/*Object*/options) {
-
- if (!options) options = {};
- var _changing = options.changing;
-
- function getType(schema){
- return schema.type || (primitiveConstructors[schema.name] == schema && schema.name.toLowerCase());
- }
- var errors = [];
- // validate a value against a property definition
- function checkProp(value, schema, path,i){
-
- var l;
- path += path ? typeof i == 'number' ? '[' + i + ']' : typeof i == 'undefined' ? '' : '.' + i : i;
- function addError(message){
- errors.push({property:path,message:message});
- }
-
- if((typeof schema != 'object' || schema instanceof Array) && (path || typeof schema != 'function') && !(schema && getType(schema))){
- if(typeof schema == 'function'){
- if(!(value instanceof schema)){
- addError("is not an instance of the class/constructor " + schema.name);
- }
- }else if(schema){
- addError("Invalid schema/property definition " + schema);
- }
- return null;
- }
- if(_changing && schema.readonly){
- addError("is a readonly field, it can not be changed");
- }
- if(schema['extends']){ // if it extends another schema, it must pass that schema as well
- checkProp(value,schema['extends'],path,i);
- }
- // validate a value against a type definition
- function checkType(type,value){
- if(type){
- if(typeof type == 'string' && type != 'any' &&
- (type == 'null' ? value !== null : typeof value != type) &&
- !(value instanceof Array && type == 'array') &&
- !(value instanceof Date && type == 'date') &&
- !(type == 'integer' && value%1===0)){
- return [{property:path,message:(typeof value) + " value found, but a " + type + " is required"}];
- }
- if(type instanceof Array){
- var unionErrors=[];
- for(var j = 0; j < type.length; j++){ // a union type
- if(!(unionErrors=checkType(type[j],value)).length){
- break;
- }
- }
- if(unionErrors.length){
- return unionErrors;
- }
- }else if(typeof type == 'object'){
- var priorErrors = errors;
- errors = [];
- checkProp(value,type,path);
- var theseErrors = errors;
- errors = priorErrors;
- return theseErrors;
- }
- }
- return [];
- }
- if(value === undefined){
- if(schema.required){
- addError("is missing and it is required");
- }
- }else{
- errors = errors.concat(checkType(getType(schema),value));
- if(schema.disallow && !checkType(schema.disallow,value).length){
- addError(" disallowed value was matched");
- }
- if(value !== null){
- if(value instanceof Array){
- if(schema.items){
- var itemsIsArray = schema.items instanceof Array;
- var propDef = schema.items;
- for (i = 0, l = value.length; i < l; i += 1) {
- if (itemsIsArray)
- propDef = schema.items[i];
- if (options.coerce)
- value[i] = options.coerce(value[i], propDef);
- errors.concat(checkProp(value[i],propDef,path,i));
- }
- }
- if(schema.minItems && value.length < schema.minItems){
- addError("There must be a minimum of " + schema.minItems + " in the array");
- }
- if(schema.maxItems && value.length > schema.maxItems){
- addError("There must be a maximum of " + schema.maxItems + " in the array");
- }
- }else if(schema.properties || schema.additionalProperties){
- errors.concat(checkObj(value, schema.properties, path, schema.additionalProperties));
- }
- if(schema.pattern && typeof value == 'string' && !value.match(schema.pattern)){
- addError("does not match the regex pattern " + schema.pattern);
- }
- if(schema.maxLength && typeof value == 'string' && value.length > schema.maxLength){
- addError("may only be " + schema.maxLength + " characters long");
- }
- if(schema.minLength && typeof value == 'string' && value.length < schema.minLength){
- addError("must be at least " + schema.minLength + " characters long");
- }
- if(typeof schema.minimum !== undefined && typeof value == typeof schema.minimum &&
- schema.minimum > value){
- addError("must have a minimum value of " + schema.minimum);
- }
- if(typeof schema.maximum !== undefined && typeof value == typeof schema.maximum &&
- schema.maximum < value){
- addError("must have a maximum value of " + schema.maximum);
- }
- if(schema['enum']){
- var enumer = schema['enum'];
- l = enumer.length;
- var found;
- for(var j = 0; j < l; j++){
- if(enumer[j]===value){
- found=1;
- break;
- }
- }
- if(!found){
- addError("does not have a value in the enumeration " + enumer.join(", "));
- }
- }
- if(typeof schema.maxDecimal == 'number' &&
- (value.toString().match(new RegExp("\\.[0-9]{" + (schema.maxDecimal + 1) + ",}")))){
- addError("may only have " + schema.maxDecimal + " digits of decimal places");
- }
- }
- }
- return null;
- }
- // validate an object against a schema
- function checkObj(instance,objTypeDef,path,additionalProp){
-
- if(typeof objTypeDef =='object'){
- if(typeof instance != 'object' || instance instanceof Array){
- errors.push({property:path,message:"an object is required"});
- }
-
- for(var i in objTypeDef){
- if(objTypeDef.hasOwnProperty(i)){
- var value = instance[i];
- // skip _not_ specified properties
- if (value === undefined && options.existingOnly) continue;
- var propDef = objTypeDef[i];
- // set default
- if(value === undefined && propDef["default"]){
- value = instance[i] = propDef["default"];
- }
- if(options.coerce && i in instance){
- value = instance[i] = options.coerce(value, propDef);
- }
- checkProp(value,propDef,path,i);
- }
- }
- }
- for(i in instance){
- if(instance.hasOwnProperty(i) && !(i.charAt(0) == '_' && i.charAt(1) == '_') && objTypeDef && !objTypeDef[i] && additionalProp===false){
- if (options.filter) {
- delete instance[i];
- continue;
- } else {
- errors.push({property:path,message:(typeof value) + "The property " + i +
- " is not defined in the schema and the schema does not allow additional properties"});
- }
- }
- var requires = objTypeDef && objTypeDef[i] && objTypeDef[i].requires;
- if(requires && !(requires in instance)){
- errors.push({property:path,message:"the presence of the property " + i + " requires that " + requires + " also be present"});
- }
- value = instance[i];
- if(additionalProp && (!(objTypeDef && typeof objTypeDef == 'object') || !(i in objTypeDef))){
- if(options.coerce){
- value = instance[i] = options.coerce(value, additionalProp);
- }
- checkProp(value,additionalProp,path,i);
- }
- if(!_changing && value && value.$schema){
- errors = errors.concat(checkProp(value,value.$schema,path,i));
- }
- }
- return errors;
- }
- if(schema){
- checkProp(instance,schema,'',_changing || '');
- }
- if(!_changing && instance && instance.$schema){
- checkProp(instance,instance.$schema,'','');
- }
- return {valid:!errors.length,errors:errors};
-};
-exports.mustBeValid = function(result){
- // summary:
- // This checks to ensure that the result is valid and will throw an appropriate error message if it is not
- // result: the result returned from checkPropertyChange or validate
- if(!result.valid){
- throw new TypeError(result.errors.map(function(error){return "for property " + error.property + ': ' + error.message;}).join(", \n"));
- }
-}
-
-return exports;
-}));
diff --git a/deps/npm/node_modules/json-schema/package.json b/deps/npm/node_modules/json-schema/package.json
deleted file mode 100644
index b9b7bac836bce6..00000000000000
--- a/deps/npm/node_modules/json-schema/package.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "name": "json-schema",
- "version": "0.2.3",
- "author": "Kris Zyp",
- "description": "JSON Schema validation and specifications",
- "maintainers":[
- {"name": "Kris Zyp", "email": "kriszyp@gmail.com"}],
- "keywords": [
- "json",
- "schema"
- ],
- "licenses": [
- {
- "type": "AFLv2.1",
- "url": "http://trac.dojotoolkit.org/browser/dojo/trunk/LICENSE#L43"
- },
- {
- "type": "BSD",
- "url": "http://trac.dojotoolkit.org/browser/dojo/trunk/LICENSE#L13"
- }
- ],
- "repository": {
- "type":"git",
- "url":"http://github.com/kriszyp/json-schema"
- },
- "directories": { "lib": "./lib" },
- "main": "./lib/validate.js",
- "devDependencies": { "vows": "*" },
- "scripts": { "test": "echo TESTS DISABLED vows --spec test/*.js" }
-}
-
diff --git a/deps/npm/node_modules/json-schema/test/tests.js b/deps/npm/node_modules/json-schema/test/tests.js
deleted file mode 100644
index 2938aea7c74462..00000000000000
--- a/deps/npm/node_modules/json-schema/test/tests.js
+++ /dev/null
@@ -1,95 +0,0 @@
-var assert = require('assert');
-var vows = require('vows');
-var path = require('path');
-var fs = require('fs');
-
-var validate = require('../lib/validate').validate;
-
-
-var revision = 'draft-03';
-var schemaRoot = path.join(__dirname, '..', revision);
-var schemaNames = ['schema', 'hyper-schema', 'links', 'json-ref' ];
-var schemas = {};
-
-schemaNames.forEach(function(name) {
- var file = path.join(schemaRoot, name);
- schemas[name] = loadSchema(file);
-});
-
-schemaNames.forEach(function(name) {
- var s, n = name+'-nsd', f = path.join(schemaRoot, name);
- schemas[n] = loadSchema(f);
- s = schemas[n];
- delete s['$schema'];
-});
-
-function loadSchema(path) {
- var data = fs.readFileSync(path, 'utf-8');
- var schema = JSON.parse(data);
- return schema;
-}
-
-function resultIsValid() {
- return function(result) {
- assert.isObject(result);
- //assert.isBoolean(result.valid);
- assert.equal(typeof(result.valid), 'boolean');
- assert.isArray(result.errors);
- for (var i = 0; i < result.errors.length; i++) {
- assert.notEqual(result.errors[i], null, 'errors['+i+'] is null');
- }
- }
-}
-
-function assertValidates(doc, schema) {
- var context = {};
-
- context[': validate('+doc+', '+schema+')'] = {
- topic: validate(schemas[doc], schemas[schema]),
- 'returns valid result': resultIsValid(),
- 'with valid=true': function(result) { assert.equal(result.valid, true); },
- 'and no errors': function(result) {
- // XXX work-around for bug in vows: [null] chokes it
- if (result.errors[0] == null) assert.fail('(errors contains null)');
- assert.length(result.errors, 0);
- }
- };
-
- return context;
-}
-
-function assertSelfValidates(doc) {
- var context = {};
-
- context[': validate('+doc+')'] = {
- topic: validate(schemas[doc]),
- 'returns valid result': resultIsValid(),
- 'with valid=true': function(result) { assert.equal(result.valid, true); },
- 'and no errors': function(result) { assert.length(result.errors, 0); }
- };
-
- return context;
-}
-
-var suite = vows.describe('JSON Schema').addBatch({
- 'Core-NSD self-validates': assertSelfValidates('schema-nsd'),
- 'Core-NSD/Core-NSD': assertValidates('schema-nsd', 'schema-nsd'),
- 'Core-NSD/Core': assertValidates('schema-nsd', 'schema'),
-
- 'Core self-validates': assertSelfValidates('schema'),
- 'Core/Core': assertValidates('schema', 'schema'),
-
- 'Hyper-NSD self-validates': assertSelfValidates('hyper-schema-nsd'),
- 'Hyper self-validates': assertSelfValidates('hyper-schema'),
- 'Hyper/Hyper': assertValidates('hyper-schema', 'hyper-schema'),
- 'Hyper/Core': assertValidates('hyper-schema', 'schema'),
-
- 'Links-NSD self-validates': assertSelfValidates('links-nsd'),
- 'Links self-validates': assertSelfValidates('links'),
- 'Links/Hyper': assertValidates('links', 'hyper-schema'),
- 'Links/Core': assertValidates('links', 'schema'),
-
- 'Json-Ref self-validates': assertSelfValidates('json-ref'),
- 'Json-Ref/Hyper': assertValidates('json-ref', 'hyper-schema'),
- 'Json-Ref/Core': assertValidates('json-ref', 'schema')
-}).export(module);
diff --git a/deps/npm/node_modules/json-stringify-safe/Makefile b/deps/npm/node_modules/json-stringify-safe/Makefile
deleted file mode 100644
index 36088c723a3b3f..00000000000000
--- a/deps/npm/node_modules/json-stringify-safe/Makefile
+++ /dev/null
@@ -1,35 +0,0 @@
-NODE_OPTS =
-TEST_OPTS =
-
-love:
- @echo "Feel like makin' love."
-
-test:
- @node $(NODE_OPTS) ./node_modules/.bin/_mocha -R dot $(TEST_OPTS)
-
-spec:
- @node $(NODE_OPTS) ./node_modules/.bin/_mocha -R spec $(TEST_OPTS)
-
-autotest:
- @node $(NODE_OPTS) ./node_modules/.bin/_mocha -R dot --watch $(TEST_OPTS)
-
-autospec:
- @node $(NODE_OPTS) ./node_modules/.bin/_mocha -R spec --watch $(TEST_OPTS)
-
-pack:
- @file=$$(npm pack); echo "$$file"; tar tf "$$file"
-
-publish:
- npm publish
-
-tag:
- git tag "v$$(node -e 'console.log(require("./package").version)')"
-
-clean:
- rm -f *.tgz
- npm prune --production
-
-.PHONY: love
-.PHONY: test spec autotest autospec
-.PHONY: pack publish tag
-.PHONY: clean
diff --git a/deps/npm/node_modules/json-stringify-safe/package.json b/deps/npm/node_modules/json-stringify-safe/package.json
deleted file mode 100644
index 8e17b1266a9a1c..00000000000000
--- a/deps/npm/node_modules/json-stringify-safe/package.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "name": "json-stringify-safe",
- "version": "5.0.1",
- "description": "Like JSON.stringify, but doesn't blow up on circular refs.",
- "keywords": [
- "json",
- "stringify",
- "circular",
- "safe"
- ],
- "homepage": "https://github.com/isaacs/json-stringify-safe",
- "bugs": "https://github.com/isaacs/json-stringify-safe/issues",
- "author": "Isaac Z. Schlueter (http://blog.izs.me)",
- "contributors": [
- "Andri Möll (http://themoll.com)"
- ],
- "license": "ISC",
- "repository": {
- "type": "git",
- "url": "git://github.com/isaacs/json-stringify-safe"
- },
- "main": "stringify.js",
- "scripts": {
- "test": "node test.js"
- },
- "devDependencies": {
- "mocha": ">= 2.1.0 < 3",
- "must": ">= 0.12 < 0.13",
- "sinon": ">= 1.12.2 < 2"
- }
-}
diff --git a/deps/npm/node_modules/json-stringify-safe/stringify.js b/deps/npm/node_modules/json-stringify-safe/stringify.js
deleted file mode 100644
index 124a452181a4e2..00000000000000
--- a/deps/npm/node_modules/json-stringify-safe/stringify.js
+++ /dev/null
@@ -1,27 +0,0 @@
-exports = module.exports = stringify
-exports.getSerialize = serializer
-
-function stringify(obj, replacer, spaces, cycleReplacer) {
- return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces)
-}
-
-function serializer(replacer, cycleReplacer) {
- var stack = [], keys = []
-
- if (cycleReplacer == null) cycleReplacer = function(key, value) {
- if (stack[0] === value) return "[Circular ~]"
- return "[Circular ~." + keys.slice(0, stack.indexOf(value)).join(".") + "]"
- }
-
- return function(key, value) {
- if (stack.length > 0) {
- var thisPos = stack.indexOf(this)
- ~thisPos ? stack.splice(thisPos + 1) : stack.push(this)
- ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key)
- if (~stack.indexOf(value)) value = cycleReplacer.call(this, key, value)
- }
- else stack.push(value)
-
- return replacer == null ? value : replacer.call(this, key, value)
- }
-}
diff --git a/deps/npm/node_modules/json-stringify-safe/test/mocha.opts b/deps/npm/node_modules/json-stringify-safe/test/mocha.opts
deleted file mode 100644
index 2544e5861e4ff9..00000000000000
--- a/deps/npm/node_modules/json-stringify-safe/test/mocha.opts
+++ /dev/null
@@ -1,2 +0,0 @@
---recursive
---require must
diff --git a/deps/npm/node_modules/json-stringify-safe/test/stringify_test.js b/deps/npm/node_modules/json-stringify-safe/test/stringify_test.js
deleted file mode 100644
index 5b3258317687c9..00000000000000
--- a/deps/npm/node_modules/json-stringify-safe/test/stringify_test.js
+++ /dev/null
@@ -1,246 +0,0 @@
-var Sinon = require("sinon")
-var stringify = require("..")
-function jsonify(obj) { return JSON.stringify(obj, null, 2) }
-
-describe("Stringify", function() {
- it("must stringify circular objects", function() {
- var obj = {name: "Alice"}
- obj.self = obj
- var json = stringify(obj, null, 2)
- json.must.eql(jsonify({name: "Alice", self: "[Circular ~]"}))
- })
-
- it("must stringify circular objects with intermediaries", function() {
- var obj = {name: "Alice"}
- obj.identity = {self: obj}
- var json = stringify(obj, null, 2)
- json.must.eql(jsonify({name: "Alice", identity: {self: "[Circular ~]"}}))
- })
-
- it("must stringify circular objects deeper", function() {
- var obj = {name: "Alice", child: {name: "Bob"}}
- obj.child.self = obj.child
-
- stringify(obj, null, 2).must.eql(jsonify({
- name: "Alice",
- child: {name: "Bob", self: "[Circular ~.child]"}
- }))
- })
-
- it("must stringify circular objects deeper with intermediaries", function() {
- var obj = {name: "Alice", child: {name: "Bob"}}
- obj.child.identity = {self: obj.child}
-
- stringify(obj, null, 2).must.eql(jsonify({
- name: "Alice",
- child: {name: "Bob", identity: {self: "[Circular ~.child]"}}
- }))
- })
-
- it("must stringify circular objects in an array", function() {
- var obj = {name: "Alice"}
- obj.self = [obj, obj]
-
- stringify(obj, null, 2).must.eql(jsonify({
- name: "Alice", self: ["[Circular ~]", "[Circular ~]"]
- }))
- })
-
- it("must stringify circular objects deeper in an array", function() {
- var obj = {name: "Alice", children: [{name: "Bob"}, {name: "Eve"}]}
- obj.children[0].self = obj.children[0]
- obj.children[1].self = obj.children[1]
-
- stringify(obj, null, 2).must.eql(jsonify({
- name: "Alice",
- children: [
- {name: "Bob", self: "[Circular ~.children.0]"},
- {name: "Eve", self: "[Circular ~.children.1]"}
- ]
- }))
- })
-
- it("must stringify circular arrays", function() {
- var obj = []
- obj.push(obj)
- obj.push(obj)
- var json = stringify(obj, null, 2)
- json.must.eql(jsonify(["[Circular ~]", "[Circular ~]"]))
- })
-
- it("must stringify circular arrays with intermediaries", function() {
- var obj = []
- obj.push({name: "Alice", self: obj})
- obj.push({name: "Bob", self: obj})
-
- stringify(obj, null, 2).must.eql(jsonify([
- {name: "Alice", self: "[Circular ~]"},
- {name: "Bob", self: "[Circular ~]"}
- ]))
- })
-
- it("must stringify repeated objects in objects", function() {
- var obj = {}
- var alice = {name: "Alice"}
- obj.alice1 = alice
- obj.alice2 = alice
-
- stringify(obj, null, 2).must.eql(jsonify({
- alice1: {name: "Alice"},
- alice2: {name: "Alice"}
- }))
- })
-
- it("must stringify repeated objects in arrays", function() {
- var alice = {name: "Alice"}
- var obj = [alice, alice]
- var json = stringify(obj, null, 2)
- json.must.eql(jsonify([{name: "Alice"}, {name: "Alice"}]))
- })
-
- it("must call given decycler and use its output", function() {
- var obj = {}
- obj.a = obj
- obj.b = obj
-
- var decycle = Sinon.spy(function() { return decycle.callCount })
- var json = stringify(obj, null, 2, decycle)
- json.must.eql(jsonify({a: 1, b: 2}, null, 2))
-
- decycle.callCount.must.equal(2)
- decycle.thisValues[0].must.equal(obj)
- decycle.args[0][0].must.equal("a")
- decycle.args[0][1].must.equal(obj)
- decycle.thisValues[1].must.equal(obj)
- decycle.args[1][0].must.equal("b")
- decycle.args[1][1].must.equal(obj)
- })
-
- it("must call replacer and use its output", function() {
- var obj = {name: "Alice", child: {name: "Bob"}}
-
- var replacer = Sinon.spy(bangString)
- var json = stringify(obj, replacer, 2)
- json.must.eql(jsonify({name: "Alice!", child: {name: "Bob!"}}))
-
- replacer.callCount.must.equal(4)
- replacer.args[0][0].must.equal("")
- replacer.args[0][1].must.equal(obj)
- replacer.thisValues[1].must.equal(obj)
- replacer.args[1][0].must.equal("name")
- replacer.args[1][1].must.equal("Alice")
- replacer.thisValues[2].must.equal(obj)
- replacer.args[2][0].must.equal("child")
- replacer.args[2][1].must.equal(obj.child)
- replacer.thisValues[3].must.equal(obj.child)
- replacer.args[3][0].must.equal("name")
- replacer.args[3][1].must.equal("Bob")
- })
-
- it("must call replacer after describing circular references", function() {
- var obj = {name: "Alice"}
- obj.self = obj
-
- var replacer = Sinon.spy(bangString)
- var json = stringify(obj, replacer, 2)
- json.must.eql(jsonify({name: "Alice!", self: "[Circular ~]!"}))
-
- replacer.callCount.must.equal(3)
- replacer.args[0][0].must.equal("")
- replacer.args[0][1].must.equal(obj)
- replacer.thisValues[1].must.equal(obj)
- replacer.args[1][0].must.equal("name")
- replacer.args[1][1].must.equal("Alice")
- replacer.thisValues[2].must.equal(obj)
- replacer.args[2][0].must.equal("self")
- replacer.args[2][1].must.equal("[Circular ~]")
- })
-
- it("must call given decycler and use its output for nested objects",
- function() {
- var obj = {}
- obj.a = obj
- obj.b = {self: obj}
-
- var decycle = Sinon.spy(function() { return decycle.callCount })
- var json = stringify(obj, null, 2, decycle)
- json.must.eql(jsonify({a: 1, b: {self: 2}}))
-
- decycle.callCount.must.equal(2)
- decycle.args[0][0].must.equal("a")
- decycle.args[0][1].must.equal(obj)
- decycle.args[1][0].must.equal("self")
- decycle.args[1][1].must.equal(obj)
- })
-
- it("must use decycler's output when it returned null", function() {
- var obj = {a: "b"}
- obj.self = obj
- obj.selves = [obj, obj]
-
- function decycle() { return null }
- stringify(obj, null, 2, decycle).must.eql(jsonify({
- a: "b",
- self: null,
- selves: [null, null]
- }))
- })
-
- it("must use decycler's output when it returned undefined", function() {
- var obj = {a: "b"}
- obj.self = obj
- obj.selves = [obj, obj]
-
- function decycle() {}
- stringify(obj, null, 2, decycle).must.eql(jsonify({
- a: "b",
- selves: [null, null]
- }))
- })
-
- it("must throw given a decycler that returns a cycle", function() {
- var obj = {}
- obj.self = obj
- var err
- function identity(key, value) { return value }
- try { stringify(obj, null, 2, identity) } catch (ex) { err = ex }
- err.must.be.an.instanceof(TypeError)
- })
-
- describe(".getSerialize", function() {
- it("must stringify circular objects", function() {
- var obj = {a: "b"}
- obj.circularRef = obj
- obj.list = [obj, obj]
-
- var json = JSON.stringify(obj, stringify.getSerialize(), 2)
- json.must.eql(jsonify({
- "a": "b",
- "circularRef": "[Circular ~]",
- "list": ["[Circular ~]", "[Circular ~]"]
- }))
- })
-
- // This is the behavior as of Mar 3, 2015.
- // The serializer function keeps state inside the returned function and
- // so far I'm not sure how to not do that. JSON.stringify's replacer is not
- // called _after_ serialization.
- xit("must return a function that could be called twice", function() {
- var obj = {name: "Alice"}
- obj.self = obj
-
- var json
- var serializer = stringify.getSerialize()
-
- json = JSON.stringify(obj, serializer, 2)
- json.must.eql(jsonify({name: "Alice", self: "[Circular ~]"}))
-
- json = JSON.stringify(obj, serializer, 2)
- json.must.eql(jsonify({name: "Alice", self: "[Circular ~]"}))
- })
- })
-})
-
-function bangString(key, value) {
- return typeof value == "string" ? value + "!" : value
-}
diff --git a/deps/npm/node_modules/jsprim/CHANGES.md b/deps/npm/node_modules/jsprim/CHANGES.md
deleted file mode 100644
index c52d39d687044c..00000000000000
--- a/deps/npm/node_modules/jsprim/CHANGES.md
+++ /dev/null
@@ -1,49 +0,0 @@
-# Changelog
-
-## not yet released
-
-None yet.
-
-## v1.4.1 (2017-08-02)
-
-* #21 Update verror dep
-* #22 Update extsprintf dependency
-* #23 update contribution guidelines
-
-## v1.4.0 (2017-03-13)
-
-* #7 Add parseInteger() function for safer number parsing
-
-## v1.3.1 (2016-09-12)
-
-* #13 Incompatible with webpack
-
-## v1.3.0 (2016-06-22)
-
-* #14 add safer version of hasOwnProperty()
-* #15 forEachKey() should ignore inherited properties
-
-## v1.2.2 (2015-10-15)
-
-* #11 NPM package shouldn't include any code that does `require('JSV')`
-* #12 jsl.node.conf missing definition for "module"
-
-## v1.2.1 (2015-10-14)
-
-* #8 odd date parsing behaviour
-
-## v1.2.0 (2015-10-13)
-
-* #9 want function for returning RFC1123 dates
-
-## v1.1.0 (2015-09-02)
-
-* #6 a new suite of hrtime manipulation routines: `hrtimeAdd()`,
- `hrtimeAccum()`, `hrtimeNanosec()`, `hrtimeMicrosec()` and
- `hrtimeMillisec()`.
-
-## v1.0.0 (2015-09-01)
-
-First tracked release. Includes everything in previous releases, plus:
-
-* #4 want function for merging objects
diff --git a/deps/npm/node_modules/jsprim/CONTRIBUTING.md b/deps/npm/node_modules/jsprim/CONTRIBUTING.md
deleted file mode 100644
index 750cef8dfd54a6..00000000000000
--- a/deps/npm/node_modules/jsprim/CONTRIBUTING.md
+++ /dev/null
@@ -1,19 +0,0 @@
-# Contributing
-
-This repository uses [cr.joyent.us](https://cr.joyent.us) (Gerrit) for new
-changes. Anyone can submit changes. To get started, see the [cr.joyent.us user
-guide](https://github.com/joyent/joyent-gerrit/blob/master/docs/user/README.md).
-This repo does not use GitHub pull requests.
-
-See the [Joyent Engineering
-Guidelines](https://github.com/joyent/eng/blob/master/docs/index.md) for general
-best practices expected in this repository.
-
-Contributions should be "make prepush" clean. The "prepush" target runs the
-"check" target, which requires these separate tools:
-
-* https://github.com/davepacheco/jsstyle
-* https://github.com/davepacheco/javascriptlint
-
-If you're changing something non-trivial or user-facing, you may want to submit
-an issue first.
diff --git a/deps/npm/node_modules/jsprim/LICENSE b/deps/npm/node_modules/jsprim/LICENSE
deleted file mode 100644
index cbc0bb3ba3b062..00000000000000
--- a/deps/npm/node_modules/jsprim/LICENSE
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (c) 2012, Joyent, Inc. All rights reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE
diff --git a/deps/npm/node_modules/jsprim/lib/jsprim.js b/deps/npm/node_modules/jsprim/lib/jsprim.js
deleted file mode 100644
index f7d0d81c3f43ef..00000000000000
--- a/deps/npm/node_modules/jsprim/lib/jsprim.js
+++ /dev/null
@@ -1,735 +0,0 @@
-/*
- * lib/jsprim.js: utilities for primitive JavaScript types
- */
-
-var mod_assert = require('assert-plus');
-var mod_util = require('util');
-
-var mod_extsprintf = require('extsprintf');
-var mod_verror = require('verror');
-var mod_jsonschema = require('json-schema');
-
-/*
- * Public interface
- */
-exports.deepCopy = deepCopy;
-exports.deepEqual = deepEqual;
-exports.isEmpty = isEmpty;
-exports.hasKey = hasKey;
-exports.forEachKey = forEachKey;
-exports.pluck = pluck;
-exports.flattenObject = flattenObject;
-exports.flattenIter = flattenIter;
-exports.validateJsonObject = validateJsonObjectJS;
-exports.validateJsonObjectJS = validateJsonObjectJS;
-exports.randElt = randElt;
-exports.extraProperties = extraProperties;
-exports.mergeObjects = mergeObjects;
-
-exports.startsWith = startsWith;
-exports.endsWith = endsWith;
-
-exports.parseInteger = parseInteger;
-
-exports.iso8601 = iso8601;
-exports.rfc1123 = rfc1123;
-exports.parseDateTime = parseDateTime;
-
-exports.hrtimediff = hrtimeDiff;
-exports.hrtimeDiff = hrtimeDiff;
-exports.hrtimeAccum = hrtimeAccum;
-exports.hrtimeAdd = hrtimeAdd;
-exports.hrtimeNanosec = hrtimeNanosec;
-exports.hrtimeMicrosec = hrtimeMicrosec;
-exports.hrtimeMillisec = hrtimeMillisec;
-
-
-/*
- * Deep copy an acyclic *basic* Javascript object. This only handles basic
- * scalars (strings, numbers, booleans) and arbitrarily deep arrays and objects
- * containing these. This does *not* handle instances of other classes.
- */
-function deepCopy(obj)
-{
- var ret, key;
- var marker = '__deepCopy';
-
- if (obj && obj[marker])
- throw (new Error('attempted deep copy of cyclic object'));
-
- if (obj && obj.constructor == Object) {
- ret = {};
- obj[marker] = true;
-
- for (key in obj) {
- if (key == marker)
- continue;
-
- ret[key] = deepCopy(obj[key]);
- }
-
- delete (obj[marker]);
- return (ret);
- }
-
- if (obj && obj.constructor == Array) {
- ret = [];
- obj[marker] = true;
-
- for (key = 0; key < obj.length; key++)
- ret.push(deepCopy(obj[key]));
-
- delete (obj[marker]);
- return (ret);
- }
-
- /*
- * It must be a primitive type -- just return it.
- */
- return (obj);
-}
-
-function deepEqual(obj1, obj2)
-{
- if (typeof (obj1) != typeof (obj2))
- return (false);
-
- if (obj1 === null || obj2 === null || typeof (obj1) != 'object')
- return (obj1 === obj2);
-
- if (obj1.constructor != obj2.constructor)
- return (false);
-
- var k;
- for (k in obj1) {
- if (!obj2.hasOwnProperty(k))
- return (false);
-
- if (!deepEqual(obj1[k], obj2[k]))
- return (false);
- }
-
- for (k in obj2) {
- if (!obj1.hasOwnProperty(k))
- return (false);
- }
-
- return (true);
-}
-
-function isEmpty(obj)
-{
- var key;
- for (key in obj)
- return (false);
- return (true);
-}
-
-function hasKey(obj, key)
-{
- mod_assert.equal(typeof (key), 'string');
- return (Object.prototype.hasOwnProperty.call(obj, key));
-}
-
-function forEachKey(obj, callback)
-{
- for (var key in obj) {
- if (hasKey(obj, key)) {
- callback(key, obj[key]);
- }
- }
-}
-
-function pluck(obj, key)
-{
- mod_assert.equal(typeof (key), 'string');
- return (pluckv(obj, key));
-}
-
-function pluckv(obj, key)
-{
- if (obj === null || typeof (obj) !== 'object')
- return (undefined);
-
- if (obj.hasOwnProperty(key))
- return (obj[key]);
-
- var i = key.indexOf('.');
- if (i == -1)
- return (undefined);
-
- var key1 = key.substr(0, i);
- if (!obj.hasOwnProperty(key1))
- return (undefined);
-
- return (pluckv(obj[key1], key.substr(i + 1)));
-}
-
-/*
- * Invoke callback(row) for each entry in the array that would be returned by
- * flattenObject(data, depth). This is just like flattenObject(data,
- * depth).forEach(callback), except that the intermediate array is never
- * created.
- */
-function flattenIter(data, depth, callback)
-{
- doFlattenIter(data, depth, [], callback);
-}
-
-function doFlattenIter(data, depth, accum, callback)
-{
- var each;
- var key;
-
- if (depth === 0) {
- each = accum.slice(0);
- each.push(data);
- callback(each);
- return;
- }
-
- mod_assert.ok(data !== null);
- mod_assert.equal(typeof (data), 'object');
- mod_assert.equal(typeof (depth), 'number');
- mod_assert.ok(depth >= 0);
-
- for (key in data) {
- each = accum.slice(0);
- each.push(key);
- doFlattenIter(data[key], depth - 1, each, callback);
- }
-}
-
-function flattenObject(data, depth)
-{
- if (depth === 0)
- return ([ data ]);
-
- mod_assert.ok(data !== null);
- mod_assert.equal(typeof (data), 'object');
- mod_assert.equal(typeof (depth), 'number');
- mod_assert.ok(depth >= 0);
-
- var rv = [];
- var key;
-
- for (key in data) {
- flattenObject(data[key], depth - 1).forEach(function (p) {
- rv.push([ key ].concat(p));
- });
- }
-
- return (rv);
-}
-
-function startsWith(str, prefix)
-{
- return (str.substr(0, prefix.length) == prefix);
-}
-
-function endsWith(str, suffix)
-{
- return (str.substr(
- str.length - suffix.length, suffix.length) == suffix);
-}
-
-function iso8601(d)
-{
- if (typeof (d) == 'number')
- d = new Date(d);
- mod_assert.ok(d.constructor === Date);
- return (mod_extsprintf.sprintf('%4d-%02d-%02dT%02d:%02d:%02d.%03dZ',
- d.getUTCFullYear(), d.getUTCMonth() + 1, d.getUTCDate(),
- d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(),
- d.getUTCMilliseconds()));
-}
-
-var RFC1123_MONTHS = [
- 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
- 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
-var RFC1123_DAYS = [
- 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
-
-function rfc1123(date) {
- return (mod_extsprintf.sprintf('%s, %02d %s %04d %02d:%02d:%02d GMT',
- RFC1123_DAYS[date.getUTCDay()], date.getUTCDate(),
- RFC1123_MONTHS[date.getUTCMonth()], date.getUTCFullYear(),
- date.getUTCHours(), date.getUTCMinutes(),
- date.getUTCSeconds()));
-}
-
-/*
- * Parses a date expressed as a string, as either a number of milliseconds since
- * the epoch or any string format that Date accepts, giving preference to the
- * former where these two sets overlap (e.g., small numbers).
- */
-function parseDateTime(str)
-{
- /*
- * This is irritatingly implicit, but significantly more concise than
- * alternatives. The "+str" will convert a string containing only a
- * number directly to a Number, or NaN for other strings. Thus, if the
- * conversion succeeds, we use it (this is the milliseconds-since-epoch
- * case). Otherwise, we pass the string directly to the Date
- * constructor to parse.
- */
- var numeric = +str;
- if (!isNaN(numeric)) {
- return (new Date(numeric));
- } else {
- return (new Date(str));
- }
-}
-
-
-/*
- * Number.*_SAFE_INTEGER isn't present before node v0.12, so we hardcode
- * the ES6 definitions here, while allowing for them to someday be higher.
- */
-var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;
-var MIN_SAFE_INTEGER = Number.MIN_SAFE_INTEGER || -9007199254740991;
-
-
-/*
- * Default options for parseInteger().
- */
-var PI_DEFAULTS = {
- base: 10,
- allowSign: true,
- allowPrefix: false,
- allowTrailing: false,
- allowImprecise: false,
- trimWhitespace: false,
- leadingZeroIsOctal: false
-};
-
-var CP_0 = 0x30;
-var CP_9 = 0x39;
-
-var CP_A = 0x41;
-var CP_B = 0x42;
-var CP_O = 0x4f;
-var CP_T = 0x54;
-var CP_X = 0x58;
-var CP_Z = 0x5a;
-
-var CP_a = 0x61;
-var CP_b = 0x62;
-var CP_o = 0x6f;
-var CP_t = 0x74;
-var CP_x = 0x78;
-var CP_z = 0x7a;
-
-var PI_CONV_DEC = 0x30;
-var PI_CONV_UC = 0x37;
-var PI_CONV_LC = 0x57;
-
-
-/*
- * A stricter version of parseInt() that provides options for changing what
- * is an acceptable string (for example, disallowing trailing characters).
- */
-function parseInteger(str, uopts)
-{
- mod_assert.string(str, 'str');
- mod_assert.optionalObject(uopts, 'options');
-
- var baseOverride = false;
- var options = PI_DEFAULTS;
-
- if (uopts) {
- baseOverride = hasKey(uopts, 'base');
- options = mergeObjects(options, uopts);
- mod_assert.number(options.base, 'options.base');
- mod_assert.ok(options.base >= 2, 'options.base >= 2');
- mod_assert.ok(options.base <= 36, 'options.base <= 36');
- mod_assert.bool(options.allowSign, 'options.allowSign');
- mod_assert.bool(options.allowPrefix, 'options.allowPrefix');
- mod_assert.bool(options.allowTrailing,
- 'options.allowTrailing');
- mod_assert.bool(options.allowImprecise,
- 'options.allowImprecise');
- mod_assert.bool(options.trimWhitespace,
- 'options.trimWhitespace');
- mod_assert.bool(options.leadingZeroIsOctal,
- 'options.leadingZeroIsOctal');
-
- if (options.leadingZeroIsOctal) {
- mod_assert.ok(!baseOverride,
- '"base" and "leadingZeroIsOctal" are ' +
- 'mutually exclusive');
- }
- }
-
- var c;
- var pbase = -1;
- var base = options.base;
- var start;
- var mult = 1;
- var value = 0;
- var idx = 0;
- var len = str.length;
-
- /* Trim any whitespace on the left side. */
- if (options.trimWhitespace) {
- while (idx < len && isSpace(str.charCodeAt(idx))) {
- ++idx;
- }
- }
-
- /* Check the number for a leading sign. */
- if (options.allowSign) {
- if (str[idx] === '-') {
- idx += 1;
- mult = -1;
- } else if (str[idx] === '+') {
- idx += 1;
- }
- }
-
- /* Parse the base-indicating prefix if there is one. */
- if (str[idx] === '0') {
- if (options.allowPrefix) {
- pbase = prefixToBase(str.charCodeAt(idx + 1));
- if (pbase !== -1 && (!baseOverride || pbase === base)) {
- base = pbase;
- idx += 2;
- }
- }
-
- if (pbase === -1 && options.leadingZeroIsOctal) {
- base = 8;
- }
- }
-
- /* Parse the actual digits. */
- for (start = idx; idx < len; ++idx) {
- c = translateDigit(str.charCodeAt(idx));
- if (c !== -1 && c < base) {
- value *= base;
- value += c;
- } else {
- break;
- }
- }
-
- /* If we didn't parse any digits, we have an invalid number. */
- if (start === idx) {
- return (new Error('invalid number: ' + JSON.stringify(str)));
- }
-
- /* Trim any whitespace on the right side. */
- if (options.trimWhitespace) {
- while (idx < len && isSpace(str.charCodeAt(idx))) {
- ++idx;
- }
- }
-
- /* Check for trailing characters. */
- if (idx < len && !options.allowTrailing) {
- return (new Error('trailing characters after number: ' +
- JSON.stringify(str.slice(idx))));
- }
-
- /* If our value is 0, we return now, to avoid returning -0. */
- if (value === 0) {
- return (0);
- }
-
- /* Calculate our final value. */
- var result = value * mult;
-
- /*
- * If the string represents a value that cannot be precisely represented
- * by JavaScript, then we want to check that:
- *
- * - We never increased the value past MAX_SAFE_INTEGER
- * - We don't make the result negative and below MIN_SAFE_INTEGER
- *
- * Because we only ever increment the value during parsing, there's no
- * chance of moving past MAX_SAFE_INTEGER and then dropping below it
- * again, losing precision in the process. This means that we only need
- * to do our checks here, at the end.
- */
- if (!options.allowImprecise &&
- (value > MAX_SAFE_INTEGER || result < MIN_SAFE_INTEGER)) {
- return (new Error('number is outside of the supported range: ' +
- JSON.stringify(str.slice(start, idx))));
- }
-
- return (result);
-}
-
-
-/*
- * Interpret a character code as a base-36 digit.
- */
-function translateDigit(d)
-{
- if (d >= CP_0 && d <= CP_9) {
- /* '0' to '9' -> 0 to 9 */
- return (d - PI_CONV_DEC);
- } else if (d >= CP_A && d <= CP_Z) {
- /* 'A' - 'Z' -> 10 to 35 */
- return (d - PI_CONV_UC);
- } else if (d >= CP_a && d <= CP_z) {
- /* 'a' - 'z' -> 10 to 35 */
- return (d - PI_CONV_LC);
- } else {
- /* Invalid character code */
- return (-1);
- }
-}
-
-
-/*
- * Test if a value matches the ECMAScript definition of trimmable whitespace.
- */
-function isSpace(c)
-{
- return (c === 0x20) ||
- (c >= 0x0009 && c <= 0x000d) ||
- (c === 0x00a0) ||
- (c === 0x1680) ||
- (c === 0x180e) ||
- (c >= 0x2000 && c <= 0x200a) ||
- (c === 0x2028) ||
- (c === 0x2029) ||
- (c === 0x202f) ||
- (c === 0x205f) ||
- (c === 0x3000) ||
- (c === 0xfeff);
-}
-
-
-/*
- * Determine which base a character indicates (e.g., 'x' indicates hex).
- */
-function prefixToBase(c)
-{
- if (c === CP_b || c === CP_B) {
- /* 0b/0B (binary) */
- return (2);
- } else if (c === CP_o || c === CP_O) {
- /* 0o/0O (octal) */
- return (8);
- } else if (c === CP_t || c === CP_T) {
- /* 0t/0T (decimal) */
- return (10);
- } else if (c === CP_x || c === CP_X) {
- /* 0x/0X (hexadecimal) */
- return (16);
- } else {
- /* Not a meaningful character */
- return (-1);
- }
-}
-
-
-function validateJsonObjectJS(schema, input)
-{
- var report = mod_jsonschema.validate(input, schema);
-
- if (report.errors.length === 0)
- return (null);
-
- /* Currently, we only do anything useful with the first error. */
- var error = report.errors[0];
-
- /* The failed property is given by a URI with an irrelevant prefix. */
- var propname = error['property'];
- var reason = error['message'].toLowerCase();
- var i, j;
-
- /*
- * There's at least one case where the property error message is
- * confusing at best. We work around this here.
- */
- if ((i = reason.indexOf('the property ')) != -1 &&
- (j = reason.indexOf(' is not defined in the schema and the ' +
- 'schema does not allow additional properties')) != -1) {
- i += 'the property '.length;
- if (propname === '')
- propname = reason.substr(i, j - i);
- else
- propname = propname + '.' + reason.substr(i, j - i);
-
- reason = 'unsupported property';
- }
-
- var rv = new mod_verror.VError('property "%s": %s', propname, reason);
- rv.jsv_details = error;
- return (rv);
-}
-
-function randElt(arr)
-{
- mod_assert.ok(Array.isArray(arr) && arr.length > 0,
- 'randElt argument must be a non-empty array');
-
- return (arr[Math.floor(Math.random() * arr.length)]);
-}
-
-function assertHrtime(a)
-{
- mod_assert.ok(a[0] >= 0 && a[1] >= 0,
- 'negative numbers not allowed in hrtimes');
- mod_assert.ok(a[1] < 1e9, 'nanoseconds column overflow');
-}
-
-/*
- * Compute the time elapsed between hrtime readings A and B, where A is later
- * than B. hrtime readings come from Node's process.hrtime(). There is no
- * defined way to represent negative deltas, so it's illegal to diff B from A
- * where the time denoted by B is later than the time denoted by A. If this
- * becomes valuable, we can define a representation and extend the
- * implementation to support it.
- */
-function hrtimeDiff(a, b)
-{
- assertHrtime(a);
- assertHrtime(b);
- mod_assert.ok(a[0] > b[0] || (a[0] == b[0] && a[1] >= b[1]),
- 'negative differences not allowed');
-
- var rv = [ a[0] - b[0], 0 ];
-
- if (a[1] >= b[1]) {
- rv[1] = a[1] - b[1];
- } else {
- rv[0]--;
- rv[1] = 1e9 - (b[1] - a[1]);
- }
-
- return (rv);
-}
-
-/*
- * Convert a hrtime reading from the array format returned by Node's
- * process.hrtime() into a scalar number of nanoseconds.
- */
-function hrtimeNanosec(a)
-{
- assertHrtime(a);
-
- return (Math.floor(a[0] * 1e9 + a[1]));
-}
-
-/*
- * Convert a hrtime reading from the array format returned by Node's
- * process.hrtime() into a scalar number of microseconds.
- */
-function hrtimeMicrosec(a)
-{
- assertHrtime(a);
-
- return (Math.floor(a[0] * 1e6 + a[1] / 1e3));
-}
-
-/*
- * Convert a hrtime reading from the array format returned by Node's
- * process.hrtime() into a scalar number of milliseconds.
- */
-function hrtimeMillisec(a)
-{
- assertHrtime(a);
-
- return (Math.floor(a[0] * 1e3 + a[1] / 1e6));
-}
-
-/*
- * Add two hrtime readings A and B, overwriting A with the result of the
- * addition. This function is useful for accumulating several hrtime intervals
- * into a counter. Returns A.
- */
-function hrtimeAccum(a, b)
-{
- assertHrtime(a);
- assertHrtime(b);
-
- /*
- * Accumulate the nanosecond component.
- */
- a[1] += b[1];
- if (a[1] >= 1e9) {
- /*
- * The nanosecond component overflowed, so carry to the seconds
- * field.
- */
- a[0]++;
- a[1] -= 1e9;
- }
-
- /*
- * Accumulate the seconds component.
- */
- a[0] += b[0];
-
- return (a);
-}
-
-/*
- * Add two hrtime readings A and B, returning the result as a new hrtime array.
- * Does not modify either input argument.
- */
-function hrtimeAdd(a, b)
-{
- assertHrtime(a);
-
- var rv = [ a[0], a[1] ];
-
- return (hrtimeAccum(rv, b));
-}
-
-
-/*
- * Check an object for unexpected properties. Accepts the object to check, and
- * an array of allowed property names (strings). Returns an array of key names
- * that were found on the object, but did not appear in the list of allowed
- * properties. If no properties were found, the returned array will be of
- * zero length.
- */
-function extraProperties(obj, allowed)
-{
- mod_assert.ok(typeof (obj) === 'object' && obj !== null,
- 'obj argument must be a non-null object');
- mod_assert.ok(Array.isArray(allowed),
- 'allowed argument must be an array of strings');
- for (var i = 0; i < allowed.length; i++) {
- mod_assert.ok(typeof (allowed[i]) === 'string',
- 'allowed argument must be an array of strings');
- }
-
- return (Object.keys(obj).filter(function (key) {
- return (allowed.indexOf(key) === -1);
- }));
-}
-
-/*
- * Given three sets of properties "provided" (may be undefined), "overrides"
- * (required), and "defaults" (may be undefined), construct an object containing
- * the union of these sets with "overrides" overriding "provided", and
- * "provided" overriding "defaults". None of the input objects are modified.
- */
-function mergeObjects(provided, overrides, defaults)
-{
- var rv, k;
-
- rv = {};
- if (defaults) {
- for (k in defaults)
- rv[k] = defaults[k];
- }
-
- if (provided) {
- for (k in provided)
- rv[k] = provided[k];
- }
-
- if (overrides) {
- for (k in overrides)
- rv[k] = overrides[k];
- }
-
- return (rv);
-}
diff --git a/deps/npm/node_modules/jsprim/package.json b/deps/npm/node_modules/jsprim/package.json
deleted file mode 100644
index 25345ee04964cd..00000000000000
--- a/deps/npm/node_modules/jsprim/package.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "name": "jsprim",
- "version": "1.4.1",
- "description": "utilities for primitive JavaScript types",
- "main": "./lib/jsprim.js",
- "repository": {
- "type": "git",
- "url": "git://github.com/joyent/node-jsprim.git"
- },
- "dependencies": {
- "assert-plus": "1.0.0",
- "extsprintf": "1.3.0",
- "json-schema": "0.2.3",
- "verror": "1.10.0"
- },
- "engines": [
- "node >=0.6.0"
- ],
- "license": "MIT"
-}
diff --git a/deps/npm/node_modules/libnpmdiff/package.json b/deps/npm/node_modules/libnpmdiff/package.json
index 53fd5d4befd5e7..529fc79539bac2 100644
--- a/deps/npm/node_modules/libnpmdiff/package.json
+++ b/deps/npm/node_modules/libnpmdiff/package.json
@@ -60,7 +60,7 @@
"diff": "^5.0.0",
"minimatch": "^3.0.4",
"npm-package-arg": "^8.1.4",
- "pacote": "^11.3.4",
+ "pacote": "^12.0.0",
"tar": "^6.1.0"
}
}
diff --git a/deps/npm/node_modules/libnpmexec/package.json b/deps/npm/node_modules/libnpmexec/package.json
index 2668f11731e6f5..067c39ae744fca 100644
--- a/deps/npm/node_modules/libnpmexec/package.json
+++ b/deps/npm/node_modules/libnpmexec/package.json
@@ -1,12 +1,12 @@
{
"name": "libnpmexec",
- "version": "2.0.1",
+ "version": "3.0.0",
"files": [
"lib"
],
"main": "lib/index.js",
"engines": {
- "node": ">=10"
+ "node": "^12.13.0 || ^14.15.0 || >=16"
},
"description": "npm exec (npx) programmatic API",
"repository": "https://github.com/npm/libnpmexec",
@@ -37,6 +37,7 @@
"prepublishOnly": "git push origin --follow-tags"
},
"tap": {
+ "color": true,
"check-coverage": true
},
"devDependencies": {
@@ -49,13 +50,13 @@
"tap": "^15.0.6"
},
"dependencies": {
- "@npmcli/arborist": "^2.3.0",
+ "@npmcli/arborist": "^3.0.0",
"@npmcli/ci-detect": "^1.3.0",
- "@npmcli/run-script": "^1.8.4",
+ "@npmcli/run-script": "^2.0.0",
"chalk": "^4.1.0",
"mkdirp-infer-owner": "^2.0.0",
"npm-package-arg": "^8.1.2",
- "pacote": "^11.3.1",
+ "pacote": "^12.0.0",
"proc-log": "^1.0.0",
"read": "^1.0.7",
"read-package-json-fast": "^2.0.2",
diff --git a/deps/npm/node_modules/libnpmfund/package.json b/deps/npm/node_modules/libnpmfund/package.json
index 7f4acad383bb80..e021d8874d26c6 100644
--- a/deps/npm/node_modules/libnpmfund/package.json
+++ b/deps/npm/node_modules/libnpmfund/package.json
@@ -1,6 +1,6 @@
{
"name": "libnpmfund",
- "version": "1.1.0",
+ "version": "2.0.0",
"files": [
"index.js"
],
@@ -52,6 +52,9 @@
"tap": "^15.0.9"
},
"dependencies": {
- "@npmcli/arborist": "^2.5.0"
+ "@npmcli/arborist": "^3.0.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16"
}
}
diff --git a/deps/npm/node_modules/libnpmpack/package.json b/deps/npm/node_modules/libnpmpack/package.json
index f3ec245d3142aa..e0538b1716095c 100644
--- a/deps/npm/node_modules/libnpmpack/package.json
+++ b/deps/npm/node_modules/libnpmpack/package.json
@@ -1,6 +1,6 @@
{
"name": "libnpmpack",
- "version": "2.0.1",
+ "version": "3.0.0",
"description": "Programmatic API for the bits behind npm pack",
"author": "npm Inc. ",
"contributors": [
@@ -34,11 +34,11 @@
"bugs": "https://github.com/npm/libnpmpack/issues",
"homepage": "https://npmjs.com/package/libnpmpack",
"dependencies": {
- "@npmcli/run-script": "^1.8.3",
+ "@npmcli/run-script": "^2.0.0",
"npm-package-arg": "^8.1.0",
- "pacote": "^11.2.6"
+ "pacote": "^12.0.0"
},
"engines": {
- "node": ">=10"
+ "node": "^12.13.0 || ^14.15.0 || >=16"
}
}
diff --git a/deps/npm/node_modules/libnpmversion/package.json b/deps/npm/node_modules/libnpmversion/package.json
index 1ee2ee5995a523..523f25f1d55c39 100644
--- a/deps/npm/node_modules/libnpmversion/package.json
+++ b/deps/npm/node_modules/libnpmversion/package.json
@@ -1,6 +1,6 @@
{
"name": "libnpmversion",
- "version": "1.2.1",
+ "version": "2.0.1",
"main": "lib/index.js",
"files": [
"lib/*.js"
@@ -38,9 +38,12 @@
},
"dependencies": {
"@npmcli/git": "^2.0.7",
- "@npmcli/run-script": "^1.8.4",
+ "@npmcli/run-script": "^2.0.0",
"json-parse-even-better-errors": "^2.3.1",
"semver": "^7.3.5",
"stringify-package": "^1.0.1"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16"
}
}
diff --git a/deps/npm/node_modules/mime-db/HISTORY.md b/deps/npm/node_modules/mime-db/HISTORY.md
deleted file mode 100644
index 672d414ca3782e..00000000000000
--- a/deps/npm/node_modules/mime-db/HISTORY.md
+++ /dev/null
@@ -1,486 +0,0 @@
-1.49.0 / 2021-07-26
-===================
-
- * Add extension `.trig` to `application/trig`
- * Add new upstream MIME types
-
-1.48.0 / 2021-05-30
-===================
-
- * Add extension `.mvt` to `application/vnd.mapbox-vector-tile`
- * Add new upstream MIME types
- * Mark `text/yaml` as compressible
-
-1.47.0 / 2021-04-01
-===================
-
- * Add new upstream MIME types
- * Remove ambigious extensions from IANA for `application/*+xml` types
- * Update primary extension to `.es` for `application/ecmascript`
-
-1.46.0 / 2021-02-13
-===================
-
- * Add extension `.amr` to `audio/amr`
- * Add extension `.m4s` to `video/iso.segment`
- * Add extension `.opus` to `audio/ogg`
- * Add new upstream MIME types
-
-1.45.0 / 2020-09-22
-===================
-
- * Add `application/ubjson` with extension `.ubj`
- * Add `image/avif` with extension `.avif`
- * Add `image/ktx2` with extension `.ktx2`
- * Add extension `.dbf` to `application/vnd.dbf`
- * Add extension `.rar` to `application/vnd.rar`
- * Add extension `.td` to `application/urc-targetdesc+xml`
- * Add new upstream MIME types
- * Fix extension of `application/vnd.apple.keynote` to be `.key`
-
-1.44.0 / 2020-04-22
-===================
-
- * Add charsets from IANA
- * Add extension `.cjs` to `application/node`
- * Add new upstream MIME types
-
-1.43.0 / 2020-01-05
-===================
-
- * Add `application/x-keepass2` with extension `.kdbx`
- * Add extension `.mxmf` to `audio/mobile-xmf`
- * Add extensions from IANA for `application/*+xml` types
- * Add new upstream MIME types
-
-1.42.0 / 2019-09-25
-===================
-
- * Add `image/vnd.ms-dds` with extension `.dds`
- * Add new upstream MIME types
- * Remove compressible from `multipart/mixed`
-
-1.41.0 / 2019-08-30
-===================
-
- * Add new upstream MIME types
- * Add `application/toml` with extension `.toml`
- * Mark `font/ttf` as compressible
-
-1.40.0 / 2019-04-20
-===================
-
- * Add extensions from IANA for `model/*` types
- * Add `text/mdx` with extension `.mdx`
-
-1.39.0 / 2019-04-04
-===================
-
- * Add extensions `.siv` and `.sieve` to `application/sieve`
- * Add new upstream MIME types
-
-1.38.0 / 2019-02-04
-===================
-
- * Add extension `.nq` to `application/n-quads`
- * Add extension `.nt` to `application/n-triples`
- * Add new upstream MIME types
- * Mark `text/less` as compressible
-
-1.37.0 / 2018-10-19
-===================
-
- * Add extensions to HEIC image types
- * Add new upstream MIME types
-
-1.36.0 / 2018-08-20
-===================
-
- * Add Apple file extensions from IANA
- * Add extensions from IANA for `image/*` types
- * Add new upstream MIME types
-
-1.35.0 / 2018-07-15
-===================
-
- * Add extension `.owl` to `application/rdf+xml`
- * Add new upstream MIME types
- - Removes extension `.woff` from `application/font-woff`
-
-1.34.0 / 2018-06-03
-===================
-
- * Add extension `.csl` to `application/vnd.citationstyles.style+xml`
- * Add extension `.es` to `application/ecmascript`
- * Add new upstream MIME types
- * Add `UTF-8` as default charset for `text/turtle`
- * Mark all XML-derived types as compressible
-
-1.33.0 / 2018-02-15
-===================
-
- * Add extensions from IANA for `message/*` types
- * Add new upstream MIME types
- * Fix some incorrect OOXML types
- * Remove `application/font-woff2`
-
-1.32.0 / 2017-11-29
-===================
-
- * Add new upstream MIME types
- * Update `text/hjson` to registered `application/hjson`
- * Add `text/shex` with extension `.shex`
-
-1.31.0 / 2017-10-25
-===================
-
- * Add `application/raml+yaml` with extension `.raml`
- * Add `application/wasm` with extension `.wasm`
- * Add new `font` type from IANA
- * Add new upstream font extensions
- * Add new upstream MIME types
- * Add extensions for JPEG-2000 images
-
-1.30.0 / 2017-08-27
-===================
-
- * Add `application/vnd.ms-outlook`
- * Add `application/x-arj`
- * Add extension `.mjs` to `application/javascript`
- * Add glTF types and extensions
- * Add new upstream MIME types
- * Add `text/x-org`
- * Add VirtualBox MIME types
- * Fix `source` records for `video/*` types that are IANA
- * Update `font/opentype` to registered `font/otf`
-
-1.29.0 / 2017-07-10
-===================
-
- * Add `application/fido.trusted-apps+json`
- * Add extension `.wadl` to `application/vnd.sun.wadl+xml`
- * Add new upstream MIME types
- * Add `UTF-8` as default charset for `text/css`
-
-1.28.0 / 2017-05-14
-===================
-
- * Add new upstream MIME types
- * Add extension `.gz` to `application/gzip`
- * Update extensions `.md` and `.markdown` to be `text/markdown`
-
-1.27.0 / 2017-03-16
-===================
-
- * Add new upstream MIME types
- * Add `image/apng` with extension `.apng`
-
-1.26.0 / 2017-01-14
-===================
-
- * Add new upstream MIME types
- * Add extension `.geojson` to `application/geo+json`
-
-1.25.0 / 2016-11-11
-===================
-
- * Add new upstream MIME types
-
-1.24.0 / 2016-09-18
-===================
-
- * Add `audio/mp3`
- * Add new upstream MIME types
-
-1.23.0 / 2016-05-01
-===================
-
- * Add new upstream MIME types
- * Add extension `.3gpp` to `audio/3gpp`
-
-1.22.0 / 2016-02-15
-===================
-
- * Add `text/slim`
- * Add extension `.rng` to `application/xml`
- * Add new upstream MIME types
- * Fix extension of `application/dash+xml` to be `.mpd`
- * Update primary extension to `.m4a` for `audio/mp4`
-
-1.21.0 / 2016-01-06
-===================
-
- * Add Google document types
- * Add new upstream MIME types
-
-1.20.0 / 2015-11-10
-===================
-
- * Add `text/x-suse-ymp`
- * Add new upstream MIME types
-
-1.19.0 / 2015-09-17
-===================
-
- * Add `application/vnd.apple.pkpass`
- * Add new upstream MIME types
-
-1.18.0 / 2015-09-03
-===================
-
- * Add new upstream MIME types
-
-1.17.0 / 2015-08-13
-===================
-
- * Add `application/x-msdos-program`
- * Add `audio/g711-0`
- * Add `image/vnd.mozilla.apng`
- * Add extension `.exe` to `application/x-msdos-program`
-
-1.16.0 / 2015-07-29
-===================
-
- * Add `application/vnd.uri-map`
-
-1.15.0 / 2015-07-13
-===================
-
- * Add `application/x-httpd-php`
-
-1.14.0 / 2015-06-25
-===================
-
- * Add `application/scim+json`
- * Add `application/vnd.3gpp.ussd+xml`
- * Add `application/vnd.biopax.rdf+xml`
- * Add `text/x-processing`
-
-1.13.0 / 2015-06-07
-===================
-
- * Add nginx as a source
- * Add `application/x-cocoa`
- * Add `application/x-java-archive-diff`
- * Add `application/x-makeself`
- * Add `application/x-perl`
- * Add `application/x-pilot`
- * Add `application/x-redhat-package-manager`
- * Add `application/x-sea`
- * Add `audio/x-m4a`
- * Add `audio/x-realaudio`
- * Add `image/x-jng`
- * Add `text/mathml`
-
-1.12.0 / 2015-06-05
-===================
-
- * Add `application/bdoc`
- * Add `application/vnd.hyperdrive+json`
- * Add `application/x-bdoc`
- * Add extension `.rtf` to `text/rtf`
-
-1.11.0 / 2015-05-31
-===================
-
- * Add `audio/wav`
- * Add `audio/wave`
- * Add extension `.litcoffee` to `text/coffeescript`
- * Add extension `.sfd-hdstx` to `application/vnd.hydrostatix.sof-data`
- * Add extension `.n-gage` to `application/vnd.nokia.n-gage.symbian.install`
-
-1.10.0 / 2015-05-19
-===================
-
- * Add `application/vnd.balsamiq.bmpr`
- * Add `application/vnd.microsoft.portable-executable`
- * Add `application/x-ns-proxy-autoconfig`
-
-1.9.1 / 2015-04-19
-==================
-
- * Remove `.json` extension from `application/manifest+json`
- - This is causing bugs downstream
-
-1.9.0 / 2015-04-19
-==================
-
- * Add `application/manifest+json`
- * Add `application/vnd.micro+json`
- * Add `image/vnd.zbrush.pcx`
- * Add `image/x-ms-bmp`
-
-1.8.0 / 2015-03-13
-==================
-
- * Add `application/vnd.citationstyles.style+xml`
- * Add `application/vnd.fastcopy-disk-image`
- * Add `application/vnd.gov.sk.xmldatacontainer+xml`
- * Add extension `.jsonld` to `application/ld+json`
-
-1.7.0 / 2015-02-08
-==================
-
- * Add `application/vnd.gerber`
- * Add `application/vnd.msa-disk-image`
-
-1.6.1 / 2015-02-05
-==================
-
- * Community extensions ownership transferred from `node-mime`
-
-1.6.0 / 2015-01-29
-==================
-
- * Add `application/jose`
- * Add `application/jose+json`
- * Add `application/json-seq`
- * Add `application/jwk+json`
- * Add `application/jwk-set+json`
- * Add `application/jwt`
- * Add `application/rdap+json`
- * Add `application/vnd.gov.sk.e-form+xml`
- * Add `application/vnd.ims.imsccv1p3`
-
-1.5.0 / 2014-12-30
-==================
-
- * Add `application/vnd.oracle.resource+json`
- * Fix various invalid MIME type entries
- - `application/mbox+xml`
- - `application/oscp-response`
- - `application/vwg-multiplexed`
- - `audio/g721`
-
-1.4.0 / 2014-12-21
-==================
-
- * Add `application/vnd.ims.imsccv1p2`
- * Fix various invalid MIME type entries
- - `application/vnd-acucobol`
- - `application/vnd-curl`
- - `application/vnd-dart`
- - `application/vnd-dxr`
- - `application/vnd-fdf`
- - `application/vnd-mif`
- - `application/vnd-sema`
- - `application/vnd-wap-wmlc`
- - `application/vnd.adobe.flash-movie`
- - `application/vnd.dece-zip`
- - `application/vnd.dvb_service`
- - `application/vnd.micrografx-igx`
- - `application/vnd.sealed-doc`
- - `application/vnd.sealed-eml`
- - `application/vnd.sealed-mht`
- - `application/vnd.sealed-ppt`
- - `application/vnd.sealed-tiff`
- - `application/vnd.sealed-xls`
- - `application/vnd.sealedmedia.softseal-html`
- - `application/vnd.sealedmedia.softseal-pdf`
- - `application/vnd.wap-slc`
- - `application/vnd.wap-wbxml`
- - `audio/vnd.sealedmedia.softseal-mpeg`
- - `image/vnd-djvu`
- - `image/vnd-svf`
- - `image/vnd-wap-wbmp`
- - `image/vnd.sealed-png`
- - `image/vnd.sealedmedia.softseal-gif`
- - `image/vnd.sealedmedia.softseal-jpg`
- - `model/vnd-dwf`
- - `model/vnd.parasolid.transmit-binary`
- - `model/vnd.parasolid.transmit-text`
- - `text/vnd-a`
- - `text/vnd-curl`
- - `text/vnd.wap-wml`
- * Remove example template MIME types
- - `application/example`
- - `audio/example`
- - `image/example`
- - `message/example`
- - `model/example`
- - `multipart/example`
- - `text/example`
- - `video/example`
-
-1.3.1 / 2014-12-16
-==================
-
- * Fix missing extensions
- - `application/json5`
- - `text/hjson`
-
-1.3.0 / 2014-12-07
-==================
-
- * Add `application/a2l`
- * Add `application/aml`
- * Add `application/atfx`
- * Add `application/atxml`
- * Add `application/cdfx+xml`
- * Add `application/dii`
- * Add `application/json5`
- * Add `application/lxf`
- * Add `application/mf4`
- * Add `application/vnd.apache.thrift.compact`
- * Add `application/vnd.apache.thrift.json`
- * Add `application/vnd.coffeescript`
- * Add `application/vnd.enphase.envoy`
- * Add `application/vnd.ims.imsccv1p1`
- * Add `text/csv-schema`
- * Add `text/hjson`
- * Add `text/markdown`
- * Add `text/yaml`
-
-1.2.0 / 2014-11-09
-==================
-
- * Add `application/cea`
- * Add `application/dit`
- * Add `application/vnd.gov.sk.e-form+zip`
- * Add `application/vnd.tmd.mediaflex.api+xml`
- * Type `application/epub+zip` is now IANA-registered
-
-1.1.2 / 2014-10-23
-==================
-
- * Rebuild database for `application/x-www-form-urlencoded` change
-
-1.1.1 / 2014-10-20
-==================
-
- * Mark `application/x-www-form-urlencoded` as compressible.
-
-1.1.0 / 2014-09-28
-==================
-
- * Add `application/font-woff2`
-
-1.0.3 / 2014-09-25
-==================
-
- * Fix engine requirement in package
-
-1.0.2 / 2014-09-25
-==================
-
- * Add `application/coap-group+json`
- * Add `application/dcd`
- * Add `application/vnd.apache.thrift.binary`
- * Add `image/vnd.tencent.tap`
- * Mark all JSON-derived types as compressible
- * Update `text/vtt` data
-
-1.0.1 / 2014-08-30
-==================
-
- * Fix extension ordering
-
-1.0.0 / 2014-08-30
-==================
-
- * Add `application/atf`
- * Add `application/merge-patch+json`
- * Add `multipart/x-mixed-replace`
- * Add `source: 'apache'` metadata
- * Add `source: 'iana'` metadata
- * Remove badly-assumed charset data
diff --git a/deps/npm/node_modules/mime-db/LICENSE b/deps/npm/node_modules/mime-db/LICENSE
deleted file mode 100644
index a7ae8ee9b8a30e..00000000000000
--- a/deps/npm/node_modules/mime-db/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-
-The MIT License (MIT)
-
-Copyright (c) 2014 Jonathan Ong me@jongleberry.com
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/deps/npm/node_modules/mime-db/db.json b/deps/npm/node_modules/mime-db/db.json
deleted file mode 100644
index 911b0f865b7048..00000000000000
--- a/deps/npm/node_modules/mime-db/db.json
+++ /dev/null
@@ -1,8417 +0,0 @@
-{
- "application/1d-interleaved-parityfec": {
- "source": "iana"
- },
- "application/3gpdash-qoe-report+xml": {
- "source": "iana",
- "charset": "UTF-8",
- "compressible": true
- },
- "application/3gpp-ims+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/3gpphal+json": {
- "source": "iana",
- "compressible": true
- },
- "application/3gpphalforms+json": {
- "source": "iana",
- "compressible": true
- },
- "application/a2l": {
- "source": "iana"
- },
- "application/activemessage": {
- "source": "iana"
- },
- "application/activity+json": {
- "source": "iana",
- "compressible": true
- },
- "application/alto-costmap+json": {
- "source": "iana",
- "compressible": true
- },
- "application/alto-costmapfilter+json": {
- "source": "iana",
- "compressible": true
- },
- "application/alto-directory+json": {
- "source": "iana",
- "compressible": true
- },
- "application/alto-endpointcost+json": {
- "source": "iana",
- "compressible": true
- },
- "application/alto-endpointcostparams+json": {
- "source": "iana",
- "compressible": true
- },
- "application/alto-endpointprop+json": {
- "source": "iana",
- "compressible": true
- },
- "application/alto-endpointpropparams+json": {
- "source": "iana",
- "compressible": true
- },
- "application/alto-error+json": {
- "source": "iana",
- "compressible": true
- },
- "application/alto-networkmap+json": {
- "source": "iana",
- "compressible": true
- },
- "application/alto-networkmapfilter+json": {
- "source": "iana",
- "compressible": true
- },
- "application/alto-updatestreamcontrol+json": {
- "source": "iana",
- "compressible": true
- },
- "application/alto-updatestreamparams+json": {
- "source": "iana",
- "compressible": true
- },
- "application/aml": {
- "source": "iana"
- },
- "application/andrew-inset": {
- "source": "iana",
- "extensions": ["ez"]
- },
- "application/applefile": {
- "source": "iana"
- },
- "application/applixware": {
- "source": "apache",
- "extensions": ["aw"]
- },
- "application/atf": {
- "source": "iana"
- },
- "application/atfx": {
- "source": "iana"
- },
- "application/atom+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["atom"]
- },
- "application/atomcat+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["atomcat"]
- },
- "application/atomdeleted+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["atomdeleted"]
- },
- "application/atomicmail": {
- "source": "iana"
- },
- "application/atomsvc+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["atomsvc"]
- },
- "application/atsc-dwd+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["dwd"]
- },
- "application/atsc-dynamic-event-message": {
- "source": "iana"
- },
- "application/atsc-held+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["held"]
- },
- "application/atsc-rdt+json": {
- "source": "iana",
- "compressible": true
- },
- "application/atsc-rsat+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["rsat"]
- },
- "application/atxml": {
- "source": "iana"
- },
- "application/auth-policy+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/bacnet-xdd+zip": {
- "source": "iana",
- "compressible": false
- },
- "application/batch-smtp": {
- "source": "iana"
- },
- "application/bdoc": {
- "compressible": false,
- "extensions": ["bdoc"]
- },
- "application/beep+xml": {
- "source": "iana",
- "charset": "UTF-8",
- "compressible": true
- },
- "application/calendar+json": {
- "source": "iana",
- "compressible": true
- },
- "application/calendar+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["xcs"]
- },
- "application/call-completion": {
- "source": "iana"
- },
- "application/cals-1840": {
- "source": "iana"
- },
- "application/captive+json": {
- "source": "iana",
- "compressible": true
- },
- "application/cbor": {
- "source": "iana"
- },
- "application/cbor-seq": {
- "source": "iana"
- },
- "application/cccex": {
- "source": "iana"
- },
- "application/ccmp+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/ccxml+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["ccxml"]
- },
- "application/cdfx+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["cdfx"]
- },
- "application/cdmi-capability": {
- "source": "iana",
- "extensions": ["cdmia"]
- },
- "application/cdmi-container": {
- "source": "iana",
- "extensions": ["cdmic"]
- },
- "application/cdmi-domain": {
- "source": "iana",
- "extensions": ["cdmid"]
- },
- "application/cdmi-object": {
- "source": "iana",
- "extensions": ["cdmio"]
- },
- "application/cdmi-queue": {
- "source": "iana",
- "extensions": ["cdmiq"]
- },
- "application/cdni": {
- "source": "iana"
- },
- "application/cea": {
- "source": "iana"
- },
- "application/cea-2018+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/cellml+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/cfw": {
- "source": "iana"
- },
- "application/clr": {
- "source": "iana"
- },
- "application/clue+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/clue_info+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/cms": {
- "source": "iana"
- },
- "application/cnrp+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/coap-group+json": {
- "source": "iana",
- "compressible": true
- },
- "application/coap-payload": {
- "source": "iana"
- },
- "application/commonground": {
- "source": "iana"
- },
- "application/conference-info+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/cose": {
- "source": "iana"
- },
- "application/cose-key": {
- "source": "iana"
- },
- "application/cose-key-set": {
- "source": "iana"
- },
- "application/cpl+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/csrattrs": {
- "source": "iana"
- },
- "application/csta+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/cstadata+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/csvm+json": {
- "source": "iana",
- "compressible": true
- },
- "application/cu-seeme": {
- "source": "apache",
- "extensions": ["cu"]
- },
- "application/cwt": {
- "source": "iana"
- },
- "application/cybercash": {
- "source": "iana"
- },
- "application/dart": {
- "compressible": true
- },
- "application/dash+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["mpd"]
- },
- "application/dashdelta": {
- "source": "iana"
- },
- "application/davmount+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["davmount"]
- },
- "application/dca-rft": {
- "source": "iana"
- },
- "application/dcd": {
- "source": "iana"
- },
- "application/dec-dx": {
- "source": "iana"
- },
- "application/dialog-info+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/dicom": {
- "source": "iana"
- },
- "application/dicom+json": {
- "source": "iana",
- "compressible": true
- },
- "application/dicom+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/dii": {
- "source": "iana"
- },
- "application/dit": {
- "source": "iana"
- },
- "application/dns": {
- "source": "iana"
- },
- "application/dns+json": {
- "source": "iana",
- "compressible": true
- },
- "application/dns-message": {
- "source": "iana"
- },
- "application/docbook+xml": {
- "source": "apache",
- "compressible": true,
- "extensions": ["dbk"]
- },
- "application/dots+cbor": {
- "source": "iana"
- },
- "application/dskpp+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/dssc+der": {
- "source": "iana",
- "extensions": ["dssc"]
- },
- "application/dssc+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["xdssc"]
- },
- "application/dvcs": {
- "source": "iana"
- },
- "application/ecmascript": {
- "source": "iana",
- "compressible": true,
- "extensions": ["es","ecma"]
- },
- "application/edi-consent": {
- "source": "iana"
- },
- "application/edi-x12": {
- "source": "iana",
- "compressible": false
- },
- "application/edifact": {
- "source": "iana",
- "compressible": false
- },
- "application/efi": {
- "source": "iana"
- },
- "application/elm+json": {
- "source": "iana",
- "charset": "UTF-8",
- "compressible": true
- },
- "application/elm+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/emergencycalldata.cap+xml": {
- "source": "iana",
- "charset": "UTF-8",
- "compressible": true
- },
- "application/emergencycalldata.comment+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/emergencycalldata.control+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/emergencycalldata.deviceinfo+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/emergencycalldata.ecall.msd": {
- "source": "iana"
- },
- "application/emergencycalldata.providerinfo+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/emergencycalldata.serviceinfo+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/emergencycalldata.subscriberinfo+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/emergencycalldata.veds+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/emma+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["emma"]
- },
- "application/emotionml+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["emotionml"]
- },
- "application/encaprtp": {
- "source": "iana"
- },
- "application/epp+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/epub+zip": {
- "source": "iana",
- "compressible": false,
- "extensions": ["epub"]
- },
- "application/eshop": {
- "source": "iana"
- },
- "application/exi": {
- "source": "iana",
- "extensions": ["exi"]
- },
- "application/expect-ct-report+json": {
- "source": "iana",
- "compressible": true
- },
- "application/fastinfoset": {
- "source": "iana"
- },
- "application/fastsoap": {
- "source": "iana"
- },
- "application/fdt+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["fdt"]
- },
- "application/fhir+json": {
- "source": "iana",
- "charset": "UTF-8",
- "compressible": true
- },
- "application/fhir+xml": {
- "source": "iana",
- "charset": "UTF-8",
- "compressible": true
- },
- "application/fido.trusted-apps+json": {
- "compressible": true
- },
- "application/fits": {
- "source": "iana"
- },
- "application/flexfec": {
- "source": "iana"
- },
- "application/font-sfnt": {
- "source": "iana"
- },
- "application/font-tdpfr": {
- "source": "iana",
- "extensions": ["pfr"]
- },
- "application/font-woff": {
- "source": "iana",
- "compressible": false
- },
- "application/framework-attributes+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/geo+json": {
- "source": "iana",
- "compressible": true,
- "extensions": ["geojson"]
- },
- "application/geo+json-seq": {
- "source": "iana"
- },
- "application/geopackage+sqlite3": {
- "source": "iana"
- },
- "application/geoxacml+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/gltf-buffer": {
- "source": "iana"
- },
- "application/gml+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["gml"]
- },
- "application/gpx+xml": {
- "source": "apache",
- "compressible": true,
- "extensions": ["gpx"]
- },
- "application/gxf": {
- "source": "apache",
- "extensions": ["gxf"]
- },
- "application/gzip": {
- "source": "iana",
- "compressible": false,
- "extensions": ["gz"]
- },
- "application/h224": {
- "source": "iana"
- },
- "application/held+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/hjson": {
- "extensions": ["hjson"]
- },
- "application/http": {
- "source": "iana"
- },
- "application/hyperstudio": {
- "source": "iana",
- "extensions": ["stk"]
- },
- "application/ibe-key-request+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/ibe-pkg-reply+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/ibe-pp-data": {
- "source": "iana"
- },
- "application/iges": {
- "source": "iana"
- },
- "application/im-iscomposing+xml": {
- "source": "iana",
- "charset": "UTF-8",
- "compressible": true
- },
- "application/index": {
- "source": "iana"
- },
- "application/index.cmd": {
- "source": "iana"
- },
- "application/index.obj": {
- "source": "iana"
- },
- "application/index.response": {
- "source": "iana"
- },
- "application/index.vnd": {
- "source": "iana"
- },
- "application/inkml+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["ink","inkml"]
- },
- "application/iotp": {
- "source": "iana"
- },
- "application/ipfix": {
- "source": "iana",
- "extensions": ["ipfix"]
- },
- "application/ipp": {
- "source": "iana"
- },
- "application/isup": {
- "source": "iana"
- },
- "application/its+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["its"]
- },
- "application/java-archive": {
- "source": "apache",
- "compressible": false,
- "extensions": ["jar","war","ear"]
- },
- "application/java-serialized-object": {
- "source": "apache",
- "compressible": false,
- "extensions": ["ser"]
- },
- "application/java-vm": {
- "source": "apache",
- "compressible": false,
- "extensions": ["class"]
- },
- "application/javascript": {
- "source": "iana",
- "charset": "UTF-8",
- "compressible": true,
- "extensions": ["js","mjs"]
- },
- "application/jf2feed+json": {
- "source": "iana",
- "compressible": true
- },
- "application/jose": {
- "source": "iana"
- },
- "application/jose+json": {
- "source": "iana",
- "compressible": true
- },
- "application/jrd+json": {
- "source": "iana",
- "compressible": true
- },
- "application/jscalendar+json": {
- "source": "iana",
- "compressible": true
- },
- "application/json": {
- "source": "iana",
- "charset": "UTF-8",
- "compressible": true,
- "extensions": ["json","map"]
- },
- "application/json-patch+json": {
- "source": "iana",
- "compressible": true
- },
- "application/json-seq": {
- "source": "iana"
- },
- "application/json5": {
- "extensions": ["json5"]
- },
- "application/jsonml+json": {
- "source": "apache",
- "compressible": true,
- "extensions": ["jsonml"]
- },
- "application/jwk+json": {
- "source": "iana",
- "compressible": true
- },
- "application/jwk-set+json": {
- "source": "iana",
- "compressible": true
- },
- "application/jwt": {
- "source": "iana"
- },
- "application/kpml-request+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/kpml-response+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/ld+json": {
- "source": "iana",
- "compressible": true,
- "extensions": ["jsonld"]
- },
- "application/lgr+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["lgr"]
- },
- "application/link-format": {
- "source": "iana"
- },
- "application/load-control+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/lost+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["lostxml"]
- },
- "application/lostsync+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/lpf+zip": {
- "source": "iana",
- "compressible": false
- },
- "application/lxf": {
- "source": "iana"
- },
- "application/mac-binhex40": {
- "source": "iana",
- "extensions": ["hqx"]
- },
- "application/mac-compactpro": {
- "source": "apache",
- "extensions": ["cpt"]
- },
- "application/macwriteii": {
- "source": "iana"
- },
- "application/mads+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["mads"]
- },
- "application/manifest+json": {
- "source": "iana",
- "charset": "UTF-8",
- "compressible": true,
- "extensions": ["webmanifest"]
- },
- "application/marc": {
- "source": "iana",
- "extensions": ["mrc"]
- },
- "application/marcxml+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["mrcx"]
- },
- "application/mathematica": {
- "source": "iana",
- "extensions": ["ma","nb","mb"]
- },
- "application/mathml+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["mathml"]
- },
- "application/mathml-content+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/mathml-presentation+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/mbms-associated-procedure-description+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/mbms-deregister+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/mbms-envelope+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/mbms-msk+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/mbms-msk-response+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/mbms-protection-description+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/mbms-reception-report+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/mbms-register+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/mbms-register-response+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/mbms-schedule+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/mbms-user-service-description+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/mbox": {
- "source": "iana",
- "extensions": ["mbox"]
- },
- "application/media-policy-dataset+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/media_control+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/mediaservercontrol+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["mscml"]
- },
- "application/merge-patch+json": {
- "source": "iana",
- "compressible": true
- },
- "application/metalink+xml": {
- "source": "apache",
- "compressible": true,
- "extensions": ["metalink"]
- },
- "application/metalink4+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["meta4"]
- },
- "application/mets+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["mets"]
- },
- "application/mf4": {
- "source": "iana"
- },
- "application/mikey": {
- "source": "iana"
- },
- "application/mipc": {
- "source": "iana"
- },
- "application/missing-blocks+cbor-seq": {
- "source": "iana"
- },
- "application/mmt-aei+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["maei"]
- },
- "application/mmt-usd+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["musd"]
- },
- "application/mods+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["mods"]
- },
- "application/moss-keys": {
- "source": "iana"
- },
- "application/moss-signature": {
- "source": "iana"
- },
- "application/mosskey-data": {
- "source": "iana"
- },
- "application/mosskey-request": {
- "source": "iana"
- },
- "application/mp21": {
- "source": "iana",
- "extensions": ["m21","mp21"]
- },
- "application/mp4": {
- "source": "iana",
- "extensions": ["mp4s","m4p"]
- },
- "application/mpeg4-generic": {
- "source": "iana"
- },
- "application/mpeg4-iod": {
- "source": "iana"
- },
- "application/mpeg4-iod-xmt": {
- "source": "iana"
- },
- "application/mrb-consumer+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/mrb-publish+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/msc-ivr+xml": {
- "source": "iana",
- "charset": "UTF-8",
- "compressible": true
- },
- "application/msc-mixer+xml": {
- "source": "iana",
- "charset": "UTF-8",
- "compressible": true
- },
- "application/msword": {
- "source": "iana",
- "compressible": false,
- "extensions": ["doc","dot"]
- },
- "application/mud+json": {
- "source": "iana",
- "compressible": true
- },
- "application/multipart-core": {
- "source": "iana"
- },
- "application/mxf": {
- "source": "iana",
- "extensions": ["mxf"]
- },
- "application/n-quads": {
- "source": "iana",
- "extensions": ["nq"]
- },
- "application/n-triples": {
- "source": "iana",
- "extensions": ["nt"]
- },
- "application/nasdata": {
- "source": "iana"
- },
- "application/news-checkgroups": {
- "source": "iana",
- "charset": "US-ASCII"
- },
- "application/news-groupinfo": {
- "source": "iana",
- "charset": "US-ASCII"
- },
- "application/news-transmission": {
- "source": "iana"
- },
- "application/nlsml+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/node": {
- "source": "iana",
- "extensions": ["cjs"]
- },
- "application/nss": {
- "source": "iana"
- },
- "application/oauth-authz-req+jwt": {
- "source": "iana"
- },
- "application/ocsp-request": {
- "source": "iana"
- },
- "application/ocsp-response": {
- "source": "iana"
- },
- "application/octet-stream": {
- "source": "iana",
- "compressible": false,
- "extensions": ["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"]
- },
- "application/oda": {
- "source": "iana",
- "extensions": ["oda"]
- },
- "application/odm+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/odx": {
- "source": "iana"
- },
- "application/oebps-package+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["opf"]
- },
- "application/ogg": {
- "source": "iana",
- "compressible": false,
- "extensions": ["ogx"]
- },
- "application/omdoc+xml": {
- "source": "apache",
- "compressible": true,
- "extensions": ["omdoc"]
- },
- "application/onenote": {
- "source": "apache",
- "extensions": ["onetoc","onetoc2","onetmp","onepkg"]
- },
- "application/opc-nodeset+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/oscore": {
- "source": "iana"
- },
- "application/oxps": {
- "source": "iana",
- "extensions": ["oxps"]
- },
- "application/p21+zip": {
- "source": "iana",
- "compressible": false
- },
- "application/p2p-overlay+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["relo"]
- },
- "application/parityfec": {
- "source": "iana"
- },
- "application/passport": {
- "source": "iana"
- },
- "application/patch-ops-error+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["xer"]
- },
- "application/pdf": {
- "source": "iana",
- "compressible": false,
- "extensions": ["pdf"]
- },
- "application/pdx": {
- "source": "iana"
- },
- "application/pem-certificate-chain": {
- "source": "iana"
- },
- "application/pgp-encrypted": {
- "source": "iana",
- "compressible": false,
- "extensions": ["pgp"]
- },
- "application/pgp-keys": {
- "source": "iana"
- },
- "application/pgp-signature": {
- "source": "iana",
- "extensions": ["asc","sig"]
- },
- "application/pics-rules": {
- "source": "apache",
- "extensions": ["prf"]
- },
- "application/pidf+xml": {
- "source": "iana",
- "charset": "UTF-8",
- "compressible": true
- },
- "application/pidf-diff+xml": {
- "source": "iana",
- "charset": "UTF-8",
- "compressible": true
- },
- "application/pkcs10": {
- "source": "iana",
- "extensions": ["p10"]
- },
- "application/pkcs12": {
- "source": "iana"
- },
- "application/pkcs7-mime": {
- "source": "iana",
- "extensions": ["p7m","p7c"]
- },
- "application/pkcs7-signature": {
- "source": "iana",
- "extensions": ["p7s"]
- },
- "application/pkcs8": {
- "source": "iana",
- "extensions": ["p8"]
- },
- "application/pkcs8-encrypted": {
- "source": "iana"
- },
- "application/pkix-attr-cert": {
- "source": "iana",
- "extensions": ["ac"]
- },
- "application/pkix-cert": {
- "source": "iana",
- "extensions": ["cer"]
- },
- "application/pkix-crl": {
- "source": "iana",
- "extensions": ["crl"]
- },
- "application/pkix-pkipath": {
- "source": "iana",
- "extensions": ["pkipath"]
- },
- "application/pkixcmp": {
- "source": "iana",
- "extensions": ["pki"]
- },
- "application/pls+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["pls"]
- },
- "application/poc-settings+xml": {
- "source": "iana",
- "charset": "UTF-8",
- "compressible": true
- },
- "application/postscript": {
- "source": "iana",
- "compressible": true,
- "extensions": ["ai","eps","ps"]
- },
- "application/ppsp-tracker+json": {
- "source": "iana",
- "compressible": true
- },
- "application/problem+json": {
- "source": "iana",
- "compressible": true
- },
- "application/problem+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/provenance+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["provx"]
- },
- "application/prs.alvestrand.titrax-sheet": {
- "source": "iana"
- },
- "application/prs.cww": {
- "source": "iana",
- "extensions": ["cww"]
- },
- "application/prs.cyn": {
- "source": "iana",
- "charset": "7-BIT"
- },
- "application/prs.hpub+zip": {
- "source": "iana",
- "compressible": false
- },
- "application/prs.nprend": {
- "source": "iana"
- },
- "application/prs.plucker": {
- "source": "iana"
- },
- "application/prs.rdf-xml-crypt": {
- "source": "iana"
- },
- "application/prs.xsf+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/pskc+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["pskcxml"]
- },
- "application/pvd+json": {
- "source": "iana",
- "compressible": true
- },
- "application/qsig": {
- "source": "iana"
- },
- "application/raml+yaml": {
- "compressible": true,
- "extensions": ["raml"]
- },
- "application/raptorfec": {
- "source": "iana"
- },
- "application/rdap+json": {
- "source": "iana",
- "compressible": true
- },
- "application/rdf+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["rdf","owl"]
- },
- "application/reginfo+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["rif"]
- },
- "application/relax-ng-compact-syntax": {
- "source": "iana",
- "extensions": ["rnc"]
- },
- "application/remote-printing": {
- "source": "iana"
- },
- "application/reputon+json": {
- "source": "iana",
- "compressible": true
- },
- "application/resource-lists+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["rl"]
- },
- "application/resource-lists-diff+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["rld"]
- },
- "application/rfc+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/riscos": {
- "source": "iana"
- },
- "application/rlmi+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/rls-services+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["rs"]
- },
- "application/route-apd+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["rapd"]
- },
- "application/route-s-tsid+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["sls"]
- },
- "application/route-usd+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["rusd"]
- },
- "application/rpki-ghostbusters": {
- "source": "iana",
- "extensions": ["gbr"]
- },
- "application/rpki-manifest": {
- "source": "iana",
- "extensions": ["mft"]
- },
- "application/rpki-publication": {
- "source": "iana"
- },
- "application/rpki-roa": {
- "source": "iana",
- "extensions": ["roa"]
- },
- "application/rpki-updown": {
- "source": "iana"
- },
- "application/rsd+xml": {
- "source": "apache",
- "compressible": true,
- "extensions": ["rsd"]
- },
- "application/rss+xml": {
- "source": "apache",
- "compressible": true,
- "extensions": ["rss"]
- },
- "application/rtf": {
- "source": "iana",
- "compressible": true,
- "extensions": ["rtf"]
- },
- "application/rtploopback": {
- "source": "iana"
- },
- "application/rtx": {
- "source": "iana"
- },
- "application/samlassertion+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/samlmetadata+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/sarif+json": {
- "source": "iana",
- "compressible": true
- },
- "application/sarif-external-properties+json": {
- "source": "iana",
- "compressible": true
- },
- "application/sbe": {
- "source": "iana"
- },
- "application/sbml+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["sbml"]
- },
- "application/scaip+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/scim+json": {
- "source": "iana",
- "compressible": true
- },
- "application/scvp-cv-request": {
- "source": "iana",
- "extensions": ["scq"]
- },
- "application/scvp-cv-response": {
- "source": "iana",
- "extensions": ["scs"]
- },
- "application/scvp-vp-request": {
- "source": "iana",
- "extensions": ["spq"]
- },
- "application/scvp-vp-response": {
- "source": "iana",
- "extensions": ["spp"]
- },
- "application/sdp": {
- "source": "iana",
- "extensions": ["sdp"]
- },
- "application/secevent+jwt": {
- "source": "iana"
- },
- "application/senml+cbor": {
- "source": "iana"
- },
- "application/senml+json": {
- "source": "iana",
- "compressible": true
- },
- "application/senml+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["senmlx"]
- },
- "application/senml-etch+cbor": {
- "source": "iana"
- },
- "application/senml-etch+json": {
- "source": "iana",
- "compressible": true
- },
- "application/senml-exi": {
- "source": "iana"
- },
- "application/sensml+cbor": {
- "source": "iana"
- },
- "application/sensml+json": {
- "source": "iana",
- "compressible": true
- },
- "application/sensml+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["sensmlx"]
- },
- "application/sensml-exi": {
- "source": "iana"
- },
- "application/sep+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/sep-exi": {
- "source": "iana"
- },
- "application/session-info": {
- "source": "iana"
- },
- "application/set-payment": {
- "source": "iana"
- },
- "application/set-payment-initiation": {
- "source": "iana",
- "extensions": ["setpay"]
- },
- "application/set-registration": {
- "source": "iana"
- },
- "application/set-registration-initiation": {
- "source": "iana",
- "extensions": ["setreg"]
- },
- "application/sgml": {
- "source": "iana"
- },
- "application/sgml-open-catalog": {
- "source": "iana"
- },
- "application/shf+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["shf"]
- },
- "application/sieve": {
- "source": "iana",
- "extensions": ["siv","sieve"]
- },
- "application/simple-filter+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/simple-message-summary": {
- "source": "iana"
- },
- "application/simplesymbolcontainer": {
- "source": "iana"
- },
- "application/sipc": {
- "source": "iana"
- },
- "application/slate": {
- "source": "iana"
- },
- "application/smil": {
- "source": "iana"
- },
- "application/smil+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["smi","smil"]
- },
- "application/smpte336m": {
- "source": "iana"
- },
- "application/soap+fastinfoset": {
- "source": "iana"
- },
- "application/soap+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/sparql-query": {
- "source": "iana",
- "extensions": ["rq"]
- },
- "application/sparql-results+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["srx"]
- },
- "application/spirits-event+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/sql": {
- "source": "iana"
- },
- "application/srgs": {
- "source": "iana",
- "extensions": ["gram"]
- },
- "application/srgs+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["grxml"]
- },
- "application/sru+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["sru"]
- },
- "application/ssdl+xml": {
- "source": "apache",
- "compressible": true,
- "extensions": ["ssdl"]
- },
- "application/ssml+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["ssml"]
- },
- "application/stix+json": {
- "source": "iana",
- "compressible": true
- },
- "application/swid+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["swidtag"]
- },
- "application/tamp-apex-update": {
- "source": "iana"
- },
- "application/tamp-apex-update-confirm": {
- "source": "iana"
- },
- "application/tamp-community-update": {
- "source": "iana"
- },
- "application/tamp-community-update-confirm": {
- "source": "iana"
- },
- "application/tamp-error": {
- "source": "iana"
- },
- "application/tamp-sequence-adjust": {
- "source": "iana"
- },
- "application/tamp-sequence-adjust-confirm": {
- "source": "iana"
- },
- "application/tamp-status-query": {
- "source": "iana"
- },
- "application/tamp-status-response": {
- "source": "iana"
- },
- "application/tamp-update": {
- "source": "iana"
- },
- "application/tamp-update-confirm": {
- "source": "iana"
- },
- "application/tar": {
- "compressible": true
- },
- "application/taxii+json": {
- "source": "iana",
- "compressible": true
- },
- "application/td+json": {
- "source": "iana",
- "compressible": true
- },
- "application/tei+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["tei","teicorpus"]
- },
- "application/tetra_isi": {
- "source": "iana"
- },
- "application/thraud+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["tfi"]
- },
- "application/timestamp-query": {
- "source": "iana"
- },
- "application/timestamp-reply": {
- "source": "iana"
- },
- "application/timestamped-data": {
- "source": "iana",
- "extensions": ["tsd"]
- },
- "application/tlsrpt+gzip": {
- "source": "iana"
- },
- "application/tlsrpt+json": {
- "source": "iana",
- "compressible": true
- },
- "application/tnauthlist": {
- "source": "iana"
- },
- "application/toml": {
- "compressible": true,
- "extensions": ["toml"]
- },
- "application/trickle-ice-sdpfrag": {
- "source": "iana"
- },
- "application/trig": {
- "source": "iana",
- "extensions": ["trig"]
- },
- "application/ttml+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["ttml"]
- },
- "application/tve-trigger": {
- "source": "iana"
- },
- "application/tzif": {
- "source": "iana"
- },
- "application/tzif-leap": {
- "source": "iana"
- },
- "application/ubjson": {
- "compressible": false,
- "extensions": ["ubj"]
- },
- "application/ulpfec": {
- "source": "iana"
- },
- "application/urc-grpsheet+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/urc-ressheet+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["rsheet"]
- },
- "application/urc-targetdesc+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["td"]
- },
- "application/urc-uisocketdesc+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vcard+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vcard+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vemmi": {
- "source": "iana"
- },
- "application/vividence.scriptfile": {
- "source": "apache"
- },
- "application/vnd.1000minds.decision-model+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["1km"]
- },
- "application/vnd.3gpp-prose+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.3gpp-prose-pc3ch+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.3gpp-v2x-local-service-information": {
- "source": "iana"
- },
- "application/vnd.3gpp.5gnas": {
- "source": "iana"
- },
- "application/vnd.3gpp.access-transfer-events+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.3gpp.bsf+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.3gpp.gmop+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.3gpp.gtpc": {
- "source": "iana"
- },
- "application/vnd.3gpp.interworking-data": {
- "source": "iana"
- },
- "application/vnd.3gpp.lpp": {
- "source": "iana"
- },
- "application/vnd.3gpp.mc-signalling-ear": {
- "source": "iana"
- },
- "application/vnd.3gpp.mcdata-affiliation-command+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.3gpp.mcdata-info+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.3gpp.mcdata-payload": {
- "source": "iana"
- },
- "application/vnd.3gpp.mcdata-service-config+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.3gpp.mcdata-signalling": {
- "source": "iana"
- },
- "application/vnd.3gpp.mcdata-ue-config+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.3gpp.mcdata-user-profile+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.3gpp.mcptt-affiliation-command+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.3gpp.mcptt-floor-request+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.3gpp.mcptt-info+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.3gpp.mcptt-location-info+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.3gpp.mcptt-mbms-usage-info+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.3gpp.mcptt-service-config+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.3gpp.mcptt-signed+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.3gpp.mcptt-ue-config+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.3gpp.mcptt-ue-init-config+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.3gpp.mcptt-user-profile+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.3gpp.mcvideo-affiliation-command+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.3gpp.mcvideo-affiliation-info+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.3gpp.mcvideo-info+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.3gpp.mcvideo-location-info+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.3gpp.mcvideo-mbms-usage-info+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.3gpp.mcvideo-service-config+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.3gpp.mcvideo-transmission-request+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.3gpp.mcvideo-ue-config+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.3gpp.mcvideo-user-profile+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.3gpp.mid-call+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.3gpp.ngap": {
- "source": "iana"
- },
- "application/vnd.3gpp.pfcp": {
- "source": "iana"
- },
- "application/vnd.3gpp.pic-bw-large": {
- "source": "iana",
- "extensions": ["plb"]
- },
- "application/vnd.3gpp.pic-bw-small": {
- "source": "iana",
- "extensions": ["psb"]
- },
- "application/vnd.3gpp.pic-bw-var": {
- "source": "iana",
- "extensions": ["pvb"]
- },
- "application/vnd.3gpp.s1ap": {
- "source": "iana"
- },
- "application/vnd.3gpp.sms": {
- "source": "iana"
- },
- "application/vnd.3gpp.sms+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.3gpp.srvcc-ext+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.3gpp.srvcc-info+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.3gpp.state-and-event-info+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.3gpp.ussd+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.3gpp2.bcmcsinfo+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.3gpp2.sms": {
- "source": "iana"
- },
- "application/vnd.3gpp2.tcap": {
- "source": "iana",
- "extensions": ["tcap"]
- },
- "application/vnd.3lightssoftware.imagescal": {
- "source": "iana"
- },
- "application/vnd.3m.post-it-notes": {
- "source": "iana",
- "extensions": ["pwn"]
- },
- "application/vnd.accpac.simply.aso": {
- "source": "iana",
- "extensions": ["aso"]
- },
- "application/vnd.accpac.simply.imp": {
- "source": "iana",
- "extensions": ["imp"]
- },
- "application/vnd.acucobol": {
- "source": "iana",
- "extensions": ["acu"]
- },
- "application/vnd.acucorp": {
- "source": "iana",
- "extensions": ["atc","acutc"]
- },
- "application/vnd.adobe.air-application-installer-package+zip": {
- "source": "apache",
- "compressible": false,
- "extensions": ["air"]
- },
- "application/vnd.adobe.flash.movie": {
- "source": "iana"
- },
- "application/vnd.adobe.formscentral.fcdt": {
- "source": "iana",
- "extensions": ["fcdt"]
- },
- "application/vnd.adobe.fxp": {
- "source": "iana",
- "extensions": ["fxp","fxpl"]
- },
- "application/vnd.adobe.partial-upload": {
- "source": "iana"
- },
- "application/vnd.adobe.xdp+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["xdp"]
- },
- "application/vnd.adobe.xfdf": {
- "source": "iana",
- "extensions": ["xfdf"]
- },
- "application/vnd.aether.imp": {
- "source": "iana"
- },
- "application/vnd.afpc.afplinedata": {
- "source": "iana"
- },
- "application/vnd.afpc.afplinedata-pagedef": {
- "source": "iana"
- },
- "application/vnd.afpc.cmoca-cmresource": {
- "source": "iana"
- },
- "application/vnd.afpc.foca-charset": {
- "source": "iana"
- },
- "application/vnd.afpc.foca-codedfont": {
- "source": "iana"
- },
- "application/vnd.afpc.foca-codepage": {
- "source": "iana"
- },
- "application/vnd.afpc.modca": {
- "source": "iana"
- },
- "application/vnd.afpc.modca-cmtable": {
- "source": "iana"
- },
- "application/vnd.afpc.modca-formdef": {
- "source": "iana"
- },
- "application/vnd.afpc.modca-mediummap": {
- "source": "iana"
- },
- "application/vnd.afpc.modca-objectcontainer": {
- "source": "iana"
- },
- "application/vnd.afpc.modca-overlay": {
- "source": "iana"
- },
- "application/vnd.afpc.modca-pagesegment": {
- "source": "iana"
- },
- "application/vnd.ah-barcode": {
- "source": "iana"
- },
- "application/vnd.ahead.space": {
- "source": "iana",
- "extensions": ["ahead"]
- },
- "application/vnd.airzip.filesecure.azf": {
- "source": "iana",
- "extensions": ["azf"]
- },
- "application/vnd.airzip.filesecure.azs": {
- "source": "iana",
- "extensions": ["azs"]
- },
- "application/vnd.amadeus+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.amazon.ebook": {
- "source": "apache",
- "extensions": ["azw"]
- },
- "application/vnd.amazon.mobi8-ebook": {
- "source": "iana"
- },
- "application/vnd.americandynamics.acc": {
- "source": "iana",
- "extensions": ["acc"]
- },
- "application/vnd.amiga.ami": {
- "source": "iana",
- "extensions": ["ami"]
- },
- "application/vnd.amundsen.maze+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.android.ota": {
- "source": "iana"
- },
- "application/vnd.android.package-archive": {
- "source": "apache",
- "compressible": false,
- "extensions": ["apk"]
- },
- "application/vnd.anki": {
- "source": "iana"
- },
- "application/vnd.anser-web-certificate-issue-initiation": {
- "source": "iana",
- "extensions": ["cii"]
- },
- "application/vnd.anser-web-funds-transfer-initiation": {
- "source": "apache",
- "extensions": ["fti"]
- },
- "application/vnd.antix.game-component": {
- "source": "iana",
- "extensions": ["atx"]
- },
- "application/vnd.apache.arrow.file": {
- "source": "iana"
- },
- "application/vnd.apache.arrow.stream": {
- "source": "iana"
- },
- "application/vnd.apache.thrift.binary": {
- "source": "iana"
- },
- "application/vnd.apache.thrift.compact": {
- "source": "iana"
- },
- "application/vnd.apache.thrift.json": {
- "source": "iana"
- },
- "application/vnd.api+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.aplextor.warrp+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.apothekende.reservation+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.apple.installer+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["mpkg"]
- },
- "application/vnd.apple.keynote": {
- "source": "iana",
- "extensions": ["key"]
- },
- "application/vnd.apple.mpegurl": {
- "source": "iana",
- "extensions": ["m3u8"]
- },
- "application/vnd.apple.numbers": {
- "source": "iana",
- "extensions": ["numbers"]
- },
- "application/vnd.apple.pages": {
- "source": "iana",
- "extensions": ["pages"]
- },
- "application/vnd.apple.pkpass": {
- "compressible": false,
- "extensions": ["pkpass"]
- },
- "application/vnd.arastra.swi": {
- "source": "iana"
- },
- "application/vnd.aristanetworks.swi": {
- "source": "iana",
- "extensions": ["swi"]
- },
- "application/vnd.artisan+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.artsquare": {
- "source": "iana"
- },
- "application/vnd.astraea-software.iota": {
- "source": "iana",
- "extensions": ["iota"]
- },
- "application/vnd.audiograph": {
- "source": "iana",
- "extensions": ["aep"]
- },
- "application/vnd.autopackage": {
- "source": "iana"
- },
- "application/vnd.avalon+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.avistar+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.balsamiq.bmml+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["bmml"]
- },
- "application/vnd.balsamiq.bmpr": {
- "source": "iana"
- },
- "application/vnd.banana-accounting": {
- "source": "iana"
- },
- "application/vnd.bbf.usp.error": {
- "source": "iana"
- },
- "application/vnd.bbf.usp.msg": {
- "source": "iana"
- },
- "application/vnd.bbf.usp.msg+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.bekitzur-stech+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.bint.med-content": {
- "source": "iana"
- },
- "application/vnd.biopax.rdf+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.blink-idb-value-wrapper": {
- "source": "iana"
- },
- "application/vnd.blueice.multipass": {
- "source": "iana",
- "extensions": ["mpm"]
- },
- "application/vnd.bluetooth.ep.oob": {
- "source": "iana"
- },
- "application/vnd.bluetooth.le.oob": {
- "source": "iana"
- },
- "application/vnd.bmi": {
- "source": "iana",
- "extensions": ["bmi"]
- },
- "application/vnd.bpf": {
- "source": "iana"
- },
- "application/vnd.bpf3": {
- "source": "iana"
- },
- "application/vnd.businessobjects": {
- "source": "iana",
- "extensions": ["rep"]
- },
- "application/vnd.byu.uapi+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.cab-jscript": {
- "source": "iana"
- },
- "application/vnd.canon-cpdl": {
- "source": "iana"
- },
- "application/vnd.canon-lips": {
- "source": "iana"
- },
- "application/vnd.capasystems-pg+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.cendio.thinlinc.clientconf": {
- "source": "iana"
- },
- "application/vnd.century-systems.tcp_stream": {
- "source": "iana"
- },
- "application/vnd.chemdraw+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["cdxml"]
- },
- "application/vnd.chess-pgn": {
- "source": "iana"
- },
- "application/vnd.chipnuts.karaoke-mmd": {
- "source": "iana",
- "extensions": ["mmd"]
- },
- "application/vnd.ciedi": {
- "source": "iana"
- },
- "application/vnd.cinderella": {
- "source": "iana",
- "extensions": ["cdy"]
- },
- "application/vnd.cirpack.isdn-ext": {
- "source": "iana"
- },
- "application/vnd.citationstyles.style+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["csl"]
- },
- "application/vnd.claymore": {
- "source": "iana",
- "extensions": ["cla"]
- },
- "application/vnd.cloanto.rp9": {
- "source": "iana",
- "extensions": ["rp9"]
- },
- "application/vnd.clonk.c4group": {
- "source": "iana",
- "extensions": ["c4g","c4d","c4f","c4p","c4u"]
- },
- "application/vnd.cluetrust.cartomobile-config": {
- "source": "iana",
- "extensions": ["c11amc"]
- },
- "application/vnd.cluetrust.cartomobile-config-pkg": {
- "source": "iana",
- "extensions": ["c11amz"]
- },
- "application/vnd.coffeescript": {
- "source": "iana"
- },
- "application/vnd.collabio.xodocuments.document": {
- "source": "iana"
- },
- "application/vnd.collabio.xodocuments.document-template": {
- "source": "iana"
- },
- "application/vnd.collabio.xodocuments.presentation": {
- "source": "iana"
- },
- "application/vnd.collabio.xodocuments.presentation-template": {
- "source": "iana"
- },
- "application/vnd.collabio.xodocuments.spreadsheet": {
- "source": "iana"
- },
- "application/vnd.collabio.xodocuments.spreadsheet-template": {
- "source": "iana"
- },
- "application/vnd.collection+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.collection.doc+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.collection.next+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.comicbook+zip": {
- "source": "iana",
- "compressible": false
- },
- "application/vnd.comicbook-rar": {
- "source": "iana"
- },
- "application/vnd.commerce-battelle": {
- "source": "iana"
- },
- "application/vnd.commonspace": {
- "source": "iana",
- "extensions": ["csp"]
- },
- "application/vnd.contact.cmsg": {
- "source": "iana",
- "extensions": ["cdbcmsg"]
- },
- "application/vnd.coreos.ignition+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.cosmocaller": {
- "source": "iana",
- "extensions": ["cmc"]
- },
- "application/vnd.crick.clicker": {
- "source": "iana",
- "extensions": ["clkx"]
- },
- "application/vnd.crick.clicker.keyboard": {
- "source": "iana",
- "extensions": ["clkk"]
- },
- "application/vnd.crick.clicker.palette": {
- "source": "iana",
- "extensions": ["clkp"]
- },
- "application/vnd.crick.clicker.template": {
- "source": "iana",
- "extensions": ["clkt"]
- },
- "application/vnd.crick.clicker.wordbank": {
- "source": "iana",
- "extensions": ["clkw"]
- },
- "application/vnd.criticaltools.wbs+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["wbs"]
- },
- "application/vnd.cryptii.pipe+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.crypto-shade-file": {
- "source": "iana"
- },
- "application/vnd.cryptomator.encrypted": {
- "source": "iana"
- },
- "application/vnd.cryptomator.vault": {
- "source": "iana"
- },
- "application/vnd.ctc-posml": {
- "source": "iana",
- "extensions": ["pml"]
- },
- "application/vnd.ctct.ws+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.cups-pdf": {
- "source": "iana"
- },
- "application/vnd.cups-postscript": {
- "source": "iana"
- },
- "application/vnd.cups-ppd": {
- "source": "iana",
- "extensions": ["ppd"]
- },
- "application/vnd.cups-raster": {
- "source": "iana"
- },
- "application/vnd.cups-raw": {
- "source": "iana"
- },
- "application/vnd.curl": {
- "source": "iana"
- },
- "application/vnd.curl.car": {
- "source": "apache",
- "extensions": ["car"]
- },
- "application/vnd.curl.pcurl": {
- "source": "apache",
- "extensions": ["pcurl"]
- },
- "application/vnd.cyan.dean.root+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.cybank": {
- "source": "iana"
- },
- "application/vnd.cyclonedx+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.cyclonedx+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.d2l.coursepackage1p0+zip": {
- "source": "iana",
- "compressible": false
- },
- "application/vnd.d3m-dataset": {
- "source": "iana"
- },
- "application/vnd.d3m-problem": {
- "source": "iana"
- },
- "application/vnd.dart": {
- "source": "iana",
- "compressible": true,
- "extensions": ["dart"]
- },
- "application/vnd.data-vision.rdz": {
- "source": "iana",
- "extensions": ["rdz"]
- },
- "application/vnd.datapackage+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.dataresource+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.dbf": {
- "source": "iana",
- "extensions": ["dbf"]
- },
- "application/vnd.debian.binary-package": {
- "source": "iana"
- },
- "application/vnd.dece.data": {
- "source": "iana",
- "extensions": ["uvf","uvvf","uvd","uvvd"]
- },
- "application/vnd.dece.ttml+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["uvt","uvvt"]
- },
- "application/vnd.dece.unspecified": {
- "source": "iana",
- "extensions": ["uvx","uvvx"]
- },
- "application/vnd.dece.zip": {
- "source": "iana",
- "extensions": ["uvz","uvvz"]
- },
- "application/vnd.denovo.fcselayout-link": {
- "source": "iana",
- "extensions": ["fe_launch"]
- },
- "application/vnd.desmume.movie": {
- "source": "iana"
- },
- "application/vnd.dir-bi.plate-dl-nosuffix": {
- "source": "iana"
- },
- "application/vnd.dm.delegation+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.dna": {
- "source": "iana",
- "extensions": ["dna"]
- },
- "application/vnd.document+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.dolby.mlp": {
- "source": "apache",
- "extensions": ["mlp"]
- },
- "application/vnd.dolby.mobile.1": {
- "source": "iana"
- },
- "application/vnd.dolby.mobile.2": {
- "source": "iana"
- },
- "application/vnd.doremir.scorecloud-binary-document": {
- "source": "iana"
- },
- "application/vnd.dpgraph": {
- "source": "iana",
- "extensions": ["dpg"]
- },
- "application/vnd.dreamfactory": {
- "source": "iana",
- "extensions": ["dfac"]
- },
- "application/vnd.drive+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.ds-keypoint": {
- "source": "apache",
- "extensions": ["kpxx"]
- },
- "application/vnd.dtg.local": {
- "source": "iana"
- },
- "application/vnd.dtg.local.flash": {
- "source": "iana"
- },
- "application/vnd.dtg.local.html": {
- "source": "iana"
- },
- "application/vnd.dvb.ait": {
- "source": "iana",
- "extensions": ["ait"]
- },
- "application/vnd.dvb.dvbisl+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.dvb.dvbj": {
- "source": "iana"
- },
- "application/vnd.dvb.esgcontainer": {
- "source": "iana"
- },
- "application/vnd.dvb.ipdcdftnotifaccess": {
- "source": "iana"
- },
- "application/vnd.dvb.ipdcesgaccess": {
- "source": "iana"
- },
- "application/vnd.dvb.ipdcesgaccess2": {
- "source": "iana"
- },
- "application/vnd.dvb.ipdcesgpdd": {
- "source": "iana"
- },
- "application/vnd.dvb.ipdcroaming": {
- "source": "iana"
- },
- "application/vnd.dvb.iptv.alfec-base": {
- "source": "iana"
- },
- "application/vnd.dvb.iptv.alfec-enhancement": {
- "source": "iana"
- },
- "application/vnd.dvb.notif-aggregate-root+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.dvb.notif-container+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.dvb.notif-generic+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.dvb.notif-ia-msglist+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.dvb.notif-ia-registration-request+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.dvb.notif-ia-registration-response+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.dvb.notif-init+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.dvb.pfr": {
- "source": "iana"
- },
- "application/vnd.dvb.service": {
- "source": "iana",
- "extensions": ["svc"]
- },
- "application/vnd.dxr": {
- "source": "iana"
- },
- "application/vnd.dynageo": {
- "source": "iana",
- "extensions": ["geo"]
- },
- "application/vnd.dzr": {
- "source": "iana"
- },
- "application/vnd.easykaraoke.cdgdownload": {
- "source": "iana"
- },
- "application/vnd.ecdis-update": {
- "source": "iana"
- },
- "application/vnd.ecip.rlp": {
- "source": "iana"
- },
- "application/vnd.ecowin.chart": {
- "source": "iana",
- "extensions": ["mag"]
- },
- "application/vnd.ecowin.filerequest": {
- "source": "iana"
- },
- "application/vnd.ecowin.fileupdate": {
- "source": "iana"
- },
- "application/vnd.ecowin.series": {
- "source": "iana"
- },
- "application/vnd.ecowin.seriesrequest": {
- "source": "iana"
- },
- "application/vnd.ecowin.seriesupdate": {
- "source": "iana"
- },
- "application/vnd.efi.img": {
- "source": "iana"
- },
- "application/vnd.efi.iso": {
- "source": "iana"
- },
- "application/vnd.emclient.accessrequest+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.enliven": {
- "source": "iana",
- "extensions": ["nml"]
- },
- "application/vnd.enphase.envoy": {
- "source": "iana"
- },
- "application/vnd.eprints.data+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.epson.esf": {
- "source": "iana",
- "extensions": ["esf"]
- },
- "application/vnd.epson.msf": {
- "source": "iana",
- "extensions": ["msf"]
- },
- "application/vnd.epson.quickanime": {
- "source": "iana",
- "extensions": ["qam"]
- },
- "application/vnd.epson.salt": {
- "source": "iana",
- "extensions": ["slt"]
- },
- "application/vnd.epson.ssf": {
- "source": "iana",
- "extensions": ["ssf"]
- },
- "application/vnd.ericsson.quickcall": {
- "source": "iana"
- },
- "application/vnd.espass-espass+zip": {
- "source": "iana",
- "compressible": false
- },
- "application/vnd.eszigno3+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["es3","et3"]
- },
- "application/vnd.etsi.aoc+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.etsi.asic-e+zip": {
- "source": "iana",
- "compressible": false
- },
- "application/vnd.etsi.asic-s+zip": {
- "source": "iana",
- "compressible": false
- },
- "application/vnd.etsi.cug+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.etsi.iptvcommand+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.etsi.iptvdiscovery+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.etsi.iptvprofile+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.etsi.iptvsad-bc+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.etsi.iptvsad-cod+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.etsi.iptvsad-npvr+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.etsi.iptvservice+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.etsi.iptvsync+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.etsi.iptvueprofile+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.etsi.mcid+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.etsi.mheg5": {
- "source": "iana"
- },
- "application/vnd.etsi.overload-control-policy-dataset+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.etsi.pstn+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.etsi.sci+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.etsi.simservs+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.etsi.timestamp-token": {
- "source": "iana"
- },
- "application/vnd.etsi.tsl+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.etsi.tsl.der": {
- "source": "iana"
- },
- "application/vnd.eudora.data": {
- "source": "iana"
- },
- "application/vnd.evolv.ecig.profile": {
- "source": "iana"
- },
- "application/vnd.evolv.ecig.settings": {
- "source": "iana"
- },
- "application/vnd.evolv.ecig.theme": {
- "source": "iana"
- },
- "application/vnd.exstream-empower+zip": {
- "source": "iana",
- "compressible": false
- },
- "application/vnd.exstream-package": {
- "source": "iana"
- },
- "application/vnd.ezpix-album": {
- "source": "iana",
- "extensions": ["ez2"]
- },
- "application/vnd.ezpix-package": {
- "source": "iana",
- "extensions": ["ez3"]
- },
- "application/vnd.f-secure.mobile": {
- "source": "iana"
- },
- "application/vnd.fastcopy-disk-image": {
- "source": "iana"
- },
- "application/vnd.fdf": {
- "source": "iana",
- "extensions": ["fdf"]
- },
- "application/vnd.fdsn.mseed": {
- "source": "iana",
- "extensions": ["mseed"]
- },
- "application/vnd.fdsn.seed": {
- "source": "iana",
- "extensions": ["seed","dataless"]
- },
- "application/vnd.ffsns": {
- "source": "iana"
- },
- "application/vnd.ficlab.flb+zip": {
- "source": "iana",
- "compressible": false
- },
- "application/vnd.filmit.zfc": {
- "source": "iana"
- },
- "application/vnd.fints": {
- "source": "iana"
- },
- "application/vnd.firemonkeys.cloudcell": {
- "source": "iana"
- },
- "application/vnd.flographit": {
- "source": "iana",
- "extensions": ["gph"]
- },
- "application/vnd.fluxtime.clip": {
- "source": "iana",
- "extensions": ["ftc"]
- },
- "application/vnd.font-fontforge-sfd": {
- "source": "iana"
- },
- "application/vnd.framemaker": {
- "source": "iana",
- "extensions": ["fm","frame","maker","book"]
- },
- "application/vnd.frogans.fnc": {
- "source": "iana",
- "extensions": ["fnc"]
- },
- "application/vnd.frogans.ltf": {
- "source": "iana",
- "extensions": ["ltf"]
- },
- "application/vnd.fsc.weblaunch": {
- "source": "iana",
- "extensions": ["fsc"]
- },
- "application/vnd.fujifilm.fb.docuworks": {
- "source": "iana"
- },
- "application/vnd.fujifilm.fb.docuworks.binder": {
- "source": "iana"
- },
- "application/vnd.fujifilm.fb.docuworks.container": {
- "source": "iana"
- },
- "application/vnd.fujifilm.fb.jfi+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.fujitsu.oasys": {
- "source": "iana",
- "extensions": ["oas"]
- },
- "application/vnd.fujitsu.oasys2": {
- "source": "iana",
- "extensions": ["oa2"]
- },
- "application/vnd.fujitsu.oasys3": {
- "source": "iana",
- "extensions": ["oa3"]
- },
- "application/vnd.fujitsu.oasysgp": {
- "source": "iana",
- "extensions": ["fg5"]
- },
- "application/vnd.fujitsu.oasysprs": {
- "source": "iana",
- "extensions": ["bh2"]
- },
- "application/vnd.fujixerox.art-ex": {
- "source": "iana"
- },
- "application/vnd.fujixerox.art4": {
- "source": "iana"
- },
- "application/vnd.fujixerox.ddd": {
- "source": "iana",
- "extensions": ["ddd"]
- },
- "application/vnd.fujixerox.docuworks": {
- "source": "iana",
- "extensions": ["xdw"]
- },
- "application/vnd.fujixerox.docuworks.binder": {
- "source": "iana",
- "extensions": ["xbd"]
- },
- "application/vnd.fujixerox.docuworks.container": {
- "source": "iana"
- },
- "application/vnd.fujixerox.hbpl": {
- "source": "iana"
- },
- "application/vnd.fut-misnet": {
- "source": "iana"
- },
- "application/vnd.futoin+cbor": {
- "source": "iana"
- },
- "application/vnd.futoin+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.fuzzysheet": {
- "source": "iana",
- "extensions": ["fzs"]
- },
- "application/vnd.genomatix.tuxedo": {
- "source": "iana",
- "extensions": ["txd"]
- },
- "application/vnd.gentics.grd+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.geo+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.geocube+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.geogebra.file": {
- "source": "iana",
- "extensions": ["ggb"]
- },
- "application/vnd.geogebra.slides": {
- "source": "iana"
- },
- "application/vnd.geogebra.tool": {
- "source": "iana",
- "extensions": ["ggt"]
- },
- "application/vnd.geometry-explorer": {
- "source": "iana",
- "extensions": ["gex","gre"]
- },
- "application/vnd.geonext": {
- "source": "iana",
- "extensions": ["gxt"]
- },
- "application/vnd.geoplan": {
- "source": "iana",
- "extensions": ["g2w"]
- },
- "application/vnd.geospace": {
- "source": "iana",
- "extensions": ["g3w"]
- },
- "application/vnd.gerber": {
- "source": "iana"
- },
- "application/vnd.globalplatform.card-content-mgt": {
- "source": "iana"
- },
- "application/vnd.globalplatform.card-content-mgt-response": {
- "source": "iana"
- },
- "application/vnd.gmx": {
- "source": "iana",
- "extensions": ["gmx"]
- },
- "application/vnd.google-apps.document": {
- "compressible": false,
- "extensions": ["gdoc"]
- },
- "application/vnd.google-apps.presentation": {
- "compressible": false,
- "extensions": ["gslides"]
- },
- "application/vnd.google-apps.spreadsheet": {
- "compressible": false,
- "extensions": ["gsheet"]
- },
- "application/vnd.google-earth.kml+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["kml"]
- },
- "application/vnd.google-earth.kmz": {
- "source": "iana",
- "compressible": false,
- "extensions": ["kmz"]
- },
- "application/vnd.gov.sk.e-form+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.gov.sk.e-form+zip": {
- "source": "iana",
- "compressible": false
- },
- "application/vnd.gov.sk.xmldatacontainer+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.grafeq": {
- "source": "iana",
- "extensions": ["gqf","gqs"]
- },
- "application/vnd.gridmp": {
- "source": "iana"
- },
- "application/vnd.groove-account": {
- "source": "iana",
- "extensions": ["gac"]
- },
- "application/vnd.groove-help": {
- "source": "iana",
- "extensions": ["ghf"]
- },
- "application/vnd.groove-identity-message": {
- "source": "iana",
- "extensions": ["gim"]
- },
- "application/vnd.groove-injector": {
- "source": "iana",
- "extensions": ["grv"]
- },
- "application/vnd.groove-tool-message": {
- "source": "iana",
- "extensions": ["gtm"]
- },
- "application/vnd.groove-tool-template": {
- "source": "iana",
- "extensions": ["tpl"]
- },
- "application/vnd.groove-vcard": {
- "source": "iana",
- "extensions": ["vcg"]
- },
- "application/vnd.hal+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.hal+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["hal"]
- },
- "application/vnd.handheld-entertainment+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["zmm"]
- },
- "application/vnd.hbci": {
- "source": "iana",
- "extensions": ["hbci"]
- },
- "application/vnd.hc+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.hcl-bireports": {
- "source": "iana"
- },
- "application/vnd.hdt": {
- "source": "iana"
- },
- "application/vnd.heroku+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.hhe.lesson-player": {
- "source": "iana",
- "extensions": ["les"]
- },
- "application/vnd.hp-hpgl": {
- "source": "iana",
- "extensions": ["hpgl"]
- },
- "application/vnd.hp-hpid": {
- "source": "iana",
- "extensions": ["hpid"]
- },
- "application/vnd.hp-hps": {
- "source": "iana",
- "extensions": ["hps"]
- },
- "application/vnd.hp-jlyt": {
- "source": "iana",
- "extensions": ["jlt"]
- },
- "application/vnd.hp-pcl": {
- "source": "iana",
- "extensions": ["pcl"]
- },
- "application/vnd.hp-pclxl": {
- "source": "iana",
- "extensions": ["pclxl"]
- },
- "application/vnd.httphone": {
- "source": "iana"
- },
- "application/vnd.hydrostatix.sof-data": {
- "source": "iana",
- "extensions": ["sfd-hdstx"]
- },
- "application/vnd.hyper+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.hyper-item+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.hyperdrive+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.hzn-3d-crossword": {
- "source": "iana"
- },
- "application/vnd.ibm.afplinedata": {
- "source": "iana"
- },
- "application/vnd.ibm.electronic-media": {
- "source": "iana"
- },
- "application/vnd.ibm.minipay": {
- "source": "iana",
- "extensions": ["mpy"]
- },
- "application/vnd.ibm.modcap": {
- "source": "iana",
- "extensions": ["afp","listafp","list3820"]
- },
- "application/vnd.ibm.rights-management": {
- "source": "iana",
- "extensions": ["irm"]
- },
- "application/vnd.ibm.secure-container": {
- "source": "iana",
- "extensions": ["sc"]
- },
- "application/vnd.iccprofile": {
- "source": "iana",
- "extensions": ["icc","icm"]
- },
- "application/vnd.ieee.1905": {
- "source": "iana"
- },
- "application/vnd.igloader": {
- "source": "iana",
- "extensions": ["igl"]
- },
- "application/vnd.imagemeter.folder+zip": {
- "source": "iana",
- "compressible": false
- },
- "application/vnd.imagemeter.image+zip": {
- "source": "iana",
- "compressible": false
- },
- "application/vnd.immervision-ivp": {
- "source": "iana",
- "extensions": ["ivp"]
- },
- "application/vnd.immervision-ivu": {
- "source": "iana",
- "extensions": ["ivu"]
- },
- "application/vnd.ims.imsccv1p1": {
- "source": "iana"
- },
- "application/vnd.ims.imsccv1p2": {
- "source": "iana"
- },
- "application/vnd.ims.imsccv1p3": {
- "source": "iana"
- },
- "application/vnd.ims.lis.v2.result+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.ims.lti.v2.toolconsumerprofile+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.ims.lti.v2.toolproxy+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.ims.lti.v2.toolproxy.id+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.ims.lti.v2.toolsettings+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.ims.lti.v2.toolsettings.simple+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.informedcontrol.rms+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.informix-visionary": {
- "source": "iana"
- },
- "application/vnd.infotech.project": {
- "source": "iana"
- },
- "application/vnd.infotech.project+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.innopath.wamp.notification": {
- "source": "iana"
- },
- "application/vnd.insors.igm": {
- "source": "iana",
- "extensions": ["igm"]
- },
- "application/vnd.intercon.formnet": {
- "source": "iana",
- "extensions": ["xpw","xpx"]
- },
- "application/vnd.intergeo": {
- "source": "iana",
- "extensions": ["i2g"]
- },
- "application/vnd.intertrust.digibox": {
- "source": "iana"
- },
- "application/vnd.intertrust.nncp": {
- "source": "iana"
- },
- "application/vnd.intu.qbo": {
- "source": "iana",
- "extensions": ["qbo"]
- },
- "application/vnd.intu.qfx": {
- "source": "iana",
- "extensions": ["qfx"]
- },
- "application/vnd.iptc.g2.catalogitem+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.iptc.g2.conceptitem+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.iptc.g2.knowledgeitem+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.iptc.g2.newsitem+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.iptc.g2.newsmessage+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.iptc.g2.packageitem+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.iptc.g2.planningitem+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.ipunplugged.rcprofile": {
- "source": "iana",
- "extensions": ["rcprofile"]
- },
- "application/vnd.irepository.package+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["irp"]
- },
- "application/vnd.is-xpr": {
- "source": "iana",
- "extensions": ["xpr"]
- },
- "application/vnd.isac.fcs": {
- "source": "iana",
- "extensions": ["fcs"]
- },
- "application/vnd.iso11783-10+zip": {
- "source": "iana",
- "compressible": false
- },
- "application/vnd.jam": {
- "source": "iana",
- "extensions": ["jam"]
- },
- "application/vnd.japannet-directory-service": {
- "source": "iana"
- },
- "application/vnd.japannet-jpnstore-wakeup": {
- "source": "iana"
- },
- "application/vnd.japannet-payment-wakeup": {
- "source": "iana"
- },
- "application/vnd.japannet-registration": {
- "source": "iana"
- },
- "application/vnd.japannet-registration-wakeup": {
- "source": "iana"
- },
- "application/vnd.japannet-setstore-wakeup": {
- "source": "iana"
- },
- "application/vnd.japannet-verification": {
- "source": "iana"
- },
- "application/vnd.japannet-verification-wakeup": {
- "source": "iana"
- },
- "application/vnd.jcp.javame.midlet-rms": {
- "source": "iana",
- "extensions": ["rms"]
- },
- "application/vnd.jisp": {
- "source": "iana",
- "extensions": ["jisp"]
- },
- "application/vnd.joost.joda-archive": {
- "source": "iana",
- "extensions": ["joda"]
- },
- "application/vnd.jsk.isdn-ngn": {
- "source": "iana"
- },
- "application/vnd.kahootz": {
- "source": "iana",
- "extensions": ["ktz","ktr"]
- },
- "application/vnd.kde.karbon": {
- "source": "iana",
- "extensions": ["karbon"]
- },
- "application/vnd.kde.kchart": {
- "source": "iana",
- "extensions": ["chrt"]
- },
- "application/vnd.kde.kformula": {
- "source": "iana",
- "extensions": ["kfo"]
- },
- "application/vnd.kde.kivio": {
- "source": "iana",
- "extensions": ["flw"]
- },
- "application/vnd.kde.kontour": {
- "source": "iana",
- "extensions": ["kon"]
- },
- "application/vnd.kde.kpresenter": {
- "source": "iana",
- "extensions": ["kpr","kpt"]
- },
- "application/vnd.kde.kspread": {
- "source": "iana",
- "extensions": ["ksp"]
- },
- "application/vnd.kde.kword": {
- "source": "iana",
- "extensions": ["kwd","kwt"]
- },
- "application/vnd.kenameaapp": {
- "source": "iana",
- "extensions": ["htke"]
- },
- "application/vnd.kidspiration": {
- "source": "iana",
- "extensions": ["kia"]
- },
- "application/vnd.kinar": {
- "source": "iana",
- "extensions": ["kne","knp"]
- },
- "application/vnd.koan": {
- "source": "iana",
- "extensions": ["skp","skd","skt","skm"]
- },
- "application/vnd.kodak-descriptor": {
- "source": "iana",
- "extensions": ["sse"]
- },
- "application/vnd.las": {
- "source": "iana"
- },
- "application/vnd.las.las+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.las.las+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["lasxml"]
- },
- "application/vnd.laszip": {
- "source": "iana"
- },
- "application/vnd.leap+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.liberty-request+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.llamagraphics.life-balance.desktop": {
- "source": "iana",
- "extensions": ["lbd"]
- },
- "application/vnd.llamagraphics.life-balance.exchange+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["lbe"]
- },
- "application/vnd.logipipe.circuit+zip": {
- "source": "iana",
- "compressible": false
- },
- "application/vnd.loom": {
- "source": "iana"
- },
- "application/vnd.lotus-1-2-3": {
- "source": "iana",
- "extensions": ["123"]
- },
- "application/vnd.lotus-approach": {
- "source": "iana",
- "extensions": ["apr"]
- },
- "application/vnd.lotus-freelance": {
- "source": "iana",
- "extensions": ["pre"]
- },
- "application/vnd.lotus-notes": {
- "source": "iana",
- "extensions": ["nsf"]
- },
- "application/vnd.lotus-organizer": {
- "source": "iana",
- "extensions": ["org"]
- },
- "application/vnd.lotus-screencam": {
- "source": "iana",
- "extensions": ["scm"]
- },
- "application/vnd.lotus-wordpro": {
- "source": "iana",
- "extensions": ["lwp"]
- },
- "application/vnd.macports.portpkg": {
- "source": "iana",
- "extensions": ["portpkg"]
- },
- "application/vnd.mapbox-vector-tile": {
- "source": "iana",
- "extensions": ["mvt"]
- },
- "application/vnd.marlin.drm.actiontoken+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.marlin.drm.conftoken+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.marlin.drm.license+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.marlin.drm.mdcf": {
- "source": "iana"
- },
- "application/vnd.mason+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.maxmind.maxmind-db": {
- "source": "iana"
- },
- "application/vnd.mcd": {
- "source": "iana",
- "extensions": ["mcd"]
- },
- "application/vnd.medcalcdata": {
- "source": "iana",
- "extensions": ["mc1"]
- },
- "application/vnd.mediastation.cdkey": {
- "source": "iana",
- "extensions": ["cdkey"]
- },
- "application/vnd.meridian-slingshot": {
- "source": "iana"
- },
- "application/vnd.mfer": {
- "source": "iana",
- "extensions": ["mwf"]
- },
- "application/vnd.mfmp": {
- "source": "iana",
- "extensions": ["mfm"]
- },
- "application/vnd.micro+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.micrografx.flo": {
- "source": "iana",
- "extensions": ["flo"]
- },
- "application/vnd.micrografx.igx": {
- "source": "iana",
- "extensions": ["igx"]
- },
- "application/vnd.microsoft.portable-executable": {
- "source": "iana"
- },
- "application/vnd.microsoft.windows.thumbnail-cache": {
- "source": "iana"
- },
- "application/vnd.miele+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.mif": {
- "source": "iana",
- "extensions": ["mif"]
- },
- "application/vnd.minisoft-hp3000-save": {
- "source": "iana"
- },
- "application/vnd.mitsubishi.misty-guard.trustweb": {
- "source": "iana"
- },
- "application/vnd.mobius.daf": {
- "source": "iana",
- "extensions": ["daf"]
- },
- "application/vnd.mobius.dis": {
- "source": "iana",
- "extensions": ["dis"]
- },
- "application/vnd.mobius.mbk": {
- "source": "iana",
- "extensions": ["mbk"]
- },
- "application/vnd.mobius.mqy": {
- "source": "iana",
- "extensions": ["mqy"]
- },
- "application/vnd.mobius.msl": {
- "source": "iana",
- "extensions": ["msl"]
- },
- "application/vnd.mobius.plc": {
- "source": "iana",
- "extensions": ["plc"]
- },
- "application/vnd.mobius.txf": {
- "source": "iana",
- "extensions": ["txf"]
- },
- "application/vnd.mophun.application": {
- "source": "iana",
- "extensions": ["mpn"]
- },
- "application/vnd.mophun.certificate": {
- "source": "iana",
- "extensions": ["mpc"]
- },
- "application/vnd.motorola.flexsuite": {
- "source": "iana"
- },
- "application/vnd.motorola.flexsuite.adsi": {
- "source": "iana"
- },
- "application/vnd.motorola.flexsuite.fis": {
- "source": "iana"
- },
- "application/vnd.motorola.flexsuite.gotap": {
- "source": "iana"
- },
- "application/vnd.motorola.flexsuite.kmr": {
- "source": "iana"
- },
- "application/vnd.motorola.flexsuite.ttc": {
- "source": "iana"
- },
- "application/vnd.motorola.flexsuite.wem": {
- "source": "iana"
- },
- "application/vnd.motorola.iprm": {
- "source": "iana"
- },
- "application/vnd.mozilla.xul+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["xul"]
- },
- "application/vnd.ms-3mfdocument": {
- "source": "iana"
- },
- "application/vnd.ms-artgalry": {
- "source": "iana",
- "extensions": ["cil"]
- },
- "application/vnd.ms-asf": {
- "source": "iana"
- },
- "application/vnd.ms-cab-compressed": {
- "source": "iana",
- "extensions": ["cab"]
- },
- "application/vnd.ms-color.iccprofile": {
- "source": "apache"
- },
- "application/vnd.ms-excel": {
- "source": "iana",
- "compressible": false,
- "extensions": ["xls","xlm","xla","xlc","xlt","xlw"]
- },
- "application/vnd.ms-excel.addin.macroenabled.12": {
- "source": "iana",
- "extensions": ["xlam"]
- },
- "application/vnd.ms-excel.sheet.binary.macroenabled.12": {
- "source": "iana",
- "extensions": ["xlsb"]
- },
- "application/vnd.ms-excel.sheet.macroenabled.12": {
- "source": "iana",
- "extensions": ["xlsm"]
- },
- "application/vnd.ms-excel.template.macroenabled.12": {
- "source": "iana",
- "extensions": ["xltm"]
- },
- "application/vnd.ms-fontobject": {
- "source": "iana",
- "compressible": true,
- "extensions": ["eot"]
- },
- "application/vnd.ms-htmlhelp": {
- "source": "iana",
- "extensions": ["chm"]
- },
- "application/vnd.ms-ims": {
- "source": "iana",
- "extensions": ["ims"]
- },
- "application/vnd.ms-lrm": {
- "source": "iana",
- "extensions": ["lrm"]
- },
- "application/vnd.ms-office.activex+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.ms-officetheme": {
- "source": "iana",
- "extensions": ["thmx"]
- },
- "application/vnd.ms-opentype": {
- "source": "apache",
- "compressible": true
- },
- "application/vnd.ms-outlook": {
- "compressible": false,
- "extensions": ["msg"]
- },
- "application/vnd.ms-package.obfuscated-opentype": {
- "source": "apache"
- },
- "application/vnd.ms-pki.seccat": {
- "source": "apache",
- "extensions": ["cat"]
- },
- "application/vnd.ms-pki.stl": {
- "source": "apache",
- "extensions": ["stl"]
- },
- "application/vnd.ms-playready.initiator+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.ms-powerpoint": {
- "source": "iana",
- "compressible": false,
- "extensions": ["ppt","pps","pot"]
- },
- "application/vnd.ms-powerpoint.addin.macroenabled.12": {
- "source": "iana",
- "extensions": ["ppam"]
- },
- "application/vnd.ms-powerpoint.presentation.macroenabled.12": {
- "source": "iana",
- "extensions": ["pptm"]
- },
- "application/vnd.ms-powerpoint.slide.macroenabled.12": {
- "source": "iana",
- "extensions": ["sldm"]
- },
- "application/vnd.ms-powerpoint.slideshow.macroenabled.12": {
- "source": "iana",
- "extensions": ["ppsm"]
- },
- "application/vnd.ms-powerpoint.template.macroenabled.12": {
- "source": "iana",
- "extensions": ["potm"]
- },
- "application/vnd.ms-printdevicecapabilities+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.ms-printing.printticket+xml": {
- "source": "apache",
- "compressible": true
- },
- "application/vnd.ms-printschematicket+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.ms-project": {
- "source": "iana",
- "extensions": ["mpp","mpt"]
- },
- "application/vnd.ms-tnef": {
- "source": "iana"
- },
- "application/vnd.ms-windows.devicepairing": {
- "source": "iana"
- },
- "application/vnd.ms-windows.nwprinting.oob": {
- "source": "iana"
- },
- "application/vnd.ms-windows.printerpairing": {
- "source": "iana"
- },
- "application/vnd.ms-windows.wsd.oob": {
- "source": "iana"
- },
- "application/vnd.ms-wmdrm.lic-chlg-req": {
- "source": "iana"
- },
- "application/vnd.ms-wmdrm.lic-resp": {
- "source": "iana"
- },
- "application/vnd.ms-wmdrm.meter-chlg-req": {
- "source": "iana"
- },
- "application/vnd.ms-wmdrm.meter-resp": {
- "source": "iana"
- },
- "application/vnd.ms-word.document.macroenabled.12": {
- "source": "iana",
- "extensions": ["docm"]
- },
- "application/vnd.ms-word.template.macroenabled.12": {
- "source": "iana",
- "extensions": ["dotm"]
- },
- "application/vnd.ms-works": {
- "source": "iana",
- "extensions": ["wps","wks","wcm","wdb"]
- },
- "application/vnd.ms-wpl": {
- "source": "iana",
- "extensions": ["wpl"]
- },
- "application/vnd.ms-xpsdocument": {
- "source": "iana",
- "compressible": false,
- "extensions": ["xps"]
- },
- "application/vnd.msa-disk-image": {
- "source": "iana"
- },
- "application/vnd.mseq": {
- "source": "iana",
- "extensions": ["mseq"]
- },
- "application/vnd.msign": {
- "source": "iana"
- },
- "application/vnd.multiad.creator": {
- "source": "iana"
- },
- "application/vnd.multiad.creator.cif": {
- "source": "iana"
- },
- "application/vnd.music-niff": {
- "source": "iana"
- },
- "application/vnd.musician": {
- "source": "iana",
- "extensions": ["mus"]
- },
- "application/vnd.muvee.style": {
- "source": "iana",
- "extensions": ["msty"]
- },
- "application/vnd.mynfc": {
- "source": "iana",
- "extensions": ["taglet"]
- },
- "application/vnd.ncd.control": {
- "source": "iana"
- },
- "application/vnd.ncd.reference": {
- "source": "iana"
- },
- "application/vnd.nearst.inv+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.nebumind.line": {
- "source": "iana"
- },
- "application/vnd.nervana": {
- "source": "iana"
- },
- "application/vnd.netfpx": {
- "source": "iana"
- },
- "application/vnd.neurolanguage.nlu": {
- "source": "iana",
- "extensions": ["nlu"]
- },
- "application/vnd.nimn": {
- "source": "iana"
- },
- "application/vnd.nintendo.nitro.rom": {
- "source": "iana"
- },
- "application/vnd.nintendo.snes.rom": {
- "source": "iana"
- },
- "application/vnd.nitf": {
- "source": "iana",
- "extensions": ["ntf","nitf"]
- },
- "application/vnd.noblenet-directory": {
- "source": "iana",
- "extensions": ["nnd"]
- },
- "application/vnd.noblenet-sealer": {
- "source": "iana",
- "extensions": ["nns"]
- },
- "application/vnd.noblenet-web": {
- "source": "iana",
- "extensions": ["nnw"]
- },
- "application/vnd.nokia.catalogs": {
- "source": "iana"
- },
- "application/vnd.nokia.conml+wbxml": {
- "source": "iana"
- },
- "application/vnd.nokia.conml+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.nokia.iptv.config+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.nokia.isds-radio-presets": {
- "source": "iana"
- },
- "application/vnd.nokia.landmark+wbxml": {
- "source": "iana"
- },
- "application/vnd.nokia.landmark+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.nokia.landmarkcollection+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.nokia.n-gage.ac+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["ac"]
- },
- "application/vnd.nokia.n-gage.data": {
- "source": "iana",
- "extensions": ["ngdat"]
- },
- "application/vnd.nokia.n-gage.symbian.install": {
- "source": "iana",
- "extensions": ["n-gage"]
- },
- "application/vnd.nokia.ncd": {
- "source": "iana"
- },
- "application/vnd.nokia.pcd+wbxml": {
- "source": "iana"
- },
- "application/vnd.nokia.pcd+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.nokia.radio-preset": {
- "source": "iana",
- "extensions": ["rpst"]
- },
- "application/vnd.nokia.radio-presets": {
- "source": "iana",
- "extensions": ["rpss"]
- },
- "application/vnd.novadigm.edm": {
- "source": "iana",
- "extensions": ["edm"]
- },
- "application/vnd.novadigm.edx": {
- "source": "iana",
- "extensions": ["edx"]
- },
- "application/vnd.novadigm.ext": {
- "source": "iana",
- "extensions": ["ext"]
- },
- "application/vnd.ntt-local.content-share": {
- "source": "iana"
- },
- "application/vnd.ntt-local.file-transfer": {
- "source": "iana"
- },
- "application/vnd.ntt-local.ogw_remote-access": {
- "source": "iana"
- },
- "application/vnd.ntt-local.sip-ta_remote": {
- "source": "iana"
- },
- "application/vnd.ntt-local.sip-ta_tcp_stream": {
- "source": "iana"
- },
- "application/vnd.oasis.opendocument.chart": {
- "source": "iana",
- "extensions": ["odc"]
- },
- "application/vnd.oasis.opendocument.chart-template": {
- "source": "iana",
- "extensions": ["otc"]
- },
- "application/vnd.oasis.opendocument.database": {
- "source": "iana",
- "extensions": ["odb"]
- },
- "application/vnd.oasis.opendocument.formula": {
- "source": "iana",
- "extensions": ["odf"]
- },
- "application/vnd.oasis.opendocument.formula-template": {
- "source": "iana",
- "extensions": ["odft"]
- },
- "application/vnd.oasis.opendocument.graphics": {
- "source": "iana",
- "compressible": false,
- "extensions": ["odg"]
- },
- "application/vnd.oasis.opendocument.graphics-template": {
- "source": "iana",
- "extensions": ["otg"]
- },
- "application/vnd.oasis.opendocument.image": {
- "source": "iana",
- "extensions": ["odi"]
- },
- "application/vnd.oasis.opendocument.image-template": {
- "source": "iana",
- "extensions": ["oti"]
- },
- "application/vnd.oasis.opendocument.presentation": {
- "source": "iana",
- "compressible": false,
- "extensions": ["odp"]
- },
- "application/vnd.oasis.opendocument.presentation-template": {
- "source": "iana",
- "extensions": ["otp"]
- },
- "application/vnd.oasis.opendocument.spreadsheet": {
- "source": "iana",
- "compressible": false,
- "extensions": ["ods"]
- },
- "application/vnd.oasis.opendocument.spreadsheet-template": {
- "source": "iana",
- "extensions": ["ots"]
- },
- "application/vnd.oasis.opendocument.text": {
- "source": "iana",
- "compressible": false,
- "extensions": ["odt"]
- },
- "application/vnd.oasis.opendocument.text-master": {
- "source": "iana",
- "extensions": ["odm"]
- },
- "application/vnd.oasis.opendocument.text-template": {
- "source": "iana",
- "extensions": ["ott"]
- },
- "application/vnd.oasis.opendocument.text-web": {
- "source": "iana",
- "extensions": ["oth"]
- },
- "application/vnd.obn": {
- "source": "iana"
- },
- "application/vnd.ocf+cbor": {
- "source": "iana"
- },
- "application/vnd.oci.image.manifest.v1+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.oftn.l10n+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.oipf.contentaccessdownload+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.oipf.contentaccessstreaming+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.oipf.cspg-hexbinary": {
- "source": "iana"
- },
- "application/vnd.oipf.dae.svg+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.oipf.dae.xhtml+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.oipf.mippvcontrolmessage+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.oipf.pae.gem": {
- "source": "iana"
- },
- "application/vnd.oipf.spdiscovery+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.oipf.spdlist+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.oipf.ueprofile+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.oipf.userprofile+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.olpc-sugar": {
- "source": "iana",
- "extensions": ["xo"]
- },
- "application/vnd.oma-scws-config": {
- "source": "iana"
- },
- "application/vnd.oma-scws-http-request": {
- "source": "iana"
- },
- "application/vnd.oma-scws-http-response": {
- "source": "iana"
- },
- "application/vnd.oma.bcast.associated-procedure-parameter+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.oma.bcast.drm-trigger+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.oma.bcast.imd+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.oma.bcast.ltkm": {
- "source": "iana"
- },
- "application/vnd.oma.bcast.notification+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.oma.bcast.provisioningtrigger": {
- "source": "iana"
- },
- "application/vnd.oma.bcast.sgboot": {
- "source": "iana"
- },
- "application/vnd.oma.bcast.sgdd+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.oma.bcast.sgdu": {
- "source": "iana"
- },
- "application/vnd.oma.bcast.simple-symbol-container": {
- "source": "iana"
- },
- "application/vnd.oma.bcast.smartcard-trigger+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.oma.bcast.sprov+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.oma.bcast.stkm": {
- "source": "iana"
- },
- "application/vnd.oma.cab-address-book+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.oma.cab-feature-handler+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.oma.cab-pcc+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.oma.cab-subs-invite+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.oma.cab-user-prefs+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.oma.dcd": {
- "source": "iana"
- },
- "application/vnd.oma.dcdc": {
- "source": "iana"
- },
- "application/vnd.oma.dd2+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["dd2"]
- },
- "application/vnd.oma.drm.risd+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.oma.group-usage-list+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.oma.lwm2m+cbor": {
- "source": "iana"
- },
- "application/vnd.oma.lwm2m+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.oma.lwm2m+tlv": {
- "source": "iana"
- },
- "application/vnd.oma.pal+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.oma.poc.detailed-progress-report+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.oma.poc.final-report+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.oma.poc.groups+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.oma.poc.invocation-descriptor+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.oma.poc.optimized-progress-report+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.oma.push": {
- "source": "iana"
- },
- "application/vnd.oma.scidm.messages+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.oma.xcap-directory+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.omads-email+xml": {
- "source": "iana",
- "charset": "UTF-8",
- "compressible": true
- },
- "application/vnd.omads-file+xml": {
- "source": "iana",
- "charset": "UTF-8",
- "compressible": true
- },
- "application/vnd.omads-folder+xml": {
- "source": "iana",
- "charset": "UTF-8",
- "compressible": true
- },
- "application/vnd.omaloc-supl-init": {
- "source": "iana"
- },
- "application/vnd.onepager": {
- "source": "iana"
- },
- "application/vnd.onepagertamp": {
- "source": "iana"
- },
- "application/vnd.onepagertamx": {
- "source": "iana"
- },
- "application/vnd.onepagertat": {
- "source": "iana"
- },
- "application/vnd.onepagertatp": {
- "source": "iana"
- },
- "application/vnd.onepagertatx": {
- "source": "iana"
- },
- "application/vnd.openblox.game+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["obgx"]
- },
- "application/vnd.openblox.game-binary": {
- "source": "iana"
- },
- "application/vnd.openeye.oeb": {
- "source": "iana"
- },
- "application/vnd.openofficeorg.extension": {
- "source": "apache",
- "extensions": ["oxt"]
- },
- "application/vnd.openstreetmap.data+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["osm"]
- },
- "application/vnd.opentimestamps.ots": {
- "source": "iana"
- },
- "application/vnd.openxmlformats-officedocument.custom-properties+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.customxmlproperties+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.drawing+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.drawingml.chart+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.extended-properties+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.presentationml.comments+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.presentationml.presentation": {
- "source": "iana",
- "compressible": false,
- "extensions": ["pptx"]
- },
- "application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.presentationml.presprops+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.presentationml.slide": {
- "source": "iana",
- "extensions": ["sldx"]
- },
- "application/vnd.openxmlformats-officedocument.presentationml.slide+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.presentationml.slideshow": {
- "source": "iana",
- "extensions": ["ppsx"]
- },
- "application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.presentationml.tags+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.presentationml.template": {
- "source": "iana",
- "extensions": ["potx"]
- },
- "application/vnd.openxmlformats-officedocument.presentationml.template.main+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
- "source": "iana",
- "compressible": false,
- "extensions": ["xlsx"]
- },
- "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.spreadsheetml.template": {
- "source": "iana",
- "extensions": ["xltx"]
- },
- "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.theme+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.themeoverride+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.vmldrawing": {
- "source": "iana"
- },
- "application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.wordprocessingml.document": {
- "source": "iana",
- "compressible": false,
- "extensions": ["docx"]
- },
- "application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.wordprocessingml.template": {
- "source": "iana",
- "extensions": ["dotx"]
- },
- "application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-package.core-properties+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.openxmlformats-package.relationships+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.oracle.resource+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.orange.indata": {
- "source": "iana"
- },
- "application/vnd.osa.netdeploy": {
- "source": "iana"
- },
- "application/vnd.osgeo.mapguide.package": {
- "source": "iana",
- "extensions": ["mgp"]
- },
- "application/vnd.osgi.bundle": {
- "source": "iana"
- },
- "application/vnd.osgi.dp": {
- "source": "iana",
- "extensions": ["dp"]
- },
- "application/vnd.osgi.subsystem": {
- "source": "iana",
- "extensions": ["esa"]
- },
- "application/vnd.otps.ct-kip+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.oxli.countgraph": {
- "source": "iana"
- },
- "application/vnd.pagerduty+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.palm": {
- "source": "iana",
- "extensions": ["pdb","pqa","oprc"]
- },
- "application/vnd.panoply": {
- "source": "iana"
- },
- "application/vnd.paos.xml": {
- "source": "iana"
- },
- "application/vnd.patentdive": {
- "source": "iana"
- },
- "application/vnd.patientecommsdoc": {
- "source": "iana"
- },
- "application/vnd.pawaafile": {
- "source": "iana",
- "extensions": ["paw"]
- },
- "application/vnd.pcos": {
- "source": "iana"
- },
- "application/vnd.pg.format": {
- "source": "iana",
- "extensions": ["str"]
- },
- "application/vnd.pg.osasli": {
- "source": "iana",
- "extensions": ["ei6"]
- },
- "application/vnd.piaccess.application-licence": {
- "source": "iana"
- },
- "application/vnd.picsel": {
- "source": "iana",
- "extensions": ["efif"]
- },
- "application/vnd.pmi.widget": {
- "source": "iana",
- "extensions": ["wg"]
- },
- "application/vnd.poc.group-advertisement+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.pocketlearn": {
- "source": "iana",
- "extensions": ["plf"]
- },
- "application/vnd.powerbuilder6": {
- "source": "iana",
- "extensions": ["pbd"]
- },
- "application/vnd.powerbuilder6-s": {
- "source": "iana"
- },
- "application/vnd.powerbuilder7": {
- "source": "iana"
- },
- "application/vnd.powerbuilder7-s": {
- "source": "iana"
- },
- "application/vnd.powerbuilder75": {
- "source": "iana"
- },
- "application/vnd.powerbuilder75-s": {
- "source": "iana"
- },
- "application/vnd.preminet": {
- "source": "iana"
- },
- "application/vnd.previewsystems.box": {
- "source": "iana",
- "extensions": ["box"]
- },
- "application/vnd.proteus.magazine": {
- "source": "iana",
- "extensions": ["mgz"]
- },
- "application/vnd.psfs": {
- "source": "iana"
- },
- "application/vnd.publishare-delta-tree": {
- "source": "iana",
- "extensions": ["qps"]
- },
- "application/vnd.pvi.ptid1": {
- "source": "iana",
- "extensions": ["ptid"]
- },
- "application/vnd.pwg-multiplexed": {
- "source": "iana"
- },
- "application/vnd.pwg-xhtml-print+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.qualcomm.brew-app-res": {
- "source": "iana"
- },
- "application/vnd.quarantainenet": {
- "source": "iana"
- },
- "application/vnd.quark.quarkxpress": {
- "source": "iana",
- "extensions": ["qxd","qxt","qwd","qwt","qxl","qxb"]
- },
- "application/vnd.quobject-quoxdocument": {
- "source": "iana"
- },
- "application/vnd.radisys.moml+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.radisys.msml+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.radisys.msml-audit+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.radisys.msml-audit-conf+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.radisys.msml-audit-conn+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.radisys.msml-audit-dialog+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.radisys.msml-audit-stream+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.radisys.msml-conf+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.radisys.msml-dialog+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.radisys.msml-dialog-base+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.radisys.msml-dialog-fax-detect+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.radisys.msml-dialog-fax-sendrecv+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.radisys.msml-dialog-group+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.radisys.msml-dialog-speech+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.radisys.msml-dialog-transform+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.rainstor.data": {
- "source": "iana"
- },
- "application/vnd.rapid": {
- "source": "iana"
- },
- "application/vnd.rar": {
- "source": "iana",
- "extensions": ["rar"]
- },
- "application/vnd.realvnc.bed": {
- "source": "iana",
- "extensions": ["bed"]
- },
- "application/vnd.recordare.musicxml": {
- "source": "iana",
- "extensions": ["mxl"]
- },
- "application/vnd.recordare.musicxml+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["musicxml"]
- },
- "application/vnd.renlearn.rlprint": {
- "source": "iana"
- },
- "application/vnd.resilient.logic": {
- "source": "iana"
- },
- "application/vnd.restful+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.rig.cryptonote": {
- "source": "iana",
- "extensions": ["cryptonote"]
- },
- "application/vnd.rim.cod": {
- "source": "apache",
- "extensions": ["cod"]
- },
- "application/vnd.rn-realmedia": {
- "source": "apache",
- "extensions": ["rm"]
- },
- "application/vnd.rn-realmedia-vbr": {
- "source": "apache",
- "extensions": ["rmvb"]
- },
- "application/vnd.route66.link66+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["link66"]
- },
- "application/vnd.rs-274x": {
- "source": "iana"
- },
- "application/vnd.ruckus.download": {
- "source": "iana"
- },
- "application/vnd.s3sms": {
- "source": "iana"
- },
- "application/vnd.sailingtracker.track": {
- "source": "iana",
- "extensions": ["st"]
- },
- "application/vnd.sar": {
- "source": "iana"
- },
- "application/vnd.sbm.cid": {
- "source": "iana"
- },
- "application/vnd.sbm.mid2": {
- "source": "iana"
- },
- "application/vnd.scribus": {
- "source": "iana"
- },
- "application/vnd.sealed.3df": {
- "source": "iana"
- },
- "application/vnd.sealed.csf": {
- "source": "iana"
- },
- "application/vnd.sealed.doc": {
- "source": "iana"
- },
- "application/vnd.sealed.eml": {
- "source": "iana"
- },
- "application/vnd.sealed.mht": {
- "source": "iana"
- },
- "application/vnd.sealed.net": {
- "source": "iana"
- },
- "application/vnd.sealed.ppt": {
- "source": "iana"
- },
- "application/vnd.sealed.tiff": {
- "source": "iana"
- },
- "application/vnd.sealed.xls": {
- "source": "iana"
- },
- "application/vnd.sealedmedia.softseal.html": {
- "source": "iana"
- },
- "application/vnd.sealedmedia.softseal.pdf": {
- "source": "iana"
- },
- "application/vnd.seemail": {
- "source": "iana",
- "extensions": ["see"]
- },
- "application/vnd.seis+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.sema": {
- "source": "iana",
- "extensions": ["sema"]
- },
- "application/vnd.semd": {
- "source": "iana",
- "extensions": ["semd"]
- },
- "application/vnd.semf": {
- "source": "iana",
- "extensions": ["semf"]
- },
- "application/vnd.shade-save-file": {
- "source": "iana"
- },
- "application/vnd.shana.informed.formdata": {
- "source": "iana",
- "extensions": ["ifm"]
- },
- "application/vnd.shana.informed.formtemplate": {
- "source": "iana",
- "extensions": ["itp"]
- },
- "application/vnd.shana.informed.interchange": {
- "source": "iana",
- "extensions": ["iif"]
- },
- "application/vnd.shana.informed.package": {
- "source": "iana",
- "extensions": ["ipk"]
- },
- "application/vnd.shootproof+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.shopkick+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.shp": {
- "source": "iana"
- },
- "application/vnd.shx": {
- "source": "iana"
- },
- "application/vnd.sigrok.session": {
- "source": "iana"
- },
- "application/vnd.simtech-mindmapper": {
- "source": "iana",
- "extensions": ["twd","twds"]
- },
- "application/vnd.siren+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.smaf": {
- "source": "iana",
- "extensions": ["mmf"]
- },
- "application/vnd.smart.notebook": {
- "source": "iana"
- },
- "application/vnd.smart.teacher": {
- "source": "iana",
- "extensions": ["teacher"]
- },
- "application/vnd.snesdev-page-table": {
- "source": "iana"
- },
- "application/vnd.software602.filler.form+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["fo"]
- },
- "application/vnd.software602.filler.form-xml-zip": {
- "source": "iana"
- },
- "application/vnd.solent.sdkm+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["sdkm","sdkd"]
- },
- "application/vnd.spotfire.dxp": {
- "source": "iana",
- "extensions": ["dxp"]
- },
- "application/vnd.spotfire.sfs": {
- "source": "iana",
- "extensions": ["sfs"]
- },
- "application/vnd.sqlite3": {
- "source": "iana"
- },
- "application/vnd.sss-cod": {
- "source": "iana"
- },
- "application/vnd.sss-dtf": {
- "source": "iana"
- },
- "application/vnd.sss-ntf": {
- "source": "iana"
- },
- "application/vnd.stardivision.calc": {
- "source": "apache",
- "extensions": ["sdc"]
- },
- "application/vnd.stardivision.draw": {
- "source": "apache",
- "extensions": ["sda"]
- },
- "application/vnd.stardivision.impress": {
- "source": "apache",
- "extensions": ["sdd"]
- },
- "application/vnd.stardivision.math": {
- "source": "apache",
- "extensions": ["smf"]
- },
- "application/vnd.stardivision.writer": {
- "source": "apache",
- "extensions": ["sdw","vor"]
- },
- "application/vnd.stardivision.writer-global": {
- "source": "apache",
- "extensions": ["sgl"]
- },
- "application/vnd.stepmania.package": {
- "source": "iana",
- "extensions": ["smzip"]
- },
- "application/vnd.stepmania.stepchart": {
- "source": "iana",
- "extensions": ["sm"]
- },
- "application/vnd.street-stream": {
- "source": "iana"
- },
- "application/vnd.sun.wadl+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["wadl"]
- },
- "application/vnd.sun.xml.calc": {
- "source": "apache",
- "extensions": ["sxc"]
- },
- "application/vnd.sun.xml.calc.template": {
- "source": "apache",
- "extensions": ["stc"]
- },
- "application/vnd.sun.xml.draw": {
- "source": "apache",
- "extensions": ["sxd"]
- },
- "application/vnd.sun.xml.draw.template": {
- "source": "apache",
- "extensions": ["std"]
- },
- "application/vnd.sun.xml.impress": {
- "source": "apache",
- "extensions": ["sxi"]
- },
- "application/vnd.sun.xml.impress.template": {
- "source": "apache",
- "extensions": ["sti"]
- },
- "application/vnd.sun.xml.math": {
- "source": "apache",
- "extensions": ["sxm"]
- },
- "application/vnd.sun.xml.writer": {
- "source": "apache",
- "extensions": ["sxw"]
- },
- "application/vnd.sun.xml.writer.global": {
- "source": "apache",
- "extensions": ["sxg"]
- },
- "application/vnd.sun.xml.writer.template": {
- "source": "apache",
- "extensions": ["stw"]
- },
- "application/vnd.sus-calendar": {
- "source": "iana",
- "extensions": ["sus","susp"]
- },
- "application/vnd.svd": {
- "source": "iana",
- "extensions": ["svd"]
- },
- "application/vnd.swiftview-ics": {
- "source": "iana"
- },
- "application/vnd.sycle+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.symbian.install": {
- "source": "apache",
- "extensions": ["sis","sisx"]
- },
- "application/vnd.syncml+xml": {
- "source": "iana",
- "charset": "UTF-8",
- "compressible": true,
- "extensions": ["xsm"]
- },
- "application/vnd.syncml.dm+wbxml": {
- "source": "iana",
- "charset": "UTF-8",
- "extensions": ["bdm"]
- },
- "application/vnd.syncml.dm+xml": {
- "source": "iana",
- "charset": "UTF-8",
- "compressible": true,
- "extensions": ["xdm"]
- },
- "application/vnd.syncml.dm.notification": {
- "source": "iana"
- },
- "application/vnd.syncml.dmddf+wbxml": {
- "source": "iana"
- },
- "application/vnd.syncml.dmddf+xml": {
- "source": "iana",
- "charset": "UTF-8",
- "compressible": true,
- "extensions": ["ddf"]
- },
- "application/vnd.syncml.dmtnds+wbxml": {
- "source": "iana"
- },
- "application/vnd.syncml.dmtnds+xml": {
- "source": "iana",
- "charset": "UTF-8",
- "compressible": true
- },
- "application/vnd.syncml.ds.notification": {
- "source": "iana"
- },
- "application/vnd.tableschema+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.tao.intent-module-archive": {
- "source": "iana",
- "extensions": ["tao"]
- },
- "application/vnd.tcpdump.pcap": {
- "source": "iana",
- "extensions": ["pcap","cap","dmp"]
- },
- "application/vnd.think-cell.ppttc+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.tmd.mediaflex.api+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.tml": {
- "source": "iana"
- },
- "application/vnd.tmobile-livetv": {
- "source": "iana",
- "extensions": ["tmo"]
- },
- "application/vnd.tri.onesource": {
- "source": "iana"
- },
- "application/vnd.trid.tpt": {
- "source": "iana",
- "extensions": ["tpt"]
- },
- "application/vnd.triscape.mxs": {
- "source": "iana",
- "extensions": ["mxs"]
- },
- "application/vnd.trueapp": {
- "source": "iana",
- "extensions": ["tra"]
- },
- "application/vnd.truedoc": {
- "source": "iana"
- },
- "application/vnd.ubisoft.webplayer": {
- "source": "iana"
- },
- "application/vnd.ufdl": {
- "source": "iana",
- "extensions": ["ufd","ufdl"]
- },
- "application/vnd.uiq.theme": {
- "source": "iana",
- "extensions": ["utz"]
- },
- "application/vnd.umajin": {
- "source": "iana",
- "extensions": ["umj"]
- },
- "application/vnd.unity": {
- "source": "iana",
- "extensions": ["unityweb"]
- },
- "application/vnd.uoml+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["uoml"]
- },
- "application/vnd.uplanet.alert": {
- "source": "iana"
- },
- "application/vnd.uplanet.alert-wbxml": {
- "source": "iana"
- },
- "application/vnd.uplanet.bearer-choice": {
- "source": "iana"
- },
- "application/vnd.uplanet.bearer-choice-wbxml": {
- "source": "iana"
- },
- "application/vnd.uplanet.cacheop": {
- "source": "iana"
- },
- "application/vnd.uplanet.cacheop-wbxml": {
- "source": "iana"
- },
- "application/vnd.uplanet.channel": {
- "source": "iana"
- },
- "application/vnd.uplanet.channel-wbxml": {
- "source": "iana"
- },
- "application/vnd.uplanet.list": {
- "source": "iana"
- },
- "application/vnd.uplanet.list-wbxml": {
- "source": "iana"
- },
- "application/vnd.uplanet.listcmd": {
- "source": "iana"
- },
- "application/vnd.uplanet.listcmd-wbxml": {
- "source": "iana"
- },
- "application/vnd.uplanet.signal": {
- "source": "iana"
- },
- "application/vnd.uri-map": {
- "source": "iana"
- },
- "application/vnd.valve.source.material": {
- "source": "iana"
- },
- "application/vnd.vcx": {
- "source": "iana",
- "extensions": ["vcx"]
- },
- "application/vnd.vd-study": {
- "source": "iana"
- },
- "application/vnd.vectorworks": {
- "source": "iana"
- },
- "application/vnd.vel+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.verimatrix.vcas": {
- "source": "iana"
- },
- "application/vnd.veritone.aion+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.veryant.thin": {
- "source": "iana"
- },
- "application/vnd.ves.encrypted": {
- "source": "iana"
- },
- "application/vnd.vidsoft.vidconference": {
- "source": "iana"
- },
- "application/vnd.visio": {
- "source": "iana",
- "extensions": ["vsd","vst","vss","vsw"]
- },
- "application/vnd.visionary": {
- "source": "iana",
- "extensions": ["vis"]
- },
- "application/vnd.vividence.scriptfile": {
- "source": "iana"
- },
- "application/vnd.vsf": {
- "source": "iana",
- "extensions": ["vsf"]
- },
- "application/vnd.wap.sic": {
- "source": "iana"
- },
- "application/vnd.wap.slc": {
- "source": "iana"
- },
- "application/vnd.wap.wbxml": {
- "source": "iana",
- "charset": "UTF-8",
- "extensions": ["wbxml"]
- },
- "application/vnd.wap.wmlc": {
- "source": "iana",
- "extensions": ["wmlc"]
- },
- "application/vnd.wap.wmlscriptc": {
- "source": "iana",
- "extensions": ["wmlsc"]
- },
- "application/vnd.webturbo": {
- "source": "iana",
- "extensions": ["wtb"]
- },
- "application/vnd.wfa.dpp": {
- "source": "iana"
- },
- "application/vnd.wfa.p2p": {
- "source": "iana"
- },
- "application/vnd.wfa.wsc": {
- "source": "iana"
- },
- "application/vnd.windows.devicepairing": {
- "source": "iana"
- },
- "application/vnd.wmc": {
- "source": "iana"
- },
- "application/vnd.wmf.bootstrap": {
- "source": "iana"
- },
- "application/vnd.wolfram.mathematica": {
- "source": "iana"
- },
- "application/vnd.wolfram.mathematica.package": {
- "source": "iana"
- },
- "application/vnd.wolfram.player": {
- "source": "iana",
- "extensions": ["nbp"]
- },
- "application/vnd.wordperfect": {
- "source": "iana",
- "extensions": ["wpd"]
- },
- "application/vnd.wqd": {
- "source": "iana",
- "extensions": ["wqd"]
- },
- "application/vnd.wrq-hp3000-labelled": {
- "source": "iana"
- },
- "application/vnd.wt.stf": {
- "source": "iana",
- "extensions": ["stf"]
- },
- "application/vnd.wv.csp+wbxml": {
- "source": "iana"
- },
- "application/vnd.wv.csp+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.wv.ssp+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.xacml+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.xara": {
- "source": "iana",
- "extensions": ["xar"]
- },
- "application/vnd.xfdl": {
- "source": "iana",
- "extensions": ["xfdl"]
- },
- "application/vnd.xfdl.webform": {
- "source": "iana"
- },
- "application/vnd.xmi+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/vnd.xmpie.cpkg": {
- "source": "iana"
- },
- "application/vnd.xmpie.dpkg": {
- "source": "iana"
- },
- "application/vnd.xmpie.plan": {
- "source": "iana"
- },
- "application/vnd.xmpie.ppkg": {
- "source": "iana"
- },
- "application/vnd.xmpie.xlim": {
- "source": "iana"
- },
- "application/vnd.yamaha.hv-dic": {
- "source": "iana",
- "extensions": ["hvd"]
- },
- "application/vnd.yamaha.hv-script": {
- "source": "iana",
- "extensions": ["hvs"]
- },
- "application/vnd.yamaha.hv-voice": {
- "source": "iana",
- "extensions": ["hvp"]
- },
- "application/vnd.yamaha.openscoreformat": {
- "source": "iana",
- "extensions": ["osf"]
- },
- "application/vnd.yamaha.openscoreformat.osfpvg+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["osfpvg"]
- },
- "application/vnd.yamaha.remote-setup": {
- "source": "iana"
- },
- "application/vnd.yamaha.smaf-audio": {
- "source": "iana",
- "extensions": ["saf"]
- },
- "application/vnd.yamaha.smaf-phrase": {
- "source": "iana",
- "extensions": ["spf"]
- },
- "application/vnd.yamaha.through-ngn": {
- "source": "iana"
- },
- "application/vnd.yamaha.tunnel-udpencap": {
- "source": "iana"
- },
- "application/vnd.yaoweme": {
- "source": "iana"
- },
- "application/vnd.yellowriver-custom-menu": {
- "source": "iana",
- "extensions": ["cmp"]
- },
- "application/vnd.youtube.yt": {
- "source": "iana"
- },
- "application/vnd.zul": {
- "source": "iana",
- "extensions": ["zir","zirz"]
- },
- "application/vnd.zzazz.deck+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["zaz"]
- },
- "application/voicexml+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["vxml"]
- },
- "application/voucher-cms+json": {
- "source": "iana",
- "compressible": true
- },
- "application/vq-rtcpxr": {
- "source": "iana"
- },
- "application/wasm": {
- "source": "iana",
- "compressible": true,
- "extensions": ["wasm"]
- },
- "application/watcherinfo+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/webpush-options+json": {
- "source": "iana",
- "compressible": true
- },
- "application/whoispp-query": {
- "source": "iana"
- },
- "application/whoispp-response": {
- "source": "iana"
- },
- "application/widget": {
- "source": "iana",
- "extensions": ["wgt"]
- },
- "application/winhlp": {
- "source": "apache",
- "extensions": ["hlp"]
- },
- "application/wita": {
- "source": "iana"
- },
- "application/wordperfect5.1": {
- "source": "iana"
- },
- "application/wsdl+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["wsdl"]
- },
- "application/wspolicy+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["wspolicy"]
- },
- "application/x-7z-compressed": {
- "source": "apache",
- "compressible": false,
- "extensions": ["7z"]
- },
- "application/x-abiword": {
- "source": "apache",
- "extensions": ["abw"]
- },
- "application/x-ace-compressed": {
- "source": "apache",
- "extensions": ["ace"]
- },
- "application/x-amf": {
- "source": "apache"
- },
- "application/x-apple-diskimage": {
- "source": "apache",
- "extensions": ["dmg"]
- },
- "application/x-arj": {
- "compressible": false,
- "extensions": ["arj"]
- },
- "application/x-authorware-bin": {
- "source": "apache",
- "extensions": ["aab","x32","u32","vox"]
- },
- "application/x-authorware-map": {
- "source": "apache",
- "extensions": ["aam"]
- },
- "application/x-authorware-seg": {
- "source": "apache",
- "extensions": ["aas"]
- },
- "application/x-bcpio": {
- "source": "apache",
- "extensions": ["bcpio"]
- },
- "application/x-bdoc": {
- "compressible": false,
- "extensions": ["bdoc"]
- },
- "application/x-bittorrent": {
- "source": "apache",
- "extensions": ["torrent"]
- },
- "application/x-blorb": {
- "source": "apache",
- "extensions": ["blb","blorb"]
- },
- "application/x-bzip": {
- "source": "apache",
- "compressible": false,
- "extensions": ["bz"]
- },
- "application/x-bzip2": {
- "source": "apache",
- "compressible": false,
- "extensions": ["bz2","boz"]
- },
- "application/x-cbr": {
- "source": "apache",
- "extensions": ["cbr","cba","cbt","cbz","cb7"]
- },
- "application/x-cdlink": {
- "source": "apache",
- "extensions": ["vcd"]
- },
- "application/x-cfs-compressed": {
- "source": "apache",
- "extensions": ["cfs"]
- },
- "application/x-chat": {
- "source": "apache",
- "extensions": ["chat"]
- },
- "application/x-chess-pgn": {
- "source": "apache",
- "extensions": ["pgn"]
- },
- "application/x-chrome-extension": {
- "extensions": ["crx"]
- },
- "application/x-cocoa": {
- "source": "nginx",
- "extensions": ["cco"]
- },
- "application/x-compress": {
- "source": "apache"
- },
- "application/x-conference": {
- "source": "apache",
- "extensions": ["nsc"]
- },
- "application/x-cpio": {
- "source": "apache",
- "extensions": ["cpio"]
- },
- "application/x-csh": {
- "source": "apache",
- "extensions": ["csh"]
- },
- "application/x-deb": {
- "compressible": false
- },
- "application/x-debian-package": {
- "source": "apache",
- "extensions": ["deb","udeb"]
- },
- "application/x-dgc-compressed": {
- "source": "apache",
- "extensions": ["dgc"]
- },
- "application/x-director": {
- "source": "apache",
- "extensions": ["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"]
- },
- "application/x-doom": {
- "source": "apache",
- "extensions": ["wad"]
- },
- "application/x-dtbncx+xml": {
- "source": "apache",
- "compressible": true,
- "extensions": ["ncx"]
- },
- "application/x-dtbook+xml": {
- "source": "apache",
- "compressible": true,
- "extensions": ["dtb"]
- },
- "application/x-dtbresource+xml": {
- "source": "apache",
- "compressible": true,
- "extensions": ["res"]
- },
- "application/x-dvi": {
- "source": "apache",
- "compressible": false,
- "extensions": ["dvi"]
- },
- "application/x-envoy": {
- "source": "apache",
- "extensions": ["evy"]
- },
- "application/x-eva": {
- "source": "apache",
- "extensions": ["eva"]
- },
- "application/x-font-bdf": {
- "source": "apache",
- "extensions": ["bdf"]
- },
- "application/x-font-dos": {
- "source": "apache"
- },
- "application/x-font-framemaker": {
- "source": "apache"
- },
- "application/x-font-ghostscript": {
- "source": "apache",
- "extensions": ["gsf"]
- },
- "application/x-font-libgrx": {
- "source": "apache"
- },
- "application/x-font-linux-psf": {
- "source": "apache",
- "extensions": ["psf"]
- },
- "application/x-font-pcf": {
- "source": "apache",
- "extensions": ["pcf"]
- },
- "application/x-font-snf": {
- "source": "apache",
- "extensions": ["snf"]
- },
- "application/x-font-speedo": {
- "source": "apache"
- },
- "application/x-font-sunos-news": {
- "source": "apache"
- },
- "application/x-font-type1": {
- "source": "apache",
- "extensions": ["pfa","pfb","pfm","afm"]
- },
- "application/x-font-vfont": {
- "source": "apache"
- },
- "application/x-freearc": {
- "source": "apache",
- "extensions": ["arc"]
- },
- "application/x-futuresplash": {
- "source": "apache",
- "extensions": ["spl"]
- },
- "application/x-gca-compressed": {
- "source": "apache",
- "extensions": ["gca"]
- },
- "application/x-glulx": {
- "source": "apache",
- "extensions": ["ulx"]
- },
- "application/x-gnumeric": {
- "source": "apache",
- "extensions": ["gnumeric"]
- },
- "application/x-gramps-xml": {
- "source": "apache",
- "extensions": ["gramps"]
- },
- "application/x-gtar": {
- "source": "apache",
- "extensions": ["gtar"]
- },
- "application/x-gzip": {
- "source": "apache"
- },
- "application/x-hdf": {
- "source": "apache",
- "extensions": ["hdf"]
- },
- "application/x-httpd-php": {
- "compressible": true,
- "extensions": ["php"]
- },
- "application/x-install-instructions": {
- "source": "apache",
- "extensions": ["install"]
- },
- "application/x-iso9660-image": {
- "source": "apache",
- "extensions": ["iso"]
- },
- "application/x-java-archive-diff": {
- "source": "nginx",
- "extensions": ["jardiff"]
- },
- "application/x-java-jnlp-file": {
- "source": "apache",
- "compressible": false,
- "extensions": ["jnlp"]
- },
- "application/x-javascript": {
- "compressible": true
- },
- "application/x-keepass2": {
- "extensions": ["kdbx"]
- },
- "application/x-latex": {
- "source": "apache",
- "compressible": false,
- "extensions": ["latex"]
- },
- "application/x-lua-bytecode": {
- "extensions": ["luac"]
- },
- "application/x-lzh-compressed": {
- "source": "apache",
- "extensions": ["lzh","lha"]
- },
- "application/x-makeself": {
- "source": "nginx",
- "extensions": ["run"]
- },
- "application/x-mie": {
- "source": "apache",
- "extensions": ["mie"]
- },
- "application/x-mobipocket-ebook": {
- "source": "apache",
- "extensions": ["prc","mobi"]
- },
- "application/x-mpegurl": {
- "compressible": false
- },
- "application/x-ms-application": {
- "source": "apache",
- "extensions": ["application"]
- },
- "application/x-ms-shortcut": {
- "source": "apache",
- "extensions": ["lnk"]
- },
- "application/x-ms-wmd": {
- "source": "apache",
- "extensions": ["wmd"]
- },
- "application/x-ms-wmz": {
- "source": "apache",
- "extensions": ["wmz"]
- },
- "application/x-ms-xbap": {
- "source": "apache",
- "extensions": ["xbap"]
- },
- "application/x-msaccess": {
- "source": "apache",
- "extensions": ["mdb"]
- },
- "application/x-msbinder": {
- "source": "apache",
- "extensions": ["obd"]
- },
- "application/x-mscardfile": {
- "source": "apache",
- "extensions": ["crd"]
- },
- "application/x-msclip": {
- "source": "apache",
- "extensions": ["clp"]
- },
- "application/x-msdos-program": {
- "extensions": ["exe"]
- },
- "application/x-msdownload": {
- "source": "apache",
- "extensions": ["exe","dll","com","bat","msi"]
- },
- "application/x-msmediaview": {
- "source": "apache",
- "extensions": ["mvb","m13","m14"]
- },
- "application/x-msmetafile": {
- "source": "apache",
- "extensions": ["wmf","wmz","emf","emz"]
- },
- "application/x-msmoney": {
- "source": "apache",
- "extensions": ["mny"]
- },
- "application/x-mspublisher": {
- "source": "apache",
- "extensions": ["pub"]
- },
- "application/x-msschedule": {
- "source": "apache",
- "extensions": ["scd"]
- },
- "application/x-msterminal": {
- "source": "apache",
- "extensions": ["trm"]
- },
- "application/x-mswrite": {
- "source": "apache",
- "extensions": ["wri"]
- },
- "application/x-netcdf": {
- "source": "apache",
- "extensions": ["nc","cdf"]
- },
- "application/x-ns-proxy-autoconfig": {
- "compressible": true,
- "extensions": ["pac"]
- },
- "application/x-nzb": {
- "source": "apache",
- "extensions": ["nzb"]
- },
- "application/x-perl": {
- "source": "nginx",
- "extensions": ["pl","pm"]
- },
- "application/x-pilot": {
- "source": "nginx",
- "extensions": ["prc","pdb"]
- },
- "application/x-pkcs12": {
- "source": "apache",
- "compressible": false,
- "extensions": ["p12","pfx"]
- },
- "application/x-pkcs7-certificates": {
- "source": "apache",
- "extensions": ["p7b","spc"]
- },
- "application/x-pkcs7-certreqresp": {
- "source": "apache",
- "extensions": ["p7r"]
- },
- "application/x-pki-message": {
- "source": "iana"
- },
- "application/x-rar-compressed": {
- "source": "apache",
- "compressible": false,
- "extensions": ["rar"]
- },
- "application/x-redhat-package-manager": {
- "source": "nginx",
- "extensions": ["rpm"]
- },
- "application/x-research-info-systems": {
- "source": "apache",
- "extensions": ["ris"]
- },
- "application/x-sea": {
- "source": "nginx",
- "extensions": ["sea"]
- },
- "application/x-sh": {
- "source": "apache",
- "compressible": true,
- "extensions": ["sh"]
- },
- "application/x-shar": {
- "source": "apache",
- "extensions": ["shar"]
- },
- "application/x-shockwave-flash": {
- "source": "apache",
- "compressible": false,
- "extensions": ["swf"]
- },
- "application/x-silverlight-app": {
- "source": "apache",
- "extensions": ["xap"]
- },
- "application/x-sql": {
- "source": "apache",
- "extensions": ["sql"]
- },
- "application/x-stuffit": {
- "source": "apache",
- "compressible": false,
- "extensions": ["sit"]
- },
- "application/x-stuffitx": {
- "source": "apache",
- "extensions": ["sitx"]
- },
- "application/x-subrip": {
- "source": "apache",
- "extensions": ["srt"]
- },
- "application/x-sv4cpio": {
- "source": "apache",
- "extensions": ["sv4cpio"]
- },
- "application/x-sv4crc": {
- "source": "apache",
- "extensions": ["sv4crc"]
- },
- "application/x-t3vm-image": {
- "source": "apache",
- "extensions": ["t3"]
- },
- "application/x-tads": {
- "source": "apache",
- "extensions": ["gam"]
- },
- "application/x-tar": {
- "source": "apache",
- "compressible": true,
- "extensions": ["tar"]
- },
- "application/x-tcl": {
- "source": "apache",
- "extensions": ["tcl","tk"]
- },
- "application/x-tex": {
- "source": "apache",
- "extensions": ["tex"]
- },
- "application/x-tex-tfm": {
- "source": "apache",
- "extensions": ["tfm"]
- },
- "application/x-texinfo": {
- "source": "apache",
- "extensions": ["texinfo","texi"]
- },
- "application/x-tgif": {
- "source": "apache",
- "extensions": ["obj"]
- },
- "application/x-ustar": {
- "source": "apache",
- "extensions": ["ustar"]
- },
- "application/x-virtualbox-hdd": {
- "compressible": true,
- "extensions": ["hdd"]
- },
- "application/x-virtualbox-ova": {
- "compressible": true,
- "extensions": ["ova"]
- },
- "application/x-virtualbox-ovf": {
- "compressible": true,
- "extensions": ["ovf"]
- },
- "application/x-virtualbox-vbox": {
- "compressible": true,
- "extensions": ["vbox"]
- },
- "application/x-virtualbox-vbox-extpack": {
- "compressible": false,
- "extensions": ["vbox-extpack"]
- },
- "application/x-virtualbox-vdi": {
- "compressible": true,
- "extensions": ["vdi"]
- },
- "application/x-virtualbox-vhd": {
- "compressible": true,
- "extensions": ["vhd"]
- },
- "application/x-virtualbox-vmdk": {
- "compressible": true,
- "extensions": ["vmdk"]
- },
- "application/x-wais-source": {
- "source": "apache",
- "extensions": ["src"]
- },
- "application/x-web-app-manifest+json": {
- "compressible": true,
- "extensions": ["webapp"]
- },
- "application/x-www-form-urlencoded": {
- "source": "iana",
- "compressible": true
- },
- "application/x-x509-ca-cert": {
- "source": "iana",
- "extensions": ["der","crt","pem"]
- },
- "application/x-x509-ca-ra-cert": {
- "source": "iana"
- },
- "application/x-x509-next-ca-cert": {
- "source": "iana"
- },
- "application/x-xfig": {
- "source": "apache",
- "extensions": ["fig"]
- },
- "application/x-xliff+xml": {
- "source": "apache",
- "compressible": true,
- "extensions": ["xlf"]
- },
- "application/x-xpinstall": {
- "source": "apache",
- "compressible": false,
- "extensions": ["xpi"]
- },
- "application/x-xz": {
- "source": "apache",
- "extensions": ["xz"]
- },
- "application/x-zmachine": {
- "source": "apache",
- "extensions": ["z1","z2","z3","z4","z5","z6","z7","z8"]
- },
- "application/x400-bp": {
- "source": "iana"
- },
- "application/xacml+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/xaml+xml": {
- "source": "apache",
- "compressible": true,
- "extensions": ["xaml"]
- },
- "application/xcap-att+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["xav"]
- },
- "application/xcap-caps+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["xca"]
- },
- "application/xcap-diff+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["xdf"]
- },
- "application/xcap-el+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["xel"]
- },
- "application/xcap-error+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/xcap-ns+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["xns"]
- },
- "application/xcon-conference-info+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/xcon-conference-info-diff+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/xenc+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["xenc"]
- },
- "application/xhtml+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["xhtml","xht"]
- },
- "application/xhtml-voice+xml": {
- "source": "apache",
- "compressible": true
- },
- "application/xliff+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["xlf"]
- },
- "application/xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["xml","xsl","xsd","rng"]
- },
- "application/xml-dtd": {
- "source": "iana",
- "compressible": true,
- "extensions": ["dtd"]
- },
- "application/xml-external-parsed-entity": {
- "source": "iana"
- },
- "application/xml-patch+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/xmpp+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/xop+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["xop"]
- },
- "application/xproc+xml": {
- "source": "apache",
- "compressible": true,
- "extensions": ["xpl"]
- },
- "application/xslt+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["xsl","xslt"]
- },
- "application/xspf+xml": {
- "source": "apache",
- "compressible": true,
- "extensions": ["xspf"]
- },
- "application/xv+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["mxml","xhvml","xvml","xvm"]
- },
- "application/yang": {
- "source": "iana",
- "extensions": ["yang"]
- },
- "application/yang-data+json": {
- "source": "iana",
- "compressible": true
- },
- "application/yang-data+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/yang-patch+json": {
- "source": "iana",
- "compressible": true
- },
- "application/yang-patch+xml": {
- "source": "iana",
- "compressible": true
- },
- "application/yin+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["yin"]
- },
- "application/zip": {
- "source": "iana",
- "compressible": false,
- "extensions": ["zip"]
- },
- "application/zlib": {
- "source": "iana"
- },
- "application/zstd": {
- "source": "iana"
- },
- "audio/1d-interleaved-parityfec": {
- "source": "iana"
- },
- "audio/32kadpcm": {
- "source": "iana"
- },
- "audio/3gpp": {
- "source": "iana",
- "compressible": false,
- "extensions": ["3gpp"]
- },
- "audio/3gpp2": {
- "source": "iana"
- },
- "audio/aac": {
- "source": "iana"
- },
- "audio/ac3": {
- "source": "iana"
- },
- "audio/adpcm": {
- "source": "apache",
- "extensions": ["adp"]
- },
- "audio/amr": {
- "source": "iana",
- "extensions": ["amr"]
- },
- "audio/amr-wb": {
- "source": "iana"
- },
- "audio/amr-wb+": {
- "source": "iana"
- },
- "audio/aptx": {
- "source": "iana"
- },
- "audio/asc": {
- "source": "iana"
- },
- "audio/atrac-advanced-lossless": {
- "source": "iana"
- },
- "audio/atrac-x": {
- "source": "iana"
- },
- "audio/atrac3": {
- "source": "iana"
- },
- "audio/basic": {
- "source": "iana",
- "compressible": false,
- "extensions": ["au","snd"]
- },
- "audio/bv16": {
- "source": "iana"
- },
- "audio/bv32": {
- "source": "iana"
- },
- "audio/clearmode": {
- "source": "iana"
- },
- "audio/cn": {
- "source": "iana"
- },
- "audio/dat12": {
- "source": "iana"
- },
- "audio/dls": {
- "source": "iana"
- },
- "audio/dsr-es201108": {
- "source": "iana"
- },
- "audio/dsr-es202050": {
- "source": "iana"
- },
- "audio/dsr-es202211": {
- "source": "iana"
- },
- "audio/dsr-es202212": {
- "source": "iana"
- },
- "audio/dv": {
- "source": "iana"
- },
- "audio/dvi4": {
- "source": "iana"
- },
- "audio/eac3": {
- "source": "iana"
- },
- "audio/encaprtp": {
- "source": "iana"
- },
- "audio/evrc": {
- "source": "iana"
- },
- "audio/evrc-qcp": {
- "source": "iana"
- },
- "audio/evrc0": {
- "source": "iana"
- },
- "audio/evrc1": {
- "source": "iana"
- },
- "audio/evrcb": {
- "source": "iana"
- },
- "audio/evrcb0": {
- "source": "iana"
- },
- "audio/evrcb1": {
- "source": "iana"
- },
- "audio/evrcnw": {
- "source": "iana"
- },
- "audio/evrcnw0": {
- "source": "iana"
- },
- "audio/evrcnw1": {
- "source": "iana"
- },
- "audio/evrcwb": {
- "source": "iana"
- },
- "audio/evrcwb0": {
- "source": "iana"
- },
- "audio/evrcwb1": {
- "source": "iana"
- },
- "audio/evs": {
- "source": "iana"
- },
- "audio/flexfec": {
- "source": "iana"
- },
- "audio/fwdred": {
- "source": "iana"
- },
- "audio/g711-0": {
- "source": "iana"
- },
- "audio/g719": {
- "source": "iana"
- },
- "audio/g722": {
- "source": "iana"
- },
- "audio/g7221": {
- "source": "iana"
- },
- "audio/g723": {
- "source": "iana"
- },
- "audio/g726-16": {
- "source": "iana"
- },
- "audio/g726-24": {
- "source": "iana"
- },
- "audio/g726-32": {
- "source": "iana"
- },
- "audio/g726-40": {
- "source": "iana"
- },
- "audio/g728": {
- "source": "iana"
- },
- "audio/g729": {
- "source": "iana"
- },
- "audio/g7291": {
- "source": "iana"
- },
- "audio/g729d": {
- "source": "iana"
- },
- "audio/g729e": {
- "source": "iana"
- },
- "audio/gsm": {
- "source": "iana"
- },
- "audio/gsm-efr": {
- "source": "iana"
- },
- "audio/gsm-hr-08": {
- "source": "iana"
- },
- "audio/ilbc": {
- "source": "iana"
- },
- "audio/ip-mr_v2.5": {
- "source": "iana"
- },
- "audio/isac": {
- "source": "apache"
- },
- "audio/l16": {
- "source": "iana"
- },
- "audio/l20": {
- "source": "iana"
- },
- "audio/l24": {
- "source": "iana",
- "compressible": false
- },
- "audio/l8": {
- "source": "iana"
- },
- "audio/lpc": {
- "source": "iana"
- },
- "audio/melp": {
- "source": "iana"
- },
- "audio/melp1200": {
- "source": "iana"
- },
- "audio/melp2400": {
- "source": "iana"
- },
- "audio/melp600": {
- "source": "iana"
- },
- "audio/mhas": {
- "source": "iana"
- },
- "audio/midi": {
- "source": "apache",
- "extensions": ["mid","midi","kar","rmi"]
- },
- "audio/mobile-xmf": {
- "source": "iana",
- "extensions": ["mxmf"]
- },
- "audio/mp3": {
- "compressible": false,
- "extensions": ["mp3"]
- },
- "audio/mp4": {
- "source": "iana",
- "compressible": false,
- "extensions": ["m4a","mp4a"]
- },
- "audio/mp4a-latm": {
- "source": "iana"
- },
- "audio/mpa": {
- "source": "iana"
- },
- "audio/mpa-robust": {
- "source": "iana"
- },
- "audio/mpeg": {
- "source": "iana",
- "compressible": false,
- "extensions": ["mpga","mp2","mp2a","mp3","m2a","m3a"]
- },
- "audio/mpeg4-generic": {
- "source": "iana"
- },
- "audio/musepack": {
- "source": "apache"
- },
- "audio/ogg": {
- "source": "iana",
- "compressible": false,
- "extensions": ["oga","ogg","spx","opus"]
- },
- "audio/opus": {
- "source": "iana"
- },
- "audio/parityfec": {
- "source": "iana"
- },
- "audio/pcma": {
- "source": "iana"
- },
- "audio/pcma-wb": {
- "source": "iana"
- },
- "audio/pcmu": {
- "source": "iana"
- },
- "audio/pcmu-wb": {
- "source": "iana"
- },
- "audio/prs.sid": {
- "source": "iana"
- },
- "audio/qcelp": {
- "source": "iana"
- },
- "audio/raptorfec": {
- "source": "iana"
- },
- "audio/red": {
- "source": "iana"
- },
- "audio/rtp-enc-aescm128": {
- "source": "iana"
- },
- "audio/rtp-midi": {
- "source": "iana"
- },
- "audio/rtploopback": {
- "source": "iana"
- },
- "audio/rtx": {
- "source": "iana"
- },
- "audio/s3m": {
- "source": "apache",
- "extensions": ["s3m"]
- },
- "audio/scip": {
- "source": "iana"
- },
- "audio/silk": {
- "source": "apache",
- "extensions": ["sil"]
- },
- "audio/smv": {
- "source": "iana"
- },
- "audio/smv-qcp": {
- "source": "iana"
- },
- "audio/smv0": {
- "source": "iana"
- },
- "audio/sofa": {
- "source": "iana"
- },
- "audio/sp-midi": {
- "source": "iana"
- },
- "audio/speex": {
- "source": "iana"
- },
- "audio/t140c": {
- "source": "iana"
- },
- "audio/t38": {
- "source": "iana"
- },
- "audio/telephone-event": {
- "source": "iana"
- },
- "audio/tetra_acelp": {
- "source": "iana"
- },
- "audio/tetra_acelp_bb": {
- "source": "iana"
- },
- "audio/tone": {
- "source": "iana"
- },
- "audio/tsvcis": {
- "source": "iana"
- },
- "audio/uemclip": {
- "source": "iana"
- },
- "audio/ulpfec": {
- "source": "iana"
- },
- "audio/usac": {
- "source": "iana"
- },
- "audio/vdvi": {
- "source": "iana"
- },
- "audio/vmr-wb": {
- "source": "iana"
- },
- "audio/vnd.3gpp.iufp": {
- "source": "iana"
- },
- "audio/vnd.4sb": {
- "source": "iana"
- },
- "audio/vnd.audiokoz": {
- "source": "iana"
- },
- "audio/vnd.celp": {
- "source": "iana"
- },
- "audio/vnd.cisco.nse": {
- "source": "iana"
- },
- "audio/vnd.cmles.radio-events": {
- "source": "iana"
- },
- "audio/vnd.cns.anp1": {
- "source": "iana"
- },
- "audio/vnd.cns.inf1": {
- "source": "iana"
- },
- "audio/vnd.dece.audio": {
- "source": "iana",
- "extensions": ["uva","uvva"]
- },
- "audio/vnd.digital-winds": {
- "source": "iana",
- "extensions": ["eol"]
- },
- "audio/vnd.dlna.adts": {
- "source": "iana"
- },
- "audio/vnd.dolby.heaac.1": {
- "source": "iana"
- },
- "audio/vnd.dolby.heaac.2": {
- "source": "iana"
- },
- "audio/vnd.dolby.mlp": {
- "source": "iana"
- },
- "audio/vnd.dolby.mps": {
- "source": "iana"
- },
- "audio/vnd.dolby.pl2": {
- "source": "iana"
- },
- "audio/vnd.dolby.pl2x": {
- "source": "iana"
- },
- "audio/vnd.dolby.pl2z": {
- "source": "iana"
- },
- "audio/vnd.dolby.pulse.1": {
- "source": "iana"
- },
- "audio/vnd.dra": {
- "source": "iana",
- "extensions": ["dra"]
- },
- "audio/vnd.dts": {
- "source": "iana",
- "extensions": ["dts"]
- },
- "audio/vnd.dts.hd": {
- "source": "iana",
- "extensions": ["dtshd"]
- },
- "audio/vnd.dts.uhd": {
- "source": "iana"
- },
- "audio/vnd.dvb.file": {
- "source": "iana"
- },
- "audio/vnd.everad.plj": {
- "source": "iana"
- },
- "audio/vnd.hns.audio": {
- "source": "iana"
- },
- "audio/vnd.lucent.voice": {
- "source": "iana",
- "extensions": ["lvp"]
- },
- "audio/vnd.ms-playready.media.pya": {
- "source": "iana",
- "extensions": ["pya"]
- },
- "audio/vnd.nokia.mobile-xmf": {
- "source": "iana"
- },
- "audio/vnd.nortel.vbk": {
- "source": "iana"
- },
- "audio/vnd.nuera.ecelp4800": {
- "source": "iana",
- "extensions": ["ecelp4800"]
- },
- "audio/vnd.nuera.ecelp7470": {
- "source": "iana",
- "extensions": ["ecelp7470"]
- },
- "audio/vnd.nuera.ecelp9600": {
- "source": "iana",
- "extensions": ["ecelp9600"]
- },
- "audio/vnd.octel.sbc": {
- "source": "iana"
- },
- "audio/vnd.presonus.multitrack": {
- "source": "iana"
- },
- "audio/vnd.qcelp": {
- "source": "iana"
- },
- "audio/vnd.rhetorex.32kadpcm": {
- "source": "iana"
- },
- "audio/vnd.rip": {
- "source": "iana",
- "extensions": ["rip"]
- },
- "audio/vnd.rn-realaudio": {
- "compressible": false
- },
- "audio/vnd.sealedmedia.softseal.mpeg": {
- "source": "iana"
- },
- "audio/vnd.vmx.cvsd": {
- "source": "iana"
- },
- "audio/vnd.wave": {
- "compressible": false
- },
- "audio/vorbis": {
- "source": "iana",
- "compressible": false
- },
- "audio/vorbis-config": {
- "source": "iana"
- },
- "audio/wav": {
- "compressible": false,
- "extensions": ["wav"]
- },
- "audio/wave": {
- "compressible": false,
- "extensions": ["wav"]
- },
- "audio/webm": {
- "source": "apache",
- "compressible": false,
- "extensions": ["weba"]
- },
- "audio/x-aac": {
- "source": "apache",
- "compressible": false,
- "extensions": ["aac"]
- },
- "audio/x-aiff": {
- "source": "apache",
- "extensions": ["aif","aiff","aifc"]
- },
- "audio/x-caf": {
- "source": "apache",
- "compressible": false,
- "extensions": ["caf"]
- },
- "audio/x-flac": {
- "source": "apache",
- "extensions": ["flac"]
- },
- "audio/x-m4a": {
- "source": "nginx",
- "extensions": ["m4a"]
- },
- "audio/x-matroska": {
- "source": "apache",
- "extensions": ["mka"]
- },
- "audio/x-mpegurl": {
- "source": "apache",
- "extensions": ["m3u"]
- },
- "audio/x-ms-wax": {
- "source": "apache",
- "extensions": ["wax"]
- },
- "audio/x-ms-wma": {
- "source": "apache",
- "extensions": ["wma"]
- },
- "audio/x-pn-realaudio": {
- "source": "apache",
- "extensions": ["ram","ra"]
- },
- "audio/x-pn-realaudio-plugin": {
- "source": "apache",
- "extensions": ["rmp"]
- },
- "audio/x-realaudio": {
- "source": "nginx",
- "extensions": ["ra"]
- },
- "audio/x-tta": {
- "source": "apache"
- },
- "audio/x-wav": {
- "source": "apache",
- "extensions": ["wav"]
- },
- "audio/xm": {
- "source": "apache",
- "extensions": ["xm"]
- },
- "chemical/x-cdx": {
- "source": "apache",
- "extensions": ["cdx"]
- },
- "chemical/x-cif": {
- "source": "apache",
- "extensions": ["cif"]
- },
- "chemical/x-cmdf": {
- "source": "apache",
- "extensions": ["cmdf"]
- },
- "chemical/x-cml": {
- "source": "apache",
- "extensions": ["cml"]
- },
- "chemical/x-csml": {
- "source": "apache",
- "extensions": ["csml"]
- },
- "chemical/x-pdb": {
- "source": "apache"
- },
- "chemical/x-xyz": {
- "source": "apache",
- "extensions": ["xyz"]
- },
- "font/collection": {
- "source": "iana",
- "extensions": ["ttc"]
- },
- "font/otf": {
- "source": "iana",
- "compressible": true,
- "extensions": ["otf"]
- },
- "font/sfnt": {
- "source": "iana"
- },
- "font/ttf": {
- "source": "iana",
- "compressible": true,
- "extensions": ["ttf"]
- },
- "font/woff": {
- "source": "iana",
- "extensions": ["woff"]
- },
- "font/woff2": {
- "source": "iana",
- "extensions": ["woff2"]
- },
- "image/aces": {
- "source": "iana",
- "extensions": ["exr"]
- },
- "image/apng": {
- "compressible": false,
- "extensions": ["apng"]
- },
- "image/avci": {
- "source": "iana"
- },
- "image/avcs": {
- "source": "iana"
- },
- "image/avif": {
- "source": "iana",
- "compressible": false,
- "extensions": ["avif"]
- },
- "image/bmp": {
- "source": "iana",
- "compressible": true,
- "extensions": ["bmp"]
- },
- "image/cgm": {
- "source": "iana",
- "extensions": ["cgm"]
- },
- "image/dicom-rle": {
- "source": "iana",
- "extensions": ["drle"]
- },
- "image/emf": {
- "source": "iana",
- "extensions": ["emf"]
- },
- "image/fits": {
- "source": "iana",
- "extensions": ["fits"]
- },
- "image/g3fax": {
- "source": "iana",
- "extensions": ["g3"]
- },
- "image/gif": {
- "source": "iana",
- "compressible": false,
- "extensions": ["gif"]
- },
- "image/heic": {
- "source": "iana",
- "extensions": ["heic"]
- },
- "image/heic-sequence": {
- "source": "iana",
- "extensions": ["heics"]
- },
- "image/heif": {
- "source": "iana",
- "extensions": ["heif"]
- },
- "image/heif-sequence": {
- "source": "iana",
- "extensions": ["heifs"]
- },
- "image/hej2k": {
- "source": "iana",
- "extensions": ["hej2"]
- },
- "image/hsj2": {
- "source": "iana",
- "extensions": ["hsj2"]
- },
- "image/ief": {
- "source": "iana",
- "extensions": ["ief"]
- },
- "image/jls": {
- "source": "iana",
- "extensions": ["jls"]
- },
- "image/jp2": {
- "source": "iana",
- "compressible": false,
- "extensions": ["jp2","jpg2"]
- },
- "image/jpeg": {
- "source": "iana",
- "compressible": false,
- "extensions": ["jpeg","jpg","jpe"]
- },
- "image/jph": {
- "source": "iana",
- "extensions": ["jph"]
- },
- "image/jphc": {
- "source": "iana",
- "extensions": ["jhc"]
- },
- "image/jpm": {
- "source": "iana",
- "compressible": false,
- "extensions": ["jpm"]
- },
- "image/jpx": {
- "source": "iana",
- "compressible": false,
- "extensions": ["jpx","jpf"]
- },
- "image/jxr": {
- "source": "iana",
- "extensions": ["jxr"]
- },
- "image/jxra": {
- "source": "iana",
- "extensions": ["jxra"]
- },
- "image/jxrs": {
- "source": "iana",
- "extensions": ["jxrs"]
- },
- "image/jxs": {
- "source": "iana",
- "extensions": ["jxs"]
- },
- "image/jxsc": {
- "source": "iana",
- "extensions": ["jxsc"]
- },
- "image/jxsi": {
- "source": "iana",
- "extensions": ["jxsi"]
- },
- "image/jxss": {
- "source": "iana",
- "extensions": ["jxss"]
- },
- "image/ktx": {
- "source": "iana",
- "extensions": ["ktx"]
- },
- "image/ktx2": {
- "source": "iana",
- "extensions": ["ktx2"]
- },
- "image/naplps": {
- "source": "iana"
- },
- "image/pjpeg": {
- "compressible": false
- },
- "image/png": {
- "source": "iana",
- "compressible": false,
- "extensions": ["png"]
- },
- "image/prs.btif": {
- "source": "iana",
- "extensions": ["btif"]
- },
- "image/prs.pti": {
- "source": "iana",
- "extensions": ["pti"]
- },
- "image/pwg-raster": {
- "source": "iana"
- },
- "image/sgi": {
- "source": "apache",
- "extensions": ["sgi"]
- },
- "image/svg+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["svg","svgz"]
- },
- "image/t38": {
- "source": "iana",
- "extensions": ["t38"]
- },
- "image/tiff": {
- "source": "iana",
- "compressible": false,
- "extensions": ["tif","tiff"]
- },
- "image/tiff-fx": {
- "source": "iana",
- "extensions": ["tfx"]
- },
- "image/vnd.adobe.photoshop": {
- "source": "iana",
- "compressible": true,
- "extensions": ["psd"]
- },
- "image/vnd.airzip.accelerator.azv": {
- "source": "iana",
- "extensions": ["azv"]
- },
- "image/vnd.cns.inf2": {
- "source": "iana"
- },
- "image/vnd.dece.graphic": {
- "source": "iana",
- "extensions": ["uvi","uvvi","uvg","uvvg"]
- },
- "image/vnd.djvu": {
- "source": "iana",
- "extensions": ["djvu","djv"]
- },
- "image/vnd.dvb.subtitle": {
- "source": "iana",
- "extensions": ["sub"]
- },
- "image/vnd.dwg": {
- "source": "iana",
- "extensions": ["dwg"]
- },
- "image/vnd.dxf": {
- "source": "iana",
- "extensions": ["dxf"]
- },
- "image/vnd.fastbidsheet": {
- "source": "iana",
- "extensions": ["fbs"]
- },
- "image/vnd.fpx": {
- "source": "iana",
- "extensions": ["fpx"]
- },
- "image/vnd.fst": {
- "source": "iana",
- "extensions": ["fst"]
- },
- "image/vnd.fujixerox.edmics-mmr": {
- "source": "iana",
- "extensions": ["mmr"]
- },
- "image/vnd.fujixerox.edmics-rlc": {
- "source": "iana",
- "extensions": ["rlc"]
- },
- "image/vnd.globalgraphics.pgb": {
- "source": "iana"
- },
- "image/vnd.microsoft.icon": {
- "source": "iana",
- "extensions": ["ico"]
- },
- "image/vnd.mix": {
- "source": "iana"
- },
- "image/vnd.mozilla.apng": {
- "source": "iana"
- },
- "image/vnd.ms-dds": {
- "extensions": ["dds"]
- },
- "image/vnd.ms-modi": {
- "source": "iana",
- "extensions": ["mdi"]
- },
- "image/vnd.ms-photo": {
- "source": "apache",
- "extensions": ["wdp"]
- },
- "image/vnd.net-fpx": {
- "source": "iana",
- "extensions": ["npx"]
- },
- "image/vnd.pco.b16": {
- "source": "iana",
- "extensions": ["b16"]
- },
- "image/vnd.radiance": {
- "source": "iana"
- },
- "image/vnd.sealed.png": {
- "source": "iana"
- },
- "image/vnd.sealedmedia.softseal.gif": {
- "source": "iana"
- },
- "image/vnd.sealedmedia.softseal.jpg": {
- "source": "iana"
- },
- "image/vnd.svf": {
- "source": "iana"
- },
- "image/vnd.tencent.tap": {
- "source": "iana",
- "extensions": ["tap"]
- },
- "image/vnd.valve.source.texture": {
- "source": "iana",
- "extensions": ["vtf"]
- },
- "image/vnd.wap.wbmp": {
- "source": "iana",
- "extensions": ["wbmp"]
- },
- "image/vnd.xiff": {
- "source": "iana",
- "extensions": ["xif"]
- },
- "image/vnd.zbrush.pcx": {
- "source": "iana",
- "extensions": ["pcx"]
- },
- "image/webp": {
- "source": "apache",
- "extensions": ["webp"]
- },
- "image/wmf": {
- "source": "iana",
- "extensions": ["wmf"]
- },
- "image/x-3ds": {
- "source": "apache",
- "extensions": ["3ds"]
- },
- "image/x-cmu-raster": {
- "source": "apache",
- "extensions": ["ras"]
- },
- "image/x-cmx": {
- "source": "apache",
- "extensions": ["cmx"]
- },
- "image/x-freehand": {
- "source": "apache",
- "extensions": ["fh","fhc","fh4","fh5","fh7"]
- },
- "image/x-icon": {
- "source": "apache",
- "compressible": true,
- "extensions": ["ico"]
- },
- "image/x-jng": {
- "source": "nginx",
- "extensions": ["jng"]
- },
- "image/x-mrsid-image": {
- "source": "apache",
- "extensions": ["sid"]
- },
- "image/x-ms-bmp": {
- "source": "nginx",
- "compressible": true,
- "extensions": ["bmp"]
- },
- "image/x-pcx": {
- "source": "apache",
- "extensions": ["pcx"]
- },
- "image/x-pict": {
- "source": "apache",
- "extensions": ["pic","pct"]
- },
- "image/x-portable-anymap": {
- "source": "apache",
- "extensions": ["pnm"]
- },
- "image/x-portable-bitmap": {
- "source": "apache",
- "extensions": ["pbm"]
- },
- "image/x-portable-graymap": {
- "source": "apache",
- "extensions": ["pgm"]
- },
- "image/x-portable-pixmap": {
- "source": "apache",
- "extensions": ["ppm"]
- },
- "image/x-rgb": {
- "source": "apache",
- "extensions": ["rgb"]
- },
- "image/x-tga": {
- "source": "apache",
- "extensions": ["tga"]
- },
- "image/x-xbitmap": {
- "source": "apache",
- "extensions": ["xbm"]
- },
- "image/x-xcf": {
- "compressible": false
- },
- "image/x-xpixmap": {
- "source": "apache",
- "extensions": ["xpm"]
- },
- "image/x-xwindowdump": {
- "source": "apache",
- "extensions": ["xwd"]
- },
- "message/cpim": {
- "source": "iana"
- },
- "message/delivery-status": {
- "source": "iana"
- },
- "message/disposition-notification": {
- "source": "iana",
- "extensions": [
- "disposition-notification"
- ]
- },
- "message/external-body": {
- "source": "iana"
- },
- "message/feedback-report": {
- "source": "iana"
- },
- "message/global": {
- "source": "iana",
- "extensions": ["u8msg"]
- },
- "message/global-delivery-status": {
- "source": "iana",
- "extensions": ["u8dsn"]
- },
- "message/global-disposition-notification": {
- "source": "iana",
- "extensions": ["u8mdn"]
- },
- "message/global-headers": {
- "source": "iana",
- "extensions": ["u8hdr"]
- },
- "message/http": {
- "source": "iana",
- "compressible": false
- },
- "message/imdn+xml": {
- "source": "iana",
- "compressible": true
- },
- "message/news": {
- "source": "iana"
- },
- "message/partial": {
- "source": "iana",
- "compressible": false
- },
- "message/rfc822": {
- "source": "iana",
- "compressible": true,
- "extensions": ["eml","mime"]
- },
- "message/s-http": {
- "source": "iana"
- },
- "message/sip": {
- "source": "iana"
- },
- "message/sipfrag": {
- "source": "iana"
- },
- "message/tracking-status": {
- "source": "iana"
- },
- "message/vnd.si.simp": {
- "source": "iana"
- },
- "message/vnd.wfa.wsc": {
- "source": "iana",
- "extensions": ["wsc"]
- },
- "model/3mf": {
- "source": "iana",
- "extensions": ["3mf"]
- },
- "model/e57": {
- "source": "iana"
- },
- "model/gltf+json": {
- "source": "iana",
- "compressible": true,
- "extensions": ["gltf"]
- },
- "model/gltf-binary": {
- "source": "iana",
- "compressible": true,
- "extensions": ["glb"]
- },
- "model/iges": {
- "source": "iana",
- "compressible": false,
- "extensions": ["igs","iges"]
- },
- "model/mesh": {
- "source": "iana",
- "compressible": false,
- "extensions": ["msh","mesh","silo"]
- },
- "model/mtl": {
- "source": "iana",
- "extensions": ["mtl"]
- },
- "model/obj": {
- "source": "iana",
- "extensions": ["obj"]
- },
- "model/step+zip": {
- "source": "iana",
- "compressible": false,
- "extensions": ["stpz"]
- },
- "model/step-xml+zip": {
- "source": "iana",
- "compressible": false,
- "extensions": ["stpxz"]
- },
- "model/stl": {
- "source": "iana",
- "extensions": ["stl"]
- },
- "model/vnd.collada+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["dae"]
- },
- "model/vnd.dwf": {
- "source": "iana",
- "extensions": ["dwf"]
- },
- "model/vnd.flatland.3dml": {
- "source": "iana"
- },
- "model/vnd.gdl": {
- "source": "iana",
- "extensions": ["gdl"]
- },
- "model/vnd.gs-gdl": {
- "source": "apache"
- },
- "model/vnd.gs.gdl": {
- "source": "iana"
- },
- "model/vnd.gtw": {
- "source": "iana",
- "extensions": ["gtw"]
- },
- "model/vnd.moml+xml": {
- "source": "iana",
- "compressible": true
- },
- "model/vnd.mts": {
- "source": "iana",
- "extensions": ["mts"]
- },
- "model/vnd.opengex": {
- "source": "iana",
- "extensions": ["ogex"]
- },
- "model/vnd.parasolid.transmit.binary": {
- "source": "iana",
- "extensions": ["x_b"]
- },
- "model/vnd.parasolid.transmit.text": {
- "source": "iana",
- "extensions": ["x_t"]
- },
- "model/vnd.pytha.pyox": {
- "source": "iana"
- },
- "model/vnd.rosette.annotated-data-model": {
- "source": "iana"
- },
- "model/vnd.sap.vds": {
- "source": "iana",
- "extensions": ["vds"]
- },
- "model/vnd.usdz+zip": {
- "source": "iana",
- "compressible": false,
- "extensions": ["usdz"]
- },
- "model/vnd.valve.source.compiled-map": {
- "source": "iana",
- "extensions": ["bsp"]
- },
- "model/vnd.vtu": {
- "source": "iana",
- "extensions": ["vtu"]
- },
- "model/vrml": {
- "source": "iana",
- "compressible": false,
- "extensions": ["wrl","vrml"]
- },
- "model/x3d+binary": {
- "source": "apache",
- "compressible": false,
- "extensions": ["x3db","x3dbz"]
- },
- "model/x3d+fastinfoset": {
- "source": "iana",
- "extensions": ["x3db"]
- },
- "model/x3d+vrml": {
- "source": "apache",
- "compressible": false,
- "extensions": ["x3dv","x3dvz"]
- },
- "model/x3d+xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["x3d","x3dz"]
- },
- "model/x3d-vrml": {
- "source": "iana",
- "extensions": ["x3dv"]
- },
- "multipart/alternative": {
- "source": "iana",
- "compressible": false
- },
- "multipart/appledouble": {
- "source": "iana"
- },
- "multipart/byteranges": {
- "source": "iana"
- },
- "multipart/digest": {
- "source": "iana"
- },
- "multipart/encrypted": {
- "source": "iana",
- "compressible": false
- },
- "multipart/form-data": {
- "source": "iana",
- "compressible": false
- },
- "multipart/header-set": {
- "source": "iana"
- },
- "multipart/mixed": {
- "source": "iana"
- },
- "multipart/multilingual": {
- "source": "iana"
- },
- "multipart/parallel": {
- "source": "iana"
- },
- "multipart/related": {
- "source": "iana",
- "compressible": false
- },
- "multipart/report": {
- "source": "iana"
- },
- "multipart/signed": {
- "source": "iana",
- "compressible": false
- },
- "multipart/vnd.bint.med-plus": {
- "source": "iana"
- },
- "multipart/voice-message": {
- "source": "iana"
- },
- "multipart/x-mixed-replace": {
- "source": "iana"
- },
- "text/1d-interleaved-parityfec": {
- "source": "iana"
- },
- "text/cache-manifest": {
- "source": "iana",
- "compressible": true,
- "extensions": ["appcache","manifest"]
- },
- "text/calendar": {
- "source": "iana",
- "extensions": ["ics","ifb"]
- },
- "text/calender": {
- "compressible": true
- },
- "text/cmd": {
- "compressible": true
- },
- "text/coffeescript": {
- "extensions": ["coffee","litcoffee"]
- },
- "text/cql": {
- "source": "iana"
- },
- "text/cql-expression": {
- "source": "iana"
- },
- "text/cql-identifier": {
- "source": "iana"
- },
- "text/css": {
- "source": "iana",
- "charset": "UTF-8",
- "compressible": true,
- "extensions": ["css"]
- },
- "text/csv": {
- "source": "iana",
- "compressible": true,
- "extensions": ["csv"]
- },
- "text/csv-schema": {
- "source": "iana"
- },
- "text/directory": {
- "source": "iana"
- },
- "text/dns": {
- "source": "iana"
- },
- "text/ecmascript": {
- "source": "iana"
- },
- "text/encaprtp": {
- "source": "iana"
- },
- "text/enriched": {
- "source": "iana"
- },
- "text/fhirpath": {
- "source": "iana"
- },
- "text/flexfec": {
- "source": "iana"
- },
- "text/fwdred": {
- "source": "iana"
- },
- "text/gff3": {
- "source": "iana"
- },
- "text/grammar-ref-list": {
- "source": "iana"
- },
- "text/html": {
- "source": "iana",
- "compressible": true,
- "extensions": ["html","htm","shtml"]
- },
- "text/jade": {
- "extensions": ["jade"]
- },
- "text/javascript": {
- "source": "iana",
- "compressible": true
- },
- "text/jcr-cnd": {
- "source": "iana"
- },
- "text/jsx": {
- "compressible": true,
- "extensions": ["jsx"]
- },
- "text/less": {
- "compressible": true,
- "extensions": ["less"]
- },
- "text/markdown": {
- "source": "iana",
- "compressible": true,
- "extensions": ["markdown","md"]
- },
- "text/mathml": {
- "source": "nginx",
- "extensions": ["mml"]
- },
- "text/mdx": {
- "compressible": true,
- "extensions": ["mdx"]
- },
- "text/mizar": {
- "source": "iana"
- },
- "text/n3": {
- "source": "iana",
- "charset": "UTF-8",
- "compressible": true,
- "extensions": ["n3"]
- },
- "text/parameters": {
- "source": "iana",
- "charset": "UTF-8"
- },
- "text/parityfec": {
- "source": "iana"
- },
- "text/plain": {
- "source": "iana",
- "compressible": true,
- "extensions": ["txt","text","conf","def","list","log","in","ini"]
- },
- "text/provenance-notation": {
- "source": "iana",
- "charset": "UTF-8"
- },
- "text/prs.fallenstein.rst": {
- "source": "iana"
- },
- "text/prs.lines.tag": {
- "source": "iana",
- "extensions": ["dsc"]
- },
- "text/prs.prop.logic": {
- "source": "iana"
- },
- "text/raptorfec": {
- "source": "iana"
- },
- "text/red": {
- "source": "iana"
- },
- "text/rfc822-headers": {
- "source": "iana"
- },
- "text/richtext": {
- "source": "iana",
- "compressible": true,
- "extensions": ["rtx"]
- },
- "text/rtf": {
- "source": "iana",
- "compressible": true,
- "extensions": ["rtf"]
- },
- "text/rtp-enc-aescm128": {
- "source": "iana"
- },
- "text/rtploopback": {
- "source": "iana"
- },
- "text/rtx": {
- "source": "iana"
- },
- "text/sgml": {
- "source": "iana",
- "extensions": ["sgml","sgm"]
- },
- "text/shaclc": {
- "source": "iana"
- },
- "text/shex": {
- "source": "iana",
- "extensions": ["shex"]
- },
- "text/slim": {
- "extensions": ["slim","slm"]
- },
- "text/spdx": {
- "source": "iana",
- "extensions": ["spdx"]
- },
- "text/strings": {
- "source": "iana"
- },
- "text/stylus": {
- "extensions": ["stylus","styl"]
- },
- "text/t140": {
- "source": "iana"
- },
- "text/tab-separated-values": {
- "source": "iana",
- "compressible": true,
- "extensions": ["tsv"]
- },
- "text/troff": {
- "source": "iana",
- "extensions": ["t","tr","roff","man","me","ms"]
- },
- "text/turtle": {
- "source": "iana",
- "charset": "UTF-8",
- "extensions": ["ttl"]
- },
- "text/ulpfec": {
- "source": "iana"
- },
- "text/uri-list": {
- "source": "iana",
- "compressible": true,
- "extensions": ["uri","uris","urls"]
- },
- "text/vcard": {
- "source": "iana",
- "compressible": true,
- "extensions": ["vcard"]
- },
- "text/vnd.a": {
- "source": "iana"
- },
- "text/vnd.abc": {
- "source": "iana"
- },
- "text/vnd.ascii-art": {
- "source": "iana"
- },
- "text/vnd.curl": {
- "source": "iana",
- "extensions": ["curl"]
- },
- "text/vnd.curl.dcurl": {
- "source": "apache",
- "extensions": ["dcurl"]
- },
- "text/vnd.curl.mcurl": {
- "source": "apache",
- "extensions": ["mcurl"]
- },
- "text/vnd.curl.scurl": {
- "source": "apache",
- "extensions": ["scurl"]
- },
- "text/vnd.debian.copyright": {
- "source": "iana",
- "charset": "UTF-8"
- },
- "text/vnd.dmclientscript": {
- "source": "iana"
- },
- "text/vnd.dvb.subtitle": {
- "source": "iana",
- "extensions": ["sub"]
- },
- "text/vnd.esmertec.theme-descriptor": {
- "source": "iana",
- "charset": "UTF-8"
- },
- "text/vnd.ficlab.flt": {
- "source": "iana"
- },
- "text/vnd.fly": {
- "source": "iana",
- "extensions": ["fly"]
- },
- "text/vnd.fmi.flexstor": {
- "source": "iana",
- "extensions": ["flx"]
- },
- "text/vnd.gml": {
- "source": "iana"
- },
- "text/vnd.graphviz": {
- "source": "iana",
- "extensions": ["gv"]
- },
- "text/vnd.hans": {
- "source": "iana"
- },
- "text/vnd.hgl": {
- "source": "iana"
- },
- "text/vnd.in3d.3dml": {
- "source": "iana",
- "extensions": ["3dml"]
- },
- "text/vnd.in3d.spot": {
- "source": "iana",
- "extensions": ["spot"]
- },
- "text/vnd.iptc.newsml": {
- "source": "iana"
- },
- "text/vnd.iptc.nitf": {
- "source": "iana"
- },
- "text/vnd.latex-z": {
- "source": "iana"
- },
- "text/vnd.motorola.reflex": {
- "source": "iana"
- },
- "text/vnd.ms-mediapackage": {
- "source": "iana"
- },
- "text/vnd.net2phone.commcenter.command": {
- "source": "iana"
- },
- "text/vnd.radisys.msml-basic-layout": {
- "source": "iana"
- },
- "text/vnd.senx.warpscript": {
- "source": "iana"
- },
- "text/vnd.si.uricatalogue": {
- "source": "iana"
- },
- "text/vnd.sosi": {
- "source": "iana"
- },
- "text/vnd.sun.j2me.app-descriptor": {
- "source": "iana",
- "charset": "UTF-8",
- "extensions": ["jad"]
- },
- "text/vnd.trolltech.linguist": {
- "source": "iana",
- "charset": "UTF-8"
- },
- "text/vnd.wap.si": {
- "source": "iana"
- },
- "text/vnd.wap.sl": {
- "source": "iana"
- },
- "text/vnd.wap.wml": {
- "source": "iana",
- "extensions": ["wml"]
- },
- "text/vnd.wap.wmlscript": {
- "source": "iana",
- "extensions": ["wmls"]
- },
- "text/vtt": {
- "source": "iana",
- "charset": "UTF-8",
- "compressible": true,
- "extensions": ["vtt"]
- },
- "text/x-asm": {
- "source": "apache",
- "extensions": ["s","asm"]
- },
- "text/x-c": {
- "source": "apache",
- "extensions": ["c","cc","cxx","cpp","h","hh","dic"]
- },
- "text/x-component": {
- "source": "nginx",
- "extensions": ["htc"]
- },
- "text/x-fortran": {
- "source": "apache",
- "extensions": ["f","for","f77","f90"]
- },
- "text/x-gwt-rpc": {
- "compressible": true
- },
- "text/x-handlebars-template": {
- "extensions": ["hbs"]
- },
- "text/x-java-source": {
- "source": "apache",
- "extensions": ["java"]
- },
- "text/x-jquery-tmpl": {
- "compressible": true
- },
- "text/x-lua": {
- "extensions": ["lua"]
- },
- "text/x-markdown": {
- "compressible": true,
- "extensions": ["mkd"]
- },
- "text/x-nfo": {
- "source": "apache",
- "extensions": ["nfo"]
- },
- "text/x-opml": {
- "source": "apache",
- "extensions": ["opml"]
- },
- "text/x-org": {
- "compressible": true,
- "extensions": ["org"]
- },
- "text/x-pascal": {
- "source": "apache",
- "extensions": ["p","pas"]
- },
- "text/x-processing": {
- "compressible": true,
- "extensions": ["pde"]
- },
- "text/x-sass": {
- "extensions": ["sass"]
- },
- "text/x-scss": {
- "extensions": ["scss"]
- },
- "text/x-setext": {
- "source": "apache",
- "extensions": ["etx"]
- },
- "text/x-sfv": {
- "source": "apache",
- "extensions": ["sfv"]
- },
- "text/x-suse-ymp": {
- "compressible": true,
- "extensions": ["ymp"]
- },
- "text/x-uuencode": {
- "source": "apache",
- "extensions": ["uu"]
- },
- "text/x-vcalendar": {
- "source": "apache",
- "extensions": ["vcs"]
- },
- "text/x-vcard": {
- "source": "apache",
- "extensions": ["vcf"]
- },
- "text/xml": {
- "source": "iana",
- "compressible": true,
- "extensions": ["xml"]
- },
- "text/xml-external-parsed-entity": {
- "source": "iana"
- },
- "text/yaml": {
- "compressible": true,
- "extensions": ["yaml","yml"]
- },
- "video/1d-interleaved-parityfec": {
- "source": "iana"
- },
- "video/3gpp": {
- "source": "iana",
- "extensions": ["3gp","3gpp"]
- },
- "video/3gpp-tt": {
- "source": "iana"
- },
- "video/3gpp2": {
- "source": "iana",
- "extensions": ["3g2"]
- },
- "video/av1": {
- "source": "iana"
- },
- "video/bmpeg": {
- "source": "iana"
- },
- "video/bt656": {
- "source": "iana"
- },
- "video/celb": {
- "source": "iana"
- },
- "video/dv": {
- "source": "iana"
- },
- "video/encaprtp": {
- "source": "iana"
- },
- "video/ffv1": {
- "source": "iana"
- },
- "video/flexfec": {
- "source": "iana"
- },
- "video/h261": {
- "source": "iana",
- "extensions": ["h261"]
- },
- "video/h263": {
- "source": "iana",
- "extensions": ["h263"]
- },
- "video/h263-1998": {
- "source": "iana"
- },
- "video/h263-2000": {
- "source": "iana"
- },
- "video/h264": {
- "source": "iana",
- "extensions": ["h264"]
- },
- "video/h264-rcdo": {
- "source": "iana"
- },
- "video/h264-svc": {
- "source": "iana"
- },
- "video/h265": {
- "source": "iana"
- },
- "video/iso.segment": {
- "source": "iana",
- "extensions": ["m4s"]
- },
- "video/jpeg": {
- "source": "iana",
- "extensions": ["jpgv"]
- },
- "video/jpeg2000": {
- "source": "iana"
- },
- "video/jpm": {
- "source": "apache",
- "extensions": ["jpm","jpgm"]
- },
- "video/mj2": {
- "source": "iana",
- "extensions": ["mj2","mjp2"]
- },
- "video/mp1s": {
- "source": "iana"
- },
- "video/mp2p": {
- "source": "iana"
- },
- "video/mp2t": {
- "source": "iana",
- "extensions": ["ts"]
- },
- "video/mp4": {
- "source": "iana",
- "compressible": false,
- "extensions": ["mp4","mp4v","mpg4"]
- },
- "video/mp4v-es": {
- "source": "iana"
- },
- "video/mpeg": {
- "source": "iana",
- "compressible": false,
- "extensions": ["mpeg","mpg","mpe","m1v","m2v"]
- },
- "video/mpeg4-generic": {
- "source": "iana"
- },
- "video/mpv": {
- "source": "iana"
- },
- "video/nv": {
- "source": "iana"
- },
- "video/ogg": {
- "source": "iana",
- "compressible": false,
- "extensions": ["ogv"]
- },
- "video/parityfec": {
- "source": "iana"
- },
- "video/pointer": {
- "source": "iana"
- },
- "video/quicktime": {
- "source": "iana",
- "compressible": false,
- "extensions": ["qt","mov"]
- },
- "video/raptorfec": {
- "source": "iana"
- },
- "video/raw": {
- "source": "iana"
- },
- "video/rtp-enc-aescm128": {
- "source": "iana"
- },
- "video/rtploopback": {
- "source": "iana"
- },
- "video/rtx": {
- "source": "iana"
- },
- "video/scip": {
- "source": "iana"
- },
- "video/smpte291": {
- "source": "iana"
- },
- "video/smpte292m": {
- "source": "iana"
- },
- "video/ulpfec": {
- "source": "iana"
- },
- "video/vc1": {
- "source": "iana"
- },
- "video/vc2": {
- "source": "iana"
- },
- "video/vnd.cctv": {
- "source": "iana"
- },
- "video/vnd.dece.hd": {
- "source": "iana",
- "extensions": ["uvh","uvvh"]
- },
- "video/vnd.dece.mobile": {
- "source": "iana",
- "extensions": ["uvm","uvvm"]
- },
- "video/vnd.dece.mp4": {
- "source": "iana"
- },
- "video/vnd.dece.pd": {
- "source": "iana",
- "extensions": ["uvp","uvvp"]
- },
- "video/vnd.dece.sd": {
- "source": "iana",
- "extensions": ["uvs","uvvs"]
- },
- "video/vnd.dece.video": {
- "source": "iana",
- "extensions": ["uvv","uvvv"]
- },
- "video/vnd.directv.mpeg": {
- "source": "iana"
- },
- "video/vnd.directv.mpeg-tts": {
- "source": "iana"
- },
- "video/vnd.dlna.mpeg-tts": {
- "source": "iana"
- },
- "video/vnd.dvb.file": {
- "source": "iana",
- "extensions": ["dvb"]
- },
- "video/vnd.fvt": {
- "source": "iana",
- "extensions": ["fvt"]
- },
- "video/vnd.hns.video": {
- "source": "iana"
- },
- "video/vnd.iptvforum.1dparityfec-1010": {
- "source": "iana"
- },
- "video/vnd.iptvforum.1dparityfec-2005": {
- "source": "iana"
- },
- "video/vnd.iptvforum.2dparityfec-1010": {
- "source": "iana"
- },
- "video/vnd.iptvforum.2dparityfec-2005": {
- "source": "iana"
- },
- "video/vnd.iptvforum.ttsavc": {
- "source": "iana"
- },
- "video/vnd.iptvforum.ttsmpeg2": {
- "source": "iana"
- },
- "video/vnd.motorola.video": {
- "source": "iana"
- },
- "video/vnd.motorola.videop": {
- "source": "iana"
- },
- "video/vnd.mpegurl": {
- "source": "iana",
- "extensions": ["mxu","m4u"]
- },
- "video/vnd.ms-playready.media.pyv": {
- "source": "iana",
- "extensions": ["pyv"]
- },
- "video/vnd.nokia.interleaved-multimedia": {
- "source": "iana"
- },
- "video/vnd.nokia.mp4vr": {
- "source": "iana"
- },
- "video/vnd.nokia.videovoip": {
- "source": "iana"
- },
- "video/vnd.objectvideo": {
- "source": "iana"
- },
- "video/vnd.radgamettools.bink": {
- "source": "iana"
- },
- "video/vnd.radgamettools.smacker": {
- "source": "iana"
- },
- "video/vnd.sealed.mpeg1": {
- "source": "iana"
- },
- "video/vnd.sealed.mpeg4": {
- "source": "iana"
- },
- "video/vnd.sealed.swf": {
- "source": "iana"
- },
- "video/vnd.sealedmedia.softseal.mov": {
- "source": "iana"
- },
- "video/vnd.uvvu.mp4": {
- "source": "iana",
- "extensions": ["uvu","uvvu"]
- },
- "video/vnd.vivo": {
- "source": "iana",
- "extensions": ["viv"]
- },
- "video/vnd.youtube.yt": {
- "source": "iana"
- },
- "video/vp8": {
- "source": "iana"
- },
- "video/vp9": {
- "source": "iana"
- },
- "video/webm": {
- "source": "apache",
- "compressible": false,
- "extensions": ["webm"]
- },
- "video/x-f4v": {
- "source": "apache",
- "extensions": ["f4v"]
- },
- "video/x-fli": {
- "source": "apache",
- "extensions": ["fli"]
- },
- "video/x-flv": {
- "source": "apache",
- "compressible": false,
- "extensions": ["flv"]
- },
- "video/x-m4v": {
- "source": "apache",
- "extensions": ["m4v"]
- },
- "video/x-matroska": {
- "source": "apache",
- "compressible": false,
- "extensions": ["mkv","mk3d","mks"]
- },
- "video/x-mng": {
- "source": "apache",
- "extensions": ["mng"]
- },
- "video/x-ms-asf": {
- "source": "apache",
- "extensions": ["asf","asx"]
- },
- "video/x-ms-vob": {
- "source": "apache",
- "extensions": ["vob"]
- },
- "video/x-ms-wm": {
- "source": "apache",
- "extensions": ["wm"]
- },
- "video/x-ms-wmv": {
- "source": "apache",
- "compressible": false,
- "extensions": ["wmv"]
- },
- "video/x-ms-wmx": {
- "source": "apache",
- "extensions": ["wmx"]
- },
- "video/x-ms-wvx": {
- "source": "apache",
- "extensions": ["wvx"]
- },
- "video/x-msvideo": {
- "source": "apache",
- "extensions": ["avi"]
- },
- "video/x-sgi-movie": {
- "source": "apache",
- "extensions": ["movie"]
- },
- "video/x-smv": {
- "source": "apache",
- "extensions": ["smv"]
- },
- "x-conference/x-cooltalk": {
- "source": "apache",
- "extensions": ["ice"]
- },
- "x-shader/x-fragment": {
- "compressible": true
- },
- "x-shader/x-vertex": {
- "compressible": true
- }
-}
diff --git a/deps/npm/node_modules/mime-db/index.js b/deps/npm/node_modules/mime-db/index.js
deleted file mode 100644
index 551031f690b5ca..00000000000000
--- a/deps/npm/node_modules/mime-db/index.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*!
- * mime-db
- * Copyright(c) 2014 Jonathan Ong
- * MIT Licensed
- */
-
-/**
- * Module exports.
- */
-
-module.exports = require('./db.json')
diff --git a/deps/npm/node_modules/mime-db/package.json b/deps/npm/node_modules/mime-db/package.json
deleted file mode 100644
index e546efa728fd18..00000000000000
--- a/deps/npm/node_modules/mime-db/package.json
+++ /dev/null
@@ -1,59 +0,0 @@
-{
- "name": "mime-db",
- "description": "Media Type Database",
- "version": "1.49.0",
- "contributors": [
- "Douglas Christopher Wilson ",
- "Jonathan Ong (http://jongleberry.com)",
- "Robert Kieffer (http://github.com/broofa)"
- ],
- "license": "MIT",
- "keywords": [
- "mime",
- "db",
- "type",
- "types",
- "database",
- "charset",
- "charsets"
- ],
- "repository": "jshttp/mime-db",
- "devDependencies": {
- "bluebird": "3.7.2",
- "co": "4.6.0",
- "cogent": "1.0.1",
- "csv-parse": "4.16.0",
- "eslint": "7.31.0",
- "eslint-config-standard": "15.0.1",
- "eslint-plugin-import": "2.23.4",
- "eslint-plugin-markdown": "2.2.0",
- "eslint-plugin-node": "11.1.0",
- "eslint-plugin-promise": "5.1.0",
- "eslint-plugin-standard": "4.1.0",
- "gnode": "0.1.2",
- "mocha": "9.0.3",
- "nyc": "15.1.0",
- "raw-body": "2.4.1",
- "stream-to-array": "2.3.0"
- },
- "files": [
- "HISTORY.md",
- "LICENSE",
- "README.md",
- "db.json",
- "index.js"
- ],
- "engines": {
- "node": ">= 0.6"
- },
- "scripts": {
- "build": "node scripts/build",
- "fetch": "node scripts/fetch-apache && gnode scripts/fetch-iana && node scripts/fetch-nginx",
- "lint": "eslint .",
- "test": "mocha --reporter spec --bail --check-leaks test/",
- "test-ci": "nyc --reporter=lcov --reporter=text npm test",
- "test-cov": "nyc --reporter=html --reporter=text npm test",
- "update": "npm run fetch && npm run build",
- "version": "node scripts/version-history.js && git add HISTORY.md"
- }
-}
diff --git a/deps/npm/node_modules/mime-types/HISTORY.md b/deps/npm/node_modules/mime-types/HISTORY.md
deleted file mode 100644
index 977ffbb15d8657..00000000000000
--- a/deps/npm/node_modules/mime-types/HISTORY.md
+++ /dev/null
@@ -1,378 +0,0 @@
-2.1.32 / 2021-07-27
-===================
-
- * deps: mime-db@1.49.0
- - Add extension `.trig` to `application/trig`
- - Add new upstream MIME types
-
-2.1.31 / 2021-06-01
-===================
-
- * deps: mime-db@1.48.0
- - Add extension `.mvt` to `application/vnd.mapbox-vector-tile`
- - Add new upstream MIME types
- - Mark `text/yaml` as compressible
-
-2.1.30 / 2021-04-02
-===================
-
- * deps: mime-db@1.47.0
- - Add extension `.amr` to `audio/amr`
- - Remove ambigious extensions from IANA for `application/*+xml` types
- - Update primary extension to `.es` for `application/ecmascript`
-
-2.1.29 / 2021-02-17
-===================
-
- * deps: mime-db@1.46.0
- - Add extension `.amr` to `audio/amr`
- - Add extension `.m4s` to `video/iso.segment`
- - Add extension `.opus` to `audio/ogg`
- - Add new upstream MIME types
-
-2.1.28 / 2021-01-01
-===================
-
- * deps: mime-db@1.45.0
- - Add `application/ubjson` with extension `.ubj`
- - Add `image/avif` with extension `.avif`
- - Add `image/ktx2` with extension `.ktx2`
- - Add extension `.dbf` to `application/vnd.dbf`
- - Add extension `.rar` to `application/vnd.rar`
- - Add extension `.td` to `application/urc-targetdesc+xml`
- - Add new upstream MIME types
- - Fix extension of `application/vnd.apple.keynote` to be `.key`
-
-2.1.27 / 2020-04-23
-===================
-
- * deps: mime-db@1.44.0
- - Add charsets from IANA
- - Add extension `.cjs` to `application/node`
- - Add new upstream MIME types
-
-2.1.26 / 2020-01-05
-===================
-
- * deps: mime-db@1.43.0
- - Add `application/x-keepass2` with extension `.kdbx`
- - Add extension `.mxmf` to `audio/mobile-xmf`
- - Add extensions from IANA for `application/*+xml` types
- - Add new upstream MIME types
-
-2.1.25 / 2019-11-12
-===================
-
- * deps: mime-db@1.42.0
- - Add new upstream MIME types
- - Add `application/toml` with extension `.toml`
- - Add `image/vnd.ms-dds` with extension `.dds`
-
-2.1.24 / 2019-04-20
-===================
-
- * deps: mime-db@1.40.0
- - Add extensions from IANA for `model/*` types
- - Add `text/mdx` with extension `.mdx`
-
-2.1.23 / 2019-04-17
-===================
-
- * deps: mime-db@~1.39.0
- - Add extensions `.siv` and `.sieve` to `application/sieve`
- - Add new upstream MIME types
-
-2.1.22 / 2019-02-14
-===================
-
- * deps: mime-db@~1.38.0
- - Add extension `.nq` to `application/n-quads`
- - Add extension `.nt` to `application/n-triples`
- - Add new upstream MIME types
- - Mark `text/less` as compressible
-
-2.1.21 / 2018-10-19
-===================
-
- * deps: mime-db@~1.37.0
- - Add extensions to HEIC image types
- - Add new upstream MIME types
-
-2.1.20 / 2018-08-26
-===================
-
- * deps: mime-db@~1.36.0
- - Add Apple file extensions from IANA
- - Add extensions from IANA for `image/*` types
- - Add new upstream MIME types
-
-2.1.19 / 2018-07-17
-===================
-
- * deps: mime-db@~1.35.0
- - Add extension `.csl` to `application/vnd.citationstyles.style+xml`
- - Add extension `.es` to `application/ecmascript`
- - Add extension `.owl` to `application/rdf+xml`
- - Add new upstream MIME types
- - Add UTF-8 as default charset for `text/turtle`
-
-2.1.18 / 2018-02-16
-===================
-
- * deps: mime-db@~1.33.0
- - Add `application/raml+yaml` with extension `.raml`
- - Add `application/wasm` with extension `.wasm`
- - Add `text/shex` with extension `.shex`
- - Add extensions for JPEG-2000 images
- - Add extensions from IANA for `message/*` types
- - Add new upstream MIME types
- - Update font MIME types
- - Update `text/hjson` to registered `application/hjson`
-
-2.1.17 / 2017-09-01
-===================
-
- * deps: mime-db@~1.30.0
- - Add `application/vnd.ms-outlook`
- - Add `application/x-arj`
- - Add extension `.mjs` to `application/javascript`
- - Add glTF types and extensions
- - Add new upstream MIME types
- - Add `text/x-org`
- - Add VirtualBox MIME types
- - Fix `source` records for `video/*` types that are IANA
- - Update `font/opentype` to registered `font/otf`
-
-2.1.16 / 2017-07-24
-===================
-
- * deps: mime-db@~1.29.0
- - Add `application/fido.trusted-apps+json`
- - Add extension `.wadl` to `application/vnd.sun.wadl+xml`
- - Add extension `.gz` to `application/gzip`
- - Add new upstream MIME types
- - Update extensions `.md` and `.markdown` to be `text/markdown`
-
-2.1.15 / 2017-03-23
-===================
-
- * deps: mime-db@~1.27.0
- - Add new mime types
- - Add `image/apng`
-
-2.1.14 / 2017-01-14
-===================
-
- * deps: mime-db@~1.26.0
- - Add new mime types
-
-2.1.13 / 2016-11-18
-===================
-
- * deps: mime-db@~1.25.0
- - Add new mime types
-
-2.1.12 / 2016-09-18
-===================
-
- * deps: mime-db@~1.24.0
- - Add new mime types
- - Add `audio/mp3`
-
-2.1.11 / 2016-05-01
-===================
-
- * deps: mime-db@~1.23.0
- - Add new mime types
-
-2.1.10 / 2016-02-15
-===================
-
- * deps: mime-db@~1.22.0
- - Add new mime types
- - Fix extension of `application/dash+xml`
- - Update primary extension for `audio/mp4`
-
-2.1.9 / 2016-01-06
-==================
-
- * deps: mime-db@~1.21.0
- - Add new mime types
-
-2.1.8 / 2015-11-30
-==================
-
- * deps: mime-db@~1.20.0
- - Add new mime types
-
-2.1.7 / 2015-09-20
-==================
-
- * deps: mime-db@~1.19.0
- - Add new mime types
-
-2.1.6 / 2015-09-03
-==================
-
- * deps: mime-db@~1.18.0
- - Add new mime types
-
-2.1.5 / 2015-08-20
-==================
-
- * deps: mime-db@~1.17.0
- - Add new mime types
-
-2.1.4 / 2015-07-30
-==================
-
- * deps: mime-db@~1.16.0
- - Add new mime types
-
-2.1.3 / 2015-07-13
-==================
-
- * deps: mime-db@~1.15.0
- - Add new mime types
-
-2.1.2 / 2015-06-25
-==================
-
- * deps: mime-db@~1.14.0
- - Add new mime types
-
-2.1.1 / 2015-06-08
-==================
-
- * perf: fix deopt during mapping
-
-2.1.0 / 2015-06-07
-==================
-
- * Fix incorrectly treating extension-less file name as extension
- - i.e. `'path/to/json'` will no longer return `application/json`
- * Fix `.charset(type)` to accept parameters
- * Fix `.charset(type)` to match case-insensitive
- * Improve generation of extension to MIME mapping
- * Refactor internals for readability and no argument reassignment
- * Prefer `application/*` MIME types from the same source
- * Prefer any type over `application/octet-stream`
- * deps: mime-db@~1.13.0
- - Add nginx as a source
- - Add new mime types
-
-2.0.14 / 2015-06-06
-===================
-
- * deps: mime-db@~1.12.0
- - Add new mime types
-
-2.0.13 / 2015-05-31
-===================
-
- * deps: mime-db@~1.11.0
- - Add new mime types
-
-2.0.12 / 2015-05-19
-===================
-
- * deps: mime-db@~1.10.0
- - Add new mime types
-
-2.0.11 / 2015-05-05
-===================
-
- * deps: mime-db@~1.9.1
- - Add new mime types
-
-2.0.10 / 2015-03-13
-===================
-
- * deps: mime-db@~1.8.0
- - Add new mime types
-
-2.0.9 / 2015-02-09
-==================
-
- * deps: mime-db@~1.7.0
- - Add new mime types
- - Community extensions ownership transferred from `node-mime`
-
-2.0.8 / 2015-01-29
-==================
-
- * deps: mime-db@~1.6.0
- - Add new mime types
-
-2.0.7 / 2014-12-30
-==================
-
- * deps: mime-db@~1.5.0
- - Add new mime types
- - Fix various invalid MIME type entries
-
-2.0.6 / 2014-12-30
-==================
-
- * deps: mime-db@~1.4.0
- - Add new mime types
- - Fix various invalid MIME type entries
- - Remove example template MIME types
-
-2.0.5 / 2014-12-29
-==================
-
- * deps: mime-db@~1.3.1
- - Fix missing extensions
-
-2.0.4 / 2014-12-10
-==================
-
- * deps: mime-db@~1.3.0
- - Add new mime types
-
-2.0.3 / 2014-11-09
-==================
-
- * deps: mime-db@~1.2.0
- - Add new mime types
-
-2.0.2 / 2014-09-28
-==================
-
- * deps: mime-db@~1.1.0
- - Add new mime types
- - Add additional compressible
- - Update charsets
-
-2.0.1 / 2014-09-07
-==================
-
- * Support Node.js 0.6
-
-2.0.0 / 2014-09-02
-==================
-
- * Use `mime-db`
- * Remove `.define()`
-
-1.0.2 / 2014-08-04
-==================
-
- * Set charset=utf-8 for `text/javascript`
-
-1.0.1 / 2014-06-24
-==================
-
- * Add `text/jsx` type
-
-1.0.0 / 2014-05-12
-==================
-
- * Return `false` for unknown types
- * Set charset=utf-8 for `application/json`
-
-0.1.0 / 2014-05-02
-==================
-
- * Initial release
diff --git a/deps/npm/node_modules/mime-types/LICENSE b/deps/npm/node_modules/mime-types/LICENSE
deleted file mode 100644
index 06166077be4d1f..00000000000000
--- a/deps/npm/node_modules/mime-types/LICENSE
+++ /dev/null
@@ -1,23 +0,0 @@
-(The MIT License)
-
-Copyright (c) 2014 Jonathan Ong
-Copyright (c) 2015 Douglas Christopher Wilson
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-'Software'), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/deps/npm/node_modules/mime-types/index.js b/deps/npm/node_modules/mime-types/index.js
deleted file mode 100644
index b9f34d5991077f..00000000000000
--- a/deps/npm/node_modules/mime-types/index.js
+++ /dev/null
@@ -1,188 +0,0 @@
-/*!
- * mime-types
- * Copyright(c) 2014 Jonathan Ong
- * Copyright(c) 2015 Douglas Christopher Wilson
- * MIT Licensed
- */
-
-'use strict'
-
-/**
- * Module dependencies.
- * @private
- */
-
-var db = require('mime-db')
-var extname = require('path').extname
-
-/**
- * Module variables.
- * @private
- */
-
-var EXTRACT_TYPE_REGEXP = /^\s*([^;\s]*)(?:;|\s|$)/
-var TEXT_TYPE_REGEXP = /^text\//i
-
-/**
- * Module exports.
- * @public
- */
-
-exports.charset = charset
-exports.charsets = { lookup: charset }
-exports.contentType = contentType
-exports.extension = extension
-exports.extensions = Object.create(null)
-exports.lookup = lookup
-exports.types = Object.create(null)
-
-// Populate the extensions/types maps
-populateMaps(exports.extensions, exports.types)
-
-/**
- * Get the default charset for a MIME type.
- *
- * @param {string} type
- * @return {boolean|string}
- */
-
-function charset (type) {
- if (!type || typeof type !== 'string') {
- return false
- }
-
- // TODO: use media-typer
- var match = EXTRACT_TYPE_REGEXP.exec(type)
- var mime = match && db[match[1].toLowerCase()]
-
- if (mime && mime.charset) {
- return mime.charset
- }
-
- // default text/* to utf-8
- if (match && TEXT_TYPE_REGEXP.test(match[1])) {
- return 'UTF-8'
- }
-
- return false
-}
-
-/**
- * Create a full Content-Type header given a MIME type or extension.
- *
- * @param {string} str
- * @return {boolean|string}
- */
-
-function contentType (str) {
- // TODO: should this even be in this module?
- if (!str || typeof str !== 'string') {
- return false
- }
-
- var mime = str.indexOf('/') === -1
- ? exports.lookup(str)
- : str
-
- if (!mime) {
- return false
- }
-
- // TODO: use content-type or other module
- if (mime.indexOf('charset') === -1) {
- var charset = exports.charset(mime)
- if (charset) mime += '; charset=' + charset.toLowerCase()
- }
-
- return mime
-}
-
-/**
- * Get the default extension for a MIME type.
- *
- * @param {string} type
- * @return {boolean|string}
- */
-
-function extension (type) {
- if (!type || typeof type !== 'string') {
- return false
- }
-
- // TODO: use media-typer
- var match = EXTRACT_TYPE_REGEXP.exec(type)
-
- // get extensions
- var exts = match && exports.extensions[match[1].toLowerCase()]
-
- if (!exts || !exts.length) {
- return false
- }
-
- return exts[0]
-}
-
-/**
- * Lookup the MIME type for a file path/extension.
- *
- * @param {string} path
- * @return {boolean|string}
- */
-
-function lookup (path) {
- if (!path || typeof path !== 'string') {
- return false
- }
-
- // get the extension ("ext" or ".ext" or full path)
- var extension = extname('x.' + path)
- .toLowerCase()
- .substr(1)
-
- if (!extension) {
- return false
- }
-
- return exports.types[extension] || false
-}
-
-/**
- * Populate the extensions and types maps.
- * @private
- */
-
-function populateMaps (extensions, types) {
- // source preference (least -> most)
- var preference = ['nginx', 'apache', undefined, 'iana']
-
- Object.keys(db).forEach(function forEachMimeType (type) {
- var mime = db[type]
- var exts = mime.extensions
-
- if (!exts || !exts.length) {
- return
- }
-
- // mime -> extensions
- extensions[type] = exts
-
- // extension -> mime
- for (var i = 0; i < exts.length; i++) {
- var extension = exts[i]
-
- if (types[extension]) {
- var from = preference.indexOf(db[types[extension]].source)
- var to = preference.indexOf(mime.source)
-
- if (types[extension] !== 'application/octet-stream' &&
- (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) {
- // skip the remapping
- continue
- }
- }
-
- // set the extension -> mime
- types[extension] = type
- }
- })
-}
diff --git a/deps/npm/node_modules/mime-types/package.json b/deps/npm/node_modules/mime-types/package.json
deleted file mode 100644
index 7567acd5508dff..00000000000000
--- a/deps/npm/node_modules/mime-types/package.json
+++ /dev/null
@@ -1,44 +0,0 @@
-{
- "name": "mime-types",
- "description": "The ultimate javascript content-type utility.",
- "version": "2.1.32",
- "contributors": [
- "Douglas Christopher Wilson ",
- "Jeremiah Senkpiel (https://searchbeam.jit.su)",
- "Jonathan Ong (http://jongleberry.com)"
- ],
- "license": "MIT",
- "keywords": [
- "mime",
- "types"
- ],
- "repository": "jshttp/mime-types",
- "dependencies": {
- "mime-db": "1.49.0"
- },
- "devDependencies": {
- "eslint": "7.31.0",
- "eslint-config-standard": "14.1.1",
- "eslint-plugin-import": "2.23.4",
- "eslint-plugin-markdown": "2.2.0",
- "eslint-plugin-node": "11.1.0",
- "eslint-plugin-promise": "5.1.0",
- "eslint-plugin-standard": "4.1.0",
- "mocha": "9.0.3",
- "nyc": "15.1.0"
- },
- "files": [
- "HISTORY.md",
- "LICENSE",
- "index.js"
- ],
- "engines": {
- "node": ">= 0.6"
- },
- "scripts": {
- "lint": "eslint .",
- "test": "mocha --reporter spec test/test.js",
- "test-ci": "nyc --reporter=lcov --reporter=text npm test",
- "test-cov": "nyc --reporter=html --reporter=text npm test"
- }
-}
diff --git a/deps/npm/node_modules/node-gyp/.github/ISSUE_TEMPLATE.md b/deps/npm/node_modules/node-gyp/.github/ISSUE_TEMPLATE.md
index 485e26ecae8761..c6b213d7be3663 100644
--- a/deps/npm/node_modules/node-gyp/.github/ISSUE_TEMPLATE.md
+++ b/deps/npm/node_modules/node-gyp/.github/ISSUE_TEMPLATE.md
@@ -13,6 +13,10 @@ provide the basic information we require.
-->
+Please look thru your error log for the string `gyp info using node-gyp@` and if the version number is less than the [current release of node-gyp](https://github.com/nodejs/node-gyp/releases) then __please upgrade__ using the instructions at https://github.com/nodejs/node-gyp/blob/master/docs/Updating-npm-bundled-node-gyp.md and try your command again.
+
+Requests for help with [`node-sass` are very common](https://github.com/nodejs/node-gyp/issues?q=label%3A%22Node+Sass+--%3E+Dart+Sass%22). Please be aware that this package is deprecated, you should seek alternatives and avoid opening new issues about it here.
+
* **Node Version**:
* **Platform**:
* **Compiler**:
@@ -46,4 +50,3 @@ Usage: npm
-
diff --git a/deps/npm/node_modules/node-gyp/.github/PULL_REQUEST_TEMPLATE.md b/deps/npm/node_modules/node-gyp/.github/PULL_REQUEST_TEMPLATE.md
index 10156d89af112e..bcc4bb1a048c80 100644
--- a/deps/npm/node_modules/node-gyp/.github/PULL_REQUEST_TEMPLATE.md
+++ b/deps/npm/node_modules/node-gyp/.github/PULL_REQUEST_TEMPLATE.md
@@ -10,7 +10,7 @@ Contributor guide: https://github.com/nodejs/node/blob/master/CONTRIBUTING.md
- [ ] `npm install && npm test` passes
- [ ] tests are included
- [ ] documentation is changed or added
-- [ ] commit message follows [commit guidelines](https://github.com/nodejs/node/blob/master/doc/guides/contributing/pull-requests.md#commit-message-guidelines)
+- [ ] commit message follows [commit guidelines](https://github.com/googleapis/release-please#how-should-i-write-my-commits)
##### Description of change
diff --git a/deps/npm/node_modules/node-gyp/.github/workflows/release-please.yml b/deps/npm/node_modules/node-gyp/.github/workflows/release-please.yml
new file mode 100644
index 00000000000000..7d3cf9dd450b01
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/.github/workflows/release-please.yml
@@ -0,0 +1,56 @@
+name: release-please
+
+on:
+ push:
+ branches:
+ - master
+
+jobs:
+ release-please:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: google-github-actions/release-please-action@v2
+ id: release
+ with:
+ package-name: node-gyp
+ release-type: node
+ changelog-types: >
+ [{"type":"feat","section":"Features","hidden":false},
+ {"type":"fix","section":"Bug Fixes","hidden":false},
+ {"type":"bin","section":"Core","hidden":false},
+ {"type":"gyp","section":"Core","hidden":false},
+ {"type":"lib","section":"Core","hidden":false},
+ {"type":"src","section":"Core","hidden":false},
+ {"type":"test","section":"Tests","hidden":false},
+ {"type":"build","section":"Core","hidden":false},
+ {"type":"clean","section":"Core","hidden":false},
+ {"type":"configure","section":"Core","hidden":false},
+ {"type":"install","section":"Core","hidden":false},
+ {"type":"list","section":"Core","hidden":false},
+ {"type":"rebuild","section":"Core","hidden":false},
+ {"type":"remove","section":"Core","hidden":false},
+ {"type":"deps","section":"Core","hidden":false},
+ {"type":"python","section":"Core","hidden":false},
+ {"type":"lin","section":"Core","hidden":false},
+ {"type":"linux","section":"Core","hidden":false},
+ {"type":"mac","section":"Core","hidden":false},
+ {"type":"macos","section":"Core","hidden":false},
+ {"type":"win","section":"Core","hidden":false},
+ {"type":"windows","section":"Core","hidden":false},
+ {"type":"zos","section":"Core","hidden":false},
+ {"type":"doc","section":"Doc","hidden":false},
+ {"type":"docs","section":"Doc","hidden":false},
+ {"type":"readme","section":"Doc","hidden":false},
+ {"type":"chore","section":"Miscellaneous","hidden":false},
+ {"type":"refactor","section":"Miscellaneous","hidden":false},
+ {"type":"ci","section":"Miscellaneous","hidden":false},
+ {"type":"meta","section":"Miscellaneous","hidden":false}]
+
+ # Standard Conventional Commits: `feat` and `fix`
+ # node-gyp subdirectories: `bin`, `gyp`, `lib`, `src`, `test`
+ # node-gyp subcommands: `build`, `clean`, `configure`, `install`, `list`, `rebuild`, `remove`
+ # Core abstract category: `deps`
+ # Languages/platforms: `python`, `lin`, `linux`, `mac`, `macos`, `win`, `window`, `zos`
+ # Documentation: `doc`, `docs`, `readme`
+ # Standard Conventional Commits: `chore` (under "Miscellaneous")
+ # Miscellaneous abstract categories: `refactor`, `ci`, `meta`
diff --git a/deps/npm/node_modules/node-gyp/.github/workflows/tests.yml b/deps/npm/node_modules/node-gyp/.github/workflows/tests.yml
index 651b1a9f49ce3a..7b122680238c5f 100644
--- a/deps/npm/node_modules/node-gyp/.github/workflows/tests.yml
+++ b/deps/npm/node_modules/node-gyp/.github/workflows/tests.yml
@@ -1,14 +1,14 @@
-# TODO: Line 47, enable pytest --doctest-modules
+# TODO: Line 43, enable pytest --doctest-modules
name: Tests
on: [push, pull_request]
jobs:
Tests:
strategy:
- fail-fast: false
+ fail-fast: false
max-parallel: 15
matrix:
- node: [10.x, 12.x, 14.x]
+ node: [12.x, 14.x, 16.x]
python: [3.6, 3.8, 3.9]
os: [macos-latest, ubuntu-latest, windows-latest]
runs-on: ${{ matrix.os }}
@@ -16,7 +16,7 @@ jobs:
- name: Checkout Repository
uses: actions/checkout@v2
- name: Use Node.js ${{ matrix.node }}
- uses: actions/setup-node@v1
+ uses: actions/setup-node@v2
with:
node-version: ${{ matrix.node }}
- name: Use Python ${{ matrix.python }}
@@ -31,21 +31,15 @@ jobs:
pip install flake8 pytest
- name: Set Windows environment
if: matrix.os == 'windows-latest'
- run:
- echo '::set-env name=GYP_MSVS_VERSION::2015'
- echo '::set-env name=GYP_MSVS_OVERRIDE_PATH::C:\\Dummy'
+ run: |
+ echo 'GYP_MSVS_VERSION=2015' >> $Env:GITHUB_ENV
+ echo 'GYP_MSVS_OVERRIDE_PATH=C:\\Dummy' >> $Env:GITHUB_ENV
- name: Lint Python
if: matrix.os == 'ubuntu-latest'
- run: |
- # stop the build if there are Python syntax errors or undefined names
- flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
- # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
- flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
+ run: flake8 . --ignore=E203,W503 --max-complexity=101 --max-line-length=88 --show-source --statistics
- name: Run Python tests
- run: |
- python -m pytest
+ run: python -m pytest
# - name: Run doctests with pytest
# run: python -m pytest --doctest-modules
- name: Run Node tests
- run: |
- npm test
+ run: npm test
diff --git a/deps/npm/node_modules/node-gyp/CHANGELOG.md b/deps/npm/node_modules/node-gyp/CHANGELOG.md
index 733a4b5dd6ad31..7d513542fdda71 100644
--- a/deps/npm/node_modules/node-gyp/CHANGELOG.md
+++ b/deps/npm/node_modules/node-gyp/CHANGELOG.md
@@ -1,11 +1,173 @@
-v7.1.2 2020-10-17
-=================
+# Changelog
+
+## [8.2.0](https://www.github.com/nodejs/node-gyp/compare/v8.1.0...v8.2.0) (2021-08-23)
+
+
+### Features
+
+* **gyp:** update gyp to v0.9.6 ([#2481](https://www.github.com/nodejs/node-gyp/issues/2481)) ([ed9a9ed](https://www.github.com/nodejs/node-gyp/commit/ed9a9ed653a17c84afa3c327161992d0da7d0cea))
+
+
+### Bug Fixes
+
+* add error arg back into catch block for older Node.js users ([5cde818](https://www.github.com/nodejs/node-gyp/commit/5cde818aac715477e9e9747966bb6b4c4ed070a8))
+* change default gyp update message ([#2420](https://www.github.com/nodejs/node-gyp/issues/2420)) ([cfd12ff](https://www.github.com/nodejs/node-gyp/commit/cfd12ff3bb0eb4525173413ef6a94b3cd8398cad))
+* doc how to update node-gyp independently from npm ([c8c0af7](https://www.github.com/nodejs/node-gyp/commit/c8c0af72e78141a02b5da4cd4d704838333a90bd))
+* missing spaces ([f0882b1](https://www.github.com/nodejs/node-gyp/commit/f0882b1264b2fa701adbc81a3be0b3cba80e333d))
+
+
+### Core
+
+* deep-copy process.config during configure ([#2368](https://www.github.com/nodejs/node-gyp/issues/2368)) ([5f1a06c](https://www.github.com/nodejs/node-gyp/commit/5f1a06c50f3b0c3d292f64948f85a004cfcc5c87))
+
+
+### Miscellaneous
+
+* **deps:** bump tar from 6.1.0 to 6.1.2 ([#2474](https://www.github.com/nodejs/node-gyp/issues/2474)) ([ec15a3e](https://www.github.com/nodejs/node-gyp/commit/ec15a3e5012004172713c11eebcc9d852d32d380))
+* fix typos discovered by codespell ([#2442](https://www.github.com/nodejs/node-gyp/issues/2442)) ([2d0ce55](https://www.github.com/nodejs/node-gyp/commit/2d0ce5595e232a3fc7c562cdf39efb77e2312cc1))
+* GitHub Actions Test on node: [12.x, 14.x, 16.x] ([#2439](https://www.github.com/nodejs/node-gyp/issues/2439)) ([b7bccdb](https://www.github.com/nodejs/node-gyp/commit/b7bccdb527d93b0bb0ce99713f083ce2985fe85c))
+
+
+### Doc
+
+* correct link to "binding.gyp files out in the wild" ([#2483](https://www.github.com/nodejs/node-gyp/issues/2483)) ([660dd7b](https://www.github.com/nodejs/node-gyp/commit/660dd7b2a822c184be8027b300e68be67b366772))
+* **wiki:** Add a link to the node-midi binding.gyp file. ([b354711](https://www.github.com/nodejs/node-gyp/commit/b3547115f6e356358138310e857c7f1ec627a8a7))
+* **wiki:** add bcrypt ([e199cfa](https://www.github.com/nodejs/node-gyp/commit/e199cfa8fc6161492d2a6ade2190510d0ebf7c0f))
+* **wiki:** Add helpful information ([4eda827](https://www.github.com/nodejs/node-gyp/commit/4eda8275c03dae6d2f5c40f3c1dbe930d84b0f2b))
+* **wiki:** Add node-canvas ([13a9553](https://www.github.com/nodejs/node-gyp/commit/13a955317b39caf98fd1f412d8d3f41599e979fd))
+* **wiki:** Add node-openvg-canvas and node-openvg. ([61f709e](https://www.github.com/nodejs/node-gyp/commit/61f709ec4d9f256a6467e9ff84430a48eeb629d1))
+* **wiki:** add one more example ([77f3632](https://www.github.com/nodejs/node-gyp/commit/77f363272930d3d4d24fd3973be22e6237128fcc))
+* **wiki:** add topcube, node-osmium, and node-osrm ([1a75d2b](https://www.github.com/nodejs/node-gyp/commit/1a75d2bf2f562ba50846893a516e111cfbb50885))
+* **wiki:** Added details for properly fixing ([3d4d9d5](https://www.github.com/nodejs/node-gyp/commit/3d4d9d52d6b5b49de06bb0bb5b68e2686d2b7ebd))
+* **wiki:** Added Ghostscript4JS ([bf4bed1](https://www.github.com/nodejs/node-gyp/commit/bf4bed1b96a7d22fba6f97f4552ad09f32ac3737))
+* **wiki:** added levelup ([1575bce](https://www.github.com/nodejs/node-gyp/commit/1575bce3a53db628bfb023fd6f3258fdf98c3195))
+* **wiki:** Added nk-mysql (nodamysql) ([5b4f2d0](https://www.github.com/nodejs/node-gyp/commit/5b4f2d0e1d5d3eadfd03aaf9c1668340f76c4bea))
+* **wiki:** Added nk-xrm-installer .gyp references, including .py scripts for providing complete reference to examples of fetching source via http, extracting, and moving files (as opposed to copying) ([ceb3088](https://www.github.com/nodejs/node-gyp/commit/ceb30885b74f6789374ef52267b84767be93ebe4))
+* **wiki:** Added tip about resolving frustrating LNK1181 error ([e64798d](https://www.github.com/nodejs/node-gyp/commit/e64798de8cac6031ad598a86d7599e81b4d20b17))
+* **wiki:** ADDED: Node.js binding to OpenCV ([e2dc777](https://www.github.com/nodejs/node-gyp/commit/e2dc77730b09d7ee8682d7713a7603a2d7aacabd))
+* **wiki:** Adding link to node-cryptopp's gyp file ([875adbe](https://www.github.com/nodejs/node-gyp/commit/875adbe2a4669fa5f2be0250ffbf98fb55e800fd))
+* **wiki:** Adding the sharp library to the list ([9dce0e4](https://www.github.com/nodejs/node-gyp/commit/9dce0e41650c3fa973e6135a79632d022c662a1d))
+* **wiki:** Adds node-fann ([23e3d48](https://www.github.com/nodejs/node-gyp/commit/23e3d485ed894ba7c631e9c062f5e366b50c416c))
+* **wiki:** Adds node-inotify and v8-profiler ([b6e542f](https://www.github.com/nodejs/node-gyp/commit/b6e542f644dbbfe22b88524ec500696e06ee4af7))
+* **wiki:** Bumping Python version from 2.3 to 2.7 as per the node-gyp readme ([55ebd6e](https://www.github.com/nodejs/node-gyp/commit/55ebd6ebacde975bf84f7bf4d8c66e64cc7cd0da))
+* **wiki:** C++ build tools version upgraded ([5b899b7](https://www.github.com/nodejs/node-gyp/commit/5b899b70db729c392ced7c98e8e17590c6499fc3))
+* **wiki:** change bcrypt url to binding.gyp file ([e11bdd8](https://www.github.com/nodejs/node-gyp/commit/e11bdd84de6144492d3eb327d67cbf2d62da1a76))
+* **wiki:** Clarification + direct link to VS2010 ([531c724](https://www.github.com/nodejs/node-gyp/commit/531c724561d947b5d870de8d52dd8c3c51c5ec2d))
+* **wiki:** Correcting the link to node-osmium ([fae7516](https://www.github.com/nodejs/node-gyp/commit/fae7516a1d2829b6e234eaded74fb112ebd79a05))
+* **wiki:** Created "binding.gyp" files out in the wild (markdown) ([d4fd143](https://www.github.com/nodejs/node-gyp/commit/d4fd14355bbe57f229f082f47bb2b3670868203f))
+* **wiki:** Created Common issues (markdown) ([a38299e](https://www.github.com/nodejs/node-gyp/commit/a38299ea340ceb0e732c6dc6a1b4760257644839))
+* **wiki:** Created Error: "pre" versions of node cannot be installed (markdown) ([98bc80d](https://www.github.com/nodejs/node-gyp/commit/98bc80d7a62ba70c881f3c39d94f804322e57852))
+* **wiki:** Created Linking to OpenSSL (markdown) ([c46d00d](https://www.github.com/nodejs/node-gyp/commit/c46d00d83bac5173dea8bbbb175a1a7de74fdaca))
+* **wiki:** Created Updating npm's bundled node gyp (markdown) ([e0ac8d1](https://www.github.com/nodejs/node-gyp/commit/e0ac8d15af46aadd1c220599e63199b154a514e6))
+* **wiki:** Created use of undeclared identifier 'TypedArray' (markdown) ([65ba711](https://www.github.com/nodejs/node-gyp/commit/65ba71139e9b7f64ac823e575ee9dbf17d937ce4))
+* **wiki:** Created Visual Studio 2010 Setup (markdown) ([5b80e83](https://www.github.com/nodejs/node-gyp/commit/5b80e834c8f79dda9fb2770a876ff3cf649c06f3))
+* **wiki:** Created Visual studio 2012 setup (markdown) ([becef31](https://www.github.com/nodejs/node-gyp/commit/becef316b6c46a33e783667720ee074a0141d1a5))
+* **wiki:** Destroyed Visual Studio 2010 Setup (markdown) ([93423b4](https://www.github.com/nodejs/node-gyp/commit/93423b43606de9664aeb79635825f5e9941ec9bc))
+* **wiki:** Destroyed Visual studio 2012 setup (markdown) ([3601508](https://www.github.com/nodejs/node-gyp/commit/3601508bb10fa05da0ddc7e70d57e4b4dd679657))
+* **wiki:** Different commands for Windows npm v6 vs. v7 ([0fce46b](https://www.github.com/nodejs/node-gyp/commit/0fce46b53340c85e8091cde347d5ed23a443c82f))
+* **wiki:** Drop in favor of ([9285ff6](https://www.github.com/nodejs/node-gyp/commit/9285ff6e451c52c070a05f05f0a9602621d91d53))
+* **wiki:** Explicit link to Visual C++ 2010 Express ([378c363](https://www.github.com/nodejs/node-gyp/commit/378c3632f02c096ed819ec8f2611c65bef0c0554))
+* **wiki:** fix link to gyp file used to build libsqlite3 ([54db8d7](https://www.github.com/nodejs/node-gyp/commit/54db8d7ac33e3f98220960b5d86cfa18a75b53cb))
+* **wiki:** Fix link to node-zipfile ([92e49a8](https://www.github.com/nodejs/node-gyp/commit/92e49a858ed69cb4847a26a5676ab56ef5e2de33))
+* **wiki:** fixed node-serialport link ([954ee53](https://www.github.com/nodejs/node-gyp/commit/954ee530b3972d1db591fce32368e4e31b5a25d8))
+* **wiki:** I highly missing it in common issue as every windows biggner face that issue ([d617fae](https://www.github.com/nodejs/node-gyp/commit/d617faee29c40871ca5c8f93efd0ce929a40d541))
+* **wiki:** if ouns that the -h did not help. I founs on github that there was support for visual studio 2015, while i couldn't install node-red beacuse it kept telling me the key 2015 was missing. looking in he gyp python code i found the local file was bot up t dat with the github repo. updating took several efforts before i tried to drop the -g option. ([408b72f](https://www.github.com/nodejs/node-gyp/commit/408b72f561329408daeb17834436e381406efcc8))
+* **wiki:** If permissions error, please try and then the command. ([ee8e1c1](https://www.github.com/nodejs/node-gyp/commit/ee8e1c1e5334096d58e0d6bca6c006f2ee9c88cb))
+* **wiki:** Improve Unix instructions ([c3e5487](https://www.github.com/nodejs/node-gyp/commit/c3e548736645b535ea5bce613d74ca3e98598243))
+* **wiki:** link to docs/ from README ([b52e487](https://www.github.com/nodejs/node-gyp/commit/b52e487eac1eb421573d1e67114a242eeff45a00))
+* **wiki:** Lower case L ([3aa2c6b](https://www.github.com/nodejs/node-gyp/commit/3aa2c6bdb07971b87505e32e32548d75264bd19f))
+* **wiki:** Make changes discussed in https://github.com/nodejs/node-gyp/issues/2416 ([1dcad87](https://www.github.com/nodejs/node-gyp/commit/1dcad873539027511a5f0243baf770ea90f6f4e2))
+* **wiki:** move wiki docs into doc/ ([f0a4835](https://www.github.com/nodejs/node-gyp/commit/f0a48355d86534ec3bdabcdb3ce3340fa2e17f39))
+* **wiki:** node-sass in the wild ([d310a73](https://www.github.com/nodejs/node-gyp/commit/d310a73d64d0065050377baac7047472f7424a1b))
+* **wiki:** node-srs was a 404 ([bbca21a](https://www.github.com/nodejs/node-gyp/commit/bbca21a1e1ede4c473aff365ca71989a5bda7b57))
+* **wiki:** Note: VS2010 seems to be no longer available! VS2013 or nothing! ([7b5dcaf](https://www.github.com/nodejs/node-gyp/commit/7b5dcafafccdceae4b8f2b53ac9081a694b6ade8))
+* **wiki:** safer doc names, remove unnecessary TypedArray doc ([161c235](https://www.github.com/nodejs/node-gyp/commit/161c2353ef5b562f4acfb2fd77608fcbd0800fc0))
+* **wiki:** sorry, forgot to mention a specific windows version. ([d69dffc](https://www.github.com/nodejs/node-gyp/commit/d69dffc16c2b1e3c60dcb5d1c35a49270ba22a35))
+* **wiki:** Updated "binding.gyp" files out in the wild (markdown) ([7444b47](https://www.github.com/nodejs/node-gyp/commit/7444b47a7caac1e14d1da474a7fcfcf88d328017))
+* **wiki:** Updated "binding.gyp" files out in the wild (markdown) ([d766b74](https://www.github.com/nodejs/node-gyp/commit/d766b7427851e6c2edc02e2504a7be9be7e330c0))
+* **wiki:** Updated "binding.gyp" files out in the wild (markdown) ([d319b0e](https://www.github.com/nodejs/node-gyp/commit/d319b0e98c7085de8e51bc5595eba4264b99a7d5))
+* **wiki:** Updated "binding.gyp" files out in the wild (markdown) ([3c6692d](https://www.github.com/nodejs/node-gyp/commit/3c6692d538f0ce973869aa237118b7d2483feccd))
+* **wiki:** Updated "binding.gyp" files out in the wild (markdown) ([93392d5](https://www.github.com/nodejs/node-gyp/commit/93392d559ce6f250b9c7fe8177e6c88603809dc1))
+* **wiki:** Updated "binding.gyp" files out in the wild (markdown) ([8841158](https://www.github.com/nodejs/node-gyp/commit/88411588f300e9b7c00fe516ecd977a1feeeb15c))
+* **wiki:** Updated "binding.gyp" files out in the wild (markdown) ([81bfa1f](https://www.github.com/nodejs/node-gyp/commit/81bfa1f1b63d522a9f8a9ae9ca0c7ae90fe75140))
+* **wiki:** Updated "binding.gyp" files out in the wild (markdown) ([d1cd237](https://www.github.com/nodejs/node-gyp/commit/d1cd237bad06fa507adb354b9e2181a14dc63d24))
+* **wiki:** Updated "binding.gyp" files out in the wild (markdown) ([3de9e17](https://www.github.com/nodejs/node-gyp/commit/3de9e17e0b8a387eafe7bd18d0ec1e3191d118e8))
+* **wiki:** Updated "binding.gyp" files out in the wild (markdown) ([a9b7096](https://www.github.com/nodejs/node-gyp/commit/a9b70968fb956eab3b95672048b94350e1565ca3))
+* **wiki:** Updated "binding.gyp" files out in the wild (markdown) ([3236069](https://www.github.com/nodejs/node-gyp/commit/3236069689e7e0eb15b324fce74ab58158956f98))
+* **wiki:** Updated "binding.gyp" files out in the wild (markdown) ([1462755](https://www.github.com/nodejs/node-gyp/commit/14627556966e5d513bdb8e5208f0e1300f68991f))
+* **wiki:** Updated "binding.gyp" files out in the wild (markdown) ([7ab1337](https://www.github.com/nodejs/node-gyp/commit/7ab133752a6c402bb96dcd3d671d73e03e9487ad))
+* **wiki:** Updated "binding.gyp" files out in the wild (markdown) ([640895d](https://www.github.com/nodejs/node-gyp/commit/640895d36b7448c646a3b850c1e159106f83c724))
+* **wiki:** Updated "binding.gyp" files out in the wild (markdown) ([ced8c96](https://www.github.com/nodejs/node-gyp/commit/ced8c968457f285ab8989c291d28173d7730833c))
+* **wiki:** Updated "binding.gyp" files out in the wild (markdown) ([27b883a](https://www.github.com/nodejs/node-gyp/commit/27b883a350ad0db6b9130d7b996f35855ec34c7a))
+* **wiki:** Updated "binding.gyp" files out in the wild (markdown) ([d29fb13](https://www.github.com/nodejs/node-gyp/commit/d29fb134f1c4b9dd729ba95f2979e69e0934809f))
+* **wiki:** Updated "binding.gyp" files out in the wild (markdown) ([2765891](https://www.github.com/nodejs/node-gyp/commit/27658913e6220cf0371b4b73e25a0e4ab11108a1))
+* **wiki:** Updated "binding.gyp" files out in the wild (markdown) ([dc97766](https://www.github.com/nodejs/node-gyp/commit/dc9776648d432bca6775c176641f16da14522d4c))
+* **wiki:** Updated Error: "pre" versions of node cannot be installed (markdown) ([e9f8b33](https://www.github.com/nodejs/node-gyp/commit/e9f8b33d1f87d04f22cb09a814d7c55d0fa38446))
+* **wiki:** Updated Home (markdown) ([3407109](https://www.github.com/nodejs/node-gyp/commit/3407109325cf7ba1e925656b9eb75feffab0557c))
+* **wiki:** Updated Home (markdown) ([6e392bc](https://www.github.com/nodejs/node-gyp/commit/6e392bcdd3dd1691773e6e16e1dffc35931b81e0))
+* **wiki:** Updated Home (markdown) ([65efe32](https://www.github.com/nodejs/node-gyp/commit/65efe32ccb8d446ce569453364f922dd9d27c945))
+* **wiki:** Updated Home (markdown) ([ea28f09](https://www.github.com/nodejs/node-gyp/commit/ea28f0947af91fa638be355143f5df89d2e431c8))
+* **wiki:** Updated Home (markdown) ([0e37ff4](https://www.github.com/nodejs/node-gyp/commit/0e37ff48b306c12149661b375895741d3d710da7))
+* **wiki:** Updated Home (markdown) ([b398ef4](https://www.github.com/nodejs/node-gyp/commit/b398ef46f660d2b1506508550dadfb4c35639e4b))
+* **wiki:** Updated Linking to OpenSSL (markdown) ([8919028](https://www.github.com/nodejs/node-gyp/commit/8919028921fd304f08044098434f0dc6071fb7cf))
+* **wiki:** Updated Linking to OpenSSL (markdown) ([c00eb77](https://www.github.com/nodejs/node-gyp/commit/c00eb778fc7dc27e4dab3a9219035ea20458b33b))
+* **wiki:** Updated node-levelup to node-leveldown (broken links) ([59668bb](https://www.github.com/nodejs/node-gyp/commit/59668bb0b904feccf3c09afa2fd37378c77af967))
+* **wiki:** Updated Updating npm's bundled node gyp (markdown) ([d314854](https://www.github.com/nodejs/node-gyp/commit/d31485415ef69d46effa6090c95698341965de1b))
+* **wiki:** Updated Updating npm's bundled node gyp (markdown) ([11858b0](https://www.github.com/nodejs/node-gyp/commit/11858b0655d1eee00c62ad628e719d4378803d14))
+* **wiki:** Updated Updating npm's bundled node gyp (markdown) ([33561e9](https://www.github.com/nodejs/node-gyp/commit/33561e9cbf5f4eb46111318503c77df2c6eb484a))
+* **wiki:** Updated Updating npm's bundled node gyp (markdown) ([4a7f2d0](https://www.github.com/nodejs/node-gyp/commit/4a7f2d0d869a65c99a78504976567017edadf657))
+* **wiki:** Updated Updating npm's bundled node gyp (markdown) ([979a706](https://www.github.com/nodejs/node-gyp/commit/979a7063b950c088a7f4896fc3a48e1d00dfd231))
+* **wiki:** Updated Updating npm's bundled node gyp (markdown) ([e50e04d](https://www.github.com/nodejs/node-gyp/commit/e50e04d7b6a3754ea0aa11fe8cef491b3bc5bdd4))
+
+## [8.1.0](https://www.github.com/nodejs/node-gyp/compare/v8.0.0...v8.1.0) (2021-05-28)
+
+
+### Features
+
+* **gyp:** update gyp to v0.9.1 ([#2402](https://www.github.com/nodejs/node-gyp/issues/2402)) ([814b1b0](https://www.github.com/nodejs/node-gyp/commit/814b1b0eda102afb9fc87e81638a9cf5b650bb10))
+
+
+### Miscellaneous
+
+* add `release-please-action` for automated releases ([#2395](https://www.github.com/nodejs/node-gyp/issues/2395)) ([07e9d7c](https://www.github.com/nodejs/node-gyp/commit/07e9d7c7ee80ba119ea760c635f72fd8e7efe198))
+
+
+### Core
+
+* fail gracefully if we can't find the username ([#2375](https://www.github.com/nodejs/node-gyp/issues/2375)) ([fca4795](https://www.github.com/nodejs/node-gyp/commit/fca4795512c67dc8420aaa0d913b5b89a4b147f3))
+* log as yes/no whether build dir was created ([#2370](https://www.github.com/nodejs/node-gyp/issues/2370)) ([245dee5](https://www.github.com/nodejs/node-gyp/commit/245dee5b62581309946872ae253226ea3a42c0e3))
+
+
+### Doc
+
+* fix v8.0.0 release date ([4b83c3d](https://www.github.com/nodejs/node-gyp/commit/4b83c3de7300457919d53f26d96ea9ad6f6bedd8))
+* remove redundant version info ([#2403](https://www.github.com/nodejs/node-gyp/issues/2403)) ([1423670](https://www.github.com/nodejs/node-gyp/commit/14236709de64b100a424396b91a5115639daa0ef))
+* Update README.md Visual Studio Community page polski to auto ([#2371](https://www.github.com/nodejs/node-gyp/issues/2371)) ([1b4697a](https://www.github.com/nodejs/node-gyp/commit/1b4697abf69ef574a48faf832a7098f4c6c224a5))
+
+## v8.0.0 2021-04-03
+
+* [[`0d8a6f1b19`](https://github.com/nodejs/node-gyp/commit/0d8a6f1b19)] - **ci**: update actions/setup-node to v2 (#2302) (Sora Morimoto) [#2302](https://github.com/nodejs/node-gyp/pull/2302)
+* [[`15a5c7d45b`](https://github.com/nodejs/node-gyp/commit/15a5c7d45b)] - **ci**: migrate deprecated grammar (#2285) (Jiawen Geng) [#2285](https://github.com/nodejs/node-gyp/pull/2285)
+* [[`06ddde27f9`](https://github.com/nodejs/node-gyp/commit/06ddde27f9)] - **deps**: sync mutual dependencies with npm (DeeDeeG) [#2348](https://github.com/nodejs/node-gyp/pull/2348)
+* [[`a5fd1f41e3`](https://github.com/nodejs/node-gyp/commit/a5fd1f41e3)] - **doc**: add downloads badge (#2352) (Jiawen Geng) [#2352](https://github.com/nodejs/node-gyp/pull/2352)
+* [[`cc1cbce056`](https://github.com/nodejs/node-gyp/commit/cc1cbce056)] - **doc**: update macOS\_Catalina.md (#2293) (iMrLopez) [#2293](https://github.com/nodejs/node-gyp/pull/2293)
+* [[`6287118fc4`](https://github.com/nodejs/node-gyp/commit/6287118fc4)] - **doc**: updated README.md to copy easily (#2281) (மனோஜ்குமார் பழனிச்சாமி) [#2281](https://github.com/nodejs/node-gyp/pull/2281)
+* [[`66c0f04467`](https://github.com/nodejs/node-gyp/commit/66c0f04467)] - **doc**: add missing `sudo` to Catalina doc (Karl Horky) [#2244](https://github.com/nodejs/node-gyp/pull/2244)
+* [[`0da2e0140d`](https://github.com/nodejs/node-gyp/commit/0da2e0140d)] - **gyp**: update gyp to v0.8.1 (#2355) (DeeDeeG) [#2355](https://github.com/nodejs/node-gyp/pull/2355)
+* [[`0093ec8646`](https://github.com/nodejs/node-gyp/commit/0093ec8646)] - **gyp**: Improve our flake8 linting tests (Christian Clauss) [#2356](https://github.com/nodejs/node-gyp/pull/2356)
+* [[`a78b584236`](https://github.com/nodejs/node-gyp/commit/a78b584236)] - **(SEMVER-MAJOR)** **gyp**: remove support for Python 2 (#2300) (Christian Clauss) [#2300](https://github.com/nodejs/node-gyp/pull/2300)
+* [[`c3c510d89e`](https://github.com/nodejs/node-gyp/commit/c3c510d89e)] - **gyp**: update gyp to v0.8.0 (#2318) (Christian Clauss) [#2318](https://github.com/nodejs/node-gyp/pull/2318)
+* [[`9e1397c52e`](https://github.com/nodejs/node-gyp/commit/9e1397c52e)] - **(SEMVER-MAJOR)** **gyp**: update gyp to v0.7.0 (#2284) (Jiawen Geng) [#2284](https://github.com/nodejs/node-gyp/pull/2284)
+* [[`1bd18f3e77`](https://github.com/nodejs/node-gyp/commit/1bd18f3e77)] - **(SEMVER-MAJOR)** **lib**: drop Python 2 support in find-python.js (#2333) (DeeDeeG) [#2333](https://github.com/nodejs/node-gyp/pull/2333)
+* [[`e81602ef55`](https://github.com/nodejs/node-gyp/commit/e81602ef55)] - **(SEMVER-MAJOR)** **lib**: migrate requests to fetch (#2220) (Matias Lopez) [#2220](https://github.com/nodejs/node-gyp/pull/2220)
+* [[`392b7760b4`](https://github.com/nodejs/node-gyp/commit/392b7760b4)] - **lib**: avoid changing process.config (#2322) (Michaël Zasso) [#2322](https://github.com/nodejs/node-gyp/pull/2322)
+
+## v7.1.2 2020-10-17
* [[`096e3aded5`](https://github.com/nodejs/node-gyp/commit/096e3aded5)] - **gyp**: update gyp to 0.6.2 (Myles Borins) [#2241](https://github.com/nodejs/node-gyp/pull/2241)
* [[`54f97cd243`](https://github.com/nodejs/node-gyp/commit/54f97cd243)] - **doc**: add cmd to reset `xcode-select` to initial state (Valera Rozuvan) [#2235](https://github.com/nodejs/node-gyp/pull/2235)
-v7.1.1 2020-10-15
-=================
+## v7.1.1 2020-10-15
This release restores the location of shared library builds to the pre-v7
location. In v7.0.0 until this release, shared library outputs were placed
@@ -22,8 +184,7 @@ We consider this a bug-fix rather than semver-major change.
* [[`2317dc400c`](https://github.com/nodejs/node-gyp/commit/2317dc400c)] - **ci**: switch to GitHub Actions (Shelley Vohr) [#2210](https://github.com/nodejs/node-gyp/pull/2210)
* [[`2cca9b74f7`](https://github.com/nodejs/node-gyp/commit/2cca9b74f7)] - **doc**: drop the --production flag for installing windows-build-tools (DeeDeeG) [#2206](https://github.com/nodejs/node-gyp/pull/2206)
-v7.1.0 2020-08-12
-=================
+## v7.1.0 2020-08-12
* [[`aaf33c3029`](https://github.com/nodejs/node-gyp/commit/aaf33c3029)] - **build**: add update-gyp script (Samuel Attard) [#2167](https://github.com/nodejs/node-gyp/pull/2167)
* * [[`3baa4e4172`](https://github.com/nodejs/node-gyp/commit/3baa4e4172)] - **(SEMVER-MINOR)** **gyp**: update gyp to 0.4.0 (Samuel Attard) [#2165](https://github.com/nodejs/node-gyp/pull/2165)
@@ -32,8 +193,7 @@ v7.1.0 2020-08-12
* * [[`4fc8ff179d`](https://github.com/nodejs/node-gyp/commit/4fc8ff179d)] - **doc**: silence curl for macOS Catalina acid test (Chia Wei Ong) [#2150](https://github.com/nodejs/node-gyp/pull/2150)
* * [[`7857cb2eb1`](https://github.com/nodejs/node-gyp/commit/7857cb2eb1)] - **deps**: increase "engines" to "node" : "\>= 10.12.0" (DeeDeeG) [#2153](https://github.com/nodejs/node-gyp/pull/2153)
-v7.0.0 2020-06-03
-=================
+## v7.0.0 2020-06-03
* [[`e18a61afc1`](https://github.com/nodejs/node-gyp/commit/e18a61afc1)] - **build**: shrink bloated addon binaries on windows (Shelley Vohr) [#2060](https://github.com/nodejs/node-gyp/pull/2060)
* [[`4937722cf5`](https://github.com/nodejs/node-gyp/commit/4937722cf5)] - **(SEMVER-MAJOR)** **deps**: replace mkdirp with {recursive} mkdir (Rod Vagg) [#2123](https://github.com/nodejs/node-gyp/pull/2123)
@@ -42,7 +202,7 @@ v7.0.0 2020-06-03
* [[`f7bfce96ed`](https://github.com/nodejs/node-gyp/commit/f7bfce96ed)] - **doc**: update acid test and introduce curl|bash test script (Dario Vladovic) [#2105](https://github.com/nodejs/node-gyp/pull/2105)
* [[`e529f3309d`](https://github.com/nodejs/node-gyp/commit/e529f3309d)] - **doc**: update README to reflect upgrade to gyp-next (Ujjwal Sharma) [#2092](https://github.com/nodejs/node-gyp/pull/2092)
* [[`9aed6286a3`](https://github.com/nodejs/node-gyp/commit/9aed6286a3)] - **doc**: give more attention to Catalina issues doc (Matheus Marchini) [#2134](https://github.com/nodejs/node-gyp/pull/2134)
-* [[`963f2a7b48`](https://github.com/nodejs/node-gyp/commit/963f2a7b48)] - **doc**: improve cataline discoverability for search engines (Matheus Marchini) [#2135](https://github.com/nodejs/node-gyp/pull/2135)
+* [[`963f2a7b48`](https://github.com/nodejs/node-gyp/commit/963f2a7b48)] - **doc**: improve Catalina discoverability for search engines (Matheus Marchini) [#2135](https://github.com/nodejs/node-gyp/pull/2135)
* [[`7b75af349b`](https://github.com/nodejs/node-gyp/commit/7b75af349b)] - **doc**: add macOS Catalina software update info (Karl Horky) [#2078](https://github.com/nodejs/node-gyp/pull/2078)
* [[`4f23c7bee2`](https://github.com/nodejs/node-gyp/commit/4f23c7bee2)] - **doc**: update link to the code of conduct (#2073) (Michaël Zasso) [#2073](https://github.com/nodejs/node-gyp/pull/2073)
* [[`473cfa283f`](https://github.com/nodejs/node-gyp/commit/473cfa283f)] - **doc**: note in README that Python 3.8 is supported (#2072) (Michaël Zasso) [#2072](https://github.com/nodejs/node-gyp/pull/2072)
@@ -60,8 +220,7 @@ v7.0.0 2020-06-03
* [[`741ab096d5`](https://github.com/nodejs/node-gyp/commit/741ab096d5)] - **test**: remove support for EOL versions of Node.js (Shelley Vohr)
* [[`ca86ef2539`](https://github.com/nodejs/node-gyp/commit/ca86ef2539)] - **test**: bump actions/checkout from v1 to v2 (BSKY) [#2063](https://github.com/nodejs/node-gyp/pull/2063)
-v6.1.0 2020-01-08
-=================
+## v6.1.0 2020-01-08
* [[`9a7dd16b76`](https://github.com/nodejs/node-gyp/commit/9a7dd16b76)] - **doc**: remove backticks from Python version list (Rod Vagg) [#2011](https://github.com/nodejs/node-gyp/pull/2011)
* [[`26cd6eaea6`](https://github.com/nodejs/node-gyp/commit/26cd6eaea6)] - **doc**: add GitHub Actions badge (#1994) (Rod Vagg) [#1994](https://github.com/nodejs/node-gyp/pull/1994)
@@ -82,8 +241,7 @@ v6.1.0 2020-01-08
* [[`0670e5189d`](https://github.com/nodejs/node-gyp/commit/0670e5189d)] - **test**: add header download test (Rod Vagg) [#1796](https://github.com/nodejs/node-gyp/pull/1796)
* [[`c506a6a150`](https://github.com/nodejs/node-gyp/commit/c506a6a150)] - **test**: configure proper devDir for invoking configure() (Rod Vagg) [#1796](https://github.com/nodejs/node-gyp/pull/1796)
-v6.0.1 2019-11-01
-=================
+## v6.0.1 2019-11-01
* [[`8ec2e681d5`](https://github.com/nodejs/node-gyp/commit/8ec2e681d5)] - **doc**: add macOS\_Catalina.md document (cclauss) [#1940](https://github.com/nodejs/node-gyp/pull/1940)
* [[`1b11be63cc`](https://github.com/nodejs/node-gyp/commit/1b11be63cc)] - **gyp**: python3 fixes: utf8 decode, use of 'None' in eval (Wilfried Goesgens) [#1925](https://github.com/nodejs/node-gyp/pull/1925)
@@ -100,8 +258,7 @@ v6.0.1 2019-11-01
* [[`032db2a2d0`](https://github.com/nodejs/node-gyp/commit/032db2a2d0)] - **lib,install**: always download SHA sums on Windows (Sam Hughes) [#1926](https://github.com/nodejs/node-gyp/pull/1926)
* [[`5a83630c33`](https://github.com/nodejs/node-gyp/commit/5a83630c33)] - **travis**: add Windows + Python 3.8 to the mix (Rod Vagg) [#1921](https://github.com/nodejs/node-gyp/pull/1921)
-v6.0.0 2019-10-04
-=================
+## v6.0.0 2019-10-04
* [[`dd0e97ef0b`](https://github.com/nodejs/node-gyp/commit/dd0e97ef0b)] - **(SEMVER-MAJOR)** **lib**: try to find `python` after `python3` (Sam Roberts) [#1907](https://github.com/nodejs/node-gyp/pull/1907)
* [[`f60ed47d14`](https://github.com/nodejs/node-gyp/commit/f60ed47d14)] - **travis**: add Python 3.5 and 3.6 tests on Linux (Christian Clauss) [#1903](https://github.com/nodejs/node-gyp/pull/1903)
@@ -109,8 +266,7 @@ v6.0.0 2019-10-04
* [[`3d1c60ab81`](https://github.com/nodejs/node-gyp/commit/3d1c60ab81)] - **(SEMVER-MAJOR)** **lib**: accept Python 3 by default (João Reis) [#1844](https://github.com/nodejs/node-gyp/pull/1844)
* [[`c6e3b65a23`](https://github.com/nodejs/node-gyp/commit/c6e3b65a23)] - **(SEMVER-MAJOR)** **lib**: raise the minimum Python version from 2.6 to 2.7 (cclauss) [#1818](https://github.com/nodejs/node-gyp/pull/1818)
-v5.1.1 2020-05-25
-=================
+## v5.1.1 2020-05-25
* [[`bdd3a79abe`](https://github.com/nodejs/node-gyp/commit/bdd3a79abe)] - **build**: shrink bloated addon binaries on windows (Shelley Vohr) [#2060](https://github.com/nodejs/node-gyp/pull/2060)
* [[`1f2ba75bc0`](https://github.com/nodejs/node-gyp/commit/1f2ba75bc0)] - **doc**: add macOS Catalina software update info (Karl Horky) [#2078](https://github.com/nodejs/node-gyp/pull/2078)
@@ -123,8 +279,7 @@ v5.1.1 2020-05-25
* [[`2b6fc3c8d6`](https://github.com/nodejs/node-gyp/commit/2b6fc3c8d6)] - **doc, bin**: stop suggesting opening node-gyp issues (Bartosz Sosnowski) [#2096](https://github.com/nodejs/node-gyp/pull/2096)
* [[`a876ae58ad`](https://github.com/nodejs/node-gyp/commit/a876ae58ad)] - **test**: bump actions/checkout from v1 to v2 (BSKY) [#2063](https://github.com/nodejs/node-gyp/pull/2063)
-v5.1.0 2020-02-05
-=================
+## v5.1.0 2020-02-05
* [[`f37a8b40d0`](https://github.com/nodejs/node-gyp/commit/f37a8b40d0)] - **doc**: add GitHub Actions badge (#1994) (Rod Vagg) [#1994](https://github.com/nodejs/node-gyp/pull/1994)
* [[`cb3f6aae5e`](https://github.com/nodejs/node-gyp/commit/cb3f6aae5e)] - **doc**: update macOS\_Catalina.md (#1992) (James Home) [#1992](https://github.com/nodejs/node-gyp/pull/1992)
@@ -141,13 +296,11 @@ v5.1.0 2020-02-05
* [[`32c8744b34`](https://github.com/nodejs/node-gyp/commit/32c8744b34)] - **test**: fix macOS Travis on Python 2.7 & 3.7 (Christian Clauss) [#1979](https://github.com/nodejs/node-gyp/pull/1979)
* [[`fd4b1351e4`](https://github.com/nodejs/node-gyp/commit/fd4b1351e4)] - **test**: initial Github Actions with Ubuntu & macOS (Christian Clauss) [#1985](https://github.com/nodejs/node-gyp/pull/1985)
-v5.0.7 2019-12-16
-=================
+## v5.0.7 2019-12-16
Republish of v5.0.6 with unnecessary tarball removed from pack file.
-v5.0.6 2019-12-16
-=================
+## v5.0.6 2019-12-16
* [[`cdec00286f`](https://github.com/nodejs/node-gyp/commit/cdec00286f)] - **doc**: adjustments to the README.md for new users (Dan Pike) [#1919](https://github.com/nodejs/node-gyp/pull/1919)
* [[`b7c8233ef2`](https://github.com/nodejs/node-gyp/commit/b7c8233ef2)] - **test**: fix Python unittests (cclauss) [#1961](https://github.com/nodejs/node-gyp/pull/1961)
@@ -168,8 +321,7 @@ v5.0.6 2019-12-16
* [[`7edf7658fa`](https://github.com/nodejs/node-gyp/commit/7edf7658fa)] - **lib,install**: always download SHA sums on Windows (Sam Hughes) [#1926](https://github.com/nodejs/node-gyp/pull/1926)
* [[`69056d04fe`](https://github.com/nodejs/node-gyp/commit/69056d04fe)] - **travis**: add Windows + Python 3.8 to the mix (Rod Vagg) [#1921](https://github.com/nodejs/node-gyp/pull/1921)
-v5.0.5 2019-10-04
-=================
+## v5.0.5 2019-10-04
* [[`3891391746`](https://github.com/nodejs/node-gyp/commit/3891391746)] - **doc**: reconcile README with Python 3 compat changes (Rod Vagg) [#1911](https://github.com/nodejs/node-gyp/pull/1911)
* [[`07f81f1920`](https://github.com/nodejs/node-gyp/commit/07f81f1920)] - **lib**: accept Python 3 after Python 2 (Sam Roberts) [#1910](https://github.com/nodejs/node-gyp/pull/1910)
@@ -181,8 +333,7 @@ v5.0.5 2019-10-04
* [[`53ee7dfe89`](https://github.com/nodejs/node-gyp/commit/53ee7dfe89)] - **gyp**: fix undefined name: cflags --\> ldflags (Christian Clauss) [#1901](https://github.com/nodejs/node-gyp/pull/1901)
* [[`5871dcf6c9`](https://github.com/nodejs/node-gyp/commit/5871dcf6c9)] - **src,win**: add support for fetching arm64 node.lib (Richard Townsend) [#1875](https://github.com/nodejs/node-gyp/pull/1875)
-v5.0.4 2019-09-27
-=================
+## v5.0.4 2019-09-27
* [[`1236869ffc`](https://github.com/nodejs/node-gyp/commit/1236869ffc)] - **gyp**: modify XcodeVersion() to convert "4.2" to "0420" and "10.0" to "1000" (Christian Clauss) [#1895](https://github.com/nodejs/node-gyp/pull/1895)
* [[`36638afe48`](https://github.com/nodejs/node-gyp/commit/36638afe48)] - **gyp**: more decode stdout on Python 3 (cclauss) [#1894](https://github.com/nodejs/node-gyp/pull/1894)
@@ -205,8 +356,7 @@ v5.0.4 2019-09-27
* [[`fa0ed4aa42`](https://github.com/nodejs/node-gyp/commit/fa0ed4aa42)] - **build**: more Python 3 compat, replace compile with ast (cclauss) [#1820](https://github.com/nodejs/node-gyp/pull/1820)
* [[`18d5c7c9d0`](https://github.com/nodejs/node-gyp/commit/18d5c7c9d0)] - **win,src**: update win\_delay\_load\_hook.cc to work with /clr (Ivan Petrovic) [#1819](https://github.com/nodejs/node-gyp/pull/1819)
-v5.0.3 2019-07-17
-=================
+## v5.0.3 2019-07-17
* [[`66ad305775`](https://github.com/nodejs/node-gyp/commit/66ad305775)] - **python**: accept Python 3 conditionally (João Reis) [#1815](https://github.com/nodejs/node-gyp/pull/1815)
* [[`7e7fce3fed`](https://github.com/nodejs/node-gyp/commit/7e7fce3fed)] - **python**: move Python detection to its own file (João Reis) [#1815](https://github.com/nodejs/node-gyp/pull/1815)
@@ -217,8 +367,7 @@ v5.0.3 2019-07-17
* [[`24109148df`](https://github.com/nodejs/node-gyp/commit/24109148df)] - **test**: downgrade to tap@^12 for continued Node 6 support (Rod Vagg) [#1808](https://github.com/nodejs/node-gyp/pull/1808)
* [[`656117cc4a`](https://github.com/nodejs/node-gyp/commit/656117cc4a)] - **win**: make VS path match case-insensitive (João Reis) [#1806](https://github.com/nodejs/node-gyp/pull/1806)
-v5.0.2 2019-06-27
-=================
+## v5.0.2 2019-06-27
* [[`2761afbf73`](https://github.com/nodejs/node-gyp/commit/2761afbf73)] - **build,test**: add duplicate symbol test (Gabriel Schulhof) [#1689](https://github.com/nodejs/node-gyp/pull/1689)
* [[`82f129d6de`](https://github.com/nodejs/node-gyp/commit/82f129d6de)] - **gyp**: replace optparse to argparse (KiYugadgeter) [#1591](https://github.com/nodejs/node-gyp/pull/1591)
@@ -237,14 +386,12 @@ v5.0.2 2019-06-27
* [[`1597c84aad`](https://github.com/nodejs/node-gyp/commit/1597c84aad)] - **test**: use Travis CI to run tests on every pull request (cclauss) [#1752](https://github.com/nodejs/node-gyp/pull/1752)
* [[`dd9bf929ac`](https://github.com/nodejs/node-gyp/commit/dd9bf929ac)] - **zos**: update compiler options (Shuowang (Wayne) Zhang) [#1768](https://github.com/nodejs/node-gyp/pull/1768)
-v5.0.1 2019-06-20
-=================
+## v5.0.1 2019-06-20
* [[`e3861722ed`](https://github.com/nodejs/node-gyp/commit/e3861722ed)] - **doc**: document --jobs max (David Sanders) [#1770](https://github.com/nodejs/node-gyp/pull/1770)
* [[`1cfdb28886`](https://github.com/nodejs/node-gyp/commit/1cfdb28886)] - **lib**: reintroduce support for iojs file naming for releases \>= 1 && \< 4 (Samuel Attard) [#1777](https://github.com/nodejs/node-gyp/pull/1777)
-v5.0.0 2019-06-13
-=================
+## v5.0.0 2019-06-13
* [[`8a83972743`](https://github.com/nodejs/node-gyp/commit/8a83972743)] - **(SEMVER-MAJOR)** **bin**: follow XDG OS conventions for storing data (Selwyn) [#1570](https://github.com/nodejs/node-gyp/pull/1570)
* [[`9e46872ea3`](https://github.com/nodejs/node-gyp/commit/9e46872ea3)] - **bin,lib**: remove extra comments/lines/spaces (Jon Moss) [#1508](https://github.com/nodejs/node-gyp/pull/1508)
@@ -282,16 +429,14 @@ v5.0.0 2019-06-13
* [[`721dc7d314`](https://github.com/nodejs/node-gyp/commit/721dc7d314)] - Add ARM64 to MSBuild /Platform logic (Jon Kunkee) [#1655](https://github.com/nodejs/node-gyp/pull/1655)
* [[`a5b7410497`](https://github.com/nodejs/node-gyp/commit/a5b7410497)] - Add ESLint no-unused-vars rule (Jon Moss) [#1497](https://github.com/nodejs/node-gyp/pull/1497)
-v4.0.0 2019-04-24
-=================
+## v4.0.0 2019-04-24
* [[`ceed5cbe10`](https://github.com/nodejs/node-gyp/commit/ceed5cbe10)] - **deps**: updated tar package version to 4.4.8 (Pobegaylo Maksim) [#1713](https://github.com/nodejs/node-gyp/pull/1713)
* [[`374519e066`](https://github.com/nodejs/node-gyp/commit/374519e066)] - **(SEMVER-MAJOR)** Upgrade to tar v3 (isaacs) [#1212](https://github.com/nodejs/node-gyp/pull/1212)
* [[`e6699d13cd`](https://github.com/nodejs/node-gyp/commit/e6699d13cd)] - **test**: fix addon test for Node.js 12 and V8 7.4 (Richard Lau) [#1705](https://github.com/nodejs/node-gyp/pull/1705)
* [[`0c6bf530a0`](https://github.com/nodejs/node-gyp/commit/0c6bf530a0)] - **lib**: use print() for python version detection (GreenAddress) [#1534](https://github.com/nodejs/node-gyp/pull/1534)
-v3.8.0 2018-08-09
-=================
+## v3.8.0 2018-08-09
* [[`c5929cb4fe`](https://github.com/nodejs/node-gyp/commit/c5929cb4fe)] - **doc**: update Xcode preferences tab name. (Ivan Daniluk) [#1330](https://github.com/nodejs/node-gyp/pull/1330)
* [[`8b488da8b9`](https://github.com/nodejs/node-gyp/commit/8b488da8b9)] - **doc**: update link to commit guidelines (Jonas Hermsmeier) [#1456](https://github.com/nodejs/node-gyp/pull/1456)
@@ -310,8 +455,7 @@ v3.8.0 2018-08-09
* [[`969447c5bd`](https://github.com/nodejs/node-gyp/commit/969447c5bd)] - **deps**: bump request to 2.8.7, fixes heok/hawk issues (Rohit Hazra) [#1492](https://github.com/nodejs/node-gyp/pull/1492)
* [[`340403ccfe`](https://github.com/nodejs/node-gyp/commit/340403ccfe)] - **win**: improve parsing of SDK version (Alessandro Vergani) [#1516](https://github.com/nodejs/node-gyp/pull/1516)
-v3.7.0 2018-06-08
-=================
+## v3.7.0 2018-06-08
* [[`84cea7b30d`](https://github.com/nodejs/node-gyp/commit/84cea7b30d)] - Remove unused gyp test scripts. (Ben Noordhuis) [#1458](https://github.com/nodejs/node-gyp/pull/1458)
* [[`0540e4ec63`](https://github.com/nodejs/node-gyp/commit/0540e4ec63)] - **gyp**: escape spaces in filenames in make generator (Jeff Senn) [#1436](https://github.com/nodejs/node-gyp/pull/1436)
@@ -335,14 +479,12 @@ v3.7.0 2018-06-08
* [[`f27599193a`](https://github.com/nodejs/node-gyp/commit/f27599193a)] - **gyp**: update xml string encoding conversion (Liu Chao) [#1203](https://github.com/nodejs/node-gyp/pull/1203)
* [[`0a07e481f7`](https://github.com/nodejs/node-gyp/commit/0a07e481f7)] - **configure**: don't set ensure if tarball is set (Gibson Fahnestock) [#1220](https://github.com/nodejs/node-gyp/pull/1220)
-v3.6.3 2018-06-08
-=================
+## v3.6.3 2018-06-08
* [[`90cd2e8da9`](https://github.com/nodejs/node-gyp/commit/90cd2e8da9)] - **gyp**: fix regex to match multi-digit versions (Jonas Hermsmeier) [#1455](https://github.com/nodejs/node-gyp/pull/1455)
* [[`7900122337`](https://github.com/nodejs/node-gyp/commit/7900122337)] - deps: pin `request` version range (Refael Ackerman) [#1300](https://github.com/nodejs/node-gyp/pull/1300)
-v3.6.2 2017-06-01
-=================
+## v3.6.2 2017-06-01
* [[`72afdd62cd`](https://github.com/nodejs/node-gyp/commit/72afdd62cd)] - **build**: rename copyNodeLib() to doBuild() (Liu Chao) [#1206](https://github.com/nodejs/node-gyp/pull/1206)
* [[`bad903ac70`](https://github.com/nodejs/node-gyp/commit/bad903ac70)] - **win**: more robust parsing of SDK version (Refael Ackermann) [#1198](https://github.com/nodejs/node-gyp/pull/1198)
@@ -351,8 +493,7 @@ v3.6.2 2017-06-01
* [[`0913b2dd99`](https://github.com/nodejs/node-gyp/commit/0913b2dd99)] - **build, win**: use target_arch to link with node.lib (Pavel Medvedev) [#964](https://github.com/nodejs/node-gyp/pull/964)
* [[`c307b302f7`](https://github.com/nodejs/node-gyp/commit/c307b302f7)] - **doc**: blorb about setting `npm_config_OPTION_NAME` (Refael Ackermann) [#1185](https://github.com/nodejs/node-gyp/pull/1185)
-v3.6.1 2017-04-30
-=================
+## v3.6.1 2017-04-30
* [[`49801716c2`](https://github.com/nodejs/node-gyp/commit/49801716c2)] - **test**: fix test-find-python on v0.10.x buildbot. (Ben Noordhuis) [#1172](https://github.com/nodejs/node-gyp/pull/1172)
* [[`a83a3801fc`](https://github.com/nodejs/node-gyp/commit/a83a3801fc)] - **test**: fix test/test-configure-python on AIX (Richard Lau) [#1131](https://github.com/nodejs/node-gyp/pull/1131)
@@ -360,8 +501,7 @@ v3.6.1 2017-04-30
* [[`c09cf7671e`](https://github.com/nodejs/node-gyp/commit/c09cf7671e)] - **doc**: add a note for using `configure` on Windows (Vse Mozhet Byt) [#1152](https://github.com/nodejs/node-gyp/pull/1152)
* [[`da9cb5f411`](https://github.com/nodejs/node-gyp/commit/da9cb5f411)] - Delete superfluous .patch files. (Ben Noordhuis) [#1122](https://github.com/nodejs/node-gyp/pull/1122)
-v3.6.0 2017-03-16
-=================
+## v3.6.0 2017-03-16
* [[`ae141e1906`](https://github.com/nodejs/node-gyp/commit/ae141e1906)] - **win**: find and setup for VS2017 (Refael Ackermann) [#1130](https://github.com/nodejs/node-gyp/pull/1130)
* [[`ec5fc36a80`](https://github.com/nodejs/node-gyp/commit/ec5fc36a80)] - Add support to build node.js with chakracore for ARM. (Kunal Pathak) [#873](https://github.com/nodejs/node-gyp/pull/873)
@@ -369,9 +509,7 @@ v3.6.0 2017-03-16
* [[`93d7fa83c8`](https://github.com/nodejs/node-gyp/commit/93d7fa83c8)] - Upgrade semver dependency. (Ben Noordhuis) [#1107](https://github.com/nodejs/node-gyp/pull/1107)
* [[`ff9a6fadfd`](https://github.com/nodejs/node-gyp/commit/ff9a6fadfd)] - Update link of gyp as Google code is shutting down (Peter Dave Hello) [#1061](https://github.com/nodejs/node-gyp/pull/1061)
-
-v3.5.0 2017-01-10
-=================
+## v3.5.0 2017-01-10
* [[`762d19a39e`](https://github.com/nodejs/node-gyp/commit/762d19a39e)] - \[doc\] merge History.md and CHANGELOG.md (Rod Vagg)
* [[`80fc5c3d31`](https://github.com/nodejs/node-gyp/commit/80fc5c3d31)] - Fix deprecated dependency warning (Simone Primarosa) [#1069](https://github.com/nodejs/node-gyp/pull/1069)
@@ -385,8 +523,7 @@ v3.5.0 2017-01-10
* [[`9c8d275526`](https://github.com/nodejs/node-gyp/commit/9c8d275526)] - Add --devdir flag. (Ben Noordhuis) [#916](https://github.com/nodejs/node-gyp/pull/916)
* [[`f6eab1f9e4`](https://github.com/nodejs/node-gyp/commit/f6eab1f9e4)] - **doc**: add windows-build-tools to readme (Felix Rieseberg) [#970](https://github.com/nodejs/node-gyp/pull/970)
-v3.4.0 2016-06-28
-=================
+## v3.4.0 2016-06-28
* [[`ce5fd04e94`](https://github.com/nodejs/node-gyp/commit/ce5fd04e94)] - **deps**: update minimatch version (delphiactual) [#961](https://github.com/nodejs/node-gyp/pull/961)
* [[`77383ddd85`](https://github.com/nodejs/node-gyp/commit/77383ddd85)] - Replace fs.accessSync call to fs.statSync (Richard Lau) [#955](https://github.com/nodejs/node-gyp/pull/955)
@@ -406,13 +543,11 @@ v3.4.0 2016-06-28
* [[`625c1515f9`](https://github.com/nodejs/node-gyp/commit/625c1515f9)] - **gyp**: inherit CC/CXX for CC/CXX.host (Johan Bergström) [#908](https://github.com/nodejs/node-gyp/pull/908)
* [[`3bcb1720e4`](https://github.com/nodejs/node-gyp/commit/3bcb1720e4)] - Add support for the Python launcher on Windows (Patrick Westerhoff) [#894](https://github.com/nodejs/node-gyp/pull/894
-v3.3.1 2016-03-04
-=================
+## v3.3.1 2016-03-04
* [[`a981ef847a`](https://github.com/nodejs/node-gyp/commit/a981ef847a)] - **gyp**: fix android generator (Robert Chiras) [#889](https://github.com/nodejs/node-gyp/pull/889)
-v3.3.0 2016-02-16
-=================
+## v3.3.0 2016-02-16
* [[`818d854a4d`](https://github.com/nodejs/node-gyp/commit/818d854a4d)] - Introduce NODEJS_ORG_MIRROR and IOJS_ORG_MIRROR (Rod Vagg) [#878](https://github.com/nodejs/node-gyp/pull/878)
* [[`d1e4cc4b62`](https://github.com/nodejs/node-gyp/commit/d1e4cc4b62)] - **(SEMVER-MINOR)** Download headers tarball for ~0.12.10 || ~0.10.42 (Rod Vagg) [#877](https://github.com/nodejs/node-gyp/pull/877)
@@ -421,14 +556,12 @@ v3.3.0 2016-02-16
* [[`8c4b0ffa50`](https://github.com/nodejs/node-gyp/commit/8c4b0ffa50)] - **(SEMVER-MINOR)** Add --cafile command line option. (Ben Noordhuis) [#837](https://github.com/nodejs/node-gyp/pull/837)
* [[`b3ad43498e`](https://github.com/nodejs/node-gyp/commit/b3ad43498e)] - **(SEMVER-MINOR)** Make download() function testable. (Ben Noordhuis) [#837](https://github.com/nodejs/node-gyp/pull/837)
-v3.2.1 2015-12-03
-=================
+## v3.2.1 2015-12-03
* [[`ab89b477c4`](https://github.com/nodejs/node-gyp/commit/ab89b477c4)] - Upgrade gyp to b3cef02. (Ben Noordhuis) [#831](https://github.com/nodejs/node-gyp/pull/831)
* [[`90078ecb17`](https://github.com/nodejs/node-gyp/commit/90078ecb17)] - Define WIN32_LEAN_AND_MEAN conditionally. (Ben Noordhuis) [#824](https://github.com/nodejs/node-gyp/pull/824)
-v3.2.0 2015-11-25
-=================
+## v3.2.0 2015-11-25
* [[`268f1ca4c7`](https://github.com/nodejs/node-gyp/commit/268f1ca4c7)] - Use result of `which` when searching for python. (Refael Ackermann) [#668](https://github.com/nodejs/node-gyp/pull/668)
* [[`817ed9bd78`](https://github.com/nodejs/node-gyp/commit/817ed9bd78)] - Add test for python executable search logic. (Ben Noordhuis) [#756](https://github.com/nodejs/node-gyp/pull/756)
@@ -437,8 +570,7 @@ v3.2.0 2015-11-25
* [[`a8d441a0a2`](https://github.com/nodejs/node-gyp/commit/a8d441a0a2)] - Update README for Windows 10 support. (Jason Williams) [#766](https://github.com/nodejs/node-gyp/pull/766)
* [[`d1d6015276`](https://github.com/nodejs/node-gyp/commit/d1d6015276)] - Update broken links and switch to HTTPS. (andrew morton)
-v3.1.0 2015-11-14
-=================
+## v3.1.0 2015-11-14
* [[`9049241f91`](https://github.com/nodejs/node-gyp/commit/9049241f91)] - **gyp**: don't use links at all, just copy the files instead (Nathan Zadoks)
* [[`8ef90348d1`](https://github.com/nodejs/node-gyp/commit/8ef90348d1)] - **gyp**: apply https://codereview.chromium.org/11361103/ (Nathan Rajlich)
@@ -448,24 +580,20 @@ v3.1.0 2015-11-14
* [[`2ac7de02c4`](https://github.com/nodejs/node-gyp/commit/2ac7de02c4)] - Fix infinite loop with zero-length options. (Ben Noordhuis) [#745](https://github.com/nodejs/node-gyp/pull/745)
* [[`101bed639b`](https://github.com/nodejs/node-gyp/commit/101bed639b)] - This platform value came from debian package, and now the value (Jérémy Lal) [#738](https://github.com/nodejs/node-gyp/pull/738)
-v3.0.3 2015-09-14
-=================
+## v3.0.3 2015-09-14
* [[`ad827cda30`](https://github.com/nodejs/node-gyp/commit/ad827cda30)] - tarballUrl global and && when checking for iojs (Lars-Magnus Skog) [#729](https://github.com/nodejs/node-gyp/pull/729)
-v3.0.2 2015-09-12
-=================
+## v3.0.2 2015-09-12
* [[`6e8c3bf3c6`](https://github.com/nodejs/node-gyp/commit/6e8c3bf3c6)] - add back support for passing additional cmdline args (Rod Vagg) [#723](https://github.com/nodejs/node-gyp/pull/723)
* [[`ff82f2f3b9`](https://github.com/nodejs/node-gyp/commit/ff82f2f3b9)] - fixed broken link in docs to Visual Studio 2013 download (simon-p-r) [#722](https://github.com/nodejs/node-gyp/pull/722)
-v3.0.1 2015-09-08
-=================
+## v3.0.1 2015-09-08
* [[`846337e36b`](https://github.com/nodejs/node-gyp/commit/846337e36b)] - normalise versions for target == this comparison (Rod Vagg) [#716](https://github.com/nodejs/node-gyp/pull/716)
-v3.0.0 2015-09-08
-=================
+## v3.0.0 2015-09-08
* [[`9720d0373c`](https://github.com/nodejs/node-gyp/commit/9720d0373c)] - remove node_modules from tree (Rod Vagg) [#711](https://github.com/nodejs/node-gyp/pull/711)
* [[`6dcf220db7`](https://github.com/nodejs/node-gyp/commit/6dcf220db7)] - test version major directly, don't use semver.satisfies() (Rod Vagg) [#711](https://github.com/nodejs/node-gyp/pull/711)
@@ -477,8 +605,7 @@ v3.0.0 2015-09-08
* [[`85ed107565`](https://github.com/nodejs/node-gyp/commit/85ed107565)] - Merge pull request #664 from othiym23/othiym23/allow-semver-5 (Nathan Rajlich)
* [[`0c720d234c`](https://github.com/nodejs/node-gyp/commit/0c720d234c)] - allow semver@5 (Forrest L Norvell)
-2.0.2 / 2015-07-14
-==================
+## 2.0.2 / 2015-07-14
* Use HTTPS for dist url (#656, @SonicHedgehog)
* Merge pull request #648 from nevosegal/master
@@ -491,14 +618,12 @@ v3.0.0 2015-09-08
src/win_delay_load_hook.c, and fixes of the long relative path issue on Win32.
Fixes #636 (#637, @lygstate).
-2.0.1 / 2015-05-28
-==================
+## 2.0.1 / 2015-05-28
* configure: try/catch the semver range.test() call
* README: update for visual studio 2013 (#510, @samccone)
-2.0.0 / 2015-05-24
-==================
+## 2.0.0 / 2015-05-24
* configure: check for python2 executable by default, fallback to python
* configure: don't clobber existing $PYTHONPATH
diff --git a/deps/npm/node_modules/node-gyp/README.md b/deps/npm/node_modules/node-gyp/README.md
index e06b01a739794f..11ba7ab6935ff5 100644
--- a/deps/npm/node_modules/node-gyp/README.md
+++ b/deps/npm/node_modules/node-gyp/README.md
@@ -1,6 +1,7 @@
# `node-gyp` - Node.js native addon build tool
[![Build Status](https://github.com/nodejs/node-gyp/workflows/Tests/badge.svg?branch=master)](https://github.com/nodejs/node-gyp/actions?query=workflow%3ATests+branch%3Amaster)
+![npm](https://img.shields.io/npm/dm/node-gyp)
`node-gyp` is a cross-platform command-line tool written in Node.js for
compiling native addon modules for Node.js. It contains a vendored copy of the
@@ -23,14 +24,14 @@ etc.), regardless of what version of Node.js is actually installed on your syste
You can install `node-gyp` using `npm`:
``` bash
-$ npm install -g node-gyp
+npm install -g node-gyp
```
Depending on your operating system, you will need to install:
### On Unix
- * Python v2.7, v3.5, v3.6, v3.7, or v3.8
+ * Python v3.6, v3.7, v3.8, or v3.9
* `make`
* A proper C/C++ compiler toolchain, like [GCC](https://gcc.gnu.org)
@@ -38,7 +39,7 @@ Depending on your operating system, you will need to install:
**ATTENTION**: If your Mac has been _upgraded_ to macOS Catalina (10.15), please read [macOS_Catalina.md](macOS_Catalina.md).
- * Python v2.7, v3.5, v3.6, v3.7, or v3.8
+ * Python v3.6, v3.7, v3.8, or v3.9
* [Xcode](https://developer.apple.com/xcode/download/)
* You also need to install the `XCode Command Line Tools` by running `xcode-select --install`. Alternatively, if you already have the full Xcode installed, you can find them under the menu `Xcode -> Open Developer Tool -> More Developer Tools...`. This step will install `clang`, `clang++`, and `make`.
@@ -46,15 +47,9 @@ Depending on your operating system, you will need to install:
Install the current version of Python from the [Microsoft Store package](https://docs.python.org/3/using/windows.html#the-microsoft-store-package).
-#### Option 1
-
-Install all the required tools and configurations using Microsoft's [windows-build-tools](https://github.com/felixrieseberg/windows-build-tools) using `npm install --global windows-build-tools` from an elevated PowerShell or CMD.exe (run as Administrator).
-
-#### Option 2
-
Install tools and configuration manually:
* Install Visual C++ Build Environment: [Visual Studio Build Tools](https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools)
- (using "Visual C++ build tools" workload) or [Visual Studio 2017 Community](https://visualstudio.microsoft.com/pl/thank-you-downloading-visual-studio/?sku=Community)
+ (using "Visual C++ build tools" workload) or [Visual Studio Community](https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=Community)
(using the "Desktop development with C++" workload)
* Launch cmd, `npm config set msvs_version 2017`
@@ -64,14 +59,14 @@ Install tools and configuration manually:
### Configuring Python Dependency
-`node-gyp` requires that you have installed a compatible version of Python, one of: v2.7, v3.5, v3.6,
-v3.7, or v3.8. If you have multiple Python versions installed, you can identify which Python
+`node-gyp` requires that you have installed a compatible version of Python, one of: v3.6, v3.7,
+v3.8, or v3.9. If you have multiple Python versions installed, you can identify which Python
version `node-gyp` should use in one of the following ways:
1. by setting the `--python` command-line option, e.g.:
``` bash
-$ node-gyp --python /path/to/executable/python
+node-gyp --python /path/to/executable/python
```
2. If `node-gyp` is called by way of `npm`, *and* you have multiple versions of
@@ -79,7 +74,7 @@ Python installed, then you can set `npm`'s 'python' config key to the appropriat
value:
``` bash
-$ npm config set python /path/to/executable/python
+npm config set python /path/to/executable/python
```
3. If the `PYTHON` environment variable is set to the path of a Python executable,
@@ -95,20 +90,20 @@ searching will be done.
To compile your native addon, first go to its root directory:
``` bash
-$ cd my_node_addon
+cd my_node_addon
```
The next step is to generate the appropriate project build files for the current
platform. Use `configure` for that:
``` bash
-$ node-gyp configure
+node-gyp configure
```
Auto-detection fails for Visual C++ Build Tools 2015, so `--msvs_version=2015`
needs to be added (not needed when run by npm as configured above):
``` bash
-$ node-gyp configure --msvs_version=2015
+node-gyp configure --msvs_version=2015
```
__Note__: The `configure` step looks for a `binding.gyp` file in the current
@@ -118,7 +113,7 @@ Now you will have either a `Makefile` (on Unix platforms) or a `vcxproj` file
(on Windows) in the `build/` directory. Next, invoke the `build` command:
``` bash
-$ node-gyp build
+node-gyp build
```
Now you have your compiled `.node` bindings file! The compiled bindings end up
@@ -149,13 +144,15 @@ A barebones `gyp` file appropriate for building a Node.js addon could look like:
## Further reading
+The **[docs](./docs/)** directory contains additional documentation on specific node-gyp topics that may be useful if you are experiencing problems installing or building addons using node-gyp.
+
Some additional resources for Node.js native addons and writing `gyp` configuration files:
* ["Going Native" a nodeschool.io tutorial](http://nodeschool.io/#goingnative)
* ["Hello World" node addon example](https://github.com/nodejs/node/tree/master/test/addons/hello-world)
* [gyp user documentation](https://gyp.gsrc.io/docs/UserDocumentation.md)
* [gyp input format reference](https://gyp.gsrc.io/docs/InputFormatReference.md)
- * [*"binding.gyp" files out in the wild* wiki page](https://github.com/nodejs/node-gyp/wiki/%22binding.gyp%22-files-out-in-the-wild)
+ * [*"binding.gyp" files out in the wild* wiki page](./docs/binding.gyp-files-in-the-wild.md)
## Commands
@@ -214,13 +211,13 @@ For example, to set `devdir` equal to `/tmp/.gyp`, you would:
Run this on Unix:
```bash
-$ export npm_config_devdir=/tmp/.gyp
+export npm_config_devdir=/tmp/.gyp
```
Or this on Windows:
```console
-> set npm_config_devdir=c:\temp\.gyp
+set npm_config_devdir=c:\temp\.gyp
```
### `npm` configuration
@@ -230,7 +227,7 @@ Use the form `OPTION_NAME` for any of the command options listed above.
For example, to set `devdir` equal to `/tmp/.gyp`, you would run:
```bash
-$ npm config set [--global] devdir /tmp/.gyp
+npm config set [--global] devdir /tmp/.gyp
```
**Note:** Configuration set via `npm` will only be used when `node-gyp`
diff --git a/deps/npm/node_modules/node-gyp/docs/Common-issues.md b/deps/npm/node_modules/node-gyp/docs/Common-issues.md
new file mode 100644
index 00000000000000..c6686cd521743a
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/docs/Common-issues.md
@@ -0,0 +1,13 @@
+## Python Issues OSX
+
+Make sure you are using the native Python version in OSX. If you use a MacPorts of HomeBrew version, you may run into problems.
+
+If you have issues with `execvp`, be sure to check your `$PYTHON` environment variable. If it is not set to the native version, unset it and try again.
+
+Notes: https://gist.github.com/erichocean/5177582
+
+## npm ERR! `node-gyp rebuild`(Windows)
+* just install the build tools from [here](https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools)
+Please note the version as is required in below command e.g **2017**
+* Launch cmd, run `npm config set msvs_version 2017`
+* close and open new CMD/terminal and all is well :100:
diff --git a/deps/npm/node_modules/node-gyp/docs/Error-pre-versions-of-node-cannot-be-installed.md b/deps/npm/node_modules/node-gyp/docs/Error-pre-versions-of-node-cannot-be-installed.md
new file mode 100644
index 00000000000000..c1e1158d70190b
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/docs/Error-pre-versions-of-node-cannot-be-installed.md
@@ -0,0 +1,94 @@
+When using `node-gyp` you might see an error like this when attempting to compile/install a node.js native addon:
+
+```
+$ npm install bcrypt
+npm http GET https://registry.npmjs.org/bcrypt/0.7.5
+npm http 304 https://registry.npmjs.org/bcrypt/0.7.5
+npm http GET https://registry.npmjs.org/bindings/1.0.0
+npm http 304 https://registry.npmjs.org/bindings/1.0.0
+
+> bcrypt@0.7.5 install /home/ubuntu/public/song-swap/node_modules/bcrypt
+> node-gyp rebuild
+
+gyp ERR! configure error
+gyp ERR! stack Error: "pre" versions of node cannot be installed, use the --nodedir flag instead
+gyp ERR! stack at install (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/install.js:69:16)
+gyp ERR! stack at Object.self.commands.(anonymous function) [as install] (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/node-gyp.js:56:37)
+gyp ERR! stack at getNodeDir (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:219:20)
+gyp ERR! stack at /usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:105:9
+gyp ERR! stack at ChildProcess.exithandler (child_process.js:630:7)
+gyp ERR! stack at ChildProcess.EventEmitter.emit (events.js:99:17)
+gyp ERR! stack at maybeClose (child_process.js:730:16)
+gyp ERR! stack at Process.ChildProcess._handle.onexit (child_process.js:797:5)
+gyp ERR! System Linux 3.5.0-21-generic
+gyp ERR! command "node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
+gyp ERR! cwd /home/ubuntu/public/song-swap/node_modules/bcrypt
+gyp ERR! node -v v0.11.2-pre
+gyp ERR! node-gyp -v v0.9.5
+gyp ERR! not ok
+npm ERR! bcrypt@0.7.5 install: `node-gyp rebuild`
+npm ERR! `sh "-c" "node-gyp rebuild"` failed with 1
+npm ERR!
+npm ERR! Failed at the bcrypt@0.7.5 install script.
+npm ERR! This is most likely a problem with the bcrypt package,
+npm ERR! not with npm itself.
+npm ERR! Tell the author that this fails on your system:
+npm ERR! node-gyp rebuild
+npm ERR! You can get their info via:
+npm ERR! npm owner ls bcrypt
+npm ERR! There is likely additional logging output above.
+
+npm ERR! System Linux 3.5.0-21-generic
+npm ERR! command "/usr/local/bin/node" "/usr/local/bin/npm" "install" "bcrypt"
+npm ERR! cwd /home/ubuntu/public/song-swap
+npm ERR! node -v v0.11.2-pre
+npm ERR! npm -v 1.2.18
+npm ERR! code ELIFECYCLE
+npm ERR!
+npm ERR! Additional logging details can be found in:
+npm ERR! /home/ubuntu/public/song-swap/npm-debug.log
+npm ERR! not ok code 0
+```
+
+The main error here is:
+
+```
+Error: "pre" versions of node cannot be installed, use the --nodedir flag instead
+```
+
+This error is caused when you attempt to compile a native addon using a version of node.js with `-pre` at the end of the version number:
+
+``` bash
+$ node -v
+v0.10.4-pre
+```
+
+## How to avoid (the short answer)
+
+To avoid this error completely just use a stable release of node.js. i.e. `v0.10.4`, and __not__ `v0.10.4-pre`.
+
+## How to fix (the long answer)
+
+This error happens because `node-gyp` does not know what header files were used to compile your "pre" version of node, and therefore it needs you to specify the node source code directory path using the `--nodedir` flag.
+
+For example, if I compiled my development ("pre") version of node.js using the source code in `/Users/nrajlich/node`, then I could invoke `node-gyp` like:
+
+``` bash
+$ node-gyp rebuild --nodedir=/Users/nrajlich/node
+```
+
+Or install an native addon through `npm` like:
+
+``` bash
+$ npm install bcrypt --nodedir=/Users/nrajlich/node
+```
+
+### Always use `--nodedir`
+
+__Note:__ This is for advanced users who use `-pre` versions of node more often than tagged releases.
+
+If you're invoking `node-gyp` through `npm`, then you can leverage `npm`'s configuration system and not have to specify the `--nodedir` flag all the time:
+
+``` bash
+$ npm config set nodedir /Users/nrajlich/node
+```
\ No newline at end of file
diff --git a/deps/npm/node_modules/node-gyp/docs/Home.md b/deps/npm/node_modules/node-gyp/docs/Home.md
new file mode 100644
index 00000000000000..fe099868b28225
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/docs/Home.md
@@ -0,0 +1,7 @@
+Welcome to the node-gyp wiki!
+
+ * [["binding.gyp" files out in the wild]]
+ * [[Linking to OpenSSL]]
+ * [[Common Issues]]
+ * [[Updating npm's bundled node-gyp]]
+ * [[Error: "pre" versions of node cannot be installed]]
diff --git a/deps/npm/node_modules/node-gyp/docs/Linking-to-OpenSSL.md b/deps/npm/node_modules/node-gyp/docs/Linking-to-OpenSSL.md
new file mode 100644
index 00000000000000..1c17ab8e313667
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/docs/Linking-to-OpenSSL.md
@@ -0,0 +1,86 @@
+A handful of native addons require linking to OpenSSL in one way or another. This introduces a small challenge since node will sometimes bundle OpenSSL statically (the default for node >= v0.8.x), or sometimes dynamically link to the system OpenSSL (default for node <= v0.6.x).
+
+Good native addons should account for both scenarios. It's recommended that you use the `binding.gyp` file provided below as a starting-point for any addon that needs to use OpenSSL:
+
+``` python
+{
+ 'variables': {
+ # node v0.6.x doesn't give us its build variables,
+ # but on Unix it was only possible to use the system OpenSSL library,
+ # so default the variable to "true", v0.8.x node and up will overwrite it.
+ 'node_shared_openssl%': 'true'
+ },
+ 'targets': [
+ {
+ 'target_name': 'binding',
+ 'sources': [
+ 'src/binding.cc'
+ ],
+ 'conditions': [
+ ['node_shared_openssl=="false"', {
+ # so when "node_shared_openssl" is "false", then OpenSSL has been
+ # bundled into the node executable. So we need to include the same
+ # header files that were used when building node.
+ 'include_dirs': [
+ '<(node_root_dir)/deps/openssl/openssl/include'
+ ],
+ "conditions" : [
+ ["target_arch=='ia32'", {
+ "include_dirs": [ "<(node_root_dir)/deps/openssl/config/piii" ]
+ }],
+ ["target_arch=='x64'", {
+ "include_dirs": [ "<(node_root_dir)/deps/openssl/config/k8" ]
+ }],
+ ["target_arch=='arm'", {
+ "include_dirs": [ "<(node_root_dir)/deps/openssl/config/arm" ]
+ }]
+ ]
+ }]
+ ]
+ }
+ ]
+}
+```
+
+This ensures that when OpenSSL is statically linked into `node` then, the bundled OpenSSL headers are included, but when the system OpenSSL is in use, then only those headers will be used.
+
+## Windows?
+
+As you can see this baseline `binding.gyp` file only accounts for the Unix scenario. Currently on Windows the situation is a little less ideal. On Windows, OpenSSL is _always_ statically compiled into the `node` executable, so ideally it would be possible to use that copy of OpenSSL when building native addons.
+
+Unfortunately it doesn't seem like that is possible at the moment, as there would need to be tweaks made to the generated `node.lib` file to include the openssl glue functions, or a new `openssl.lib` file would need to be created during the node build. I'm not sure which is the easiest/most feasible.
+
+In the meantime, one possible solution is using another copy of OpenSSL, which is what [`node-bcrypt`](https://github.com/ncb000gt/node.bcrypt.js) currently does. Adding something like this to your `binding.gyp` file's `"conditions"` block would enable this:
+
+``` python
+ [ 'OS=="win"', {
+ 'conditions': [
+ # "openssl_root" is the directory on Windows of the OpenSSL files.
+ # Check the "target_arch" variable to set good default values for
+ # both 64-bit and 32-bit builds of the module.
+ ['target_arch=="x64"', {
+ 'variables': {
+ 'openssl_root%': 'C:/OpenSSL-Win64'
+ },
+ }, {
+ 'variables': {
+ 'openssl_root%': 'C:/OpenSSL-Win32'
+ },
+ }],
+ ],
+ 'libraries': [
+ '-l<(openssl_root)/lib/libeay32.lib',
+ ],
+ 'include_dirs': [
+ '<(openssl_root)/include',
+ ],
+ }]
+```
+
+Now you can direct your users to install OpenSSL on Windows from here (be sure to tell them to install the 64-bit version if they're compiling against a 64-bit version of node): http://slproweb.com/products/Win32OpenSSL.html
+
+Also note that both `node-gyp` and `npm` allow you to overwrite that default `openssl_root` variable on the command line:
+
+``` bash
+$ node-gyp rebuild --openssl-root="C:\Users\Nathan\Desktop\openssl"
+```
\ No newline at end of file
diff --git a/deps/npm/node_modules/node-gyp/docs/Updating-npm-bundled-node-gyp.md b/deps/npm/node_modules/node-gyp/docs/Updating-npm-bundled-node-gyp.md
new file mode 100644
index 00000000000000..01ad5642b2009d
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/docs/Updating-npm-bundled-node-gyp.md
@@ -0,0 +1,45 @@
+# Updating the npm-bundled version of node-gyp
+
+[Many issues](https://github.com/nodejs/node-gyp/labels/ERR%21%20node-gyp%20-v%20%3C%3D%20v5.1.0) are opened by users who are
+not running a [current version of node-gyp](https://github.com/nodejs/node-gyp/releases).
+
+`npm` bundles its own, internal, copy of `node-gyp`. This internal copy is independent of any globally installed copy of node-gyp that
+may have been installed via `npm install -g node-gyp`.
+
+Generally, npm's library files are installed inside your global "node_modules", where npm is installed (run `npm prefix` and add `lib/node_modules`, or just `node_modules` for Windows). There are some exceptions to this. Inside this global `node_modules/` there will be an `npm/` directory and inside this you'll find a `node_modules/node-gyp/` directory. So it may look something like `/usr/local/lib/node_modules/npm/node_modules/node-gyp/`. This is the version of node-gyp that ships with npm.
+
+When you install a _new_ version of node-gyp outside of npm, it'll go into your global node_modules, but not under the `npm/node_modules`. So that may look like `/usr/local/lib/node_modules/node-gyp/`. It'll have the `node-gyp` executable linked into your `PATH` so running `node-gyp` will use this version.
+
+The catch is that npm won't use this version unless you tell it to, it'll keep on using the one you have installed. You need to instruct it to by setting the `node_gyp` config variable (which goes into your `~/.npmrc`). You do this by running the `npm config set` command as below. Then npm will use the command in the path you supply whenever it needs to build a native addon.
+
+**Important**: You also need to remember to unset this when you upgrade npm with a newer version of node-gyp, or you have to manually keep your globally installed node-gyp to date. See "Undo" below.
+
+## Linux and macOS
+```
+npm install --global node-gyp@latest
+npm config set node_gyp $(npm prefix -g)/lib/node_modules/node-gyp/bin/node-gyp.js
+```
+
+`sudo` may be required for the first command if you get a permission error.
+
+## Windows
+
+### Windows Command Prompt
+```
+npm install --global node-gyp@latest
+for /f "delims=" %P in ('npm prefix -g') do npm config set node_gyp"%P\node_modules\node-gyp\bin\node-gyp.js"
+```
+
+### Powershell
+```
+npm install --global node-gyp@latest
+npm prefix -g | % {npm config set node_gyp "$_\node_modules\node-gyp\bin\node-gypjs"}
+```
+
+## Undo
+**Beware** if you don't unset the `node_gyp` config option, npm will continue to use the globally installed version of node-gyp rather than the one it ships with, which may end up being newer.
+
+```
+npm config delete node_gyp
+npm uninstall --global node-gyp
+```
diff --git a/deps/npm/node_modules/node-gyp/docs/binding.gyp-files-in-the-wild.md b/deps/npm/node_modules/node-gyp/docs/binding.gyp-files-in-the-wild.md
new file mode 100644
index 00000000000000..e057aa8e5853f7
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/docs/binding.gyp-files-in-the-wild.md
@@ -0,0 +1,48 @@
+This page contains links to some examples of existing `binding.gyp` files that other node modules are using. Take a look at them for inspiration.
+
+To add to this page, just add the link to the project's `binding.gyp` file below:
+
+ * [ons](https://github.com/XadillaX/aliyun-ons/blob/master/binding.gyp)
+ * [thmclrx](https://github.com/XadillaX/thmclrx/blob/master/binding.gyp)
+ * [libxmljs](https://github.com/polotek/libxmljs/blob/master/binding.gyp)
+ * [node-buffertools](https://github.com/bnoordhuis/node-buffertools/blob/master/binding.gyp)
+ * [node-canvas](https://github.com/LearnBoost/node-canvas/blob/master/binding.gyp)
+ * [node-ffi](https://github.com/rbranson/node-ffi/blob/master/binding.gyp) + [libffi](https://github.com/rbranson/node-ffi/blob/master/deps/libffi/libffi.gyp)
+ * [node-time](https://github.com/TooTallNate/node-time/blob/master/binding.gyp)
+ * [node-sass](https://github.com/sass/node-sass/blob/master/binding.gyp) + [libsass](https://github.com/sass/node-sass/blob/master/src/libsass.gyp)
+ * [node-serialport](https://github.com/voodootikigod/node-serialport/blob/master/binding.gyp)
+ * [node-weak](https://github.com/TooTallNate/node-weak/blob/master/binding.gyp)
+ * [pty.js](https://github.com/chjj/pty.js/blob/master/binding.gyp)
+ * [ref](https://github.com/TooTallNate/ref/blob/master/binding.gyp)
+ * [appjs](https://github.com/milani/appjs/blob/master/binding.gyp)
+ * [nwm](https://github.com/mixu/nwm/blob/master/binding.gyp)
+ * [bcrypt](https://github.com/ncb000gt/node.bcrypt.js/blob/master/binding.gyp)
+ * [nk-mysql](https://github.com/mmod/nodamysql/blob/master/binding.gyp)
+ * [nk-xrm-installer](https://github.com/mmod/nk-xrm-installer/blob/master/binding.gyp) + [includable.gypi](https://github.com/mmod/nk-xrm-installer/blob/master/includable.gypi) + [unpack.py](https://github.com/mmod/nk-xrm-installer/blob/master/unpack.py) + [disburse.py](https://github.com/mmod/nk-xrm-installer/blob/master/disburse.py)
+ .py files above provide complete reference for examples of fetching source via http, extracting, and moving files.
+ * [node-memwatch](https://github.com/lloyd/node-memwatch/blob/master/binding.gyp)
+ * [node-ip2location](https://github.com/bolgovr/node-ip2location/blob/master/binding.gyp)
+ * [node-midi](https://github.com/justinlatimer/node-midi/blob/master/binding.gyp)
+ * [node-sqlite3](https://github.com/developmentseed/node-sqlite3/blob/master/binding.gyp) + [libsqlite3](https://github.com/developmentseed/node-sqlite3/blob/master/deps/sqlite3.gyp)
+ * [node-zipfile](https://github.com/mapbox/node-zipfile/blob/master/binding.gyp)
+ * [node-mapnik](https://github.com/mapnik/node-mapnik/blob/master/binding.gyp)
+ * [node-inotify](https://github.com/c4milo/node-inotify/blob/master/binding.gyp)
+ * [v8-profiler](https://github.com/c4milo/v8-profiler/blob/master/binding.gyp)
+ * [airtunes](https://github.com/radioline/node_airtunes/blob/master/binding.gyp)
+ * [node-fann](https://github.com/c4milo/node-fann/blob/master/binding.gyp)
+ * [node-talib](https://github.com/oransel/node-talib/blob/master/binding.gyp)
+ * [node-leveldown](https://github.com/rvagg/node-leveldown/blob/master/binding.gyp) + [leveldb.gyp](https://github.com/rvagg/node-leveldown/blob/master/deps/leveldb/leveldb.gyp) + [snappy.gyp](https://github.com/rvagg/node-leveldown/blob/master/deps/snappy/snappy.gyp)
+ * [node-expat](https://github.com/astro/node-expat/blob/master/binding.gyp) + [libexpat](https://github.com/astro/node-expat/blob/master/deps/libexpat/libexpat.gyp)
+ * [node-openvg-canvas](https://github.com/luismreis/node-openvg-canvas/blob/master/binding.gyp) + [node-openvg](https://github.com/luismreis/node-openvg/blob/master/binding.gyp)
+ * [node-cryptopp](https://github.com/BatikhSouri/node-cryptopp/blob/master/binding.gyp)
+ * [topcube](https://github.com/creationix/topcube/blob/master/binding.gyp)
+ * [node-osmium](https://github.com/osmcode/node-osmium/blob/master/binding.gyp)
+ * [node-osrm](https://github.com/DennisOSRM/node-osrm)
+ * [node-oracle](https://github.com/joeferner/node-oracle/blob/master/binding.gyp)
+ * [node-process-list](https://github.com/ReklatsMasters/node-process-list/blob/master/binding.gyp)
+ * [node-nanomsg](https://github.com/nickdesaulniers/node-nanomsg/blob/master/binding.gyp)
+ * [Ghostscript4JS](https://github.com/NickNaso/ghostscript4js/blob/master/binding.gyp)
+ * [nodecv](https://github.com/xudafeng/nodecv/blob/master/binding.gyp)
+ * [magick-cli](https://github.com/NickNaso/magick-cli/blob/master/binding.gyp)
+ * [sharp](https://github.com/lovell/sharp/blob/master/binding.gyp)
+ * [krb5](https://github.com/adaltas/node-krb5/blob/master/binding.gyp)
\ No newline at end of file
diff --git a/deps/npm/node_modules/node-gyp/gyp/.github/workflows/Python_tests.yml b/deps/npm/node_modules/node-gyp/gyp/.github/workflows/Python_tests.yml
index 128654f3121d76..92303b635f2cfa 100644
--- a/deps/npm/node_modules/node-gyp/gyp/.github/workflows/Python_tests.yml
+++ b/deps/npm/node_modules/node-gyp/gyp/.github/workflows/Python_tests.yml
@@ -1,5 +1,4 @@
# TODO: Enable os: windows-latest
-# TODO: Enable python-version: 3.5
# TODO: Enable pytest --doctest-modules
name: Python_tests
@@ -9,10 +8,10 @@ jobs:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
- max-parallel: 15
+ max-parallel: 8
matrix:
os: [macos-latest, ubuntu-latest] # , windows-latest]
- python-version: [2.7, 3.6, 3.7, 3.8, 3.9]
+ python-version: [3.6, 3.7, 3.8, 3.9]
steps:
- uses: actions/checkout@v2
- name: Set up Python ${{ matrix.python-version }}
@@ -24,7 +23,7 @@ jobs:
python -m pip install --upgrade pip
pip install -r requirements_dev.txt
- name: Lint with flake8
- run: flake8 . --count --show-source --statistics
+ run: flake8 . --ignore=E203,W503 --max-complexity=101 --max-line-length=88 --show-source --statistics
- name: Test with pytest
run: pytest
# - name: Run doctests with pytest
diff --git a/deps/npm/node_modules/node-gyp/gyp/.github/workflows/node-gyp.yml b/deps/npm/node_modules/node-gyp/gyp/.github/workflows/node-gyp.yml
index 78fe502bda062f..bd7c85ffda9169 100644
--- a/deps/npm/node_modules/node-gyp/gyp/.github/workflows/node-gyp.yml
+++ b/deps/npm/node_modules/node-gyp/gyp/.github/workflows/node-gyp.yml
@@ -8,6 +8,8 @@ jobs:
fail-fast: false
matrix:
os: [macos-latest, ubuntu-latest, windows-latest]
+ python: [3.6, 3.9]
+
runs-on: ${{ matrix.os }}
steps:
- name: Clone gyp-next
@@ -19,12 +21,12 @@ jobs:
with:
repository: nodejs/node-gyp
path: node-gyp
- - uses: actions/setup-node@v1
+ - uses: actions/setup-node@v2
with:
node-version: 14.x
- uses: actions/setup-python@v2
with:
- python-version: 3.9
+ python-version: ${{ matrix.python }}
- name: Install dependencies
run: |
cd node-gyp
diff --git a/deps/npm/node_modules/node-gyp/gyp/.github/workflows/release-please.yml b/deps/npm/node_modules/node-gyp/gyp/.github/workflows/release-please.yml
index a414c10e156360..288afdb3b32e0c 100644
--- a/deps/npm/node_modules/node-gyp/gyp/.github/workflows/release-please.yml
+++ b/deps/npm/node_modules/node-gyp/gyp/.github/workflows/release-please.yml
@@ -1,14 +1,14 @@
on:
push:
branches:
- - master
+ - main
name: release-please
jobs:
release-please:
runs-on: ubuntu-latest
steps:
- - uses: GoogleCloudPlatform/release-please-action@v2.5.6
+ - uses: GoogleCloudPlatform/release-please-action@v2
with:
token: ${{ secrets.GITHUB_TOKEN }}
release-type: python
diff --git a/deps/npm/node_modules/node-gyp/gyp/CHANGELOG.md b/deps/npm/node_modules/node-gyp/gyp/CHANGELOG.md
index 53c922b6c903f8..f5e9f634763a14 100644
--- a/deps/npm/node_modules/node-gyp/gyp/CHANGELOG.md
+++ b/deps/npm/node_modules/node-gyp/gyp/CHANGELOG.md
@@ -1,5 +1,105 @@
# Changelog
+### [0.9.6](https://www.github.com/nodejs/gyp-next/compare/v0.9.5...v0.9.6) (2021-08-23)
+
+
+### Bug Fixes
+
+* align flake8 test ([#122](https://www.github.com/nodejs/gyp-next/issues/122)) ([f1faa8d](https://www.github.com/nodejs/gyp-next/commit/f1faa8d3081e1a47e917ff910892f00dff16cf8a))
+* **msvs:** fix paths again in action command arguments ([#121](https://www.github.com/nodejs/gyp-next/issues/121)) ([7159dfb](https://www.github.com/nodejs/gyp-next/commit/7159dfbc5758c9ec717e215f2c36daf482c846a1))
+
+### [0.9.5](https://www.github.com/nodejs/gyp-next/compare/v0.9.4...v0.9.5) (2021-08-18)
+
+
+### Bug Fixes
+
+* add python 3.6 to node-gyp integration test ([3462d4c](https://www.github.com/nodejs/gyp-next/commit/3462d4ce3c31cce747513dc7ca9760c81d57c60e))
+* revert for windows compatibility ([d078e7d](https://www.github.com/nodejs/gyp-next/commit/d078e7d7ae080ddae243188f6415f940376a7368))
+* support msvs_quote_cmd in ninja generator ([#117](https://www.github.com/nodejs/gyp-next/issues/117)) ([46486ac](https://www.github.com/nodejs/gyp-next/commit/46486ac6e9329529d51061e006a5b39631e46729))
+
+### [0.9.4](https://www.github.com/nodejs/gyp-next/compare/v0.9.3...v0.9.4) (2021-08-09)
+
+
+### Bug Fixes
+
+* .S is an extension for asm file on Windows ([#115](https://www.github.com/nodejs/gyp-next/issues/115)) ([d2fad44](https://www.github.com/nodejs/gyp-next/commit/d2fad44ef3a79ca8900f1307060153ded57053fc))
+
+### [0.9.3](https://www.github.com/nodejs/gyp-next/compare/v0.9.2...v0.9.3) (2021-07-07)
+
+
+### Bug Fixes
+
+* build failure with ninja and Python 3 on Windows ([#113](https://www.github.com/nodejs/gyp-next/issues/113)) ([c172d10](https://www.github.com/nodejs/gyp-next/commit/c172d105deff5db4244e583942215918fa80dd3c))
+
+### [0.9.2](https://www.github.com/nodejs/gyp-next/compare/v0.9.1...v0.9.2) (2021-05-21)
+
+
+### Bug Fixes
+
+* add support of utf8 encoding ([#105](https://www.github.com/nodejs/gyp-next/issues/105)) ([4d0f93c](https://www.github.com/nodejs/gyp-next/commit/4d0f93c249286d1f0c0f665f5fe7346119f98cf1))
+
+### [0.9.1](https://www.github.com/nodejs/gyp-next/compare/v0.9.0...v0.9.1) (2021-05-14)
+
+
+### Bug Fixes
+
+* py lint ([3b6a8ee](https://www.github.com/nodejs/gyp-next/commit/3b6a8ee7a66193a8a6867eba9e1d2b70bdf04402))
+
+## [0.9.0](https://www.github.com/nodejs/gyp-next/compare/v0.8.1...v0.9.0) (2021-05-13)
+
+
+### Features
+
+* use LDFLAGS_host for host toolset ([#98](https://www.github.com/nodejs/gyp-next/issues/98)) ([bea5c7b](https://www.github.com/nodejs/gyp-next/commit/bea5c7bd67d6ad32acbdce79767a5481c70675a2))
+
+
+### Bug Fixes
+
+* msvs.py: remove overindentation ([#102](https://www.github.com/nodejs/gyp-next/issues/102)) ([3f83e99](https://www.github.com/nodejs/gyp-next/commit/3f83e99056d004d9579ceb786e06b624ddc36529))
+* update gyp.el to change case to cl-case ([#93](https://www.github.com/nodejs/gyp-next/issues/93)) ([13d5b66](https://www.github.com/nodejs/gyp-next/commit/13d5b66aab35985af9c2fb1174fdc6e1c1407ecc))
+
+### [0.8.1](https://www.github.com/nodejs/gyp-next/compare/v0.8.0...v0.8.1) (2021-02-18)
+
+
+### Bug Fixes
+
+* update shebang lines from python to python3 ([#94](https://www.github.com/nodejs/gyp-next/issues/94)) ([a1b0d41](https://www.github.com/nodejs/gyp-next/commit/a1b0d4171a8049a4ab7a614202063dec332f2df4))
+
+## [0.8.0](https://www.github.com/nodejs/gyp-next/compare/v0.7.0...v0.8.0) (2021-01-15)
+
+
+### ⚠ BREAKING CHANGES
+
+* remove support for Python 2
+
+### Bug Fixes
+
+* revert posix build job ([#86](https://www.github.com/nodejs/gyp-next/issues/86)) ([39dc34f](https://www.github.com/nodejs/gyp-next/commit/39dc34f0799c074624005fb9bbccf6e028607f9d))
+
+
+### gyp
+
+* Remove support for Python 2 ([#88](https://www.github.com/nodejs/gyp-next/issues/88)) ([22e4654](https://www.github.com/nodejs/gyp-next/commit/22e465426fd892403c95534229af819a99c3f8dc))
+
+## [0.7.0](https://www.github.com/nodejs/gyp-next/compare/v0.6.2...v0.7.0) (2020-12-17)
+
+
+### ⚠ BREAKING CHANGES
+
+* **msvs:** On Windows, arguments passed to the "action" commands are no longer transformed to replace slashes with backslashes.
+
+### Features
+
+* **xcode:** --cross-compiling overrides arch-specific settings ([973bae0](https://www.github.com/nodejs/gyp-next/commit/973bae0b7b08be7b680ecae9565fbd04b3e0787d))
+
+
+### Bug Fixes
+
+* **msvs:** do not fix paths in action command arguments ([fc22f83](https://www.github.com/nodejs/gyp-next/commit/fc22f8335e2016da4aae4f4233074bd651d2faea))
+* cmake on python 3 ([fd61f5f](https://www.github.com/nodejs/gyp-next/commit/fd61f5faa5275ec8fc98e3c7868c0dd46f109540))
+* ValueError: invalid mode: 'rU' while trying to load binding.gyp ([d0504e6](https://www.github.com/nodejs/gyp-next/commit/d0504e6700ce48f44957a4d5891b142a60be946f))
+* xcode cmake parsing ([eefe8d1](https://www.github.com/nodejs/gyp-next/commit/eefe8d10e99863bc4ac7e2ed32facd608d400d4b))
+
### [0.6.2](https://www.github.com/nodejs/gyp-next/compare/v0.6.1...v0.6.2) (2020-10-16)
diff --git a/deps/npm/node_modules/node-gyp/gyp/CODE_OF_CONDUCT.md b/deps/npm/node_modules/node-gyp/gyp/CODE_OF_CONDUCT.md
index 4c211405596cb4..d724027fd9aadb 100644
--- a/deps/npm/node_modules/node-gyp/gyp/CODE_OF_CONDUCT.md
+++ b/deps/npm/node_modules/node-gyp/gyp/CODE_OF_CONDUCT.md
@@ -1,4 +1,4 @@
# Code of Conduct
-* [Node.js Code of Conduct](https://github.com/nodejs/admin/blob/master/CODE_OF_CONDUCT.md)
-* [Node.js Moderation Policy](https://github.com/nodejs/admin/blob/master/Moderation-Policy.md)
+* [Node.js Code of Conduct](https://github.com/nodejs/admin/blob/HEAD/CODE_OF_CONDUCT.md)
+* [Node.js Moderation Policy](https://github.com/nodejs/admin/blob/HEAD/Moderation-Policy.md)
diff --git a/deps/npm/node_modules/node-gyp/gyp/CONTRIBUTING.md b/deps/npm/node_modules/node-gyp/gyp/CONTRIBUTING.md
index f9dd574a47cd9d..1a0bcde2b48d8e 100644
--- a/deps/npm/node_modules/node-gyp/gyp/CONTRIBUTING.md
+++ b/deps/npm/node_modules/node-gyp/gyp/CONTRIBUTING.md
@@ -2,7 +2,7 @@
## Code of Conduct
-This project is bound to the [Node.js Code of Conduct](https://github.com/nodejs/admin/blob/master/CODE_OF_CONDUCT.md).
+This project is bound to the [Node.js Code of Conduct](https://github.com/nodejs/admin/blob/HEAD/CODE_OF_CONDUCT.md).
## Developer's Certificate of Origin 1.1
diff --git a/deps/npm/node_modules/node-gyp/gyp/gyp_main.py b/deps/npm/node_modules/node-gyp/gyp/gyp_main.py
index da696cfc4b1c3f..f23dcdf882d1b0 100755
--- a/deps/npm/node_modules/node-gyp/gyp/gyp_main.py
+++ b/deps/npm/node_modules/node-gyp/gyp/gyp_main.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
# Copyright (c) 2009 Google Inc. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
@@ -8,8 +8,6 @@
import sys
import subprocess
-PY3 = bytes != str
-
def IsCygwin():
# Function copied from pylib/gyp/common.py
@@ -17,10 +15,8 @@ def IsCygwin():
out = subprocess.Popen(
"uname", stdout=subprocess.PIPE, stderr=subprocess.STDOUT
)
- stdout, stderr = out.communicate()
- if PY3:
- stdout = stdout.decode("utf-8")
- return "CYGWIN" in str(stdout)
+ stdout, _ = out.communicate()
+ return "CYGWIN" in stdout.decode("utf-8")
except Exception:
return False
@@ -33,9 +29,7 @@ def UnixifyPath(path):
["cygpath", "-u", path], stdout=subprocess.PIPE, stderr=subprocess.STDOUT
)
stdout, _ = out.communicate()
- if PY3:
- stdout = stdout.decode("utf-8")
- return str(stdout)
+ return stdout.decode("utf-8")
except Exception:
return path
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSNew.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSNew.py
index 04bbb3df718727..d6b189760cef99 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSNew.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSNew.py
@@ -11,12 +11,9 @@
import gyp.common
-try:
- cmp
-except NameError:
- def cmp(x, y):
- return (x > y) - (x < y)
+def cmp(x, y):
+ return (x > y) - (x < y)
# Initialize random number generator
@@ -69,7 +66,7 @@ def MakeGuid(name, seed="msvs_new"):
# ------------------------------------------------------------------------------
-class MSVSSolutionEntry(object):
+class MSVSSolutionEntry:
def __cmp__(self, other):
# Sort by name then guid (so things are in order on vs2008).
return cmp((self.name, self.get_guid()), (other.name, other.get_guid()))
@@ -190,7 +187,7 @@ def set_msbuild_toolset(self, msbuild_toolset):
# ------------------------------------------------------------------------------
-class MSVSSolution(object):
+class MSVSSolution:
"""Visual Studio solution."""
def __init__(
@@ -292,14 +289,14 @@ def Write(self, writer=gyp.common.WriteOnDiff):
if e.items:
f.write("\tProjectSection(SolutionItems) = preProject\r\n")
for i in e.items:
- f.write("\t\t%s = %s\r\n" % (i, i))
+ f.write(f"\t\t{i} = {i}\r\n")
f.write("\tEndProjectSection\r\n")
if isinstance(e, MSVSProject):
if e.dependencies:
f.write("\tProjectSection(ProjectDependencies) = postProject\r\n")
for d in e.dependencies:
- f.write("\t\t%s = %s\r\n" % (d.get_guid(), d.get_guid()))
+ f.write(f"\t\t{d.get_guid()} = {d.get_guid()}\r\n")
f.write("\tEndProjectSection\r\n")
f.write("EndProject\r\n")
@@ -310,7 +307,7 @@ def Write(self, writer=gyp.common.WriteOnDiff):
# Configurations (variants)
f.write("\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n")
for v in self.variants:
- f.write("\t\t%s = %s\r\n" % (v, v))
+ f.write(f"\t\t{v} = {v}\r\n")
f.write("\tEndGlobalSection\r\n")
# Sort config guids for easier diffing of solution changes.
@@ -362,7 +359,7 @@ def Write(self, writer=gyp.common.WriteOnDiff):
if not isinstance(e, MSVSFolder):
continue # Does not apply to projects, only folders
for subentry in e.entries:
- f.write("\t\t%s = %s\r\n" % (subentry.get_guid(), e.get_guid()))
+ f.write(f"\t\t{subentry.get_guid()} = {e.get_guid()}\r\n")
f.write("\tEndGlobalSection\r\n")
f.write("EndGlobal\r\n")
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSProject.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSProject.py
index f953d52cd03d36..f0cfabe8349099 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSProject.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSProject.py
@@ -9,7 +9,7 @@
# ------------------------------------------------------------------------------
-class Tool(object):
+class Tool:
"""Visual Studio tool."""
def __init__(self, name, attrs=None):
@@ -31,7 +31,7 @@ def _GetSpecification(self):
return ["Tool", self._attrs]
-class Filter(object):
+class Filter:
"""Visual Studio filter - that is, a virtual folder."""
def __init__(self, name, contents=None):
@@ -48,7 +48,7 @@ def __init__(self, name, contents=None):
# ------------------------------------------------------------------------------
-class Writer(object):
+class Writer:
"""Visual Studio XML project writer."""
def __init__(self, project_path, version, name, guid=None, platforms=None):
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings.py
index 6ef16f2a0b23e2..e89a971a3bb4fd 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings.py
@@ -14,12 +14,8 @@
MSBuild install directory, e.g. c:\Program Files (x86)\MSBuild
"""
-from __future__ import print_function
-
-from gyp import string_types
-
-import sys
import re
+import sys
# Dictionaries of settings validators. The key is the tool name, the value is
# a dictionary mapping setting names to validation functions.
@@ -36,7 +32,7 @@
_msbuild_name_of_tool = {}
-class _Tool(object):
+class _Tool:
"""Represents a tool used by MSVS or MSBuild.
Attributes:
@@ -68,7 +64,7 @@ def _GetMSBuildToolSettings(msbuild_settings, tool):
return msbuild_settings.setdefault(tool.msbuild_name, {})
-class _Type(object):
+class _Type:
"""Type of settings (Base class)."""
def ValidateMSVS(self, value):
@@ -110,11 +106,11 @@ class _String(_Type):
"""A setting that's just a string."""
def ValidateMSVS(self, value):
- if not isinstance(value, string_types):
+ if not isinstance(value, str):
raise ValueError("expected string; got %r" % value)
def ValidateMSBuild(self, value):
- if not isinstance(value, string_types):
+ if not isinstance(value, str):
raise ValueError("expected string; got %r" % value)
def ConvertToMSBuild(self, value):
@@ -126,11 +122,11 @@ class _StringList(_Type):
"""A settings that's a list of strings."""
def ValidateMSVS(self, value):
- if not isinstance(value, string_types) and not isinstance(value, list):
+ if not isinstance(value, (list, str)):
raise ValueError("expected string list; got %r" % value)
def ValidateMSBuild(self, value):
- if not isinstance(value, string_types) and not isinstance(value, list):
+ if not isinstance(value, (list, str)):
raise ValueError("expected string list; got %r" % value)
def ConvertToMSBuild(self, value):
@@ -195,7 +191,7 @@ class _Enumeration(_Type):
def __init__(self, label_list, new=None):
_Type.__init__(self)
self._label_list = label_list
- self._msbuild_values = set(value for value in label_list if value is not None)
+ self._msbuild_values = {value for value in label_list if value is not None}
if new is not None:
self._msbuild_values.update(new)
@@ -342,7 +338,7 @@ def _Translate(value, msbuild_settings):
if value == "true":
tool_settings = _GetMSBuildToolSettings(msbuild_settings, tool)
if "AdditionalOptions" in tool_settings:
- new_flags = "%s %s" % (tool_settings["AdditionalOptions"], flag)
+ new_flags = "{} {}".format(tool_settings["AdditionalOptions"], flag)
else:
new_flags = flag
tool_settings["AdditionalOptions"] = new_flags
@@ -536,14 +532,14 @@ def _ValidateSettings(validators, settings, stderr):
tool_validators[setting](value)
except ValueError as e:
print(
- "Warning: for %s/%s, %s" % (tool_name, setting, e),
+ f"Warning: for {tool_name}/{setting}, {e}",
file=stderr,
)
else:
_ValidateExclusionSetting(
setting,
tool_validators,
- ("Warning: unrecognized setting %s/%s" % (tool_name, setting)),
+ (f"Warning: unrecognized setting {tool_name}/{setting}"),
stderr,
)
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings_test.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings_test.py
index 99860c880ec5d0..6ca09687ad7f13 100755
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings_test.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings_test.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
# Copyright (c) 2012 Google Inc. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
@@ -9,10 +9,7 @@
import unittest
import gyp.MSVSSettings as MSVSSettings
-try:
- from StringIO import StringIO # Python 2
-except ImportError:
- from io import StringIO # Python 3
+from io import StringIO
class TestSequenceFunctions(unittest.TestCase):
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSToolFile.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSToolFile.py
index 2c08589e06dc6d..2e5c811bdde322 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSToolFile.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSToolFile.py
@@ -7,7 +7,7 @@
import gyp.easy_xml as easy_xml
-class Writer(object):
+class Writer:
"""Visual Studio XML tool file writer."""
def __init__(self, tool_file_path, name):
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSUserFile.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSUserFile.py
index de0896e6931816..e580c00fb76d3e 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSUserFile.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSUserFile.py
@@ -53,7 +53,7 @@ def _QuoteWin32CommandLineArgs(args):
return new_args
-class Writer(object):
+class Writer:
"""Visual Studio XML user user file writer."""
def __init__(self, user_file_path, version, name):
@@ -93,7 +93,7 @@ def AddDebugSettings(
abs_command = _FindCommandInPath(command[0])
if environment and isinstance(environment, dict):
- env_list = ['%s="%s"' % (key, val) for (key, val) in environment.items()]
+ env_list = [f'{key}="{val}"' for (key, val) in environment.items()]
environment = " ".join(env_list)
else:
environment = ""
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSUtil.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSUtil.py
index 83a9c297ed6e14..36bb782bd319a2 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSUtil.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSUtil.py
@@ -55,7 +55,7 @@ def _SuffixName(name, suffix):
Target name with suffix added (foo_suffix#target)
"""
parts = name.rsplit("#", 1)
- parts[0] = "%s_%s" % (parts[0], suffix)
+ parts[0] = f"{parts[0]}_{suffix}"
return "#".join(parts)
@@ -160,7 +160,7 @@ def _GetPdbPath(target_dict, config_name, vars):
return pdb_path
pdb_base = target_dict.get("product_name", target_dict["target_name"])
- pdb_base = "%s.%s.pdb" % (pdb_base, TARGET_TYPE_EXT[target_dict["type"]])
+ pdb_base = "{}.{}.pdb".format(pdb_base, TARGET_TYPE_EXT[target_dict["type"]])
pdb_path = vars["PRODUCT_DIR"] + "/" + pdb_base
return pdb_path
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSVersion.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSVersion.py
index 36b006aaa93759..134b35557b5224 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSVersion.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSVersion.py
@@ -11,14 +11,12 @@
import sys
import glob
-PY3 = bytes != str
-
def JoinPath(*args):
return os.path.normpath(os.path.join(*args))
-class VisualStudioVersion(object):
+class VisualStudioVersion:
"""Information regarding a version of Visual Studio."""
def __init__(
@@ -176,9 +174,7 @@ def _RegistryQueryBase(sysdir, key, value):
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# Obtain the stdout from reg.exe, reading to the end so p.returncode is valid
# Note that the error text may be in [1] in some cases
- text = p.communicate()[0]
- if PY3:
- text = text.decode("utf-8")
+ text = p.communicate()[0].decode("utf-8")
# Check return code from reg.exe; officially 0==success and 1==error
if p.returncode:
return None
@@ -221,21 +217,15 @@ def _RegistryGetValueUsingWinReg(key, value):
value: The particular registry value to read.
Return:
contents of the registry key's value, or None on failure. Throws
- ImportError if _winreg is unavailable.
+ ImportError if winreg is unavailable.
"""
- try:
- # Python 2
- from _winreg import HKEY_LOCAL_MACHINE, OpenKey, QueryValueEx
- except ImportError:
- # Python 3
- from winreg import HKEY_LOCAL_MACHINE, OpenKey, QueryValueEx
-
+ from winreg import HKEY_LOCAL_MACHINE, OpenKey, QueryValueEx
try:
root, subkey = key.split("\\", 1)
assert root == "HKLM" # Only need HKLM for now.
with OpenKey(HKEY_LOCAL_MACHINE, subkey) as hkey:
return QueryValueEx(hkey, value)[0]
- except WindowsError:
+ except OSError:
return None
@@ -426,9 +416,7 @@ def _ConvertToCygpath(path):
"""Convert to cygwin path if we are using cygwin."""
if sys.platform == "cygwin":
p = subprocess.Popen(["cygpath", path], stdout=subprocess.PIPE)
- path = p.communicate()[0].strip()
- if PY3:
- path = path.decode("utf-8")
+ path = p.communicate()[0].decode("utf-8").strip()
return path
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/__init__.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/__init__.py
index f6ea625d40a3c7..6790ef96a1959b 100755
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/__init__.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/__init__.py
@@ -1,10 +1,9 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
# Copyright (c) 2012 Google Inc. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
-from __future__ import print_function
import copy
import gyp.input
@@ -16,13 +15,6 @@
import traceback
from gyp.common import GypError
-try:
- # Python 2
- string_types = basestring
-except NameError:
- # Python 3
- string_types = str
-
# Default debug modes for GYP
debug = {}
@@ -193,7 +185,7 @@ def ShlexEnv(env_name):
def FormatOpt(opt, value):
if opt.startswith("--"):
- return "%s=%s" % (opt, value)
+ return f"{opt}={value}"
return opt + value
@@ -524,7 +516,7 @@ def gyp_main(args):
for option, value in sorted(options.__dict__.items()):
if option[0] == "_":
continue
- if isinstance(value, string_types):
+ if isinstance(value, str):
DebugOutput(DEBUG_GENERAL, " %s: '%s'", option, value)
else:
DebugOutput(DEBUG_GENERAL, " %s: %s", option, value)
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/common.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/common.py
index a915643867293f..9213fcc5e82bb7 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/common.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/common.py
@@ -10,17 +10,12 @@
import sys
import subprocess
-try:
- from collections.abc import MutableSet
-except ImportError:
- from collections import MutableSet
-
-PY3 = bytes != str
+from collections.abc import MutableSet
# A minimal memoizing decorator. It'll blow up if the args aren't immutable,
# among other "problems".
-class memoize(object):
+class memoize:
def __init__(self, func):
self.func = func
self.cache = {}
@@ -348,7 +343,7 @@ def WriteOnDiff(filename):
the target if it differs (on close).
"""
- class Writer(object):
+ class Writer:
"""Wrapper around file which only covers the target if it differs."""
def __init__(self):
@@ -566,8 +561,8 @@ def pop(self, last=True): # pylint: disable=W0221
def __repr__(self):
if not self:
- return "%s()" % (self.__class__.__name__,)
- return "%s(%r)" % (self.__class__.__name__, list(self))
+ return f"{self.__class__.__name__}()"
+ return f"{self.__class__.__name__}({list(self)!r})"
def __eq__(self, other):
if isinstance(other, OrderedSet):
@@ -653,9 +648,7 @@ def IsCygwin():
out = subprocess.Popen(
"uname", stdout=subprocess.PIPE, stderr=subprocess.STDOUT
)
- stdout, stderr = out.communicate()
- if PY3:
- stdout = stdout.decode("utf-8")
+ stdout = out.communicate()[0].decode("utf-8")
return "CYGWIN" in str(stdout)
except Exception:
return False
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/common_test.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/common_test.py
index 0310fb266c4e4f..05344085ad3b11 100755
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/common_test.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/common_test.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
# Copyright (c) 2012 Google Inc. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/easy_xml.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/easy_xml.py
index e0628ef4d8310a..bda1a47468ae2b 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/easy_xml.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/easy_xml.py
@@ -2,6 +2,7 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
+import sys
import re
import os
import locale
@@ -84,7 +85,7 @@ def _ConstructContentList(xml_parts, specification, pretty, level=0):
rest = specification[1:]
if rest and isinstance(rest[0], dict):
for at, val in sorted(rest[0].items()):
- xml_parts.append(' %s="%s"' % (at, _XmlEscape(val, attr=True)))
+ xml_parts.append(f' {at}="{_XmlEscape(val, attr=True)}"')
rest = rest[1:]
if rest:
xml_parts.append(">")
@@ -101,12 +102,13 @@ def _ConstructContentList(xml_parts, specification, pretty, level=0):
_ConstructContentList(xml_parts, child_spec, pretty, level + 1)
if multi_line and indentation:
xml_parts.append(indentation)
- xml_parts.append("%s>%s" % (name, new_line))
+ xml_parts.append(f"{name}>{new_line}")
else:
xml_parts.append("/>%s" % new_line)
-def WriteXmlIfChanged(content, path, encoding="utf-8", pretty=False, win32=False):
+def WriteXmlIfChanged(content, path, encoding="utf-8", pretty=False,
+ win32=(sys.platform == "win32")):
""" Writes the XML content to disk, touching the file only if it has changed.
Args:
@@ -125,9 +127,9 @@ def WriteXmlIfChanged(content, path, encoding="utf-8", pretty=False, win32=False
# Get the old content
try:
- with open(path, "r") as file:
+ with open(path) as file:
existing = file.read()
- except IOError:
+ except OSError:
existing = None
# It has changed, write it
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/easy_xml_test.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/easy_xml_test.py
index 5bc795ddbe441b..342f693a329d26 100755
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/easy_xml_test.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/easy_xml_test.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
# Copyright (c) 2011 Google Inc. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
@@ -9,10 +9,7 @@
import gyp.easy_xml as easy_xml
import unittest
-try:
- from StringIO import StringIO # Python 2
-except ImportError:
- from io import StringIO # Python 3
+from io import StringIO
class TestSequenceFunctions(unittest.TestCase):
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/flock_tool.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/flock_tool.py
index f9f89e520ac684..1cb98152638b81 100755
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/flock_tool.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/flock_tool.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
# Copyright (c) 2011 Google Inc. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
@@ -18,7 +18,7 @@ def main(args):
executor.Dispatch(args)
-class FlockTool(object):
+class FlockTool:
"""This class emulates the 'flock' command."""
def Dispatch(self, args):
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/analyzer.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/analyzer.py
index 7a393c1f9393da..f15df00c36373e 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/analyzer.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/analyzer.py
@@ -62,7 +62,6 @@
then the "all" target includes "b1" and "b2".
"""
-from __future__ import print_function
import gyp.common
import json
@@ -216,7 +215,7 @@ def _ExtractSources(target, target_dict, toplevel_dir):
return results
-class Target(object):
+class Target:
"""Holds information about a particular target:
deps: set of Targets this Target depends upon. This is not recursive, only the
direct dependent Targets.
@@ -252,7 +251,7 @@ def __init__(self, name):
self.is_or_has_linked_ancestor = False
-class Config(object):
+class Config:
"""Details what we're looking for
files: set of files to search for
targets: see file description for details."""
@@ -271,10 +270,10 @@ def Init(self, params):
if not config_path:
return
try:
- f = open(config_path, "r")
+ f = open(config_path)
config = json.load(f)
f.close()
- except IOError:
+ except OSError:
raise Exception("Unable to open file " + config_path)
except ValueError as e:
raise Exception("Unable to parse config file " + config_path + str(e))
@@ -586,7 +585,7 @@ def _WriteOutput(params, **values):
f = open(output_path, "w")
f.write(json.dumps(values) + "\n")
f.close()
- except IOError as e:
+ except OSError as e:
print("Error writing to output file", output_path, str(e))
@@ -627,7 +626,7 @@ def CalculateVariables(default_variables, params):
default_variables.setdefault("OS", operating_system)
-class TargetCalculator(object):
+class TargetCalculator:
"""Calculates the matching test_targets and matching compile_targets."""
def __init__(
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/android.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/android.py
index 16728847c5c9f2..cdf1a4832cf1ad 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/android.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/android.py
@@ -14,7 +14,6 @@
# variables set potentially clash with other Android build system variables.
# Try to avoid setting global variables where possible.
-from __future__ import print_function
import gyp
import gyp.common
@@ -84,7 +83,7 @@ def IsCPPExtension(ext):
def Sourceify(path):
"""Convert a path to its source directory form. The Android backend does not
- support options.generator_output, so this function is a noop."""
+ support options.generator_output, so this function is a noop."""
return path
@@ -100,11 +99,11 @@ def Sourceify(path):
target_link_deps = {}
-class AndroidMkWriter(object):
+class AndroidMkWriter:
"""AndroidMkWriter packages up the writing of one target-specific Android.mk.
- Its only real entry point is Write(), and is mostly used for namespacing.
- """
+ Its only real entry point is Write(), and is mostly used for namespacing.
+ """
def __init__(self, android_top_dir):
self.android_top_dir = android_top_dir
@@ -123,18 +122,18 @@ def Write(
):
"""The main entry point: writes a .mk file for a single target.
- Arguments:
- qualified_target: target we're generating
- relative_target: qualified target name relative to the root
- base_path: path relative to source root we're building in, used to resolve
- target-relative paths
- output_filename: output .mk file name to write
- spec, configs: gyp info
- part_of_all: flag indicating this target is part of 'all'
- write_alias_target: flag indicating whether to create short aliases for
- this target
- sdk_version: what to emit for LOCAL_SDK_VERSION in output
- """
+ Arguments:
+ qualified_target: target we're generating
+ relative_target: qualified target name relative to the root
+ base_path: path relative to source root we're building in, used to resolve
+ target-relative paths
+ output_filename: output .mk file name to write
+ spec, configs: gyp info
+ part_of_all: flag indicating this target is part of 'all'
+ write_alias_target: flag indicating whether to create short aliases for
+ this target
+ sdk_version: what to emit for LOCAL_SDK_VERSION in output
+ """
gyp.common.EnsureDirExists(output_filename)
self.fp = open(output_filename, "w")
@@ -254,15 +253,15 @@ def Write(
def WriteActions(self, actions, extra_sources, extra_outputs):
"""Write Makefile code for any 'actions' from the gyp input.
- extra_sources: a list that will be filled in with newly generated source
- files, if any
- extra_outputs: a list that will be filled in with any outputs of these
- actions (used to make other pieces dependent on these
- actions)
- """
+ extra_sources: a list that will be filled in with newly generated source
+ files, if any
+ extra_outputs: a list that will be filled in with any outputs of these
+ actions (used to make other pieces dependent on these
+ actions)
+ """
for action in actions:
name = make.StringToMakefileVariable(
- "%s_%s" % (self.relative_target, action["action_name"])
+ "{}_{}".format(self.relative_target, action["action_name"])
)
self.WriteLn('### Rules for action "%s":' % action["action_name"])
inputs = action["inputs"]
@@ -350,7 +349,7 @@ def WriteActions(self, actions, extra_sources, extra_outputs):
for output in outputs[1:]:
# Make each output depend on the main output, with an empty command
# to force make to notice that the mtime has changed.
- self.WriteLn("%s: %s ;" % (self.LocalPathify(output), main_output))
+ self.WriteLn(f"{self.LocalPathify(output)}: {main_output} ;")
extra_outputs += outputs
self.WriteLn()
@@ -360,11 +359,11 @@ def WriteActions(self, actions, extra_sources, extra_outputs):
def WriteRules(self, rules, extra_sources, extra_outputs):
"""Write Makefile code for any 'rules' from the gyp input.
- extra_sources: a list that will be filled in with newly generated source
- files, if any
- extra_outputs: a list that will be filled in with any outputs of these
- rules (used to make other pieces dependent on these rules)
- """
+ extra_sources: a list that will be filled in with newly generated source
+ files, if any
+ extra_outputs: a list that will be filled in with any outputs of these
+ rules (used to make other pieces dependent on these rules)
+ """
if len(rules) == 0:
return
@@ -372,7 +371,7 @@ def WriteRules(self, rules, extra_sources, extra_outputs):
if len(rule.get("rule_sources", [])) == 0:
continue
name = make.StringToMakefileVariable(
- "%s_%s" % (self.relative_target, rule["rule_name"])
+ "{}_{}".format(self.relative_target, rule["rule_name"])
)
self.WriteLn('\n### Generated for rule "%s":' % name)
self.WriteLn('# "%s":' % rule)
@@ -452,7 +451,7 @@ def WriteRules(self, rules, extra_sources, extra_outputs):
for output in outputs[1:]:
# Make each output depend on the main output, with an empty command
# to force make to notice that the mtime has changed.
- self.WriteLn("%s: %s ;" % (output, main_output))
+ self.WriteLn(f"{output}: {main_output} ;")
self.WriteLn()
self.WriteLn()
@@ -460,9 +459,9 @@ def WriteRules(self, rules, extra_sources, extra_outputs):
def WriteCopies(self, copies, extra_outputs):
"""Write Makefile code for any 'copies' from the gyp input.
- extra_outputs: a list that will be filled in with any outputs of this action
- (used to make other pieces dependent on this action)
- """
+ extra_outputs: a list that will be filled in with any outputs of this action
+ (used to make other pieces dependent on this action)
+ """
self.WriteLn("### Generated for copy rule.")
variable = make.StringToMakefileVariable(self.relative_target + "_copies")
@@ -487,25 +486,25 @@ def WriteCopies(self, copies, extra_outputs):
self.LocalPathify(os.path.join(copy["destination"], filename))
)
- self.WriteLn(
- "%s: %s $(GYP_TARGET_DEPENDENCIES) | $(ACP)" % (output, path)
- )
+ self.WriteLn(f"{output}: {path} $(GYP_TARGET_DEPENDENCIES) | $(ACP)")
self.WriteLn("\t@echo Copying: $@")
self.WriteLn("\t$(hide) mkdir -p $(dir $@)")
self.WriteLn("\t$(hide) $(ACP) -rpf $< $@")
self.WriteLn()
outputs.append(output)
- self.WriteLn("%s = %s" % (variable, " ".join(map(make.QuoteSpaces, outputs))))
+ self.WriteLn(
+ "{} = {}".format(variable, " ".join(map(make.QuoteSpaces, outputs)))
+ )
extra_outputs.append("$(%s)" % variable)
self.WriteLn()
def WriteSourceFlags(self, spec, configs):
"""Write out the flags and include paths used to compile source files for
- the current target.
+ the current target.
- Args:
- spec, configs: input from gyp.
- """
+ Args:
+ spec, configs: input from gyp.
+ """
for configname, config in sorted(configs.items()):
extracted_includes = []
@@ -554,16 +553,16 @@ def WriteSourceFlags(self, spec, configs):
def WriteSources(self, spec, configs, extra_sources):
"""Write Makefile code for any 'sources' from the gyp input.
- These are source files necessary to build the current target.
- We need to handle shared_intermediate directory source files as
- a special case by copying them to the intermediate directory and
- treating them as a generated sources. Otherwise the Android build
- rules won't pick them up.
-
- Args:
- spec, configs: input from gyp.
- extra_sources: Sources generated from Actions or Rules.
- """
+ These are source files necessary to build the current target.
+ We need to handle shared_intermediate directory source files as
+ a special case by copying them to the intermediate directory and
+ treating them as a generated sources. Otherwise the Android build
+ rules won't pick them up.
+
+ Args:
+ spec, configs: input from gyp.
+ extra_sources: Sources generated from Actions or Rules.
+ """
sources = filter(make.Compilable, spec.get("sources", []))
generated_not_sources = [x for x in extra_sources if not make.Compilable(x)]
extra_sources = filter(make.Compilable, extra_sources)
@@ -617,7 +616,7 @@ def WriteSources(self, spec, configs, extra_sources):
if IsCPPExtension(ext) and ext != local_cpp_extension:
local_file = root + local_cpp_extension
if local_file != source:
- self.WriteLn("%s: %s" % (local_file, self.LocalPathify(source)))
+ self.WriteLn(f"{local_file}: {self.LocalPathify(source)}")
self.WriteLn("\tmkdir -p $(@D); cp $< $@")
origin_src_dirs.append(os.path.dirname(source))
final_generated_sources.append(local_file)
@@ -640,10 +639,10 @@ def WriteSources(self, spec, configs, extra_sources):
def ComputeAndroidModule(self, spec):
"""Return the Android module name used for a gyp spec.
- We use the complete qualified target name to avoid collisions between
- duplicate targets in different directories. We also add a suffix to
- distinguish gyp-generated module names.
- """
+ We use the complete qualified target name to avoid collisions between
+ duplicate targets in different directories. We also add a suffix to
+ distinguish gyp-generated module names.
+ """
if int(spec.get("android_unmangled_name", 0)):
assert self.type != "shared_library" or self.target.startswith("lib")
@@ -662,7 +661,7 @@ def ComputeAndroidModule(self, spec):
suffix = "_gyp"
if self.path:
- middle = make.StringToMakefileVariable("%s_%s" % (self.path, self.target))
+ middle = make.StringToMakefileVariable(f"{self.path}_{self.target}")
else:
middle = make.StringToMakefileVariable(self.target)
@@ -671,11 +670,11 @@ def ComputeAndroidModule(self, spec):
def ComputeOutputParts(self, spec):
"""Return the 'output basename' of a gyp spec, split into filename + ext.
- Android libraries must be named the same thing as their module name,
- otherwise the linker can't find them, so product_name and so on must be
- ignored if we are building a library, and the "lib" prepending is
- not done for Android.
- """
+ Android libraries must be named the same thing as their module name,
+ otherwise the linker can't find them, so product_name and so on must be
+ ignored if we are building a library, and the "lib" prepending is
+ not done for Android.
+ """
assert self.type != "loadable_module" # TODO: not supported?
target = spec["target_name"]
@@ -711,17 +710,17 @@ def ComputeOutputParts(self, spec):
def ComputeOutputBasename(self, spec):
"""Return the 'output basename' of a gyp spec.
- E.g., the loadable module 'foobar' in directory 'baz' will produce
- 'libfoobar.so'
- """
+ E.g., the loadable module 'foobar' in directory 'baz' will produce
+ 'libfoobar.so'
+ """
return "".join(self.ComputeOutputParts(spec))
def ComputeOutput(self, spec):
"""Return the 'output' (full output path) of a gyp spec.
- E.g., the loadable module 'foobar' in directory 'baz' will produce
- '$(obj)/baz/libfoobar.so'
- """
+ E.g., the loadable module 'foobar' in directory 'baz' will produce
+ '$(obj)/baz/libfoobar.so'
+ """
if self.type == "executable":
# We install host executables into shared_intermediate_dir so they can be
# run by gyp rules that refer to PRODUCT_DIR.
@@ -740,7 +739,7 @@ def ComputeOutput(self, spec):
% (self.android_class, self.android_module)
)
else:
- path = "$(call intermediates-dir-for,%s,%s,,,$(GYP_VAR_PREFIX))" % (
+ path = "$(call intermediates-dir-for,{},{},,,$(GYP_VAR_PREFIX))".format(
self.android_class,
self.android_module,
)
@@ -749,14 +748,14 @@ def ComputeOutput(self, spec):
return os.path.join(path, self.ComputeOutputBasename(spec))
def NormalizeIncludePaths(self, include_paths):
- """ Normalize include_paths.
- Convert absolute paths to relative to the Android top directory.
-
- Args:
- include_paths: A list of unprocessed include paths.
- Returns:
- A list of normalized include paths.
- """
+ """Normalize include_paths.
+ Convert absolute paths to relative to the Android top directory.
+
+ Args:
+ include_paths: A list of unprocessed include paths.
+ Returns:
+ A list of normalized include paths.
+ """
normalized = []
for path in include_paths:
if path[0] == "/":
@@ -767,11 +766,11 @@ def NormalizeIncludePaths(self, include_paths):
def ExtractIncludesFromCFlags(self, cflags):
"""Extract includes "-I..." out from cflags
- Args:
- cflags: A list of compiler flags, which may be mixed with "-I.."
- Returns:
- A tuple of lists: (clean_clfags, include_paths). "-I.." is trimmed.
- """
+ Args:
+ cflags: A list of compiler flags, which may be mixed with "-I.."
+ Returns:
+ A tuple of lists: (clean_clfags, include_paths). "-I.." is trimmed.
+ """
clean_cflags = []
include_paths = []
for flag in cflags:
@@ -785,14 +784,14 @@ def ExtractIncludesFromCFlags(self, cflags):
def FilterLibraries(self, libraries):
"""Filter the 'libraries' key to separate things that shouldn't be ldflags.
- Library entries that look like filenames should be converted to android
- module names instead of being passed to the linker as flags.
+ Library entries that look like filenames should be converted to android
+ module names instead of being passed to the linker as flags.
- Args:
- libraries: the value of spec.get('libraries')
- Returns:
- A tuple (static_lib_modules, dynamic_lib_modules, ldflags)
- """
+ Args:
+ libraries: the value of spec.get('libraries')
+ Returns:
+ A tuple (static_lib_modules, dynamic_lib_modules, ldflags)
+ """
static_lib_modules = []
dynamic_lib_modules = []
ldflags = []
@@ -823,10 +822,10 @@ def FilterLibraries(self, libraries):
def ComputeDeps(self, spec):
"""Compute the dependencies of a gyp spec.
- Returns a tuple (deps, link_deps), where each is a list of
- filenames that will need to be put in front of make for either
- building (deps) or linking (link_deps).
- """
+ Returns a tuple (deps, link_deps), where each is a list of
+ filenames that will need to be put in front of make for either
+ building (deps) or linking (link_deps).
+ """
deps = []
link_deps = []
if "dependencies" in spec:
@@ -846,9 +845,9 @@ def ComputeDeps(self, spec):
def WriteTargetFlags(self, spec, configs, link_deps):
"""Write Makefile code to specify the link flags and library dependencies.
- spec, configs: input from gyp.
- link_deps: link dependency list; see ComputeDeps()
- """
+ spec, configs: input from gyp.
+ link_deps: link dependency list; see ComputeDeps()
+ """
# Libraries (i.e. -lfoo)
# These must be included even for static libraries as some of them provide
# implicit include paths through the build system.
@@ -891,12 +890,12 @@ def WriteTarget(
):
"""Write Makefile code to produce the final target of the gyp spec.
- spec, configs: input from gyp.
- deps, link_deps: dependency lists; see ComputeDeps()
- part_of_all: flag indicating this target is part of 'all'
- write_alias_target: flag indicating whether to create short aliases for this
- target
- """
+ spec, configs: input from gyp.
+ deps, link_deps: dependency lists; see ComputeDeps()
+ part_of_all: flag indicating this target is part of 'all'
+ write_alias_target: flag indicating whether to create short aliases for this
+ target
+ """
self.WriteLn("### Rules for final target.")
if self.type != "none":
@@ -909,7 +908,7 @@ def WriteTarget(
if isinstance(v, list):
self.WriteList(v, k)
else:
- self.WriteLn("%s := %s" % (k, make.QuoteIfNecessary(v)))
+ self.WriteLn(f"{k} := {make.QuoteIfNecessary(v)}")
self.WriteLn("")
# Add to the set of targets which represent the gyp 'all' target. We use the
@@ -928,7 +927,7 @@ def WriteTarget(
if self.target != self.android_module and write_alias_target:
self.WriteLn("# Alias gyp target name.")
self.WriteLn(".PHONY: %s" % self.target)
- self.WriteLn("%s: %s" % (self.target, self.android_module))
+ self.WriteLn(f"{self.target}: {self.android_module}")
self.WriteLn("")
# Add the command to trigger build of the target type depending
@@ -975,25 +974,25 @@ def WriteList(
):
"""Write a variable definition that is a list of values.
- E.g. WriteList(['a','b'], 'foo', prefix='blah') writes out
- foo = blaha blahb
- but in a pretty-printed style.
- """
+ E.g. WriteList(['a','b'], 'foo', prefix='blah') writes out
+ foo = blaha blahb
+ but in a pretty-printed style.
+ """
values = ""
if value_list:
value_list = [quoter(prefix + value) for value in value_list]
if local_pathify:
value_list = [self.LocalPathify(value) for value in value_list]
values = " \\\n\t" + " \\\n\t".join(value_list)
- self.fp.write("%s :=%s\n\n" % (variable, values))
+ self.fp.write(f"{variable} :={values}\n\n")
def WriteLn(self, text=""):
self.fp.write(text + "\n")
def LocalPathify(self, path):
"""Convert a subdirectory-relative path into a normalized path which starts
- with the make variable $(LOCAL_PATH) (i.e. the top of the project tree).
- Absolute paths, or paths that contain variables, are just normalized."""
+ with the make variable $(LOCAL_PATH) (i.e. the top of the project tree).
+ Absolute paths, or paths that contain variables, are just normalized."""
if "$(" in path or os.path.isabs(path):
# path is not a file in the project tree in this case, but calling
# normpath is still important for trimming trailing slashes.
@@ -1006,7 +1005,7 @@ def LocalPathify(self, path):
# so we don't look for a slash.
assert local_path.startswith(
"$(LOCAL_PATH)"
- ), "Path %s attempts to escape from gyp path %s !)" % (path, self.path)
+ ), f"Path {path} attempts to escape from gyp path {self.path} !)"
return local_path
def ExpandInputRoot(self, template, expansion, dirname):
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/cmake.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/cmake.py
index f5ceacfca364ce..c95d18415cdb37 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/cmake.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/cmake.py
@@ -28,21 +28,15 @@
CMakeLists.txt file.
"""
-from __future__ import print_function
import multiprocessing
import os
import signal
-import string
import subprocess
import gyp.common
import gyp.xcode_emulation
-try:
- # maketrans moved to str in python3.
- _maketrans = string.maketrans
-except NameError:
- _maketrans = str.maketrans
+_maketrans = str.maketrans
generator_default_variables = {
"EXECUTABLE_PREFIX": "",
@@ -223,7 +217,7 @@ def WriteVariable(output, variable_name, prepend=None):
output.write("}")
-class CMakeTargetType(object):
+class CMakeTargetType:
def __init__(self, command, modifier, property_modifier):
self.command = command
self.modifier = modifier
@@ -263,7 +257,7 @@ def WriteActions(target_name, actions, extra_sources, extra_deps, path_to_gyp, o
"""
for action in actions:
action_name = StringToCMakeTargetName(action["action_name"])
- action_target_name = "%s__%s" % (target_name, action_name)
+ action_target_name = f"{target_name}__{action_name}"
inputs = action["inputs"]
inputs_name = action_target_name + "__input"
@@ -282,7 +276,7 @@ def WriteActions(target_name, actions, extra_sources, extra_deps, path_to_gyp, o
# Build up a list of outputs.
# Collect the output dirs we'll need.
- dirs = set(dir for dir in (os.path.dirname(o) for o in outputs) if dir)
+ dirs = {dir for dir in (os.path.dirname(o) for o in outputs) if dir}
if int(action.get("process_outputs_as_sources", False)):
extra_sources.extend(zip(cmake_outputs, outputs))
@@ -377,7 +371,7 @@ def WriteRules(target_name, rules, extra_sources, extra_deps, path_to_gyp, outpu
# Build up a list of outputs.
# Collect the output dirs we'll need.
- dirs = set(dir for dir in (os.path.dirname(o) for o in outputs) if dir)
+ dirs = {dir for dir in (os.path.dirname(o) for o in outputs) if dir}
# Create variables for the output, as 'local' variable will be unset.
these_outputs = []
@@ -478,7 +472,7 @@ def WriteCopies(target_name, copies, extra_deps, path_to_gyp, output):
extra_deps.append(copy_name)
return
- class Copy(object):
+ class Copy:
def __init__(self, ext, command):
self.cmake_inputs = []
self.cmake_outputs = []
@@ -587,7 +581,7 @@ def CreateCMakeTargetFullName(qualified_target):
return StringToCMakeTargetName(cmake_target_full_name)
-class CMakeNamer(object):
+class CMakeNamer:
"""Converts Gyp target names into CMake target names.
CMake requires that target names be globally unique. One way to ensure
@@ -1047,7 +1041,7 @@ def WriteTarget(
# XCode settings
xcode_settings = config.get("xcode_settings", {})
- for xcode_setting, xcode_value in xcode_settings.viewitems():
+ for xcode_setting, xcode_value in xcode_settings.items():
SetTargetProperty(
output,
cmake_target_name,
@@ -1285,11 +1279,11 @@ def PerformBuild(data, configurations, params):
os.path.join(generator_dir, output_dir, config_name)
)
arguments = ["cmake", "-G", "Ninja"]
- print("Generating [%s]: %s" % (config_name, arguments))
+ print(f"Generating [{config_name}]: {arguments}")
subprocess.check_call(arguments, cwd=build_dir)
arguments = ["ninja", "-C", build_dir]
- print("Building [%s]: %s" % (config_name, arguments))
+ print(f"Building [{config_name}]: {arguments}")
subprocess.check_call(arguments)
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/dump_dependency_json.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/dump_dependency_json.py
index 46f68e038418f3..99d5c1fd69db36 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/dump_dependency_json.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/dump_dependency_json.py
@@ -2,7 +2,6 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
-from __future__ import print_function
import os
import gyp
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/eclipse.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/eclipse.py
index 4bd49725dc1e89..1ff0dc83ae200f 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/eclipse.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/eclipse.py
@@ -26,8 +26,6 @@
import shlex
import xml.etree.cElementTree as ET
-PY3 = bytes != str
-
generator_wants_static_library_dependencies_adjusted = False
generator_default_variables = {}
@@ -105,9 +103,7 @@ def GetAllIncludeDirectories(
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
)
- output = proc.communicate()[1]
- if PY3:
- output = output.decode("utf-8")
+ output = proc.communicate()[1].decode("utf-8")
# Extract the list of include dirs from the output, which has this format:
# ...
# #include "..." search starts here:
@@ -245,9 +241,7 @@ def GetAllDefines(target_list, target_dicts, data, config_name, params, compiler
cpp_proc = subprocess.Popen(
args=command, cwd=".", stdin=subprocess.PIPE, stdout=subprocess.PIPE
)
- cpp_output = cpp_proc.communicate()[0]
- if PY3:
- cpp_output = cpp_output.decode("utf-8")
+ cpp_output = cpp_proc.communicate()[0].decode("utf-8")
cpp_lines = cpp_output.split("\n")
for cpp_line in cpp_lines:
if not cpp_line.strip():
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/gypsh.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/gypsh.py
index 2d8aba5d1c19e9..82a07ddc6577be 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/gypsh.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/gypsh.py
@@ -49,7 +49,7 @@ def GenerateOutput(target_list, target_dicts, data, params):
# Use a banner that looks like the stock Python one and like what
# code.interact uses by default, but tack on something to indicate what
# locals are available, and identify gypsh.
- banner = "Python %s on %s\nlocals.keys() = %s\ngypsh" % (
+ banner = "Python {} on {}\nlocals.keys() = {}\ngypsh".format(
sys.version,
sys.platform,
repr(sorted(locals.keys())),
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py
index d163ae3135a7f1..c595f20fe2df12 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py
@@ -21,7 +21,6 @@
# toplevel Makefile. It may make sense to generate some .mk files on
# the side to keep the files readable.
-from __future__ import print_function
import os
import re
@@ -108,7 +107,7 @@ def CalculateVariables(default_variables, params):
def CalculateGeneratorInputInfo(params):
"""Calculate the generator specific info that gets fed to input (called by
- gyp)."""
+ gyp)."""
generator_flags = params.get("generator_flags", {})
android_ndk_version = generator_flags.get("android_ndk_version", None)
# Android NDK requires a strict link order.
@@ -320,7 +319,7 @@ def CalculateGeneratorInputInfo(params):
CXX.host ?= %(CXX.host)s
CXXFLAGS.host ?= $(CPPFLAGS_host) $(CXXFLAGS_host)
LINK.host ?= %(LINK.host)s
-LDFLAGS.host ?=
+LDFLAGS.host ?= $(LDFLAGS_host)
AR.host ?= %(AR.host)s
# Define a dir function that can handle spaces.
@@ -615,15 +614,15 @@ def Target(filename):
def EscapeShellArgument(s):
"""Quotes an argument so that it will be interpreted literally by a POSIX
- shell. Taken from
- http://stackoverflow.com/questions/35817/whats-the-best-way-to-escape-ossystem-calls-in-python
- """
+ shell. Taken from
+ http://stackoverflow.com/questions/35817/whats-the-best-way-to-escape-ossystem-calls-in-python
+ """
return "'" + s.replace("'", "'\\''") + "'"
def EscapeMakeVariableExpansion(s):
"""Make has its own variable expansion syntax using $. We must escape it for
- string to be interpreted literally."""
+ string to be interpreted literally."""
return s.replace("$", "$$")
@@ -638,7 +637,7 @@ def EscapeCppDefine(s):
def QuoteIfNecessary(string):
"""TODO: Should this ideally be replaced with one or more of the above
- functions?"""
+ functions?"""
if '"' in string:
string = '"' + string.replace('"', '\\"') + '"'
return string
@@ -679,11 +678,11 @@ def SourceifyAndQuoteSpaces(path):
target_link_deps = {}
-class MakefileWriter(object):
+class MakefileWriter:
"""MakefileWriter packages up the writing of one target-specific foobar.mk.
- Its only real entry point is Write(), and is mostly used for namespacing.
- """
+ Its only real entry point is Write(), and is mostly used for namespacing.
+ """
def __init__(self, generator_flags, flavor):
self.generator_flags = generator_flags
@@ -737,14 +736,14 @@ def Write(
):
"""The main entry point: writes a .mk file for a single target.
- Arguments:
- qualified_target: target we're generating
- base_path: path relative to source root we're building in, used to resolve
- target-relative paths
- output_filename: output .mk file name to write
- spec, configs: gyp info
- part_of_all: flag indicating this target is part of 'all'
- """
+ Arguments:
+ qualified_target: target we're generating
+ base_path: path relative to source root we're building in, used to resolve
+ target-relative paths
+ output_filename: output .mk file name to write
+ spec, configs: gyp info
+ part_of_all: flag indicating this target is part of 'all'
+ """
gyp.common.EnsureDirExists(output_filename)
self.fp = open(output_filename, "w")
@@ -844,7 +843,7 @@ def Write(
sources = [x for x in all_sources if Compilable(x)]
if sources:
self.WriteLn(SHARED_HEADER_SUFFIX_RULES_COMMENT1)
- extensions = set([os.path.splitext(s)[1] for s in sources])
+ extensions = {os.path.splitext(s)[1] for s in sources}
for ext in extensions:
if ext in self.suffix_rules_srcdir:
self.WriteLn(self.suffix_rules_srcdir[ext])
@@ -888,15 +887,15 @@ def Write(
def WriteSubMake(self, output_filename, makefile_path, targets, build_dir):
"""Write a "sub-project" Makefile.
- This is a small, wrapper Makefile that calls the top-level Makefile to build
- the targets from a single gyp file (i.e. a sub-project).
+ This is a small, wrapper Makefile that calls the top-level Makefile to build
+ the targets from a single gyp file (i.e. a sub-project).
- Arguments:
- output_filename: sub-project Makefile name to write
- makefile_path: path to the top-level Makefile
- targets: list of "all" targets for this sub-project
- build_dir: build output directory, relative to the sub-project
- """
+ Arguments:
+ output_filename: sub-project Makefile name to write
+ makefile_path: path to the top-level Makefile
+ targets: list of "all" targets for this sub-project
+ build_dir: build output directory, relative to the sub-project
+ """
gyp.common.EnsureDirExists(output_filename)
self.fp = open(output_filename, "w")
self.fp.write(header)
@@ -910,7 +909,7 @@ def WriteSubMake(self, output_filename, makefile_path, targets, build_dir):
self.WriteLn("all:")
if makefile_path:
makefile_path = " -C " + makefile_path
- self.WriteLn("\t$(MAKE)%s %s" % (makefile_path, " ".join(targets)))
+ self.WriteLn("\t$(MAKE){} {}".format(makefile_path, " ".join(targets)))
self.fp.close()
def WriteActions(
@@ -923,17 +922,17 @@ def WriteActions(
):
"""Write Makefile code for any 'actions' from the gyp input.
- extra_sources: a list that will be filled in with newly generated source
- files, if any
- extra_outputs: a list that will be filled in with any outputs of these
- actions (used to make other pieces dependent on these
- actions)
- part_of_all: flag indicating this target is part of 'all'
- """
+ extra_sources: a list that will be filled in with newly generated source
+ files, if any
+ extra_outputs: a list that will be filled in with any outputs of these
+ actions (used to make other pieces dependent on these
+ actions)
+ part_of_all: flag indicating this target is part of 'all'
+ """
env = self.GetSortedXcodeEnv()
for action in actions:
name = StringToMakefileVariable(
- "%s_%s" % (self.qualified_target, action["action_name"])
+ "{}_{}".format(self.qualified_target, action["action_name"])
)
self.WriteLn('### Rules for action "%s":' % action["action_name"])
inputs = action["inputs"]
@@ -960,9 +959,11 @@ def WriteActions(
]
command = gyp.common.EncodePOSIXShellList(action_commands)
if "message" in action:
- self.WriteLn("quiet_cmd_%s = ACTION %s $@" % (name, action["message"]))
+ self.WriteLn(
+ "quiet_cmd_{} = ACTION {} $@".format(name, action["message"])
+ )
else:
- self.WriteLn("quiet_cmd_%s = ACTION %s $@" % (name, name))
+ self.WriteLn(f"quiet_cmd_{name} = ACTION {name} $@")
if len(dirs) > 0:
command = "mkdir -p %s" % " ".join(dirs) + "; " + command
@@ -1022,7 +1023,7 @@ def WriteActions(
# Stuff the outputs in a variable so we can refer to them later.
outputs_variable = "action_%s_outputs" % name
- self.WriteLn("%s := %s" % (outputs_variable, " ".join(outputs)))
+ self.WriteLn("{} := {}".format(outputs_variable, " ".join(outputs)))
extra_outputs.append("$(%s)" % outputs_variable)
self.WriteLn()
@@ -1038,16 +1039,16 @@ def WriteRules(
):
"""Write Makefile code for any 'rules' from the gyp input.
- extra_sources: a list that will be filled in with newly generated source
- files, if any
- extra_outputs: a list that will be filled in with any outputs of these
- rules (used to make other pieces dependent on these rules)
- part_of_all: flag indicating this target is part of 'all'
- """
+ extra_sources: a list that will be filled in with newly generated source
+ files, if any
+ extra_outputs: a list that will be filled in with any outputs of these
+ rules (used to make other pieces dependent on these rules)
+ part_of_all: flag indicating this target is part of 'all'
+ """
env = self.GetSortedXcodeEnv()
for rule in rules:
name = StringToMakefileVariable(
- "%s_%s" % (self.qualified_target, rule["rule_name"])
+ "{}_{}".format(self.qualified_target, rule["rule_name"])
)
count = 0
self.WriteLn("### Generated for rule %s:" % name)
@@ -1175,10 +1176,10 @@ def WriteRules(
def WriteCopies(self, copies, extra_outputs, part_of_all):
"""Write Makefile code for any 'copies' from the gyp input.
- extra_outputs: a list that will be filled in with any outputs of this action
- (used to make other pieces dependent on this action)
- part_of_all: flag indicating this target is part of 'all'
- """
+ extra_outputs: a list that will be filled in with any outputs of this action
+ (used to make other pieces dependent on this action)
+ part_of_all: flag indicating this target is part of 'all'
+ """
self.WriteLn("### Generated for copy rule.")
variable = StringToMakefileVariable(self.qualified_target + "_copies")
@@ -1206,7 +1207,9 @@ def WriteCopies(self, copies, extra_outputs, part_of_all):
path = gyp.xcode_emulation.ExpandEnvVars(path, env)
self.WriteDoCmd([output], [path], "copy", part_of_all)
outputs.append(output)
- self.WriteLn("%s = %s" % (variable, " ".join(QuoteSpaces(o) for o in outputs)))
+ self.WriteLn(
+ "{} = {}".format(variable, " ".join(QuoteSpaces(o) for o in outputs))
+ )
extra_outputs.append("$(%s)" % variable)
self.WriteLn()
@@ -1278,15 +1281,15 @@ def WriteSources(
precompiled_header,
):
"""Write Makefile code for any 'sources' from the gyp input.
- These are source files necessary to build the current target.
-
- configs, deps, sources: input from gyp.
- extra_outputs: a list of extra outputs this action should be dependent on;
- used to serialize action/rules before compilation
- extra_link_deps: a list that will be filled in with any outputs of
- compilation (to be used in link lines)
- part_of_all: flag indicating this target is part of 'all'
- """
+ These are source files necessary to build the current target.
+
+ configs, deps, sources: input from gyp.
+ extra_outputs: a list of extra outputs this action should be dependent on;
+ used to serialize action/rules before compilation
+ extra_link_deps: a list that will be filled in with any outputs of
+ compilation (to be used in link lines)
+ part_of_all: flag indicating this target is part of 'all'
+ """
# Write configuration-specific variables for CFLAGS, etc.
for configname in sorted(configs.keys()):
@@ -1300,8 +1303,7 @@ def WriteSources(
if self.flavor == "mac":
cflags = self.xcode_settings.GetCflags(
- configname,
- arch=config.get('xcode_configuration_platform')
+ configname, arch=config.get("xcode_configuration_platform")
)
cflags_c = self.xcode_settings.GetCflagsC(configname)
cflags_cc = self.xcode_settings.GetCflagsCC(configname)
@@ -1364,7 +1366,7 @@ def WriteSources(
if pchdeps:
self.WriteLn("# Dependencies from obj files to their precompiled headers")
for source, obj, gch in pchdeps:
- self.WriteLn("%s: %s" % (obj, gch))
+ self.WriteLn(f"{obj}: {gch}")
self.WriteLn("# End precompiled header dependencies")
if objs:
@@ -1436,12 +1438,12 @@ def WritePchTargets(self, pch_commands):
"mm": "GYP_PCH_OBJCXXFLAGS",
}[lang]
self.WriteLn(
- "%s: %s := %s " % (gch, var_name, lang_flag) + "$(DEFS_$(BUILDTYPE)) "
+ f"{gch}: {var_name} := {lang_flag} " + "$(DEFS_$(BUILDTYPE)) "
"$(INCS_$(BUILDTYPE)) "
"$(CFLAGS_$(BUILDTYPE)) " + extra_flags
)
- self.WriteLn("%s: %s FORCE_DO_CMD" % (gch, input))
+ self.WriteLn(f"{gch}: {input} FORCE_DO_CMD")
self.WriteLn("\t@$(call do_cmd,pch_%s,1)" % lang)
self.WriteLn("")
assert " " not in gch, "Spaces in gch filenames not supported (%s)" % gch
@@ -1451,9 +1453,9 @@ def WritePchTargets(self, pch_commands):
def ComputeOutputBasename(self, spec):
"""Return the 'output basename' of a gyp spec.
- E.g., the loadable module 'foobar' in directory 'baz' will produce
- 'libfoobar.so'
- """
+ E.g., the loadable module 'foobar' in directory 'baz' will produce
+ 'libfoobar.so'
+ """
assert not self.is_mac_bundle
if self.flavor == "mac" and self.type in (
@@ -1510,9 +1512,9 @@ def _InstallImmediately(self):
def ComputeOutput(self, spec):
"""Return the 'output' (full output path) of a gyp spec.
- E.g., the loadable module 'foobar' in directory 'baz' will produce
- '$(obj)/baz/libfoobar.so'
- """
+ E.g., the loadable module 'foobar' in directory 'baz' will produce
+ '$(obj)/baz/libfoobar.so'
+ """
assert not self.is_mac_bundle
path = os.path.join("$(obj)." + self.toolset, self.path)
@@ -1535,10 +1537,10 @@ def ComputeMacBundleBinaryOutput(self, spec):
def ComputeDeps(self, spec):
"""Compute the dependencies of a gyp spec.
- Returns a tuple (deps, link_deps), where each is a list of
- filenames that will need to be put in front of make for either
- building (deps) or linking (link_deps).
- """
+ Returns a tuple (deps, link_deps), where each is a list of
+ filenames that will need to be put in front of make for either
+ building (deps) or linking (link_deps).
+ """
deps = []
link_deps = []
if "dependencies" in spec:
@@ -1571,11 +1573,11 @@ def WriteTarget(
):
"""Write Makefile code to produce the final target of the gyp spec.
- spec, configs: input from gyp.
- deps, link_deps: dependency lists; see ComputeDeps()
- extra_outputs: any extra outputs that our target should depend on
- part_of_all: flag indicating this target is part of 'all'
- """
+ spec, configs: input from gyp.
+ deps, link_deps: dependency lists; see ComputeDeps()
+ extra_outputs: any extra outputs that our target should depend on
+ part_of_all: flag indicating this target is part of 'all'
+ """
self.WriteLn("### Rules for final target.")
@@ -1597,7 +1599,7 @@ def WriteTarget(
configname,
generator_default_variables["PRODUCT_DIR"],
lambda p: Sourceify(self.Absolutify(p)),
- arch=config.get('xcode_configuration_platform')
+ arch=config.get("xcode_configuration_platform"),
)
# TARGET_POSTBUILDS_$(BUILDTYPE) is added to postbuilds later on.
@@ -1860,7 +1862,7 @@ def WriteTarget(
and self.toolset == "target"
):
# On mac, products are created in install_path immediately.
- assert install_path == self.output, "%s != %s" % (
+ assert install_path == self.output, "{} != {}".format(
install_path,
self.output,
)
@@ -1897,24 +1899,24 @@ def WriteTarget(
def WriteList(self, value_list, variable=None, prefix="", quoter=QuoteIfNecessary):
"""Write a variable definition that is a list of values.
- E.g. WriteList(['a','b'], 'foo', prefix='blah') writes out
- foo = blaha blahb
- but in a pretty-printed style.
- """
+ E.g. WriteList(['a','b'], 'foo', prefix='blah') writes out
+ foo = blaha blahb
+ but in a pretty-printed style.
+ """
values = ""
if value_list:
value_list = [quoter(prefix + value) for value in value_list]
values = " \\\n\t" + " \\\n\t".join(value_list)
- self.fp.write("%s :=%s\n\n" % (variable, values))
+ self.fp.write(f"{variable} :={values}\n\n")
def WriteDoCmd(
self, outputs, inputs, command, part_of_all, comment=None, postbuilds=False
):
"""Write a Makefile rule that uses do_cmd.
- This makes the outputs dependent on the command line that was run,
- as well as support the V= make command line flag.
- """
+ This makes the outputs dependent on the command line that was run,
+ as well as support the V= make command line flag.
+ """
suffix = ""
if postbuilds:
assert "," not in command
@@ -1922,7 +1924,7 @@ def WriteDoCmd(
self.WriteMakeRule(
outputs,
inputs,
- actions=["$(call do_cmd,%s%s)" % (command, suffix)],
+ actions=[f"$(call do_cmd,{command}{suffix})"],
comment=comment,
command=command,
force=True,
@@ -1947,18 +1949,18 @@ def WriteMakeRule(
):
"""Write a Makefile rule, with some extra tricks.
- outputs: a list of outputs for the rule (note: this is not directly
- supported by make; see comments below)
- inputs: a list of inputs for the rule
- actions: a list of shell commands to run for the rule
- comment: a comment to put in the Makefile above the rule (also useful
- for making this Python script's code self-documenting)
- order_only: if true, makes the dependency order-only
- force: if true, include FORCE_DO_CMD as an order-only dep
- phony: if true, the rule does not actually generate the named output, the
- output is just a name to run the rule
- command: (optional) command name to generate unambiguous labels
- """
+ outputs: a list of outputs for the rule (note: this is not directly
+ supported by make; see comments below)
+ inputs: a list of inputs for the rule
+ actions: a list of shell commands to run for the rule
+ comment: a comment to put in the Makefile above the rule (also useful
+ for making this Python script's code self-documenting)
+ order_only: if true, makes the dependency order-only
+ force: if true, include FORCE_DO_CMD as an order-only dep
+ phony: if true, the rule does not actually generate the named output, the
+ output is just a name to run the rule
+ command: (optional) command name to generate unambiguous labels
+ """
outputs = [QuoteSpaces(o) for o in outputs]
inputs = [QuoteSpaces(i) for i in inputs]
@@ -1974,11 +1976,11 @@ def WriteMakeRule(
# Order only rule: Just write a simple rule.
# TODO(evanm): just make order_only a list of deps instead of this hack.
self.WriteLn(
- "%s: | %s%s" % (" ".join(outputs), " ".join(inputs), force_append)
+ "{}: | {}{}".format(" ".join(outputs), " ".join(inputs), force_append)
)
elif len(outputs) == 1:
# Regular rule, one output: Just write a simple rule.
- self.WriteLn("%s: %s%s" % (outputs[0], " ".join(inputs), force_append))
+ self.WriteLn("{}: {}{}".format(outputs[0], " ".join(inputs), force_append))
else:
# Regular rule, more than one output: Multiple outputs are tricky in
# make. We will write three rules:
@@ -1994,10 +1996,12 @@ def WriteMakeRule(
(command or self.target).encode("utf-8")
).hexdigest()
intermediate = "%s.intermediate" % cmddigest
- self.WriteLn("%s: %s" % (" ".join(outputs), intermediate))
+ self.WriteLn("{}: {}".format(" ".join(outputs), intermediate))
self.WriteLn("\t%s" % "@:")
- self.WriteLn("%s: %s" % (".INTERMEDIATE", intermediate))
- self.WriteLn("%s: %s%s" % (intermediate, " ".join(inputs), force_append))
+ self.WriteLn("{}: {}".format(".INTERMEDIATE", intermediate))
+ self.WriteLn(
+ "{}: {}{}".format(intermediate, " ".join(inputs), force_append)
+ )
actions.insert(0, "$(call do_cmd,touch)")
if actions:
@@ -2008,16 +2012,16 @@ def WriteMakeRule(
def WriteAndroidNdkModuleRule(self, module_name, all_sources, link_deps):
"""Write a set of LOCAL_XXX definitions for Android NDK.
- These variable definitions will be used by Android NDK but do nothing for
- non-Android applications.
+ These variable definitions will be used by Android NDK but do nothing for
+ non-Android applications.
- Arguments:
- module_name: Android NDK module name, which must be unique among all
- module names.
- all_sources: A list of source files (will be filtered by Compilable).
- link_deps: A list of link dependencies, which must be sorted in
- the order from dependencies to dependents.
- """
+ Arguments:
+ module_name: Android NDK module name, which must be unique among all
+ module names.
+ all_sources: A list of source files (will be filtered by Compilable).
+ link_deps: A list of link dependencies, which must be sorted in
+ the order from dependencies to dependents.
+ """
if self.type not in ("executable", "shared_library", "static_library"):
return
@@ -2129,14 +2133,14 @@ def WriteSortedXcodeEnv(self, target, env):
# export foo := a\ b
# it does not -- the backslash is written to the env as literal character.
# So don't escape spaces in |env[k]|.
- self.WriteLn("%s: export %s := %s" % (QuoteSpaces(target), k, v))
+ self.WriteLn(f"{QuoteSpaces(target)}: export {k} := {v}")
def Objectify(self, path):
"""Convert a path to its output directory form."""
if "$(" in path:
path = path.replace("$(obj)/", "$(obj).%s/$(TARGET)/" % self.toolset)
if "$(obj)" not in path:
- path = "$(obj).%s/$(TARGET)/%s" % (self.toolset, path)
+ path = f"$(obj).{self.toolset}/$(TARGET)/{path}"
return path
def Pchify(self, path, lang):
@@ -2144,14 +2148,14 @@ def Pchify(self, path, lang):
path = self.Absolutify(path)
if "$(" in path:
path = path.replace(
- "$(obj)/", "$(obj).%s/$(TARGET)/pch-%s" % (self.toolset, lang)
+ "$(obj)/", f"$(obj).{self.toolset}/$(TARGET)/pch-{lang}"
)
return path
- return "$(obj).%s/$(TARGET)/pch-%s/%s" % (self.toolset, lang, path)
+ return f"$(obj).{self.toolset}/$(TARGET)/pch-{lang}/{path}"
def Absolutify(self, path):
"""Convert a subdirectory-relative path into a base-relative path.
- Skips over paths that contain variables."""
+ Skips over paths that contain variables."""
if "$(" in path:
# Don't call normpath in this case, as it might collapse the
# path too aggressively if it features '..'. However it's still
@@ -2219,7 +2223,7 @@ def PerformBuild(data, configurations, params):
if options.toplevel_dir and options.toplevel_dir != ".":
arguments += "-C", options.toplevel_dir
arguments.append("BUILDTYPE=" + config)
- print("Building [%s]: %s" % (config, arguments))
+ print(f"Building [{config}]: {arguments}")
subprocess.check_call(arguments)
@@ -2253,7 +2257,7 @@ def CalculateMakefilePath(build_file, base_name):
# away when we add verification that all targets have the
# necessary configurations.
default_configuration = None
- toolsets = set([target_dicts[target]["toolset"] for target in target_list])
+ toolsets = {target_dicts[target]["toolset"] for target in target_list}
for target in target_list:
spec = target_dicts[target]
if spec["default_configuration"] != "Default":
@@ -2328,7 +2332,7 @@ def CalculateMakefilePath(build_file, base_name):
{
"copy_archive_args": copy_archive_arguments,
"flock": "./gyp-flock-tool flock",
- "flock_index": 2
+ "flock_index": 2,
}
)
elif flavor == "freebsd":
@@ -2362,7 +2366,7 @@ def CalculateMakefilePath(build_file, base_name):
value = "$(abspath %s)" % value
wrapper = wrappers.get(key)
if wrapper:
- value = "%s %s" % (wrapper, value)
+ value = f"{wrapper} {value}"
del wrappers[key]
if key in ("CC", "CC.host", "CXX", "CXX.host"):
make_global_settings += (
@@ -2372,10 +2376,10 @@ def CalculateMakefilePath(build_file, base_name):
env_key = key.replace(".", "_") # CC.host -> CC_host
if env_key in os.environ:
value = os.environ[env_key]
- make_global_settings += " %s = %s\n" % (key, value)
+ make_global_settings += f" {key} = {value}\n"
make_global_settings += "endif\n"
else:
- make_global_settings += "%s ?= %s\n" % (key, value)
+ make_global_settings += f"{key} ?= {value}\n"
# TODO(ukai): define cmd when only wrapper is specified in
# make_global_settings.
@@ -2413,8 +2417,8 @@ def CalculateMakefilePath(build_file, base_name):
this_make_global_settings = data[build_file].get("make_global_settings", [])
assert make_global_settings_array == this_make_global_settings, (
- "make_global_settings needs to be the same for all targets. %s vs. %s"
- % (this_make_global_settings, make_global_settings)
+ "make_global_settings needs to be the same for all targets "
+ f"{this_make_global_settings} vs. {make_global_settings}"
)
build_files.add(gyp.common.RelativePath(build_file, options.toplevel_dir))
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs.py
index 32bf4746a179cb..8308fa8433352c 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs.py
@@ -2,7 +2,6 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
-from __future__ import print_function
import ntpath
import os
@@ -26,8 +25,6 @@
from gyp.common import GypError
from gyp.common import OrderedSet
-PY3 = bytes != str
-
# Regular expression for validating Visual Studio GUIDs. If the GUID
# contains lowercase hex letters, MSVS will be fine. However,
@@ -120,9 +117,7 @@ def _GetDomainAndUserName():
call = subprocess.Popen(
["net", "config", "Workstation"], stdout=subprocess.PIPE
)
- config = call.communicate()[0]
- if PY3:
- config = config.decode("utf-8")
+ config = call.communicate()[0].decode("utf-8")
username_re = re.compile(r"^User name\s+(\S+)", re.MULTILINE)
username_match = username_re.search(config)
if username_match:
@@ -157,7 +152,7 @@ def _NormalizedSource(source):
return source
-def _FixPath(path):
+def _FixPath(path, separator="\\"):
"""Convert paths to a form that will make sense in a vcproj file.
Arguments:
@@ -173,9 +168,12 @@ def _FixPath(path):
and not _IsWindowsAbsPath(path)
):
path = os.path.join(fixpath_prefix, path)
- path = path.replace("/", "\\")
+ if separator == "\\":
+ path = path.replace("/", "\\")
path = _NormalizedSource(path)
- if path and path[-1] == "\\":
+ if separator == "/":
+ path = path.replace("\\", "/")
+ if path and path[-1] == separator:
path = path[:-1]
return path
@@ -190,9 +188,9 @@ def _IsWindowsAbsPath(path):
return path.startswith("c:") or path.startswith("C:")
-def _FixPaths(paths):
+def _FixPaths(paths, separator="\\"):
"""Fix each of the paths of the list."""
- return [_FixPath(i) for i in paths]
+ return [_FixPath(i, separator) for i in paths]
def _ConvertSourcesToFilterHierarchy(
@@ -319,7 +317,7 @@ def _ConfigBaseName(config_name, platform_name):
def _ConfigFullName(config_name, config_data):
platform_name = _ConfigPlatform(config_data)
- return "%s|%s" % (_ConfigBaseName(config_name, platform_name), platform_name)
+ return f"{_ConfigBaseName(config_name, platform_name)}|{platform_name}"
def _ConfigWindowsTargetPlatformVersion(config_data, version):
@@ -340,7 +338,7 @@ def _ConfigWindowsTargetPlatformVersion(config_data, version):
# Find a matching entry in sdk_dir\include.
expected_sdk_dir = r"%s\include" % sdk_dir
names = sorted(
- [
+ (
x
for x in (
os.listdir(expected_sdk_dir)
@@ -348,7 +346,7 @@ def _ConfigWindowsTargetPlatformVersion(config_data, version):
else []
)
if x.startswith(version)
- ],
+ ),
reverse=True,
)
if names:
@@ -428,7 +426,9 @@ def _BuildCommandLineForRuleRaw(
# for arguments like "--arg=path" or "/opt:path".
# If the argument starts with a slash or dash, it's probably a command line
# switch
- arguments = [i if (i[:1] in "/-") else _FixPath(i) for i in cmd[1:]]
+ # Return the path with forward slashes because the command using it might
+ # not support backslashes.
+ arguments = [i if (i[:1] in "/-") else _FixPath(i, "/") for i in cmd[1:]]
arguments = [i.replace("$(InputDir)", "%INPUTDIR%") for i in arguments]
arguments = [MSVSSettings.FixVCMacroSlashes(i) for i in arguments]
if quote_cmd:
@@ -620,7 +620,7 @@ def _GenerateNativeRulesForMSVS(p, rules, output_dir, spec, options):
spec: the project dict
options: global generator options
"""
- rules_filename = "%s%s.rules" % (spec["target_name"], options.suffix)
+ rules_filename = "{}{}.rules".format(spec["target_name"], options.suffix)
rules_file = MSVSToolFile.Writer(
os.path.join(output_dir, rules_filename), spec["target_name"]
)
@@ -666,7 +666,7 @@ def _GenerateExternalRules(rules, output_dir, spec, sources, options, actions_to
options: global generator options
actions_to_add: The list of actions we will add to.
"""
- filename = "%s_rules%s.mk" % (spec["target_name"], options.suffix)
+ filename = "{}_rules{}.mk".format(spec["target_name"], options.suffix)
mk_file = gyp.common.WriteOnDiff(os.path.join(output_dir, filename))
# Find cygwin style versions of some paths.
mk_file.write('OutDirCygwin:=$(shell cygpath -u "$(OutDir)")\n')
@@ -709,7 +709,7 @@ def _GenerateExternalRules(rules, output_dir, spec, sources, options, actions_to
cmd = ['"%s"' % i for i in cmd]
cmd = " ".join(cmd)
# Add it to the makefile.
- mk_file.write("%s: %s\n" % (" ".join(outputs), " ".join(inputs)))
+ mk_file.write("{}: {}\n".format(" ".join(outputs), " ".join(inputs)))
mk_file.write("\t%s\n\n" % cmd)
# Close up the file.
mk_file.close()
@@ -1576,7 +1576,7 @@ def _AdjustSourcesAndConvertToFilterHierarchy(
if version.UsesVcxproj():
while (
all([isinstance(s, MSVSProject.Filter) for s in sources])
- and len(set([s.name for s in sources])) == 1
+ and len({s.name for s in sources}) == 1
):
assert all([len(s.contents) == 1 for s in sources])
sources = [s.contents[0] for s in sources]
@@ -1782,8 +1782,8 @@ def _GetCopies(spec):
base_dir = posixpath.split(src_bare)[0]
outer_dir = posixpath.split(src_bare)[1]
fixed_dst = _FixPath(dst)
- full_dst = '"%s\\%s\\"' % (fixed_dst, outer_dir)
- cmd = 'mkdir %s 2>nul & cd "%s" && xcopy /e /f /y "%s" %s' % (
+ full_dst = f'"{fixed_dst}\\{outer_dir}\\"'
+ cmd = 'mkdir {} 2>nul & cd "{}" && xcopy /e /f /y "{}" {}'.format(
full_dst,
_FixPath(base_dir),
outer_dir,
@@ -1794,17 +1794,17 @@ def _GetCopies(spec):
[src],
["dummy_copies", dst],
cmd,
- "Copying %s to %s" % (src, fixed_dst),
+ f"Copying {src} to {fixed_dst}",
)
)
else:
fix_dst = _FixPath(cpy["destination"])
- cmd = 'mkdir "%s" 2>nul & set ERRORLEVEL=0 & copy /Y "%s" "%s"' % (
+ cmd = 'mkdir "{}" 2>nul & set ERRORLEVEL=0 & copy /Y "{}" "{}"'.format(
fix_dst,
_FixPath(src),
_FixPath(dst),
)
- copies.append(([src], [dst], cmd, "Copying %s to %s" % (src, fix_dst)))
+ copies.append(([src], [dst], cmd, f"Copying {src} to {fix_dst}"))
return copies
@@ -1904,12 +1904,12 @@ def _GetPlatformOverridesOfProject(spec):
for config_name, c in spec["configurations"].items():
config_fullname = _ConfigFullName(config_name, c)
platform = c.get("msvs_target_platform", _ConfigPlatform(c))
- fixed_config_fullname = "%s|%s" % (
+ fixed_config_fullname = "{}|{}".format(
_ConfigBaseName(config_name, _ConfigPlatform(c)),
platform,
)
if spec["toolset"] == "host" and generator_supports_multiple_toolsets:
- fixed_config_fullname = "%s|x64" % (config_name,)
+ fixed_config_fullname = f"{config_name}|x64"
config_platform_overrides[config_fullname] = fixed_config_fullname
return config_platform_overrides
@@ -2062,7 +2062,7 @@ def PerformBuild(data, configurations, params):
for config in configurations:
arguments = [devenv, sln_path, "/Build", config]
- print("Building [%s]: %s" % (config, arguments))
+ print(f"Building [{config}]: {arguments}")
subprocess.check_call(arguments)
@@ -2248,7 +2248,7 @@ def _AppendFiltersForMSBuild(
if not parent_filter_name:
filter_name = source.name
else:
- filter_name = "%s\\%s" % (parent_filter_name, source.name)
+ filter_name = f"{parent_filter_name}\\{source.name}"
# Add the filter to the group.
filter_group.append(
[
@@ -2376,7 +2376,7 @@ def _GenerateRulesForMSBuild(
_AdjustSourcesForRules(rules, sources, excluded_sources, True)
-class MSBuildRule(object):
+class MSBuildRule:
"""Used to store information used to generate an MSBuild rule.
Attributes:
@@ -2575,7 +2575,7 @@ def _GenerateMSBuildRuleTargetsFile(targets_path, msbuild_rules):
"Condition": "'@(%s)' != '' and '%%(%s.ExcludedFromBuild)' != "
"'true'" % (rule.tlog, rule.tlog),
"File": "$(IntDir)$(ProjectName).read.1.tlog",
- "Lines": "^%%(%s.Source);%%(%s.Inputs)" % (rule.tlog, rule.tlog),
+ "Lines": f"^%({rule.tlog}.Source);%({rule.tlog}.Inputs)",
},
]
command_and_input_section = [
@@ -2921,7 +2921,7 @@ def _GetMSBuildProjectConfigurations(configurations, spec):
group = ["ItemGroup", {"Label": "ProjectConfigurations"}]
for (name, settings) in sorted(configurations.items()):
configuration, platform = _GetConfigurationAndPlatform(name, settings, spec)
- designation = "%s|%s" % (configuration, platform)
+ designation = f"{configuration}|{platform}"
group.append(
[
"ProjectConfiguration",
@@ -3286,13 +3286,11 @@ def GetEdges(node):
# Self references are ignored. Self reference is used in a few places to
# append to the default value. I.e. PATH=$(PATH);other_path
edges.update(
- set(
- [
- v
- for v in MSVS_VARIABLE_REFERENCE.findall(value)
- if v in properties and v != node
- ]
- )
+ {
+ v
+ for v in MSVS_VARIABLE_REFERENCE.findall(value)
+ if v in properties and v != node
+ }
)
return edges
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs_test.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs_test.py
index e001f417d53aa5..e80b57f06a130c 100755
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs_test.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs_test.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
# Copyright (c) 2012 Google Inc. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
@@ -8,10 +8,7 @@
import gyp.generator.msvs as msvs
import unittest
-try:
- from StringIO import StringIO # Python 2
-except ImportError:
- from io import StringIO # Python 3
+from io import StringIO
class TestSequenceFunctions(unittest.TestCase):
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja.py
index e064bad7ed8404..d173bf22990116 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja.py
@@ -2,7 +2,6 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
-from __future__ import print_function
import collections
import copy
@@ -20,10 +19,7 @@
import gyp.MSVSUtil as MSVSUtil
import gyp.xcode_emulation
-try:
- from cStringIO import StringIO
-except ImportError:
- from io import StringIO
+from io import StringIO
from gyp.common import GetEnvironFallback
import gyp.ninja_syntax as ninja_syntax
@@ -76,7 +72,7 @@ def StripPrefix(arg, prefix):
def QuoteShellArgument(arg, flavor):
"""Quote a string such that it will be interpreted as a single argument
- by the shell."""
+ by the shell."""
# Rather than attempting to enumerate the bad shell characters, just
# allow common OK ones and quote anything else.
if re.match(r"^[a-zA-Z0-9_=.\\/-]+$", arg):
@@ -88,7 +84,7 @@ def QuoteShellArgument(arg, flavor):
def Define(d, flavor):
"""Takes a preprocessor define and returns a -D parameter that's ninja- and
- shell-escaped."""
+ shell-escaped."""
if flavor == "win":
# cl.exe replaces literal # characters with = in preprocessor definitions for
# some reason. Octal-encode to work around that.
@@ -99,32 +95,32 @@ def Define(d, flavor):
def AddArch(output, arch):
"""Adds an arch string to an output path."""
output, extension = os.path.splitext(output)
- return "%s.%s%s" % (output, arch, extension)
+ return f"{output}.{arch}{extension}"
-class Target(object):
+class Target:
"""Target represents the paths used within a single gyp target.
- Conceptually, building a single target A is a series of steps:
+ Conceptually, building a single target A is a series of steps:
- 1) actions/rules/copies generates source/resources/etc.
- 2) compiles generates .o files
- 3) link generates a binary (library/executable)
- 4) bundle merges the above in a mac bundle
+ 1) actions/rules/copies generates source/resources/etc.
+ 2) compiles generates .o files
+ 3) link generates a binary (library/executable)
+ 4) bundle merges the above in a mac bundle
- (Any of these steps can be optional.)
+ (Any of these steps can be optional.)
- From a build ordering perspective, a dependent target B could just
- depend on the last output of this series of steps.
+ From a build ordering perspective, a dependent target B could just
+ depend on the last output of this series of steps.
- But some dependent commands sometimes need to reach inside the box.
- For example, when linking B it needs to get the path to the static
- library generated by A.
+ But some dependent commands sometimes need to reach inside the box.
+ For example, when linking B it needs to get the path to the static
+ library generated by A.
- This object stores those paths. To keep things simple, member
- variables only store concrete paths to single files, while methods
- compute derived values like "the last output of the target".
- """
+ This object stores those paths. To keep things simple, member
+ variables only store concrete paths to single files, while methods
+ compute derived values like "the last output of the target".
+ """
def __init__(self, type):
# Gyp type ("static_library", etc.) of this target.
@@ -163,7 +159,7 @@ def Linkable(self):
def UsesToc(self, flavor):
"""Return true if the target should produce a restat rule based on a TOC
- file."""
+ file."""
# For bundles, the .TOC should be produced for the binary, not for
# FinalOutput(). But the naive approach would put the TOC file into the
# bundle, so don't do this for bundles for now.
@@ -173,19 +169,19 @@ def UsesToc(self, flavor):
def PreActionInput(self, flavor):
"""Return the path, if any, that should be used as a dependency of
- any dependent action step."""
+ any dependent action step."""
if self.UsesToc(flavor):
return self.FinalOutput() + ".TOC"
return self.FinalOutput() or self.preaction_stamp
def PreCompileInput(self):
"""Return the path, if any, that should be used as a dependency of
- any dependent compile step."""
+ any dependent compile step."""
return self.actions_stamp or self.precompile_stamp
def FinalOutput(self):
"""Return the last output of the target, which depends on all prior
- steps."""
+ steps."""
return self.bundle or self.binary or self.actions_stamp
@@ -214,7 +210,7 @@ def FinalOutput(self):
# to the input file name as well as the output target name.
-class NinjaWriter(object):
+class NinjaWriter:
def __init__(
self,
hash_for_rules,
@@ -228,11 +224,11 @@ def __init__(
toplevel_dir=None,
):
"""
- base_dir: path from source root to directory containing this gyp file,
- by gyp semantics, all input paths are relative to this
- build_dir: path from source root to build output
- toplevel_dir: path to the toplevel directory
- """
+ base_dir: path from source root to directory containing this gyp file,
+ by gyp semantics, all input paths are relative to this
+ build_dir: path from source root to build output
+ toplevel_dir: path to the toplevel directory
+ """
self.hash_for_rules = hash_for_rules
self.target_outputs = target_outputs
@@ -263,10 +259,10 @@ def __init__(
def ExpandSpecial(self, path, product_dir=None):
"""Expand specials like $!PRODUCT_DIR in |path|.
- If |product_dir| is None, assumes the cwd is already the product
- dir. Otherwise, |product_dir| is the relative path to the product
- dir.
- """
+ If |product_dir| is None, assumes the cwd is already the product
+ dir. Otherwise, |product_dir| is the relative path to the product
+ dir.
+ """
PRODUCT_DIR = "$!PRODUCT_DIR"
if PRODUCT_DIR in path:
@@ -303,9 +299,9 @@ def ExpandRuleVariables(self, path, root, dirname, source, ext, name):
def GypPathToNinja(self, path, env=None):
"""Translate a gyp path to a ninja path, optionally expanding environment
- variable references in |path| with |env|.
+ variable references in |path| with |env|.
- See the above discourse on path conversions."""
+ See the above discourse on path conversions."""
if env:
if self.flavor == "mac":
path = gyp.xcode_emulation.ExpandEnvVars(path, env)
@@ -324,11 +320,11 @@ def GypPathToNinja(self, path, env=None):
def GypPathToUniqueOutput(self, path, qualified=True):
"""Translate a gyp path to a ninja path for writing output.
- If qualified is True, qualify the resulting filename with the name
- of the target. This is necessary when e.g. compiling the same
- path twice for two separate output targets.
+ If qualified is True, qualify the resulting filename with the name
+ of the target. This is necessary when e.g. compiling the same
+ path twice for two separate output targets.
- See the above discourse on path conversions."""
+ See the above discourse on path conversions."""
path = self.ExpandSpecial(path)
assert not path.startswith("$"), path
@@ -361,9 +357,9 @@ def GypPathToUniqueOutput(self, path, qualified=True):
def WriteCollapsedDependencies(self, name, targets, order_only=None):
"""Given a list of targets, return a path for a single file
- representing the result of building all the targets or None.
+ representing the result of building all the targets or None.
- Uses a stamp file if necessary."""
+ Uses a stamp file if necessary."""
assert targets == [item for item in targets if item], targets
if len(targets) == 0:
@@ -377,14 +373,14 @@ def WriteCollapsedDependencies(self, name, targets, order_only=None):
def _SubninjaNameForArch(self, arch):
output_file_base = os.path.splitext(self.output_file_name)[0]
- return "%s.%s.ninja" % (output_file_base, arch)
+ return f"{output_file_base}.{arch}.ninja"
def WriteSpec(self, spec, config_name, generator_flags):
"""The main entry point for NinjaWriter: write the build rules for a spec.
- Returns a Target object, which represents the output paths for this spec.
- Returns None if there are no outputs (e.g. a settings-only 'none' type
- target)."""
+ Returns a Target object, which represents the output paths for this spec.
+ Returns None if there are no outputs (e.g. a settings-only 'none' type
+ target)."""
self.config_name = config_name
self.name = spec["target_name"]
@@ -418,20 +414,17 @@ def WriteSpec(self, spec, config_name, generator_flags):
if self.flavor == "mac":
self.archs = self.xcode_settings.GetActiveArchs(config_name)
if len(self.archs) > 1:
- self.arch_subninjas = dict(
- (
- arch,
- ninja_syntax.Writer(
- OpenOutput(
- os.path.join(
- self.toplevel_build, self._SubninjaNameForArch(arch)
- ),
- "w",
- )
- ),
+ self.arch_subninjas = {
+ arch: ninja_syntax.Writer(
+ OpenOutput(
+ os.path.join(
+ self.toplevel_build, self._SubninjaNameForArch(arch)
+ ),
+ "w",
+ )
)
for arch in self.archs
- )
+ }
# Compute predepends for all rules.
# actions_depends is the dependencies this target depends on before running
@@ -558,7 +551,7 @@ def WriteSpec(self, spec, config_name, generator_flags):
def _WinIdlRule(self, source, prebuild, outputs):
"""Handle the implicit VS .idl rule for one source file. Fills |outputs|
- with files that are generated."""
+ with files that are generated."""
outdir, output, vars, flags = self.msvs_settings.GetIdlBuildData(
source, self.config_name
)
@@ -595,7 +588,7 @@ def WriteActionsRulesCopies(
self, spec, extra_sources, prebuild, mac_bundle_depends
):
"""Write out the Actions, Rules, and Copies steps. Return a path
- representing the outputs of these steps."""
+ representing the outputs of these steps."""
outputs = []
if self.is_mac_bundle:
mac_bundle_resources = spec.get("mac_bundle_resources", [])[:]
@@ -638,16 +631,16 @@ def WriteActionsRulesCopies(
def GenerateDescription(self, verb, message, fallback):
"""Generate and return a description of a build step.
- |verb| is the short summary, e.g. ACTION or RULE.
- |message| is a hand-written description, or None if not available.
- |fallback| is the gyp-level name of the step, usable as a fallback.
- """
+ |verb| is the short summary, e.g. ACTION or RULE.
+ |message| is a hand-written description, or None if not available.
+ |fallback| is the gyp-level name of the step, usable as a fallback.
+ """
if self.toolset != "target":
verb += "(%s)" % self.toolset
if message:
- return "%s %s" % (verb, self.ExpandSpecial(message))
+ return f"{verb} {self.ExpandSpecial(message)}"
else:
- return "%s %s: %s" % (verb, self.name, fallback)
+ return f"{verb} {self.name}: {fallback}"
def WriteActions(
self, actions, extra_sources, prebuild, extra_mac_bundle_resources
@@ -657,14 +650,14 @@ def WriteActions(
all_outputs = []
for action in actions:
# First write out a rule for the action.
- name = "%s_%s" % (action["action_name"], self.hash_for_rules)
+ name = "{}_{}".format(action["action_name"], self.hash_for_rules)
description = self.GenerateDescription(
"ACTION", action.get("message", None), name
)
- is_cygwin = (
- self.msvs_settings.IsRuleRunUnderCygwin(action)
+ win_shell_flags = (
+ self.msvs_settings.GetRuleShellFlags(action)
if self.flavor == "win"
- else False
+ else None
)
args = action["action"]
depfile = action.get("depfile", None)
@@ -672,7 +665,7 @@ def WriteActions(
depfile = self.ExpandSpecial(depfile, self.base_to_build)
pool = "console" if int(action.get("ninja_use_console", 0)) else None
rule_name, _ = self.WriteNewNinjaRule(
- name, args, description, is_cygwin, env, pool, depfile=depfile
+ name, args, description, win_shell_flags, env, pool, depfile=depfile
)
inputs = [self.GypPathToNinja(i, env) for i in action["inputs"]]
@@ -706,7 +699,7 @@ def WriteRules(
continue
# First write out a rule for the rule action.
- name = "%s_%s" % (rule["rule_name"], self.hash_for_rules)
+ name = "{}_{}".format(rule["rule_name"], self.hash_for_rules)
args = rule["action"]
description = self.GenerateDescription(
@@ -714,14 +707,14 @@ def WriteRules(
rule.get("message", None),
("%s " + generator_default_variables["RULE_INPUT_PATH"]) % name,
)
- is_cygwin = (
- self.msvs_settings.IsRuleRunUnderCygwin(rule)
+ win_shell_flags = (
+ self.msvs_settings.GetRuleShellFlags(rule)
if self.flavor == "win"
- else False
+ else None
)
pool = "console" if int(rule.get("ninja_use_console", 0)) else None
rule_name, args = self.WriteNewNinjaRule(
- name, args, description, is_cygwin, env, pool
+ name, args, description, win_shell_flags, env, pool
)
# TODO: if the command references the outputs directly, we should
@@ -731,7 +724,7 @@ def WriteRules(
# must vary per source file.
# Compute the list of variables we'll need to provide.
special_locals = ("source", "root", "dirname", "ext", "name")
- needed_variables = set(["source"])
+ needed_variables = {"source"}
for argument in args:
for var in special_locals:
if "${%s}" % var in argument:
@@ -740,7 +733,7 @@ def WriteRules(
def cygwin_munge(path):
# pylint: disable=cell-var-from-loop
- if is_cygwin:
+ if win_shell_flags and win_shell_flags.cygwin:
return path.replace("\\", "/")
return path
@@ -875,7 +868,7 @@ def WriteiOSFrameworkHeaders(self, spec, outputs, prebuild):
output = self.GypPathToUniqueOutput("headers.hmap")
self.xcode_settings.header_map_path = output
all_headers = map(
- self.GypPathToNinja, filter(lambda x: x.endswith((".h")), all_sources)
+ self.GypPathToNinja, filter(lambda x: x.endswith(".h"), all_sources)
)
variables = [
("framework", framework),
@@ -925,11 +918,11 @@ def WriteMacBundleResources(self, resources, bundle_depends):
def WriteMacXCassets(self, xcassets, bundle_depends):
"""Writes ninja edges for 'mac_bundle_resources' .xcassets files.
- This add an invocation of 'actool' via the 'mac_tool.py' helper script.
- It assumes that the assets catalogs define at least one imageset and
- thus an Assets.car file will be generated in the application resources
- directory. If this is not the case, then the build will probably be done
- at each invocation of ninja."""
+ This add an invocation of 'actool' via the 'mac_tool.py' helper script.
+ It assumes that the assets catalogs define at least one imageset and
+ thus an Assets.car file will be generated in the application resources
+ directory. If this is not the case, then the build will probably be done
+ at each invocation of ninja."""
if not xcassets:
return
@@ -1047,22 +1040,19 @@ def WriteSources(
spec,
)
else:
- return dict(
- (
- arch,
- self.WriteSourcesForArch(
- self.arch_subninjas[arch],
- config_name,
- config,
- sources,
- predepends,
- precompiled_header,
- spec,
- arch=arch,
- ),
+ return {
+ arch: self.WriteSourcesForArch(
+ self.arch_subninjas[arch],
+ config_name,
+ config,
+ sources,
+ predepends,
+ precompiled_header,
+ spec,
+ arch=arch,
)
for arch in self.archs
- )
+ }
def WriteSourcesForArch(
self,
@@ -1231,7 +1221,7 @@ def WriteSourcesForArch(
command = "cc_s"
elif (
self.flavor == "win"
- and ext == "asm"
+ and ext in ("asm", "S")
and not self.msvs_settings.HasExplicitAsmRules(spec)
):
command = "asm"
@@ -1427,7 +1417,11 @@ def WriteLinkForArch(
is_executable = spec["type"] == "executable"
# The ldflags config key is not used on mac or win. On those platforms
# linker flags are set via xcode_settings and msvs_settings, respectively.
- env_ldflags = os.environ.get("LDFLAGS", "").split()
+ if self.toolset == "target":
+ env_ldflags = os.environ.get("LDFLAGS", "").split()
+ elif self.toolset == "host":
+ env_ldflags = os.environ.get("LDFLAGS_host", "").split()
+
if self.flavor == "mac":
ldflags = self.xcode_settings.GetLdflags(
config_name,
@@ -1729,8 +1723,8 @@ def AppendPostbuildVariable(
def GetPostbuildCommand(self, spec, output, output_binary, is_command_start):
"""Returns a shell command that runs all the postbuilds, and removes
- |output| if any of them fails. If |is_command_start| is False, then the
- returned string will start with ' && '."""
+ |output| if any of them fails. If |is_command_start| is False, then the
+ returned string will start with ' && '."""
if not self.xcode_settings or spec["type"] == "none" or not output:
return ""
output = QuoteShellArgument(output, self.flavor)
@@ -1776,8 +1770,8 @@ def GetPostbuildCommand(self, spec, output, output_binary, is_command_start):
def ComputeExportEnvString(self, env):
"""Given an environment, returns a string looking like
- 'export FOO=foo; export BAR="${FOO} bar;'
- that exports |env| to the shell."""
+ 'export FOO=foo; export BAR="${FOO} bar;'
+ that exports |env| to the shell."""
export_str = []
for k, v in env:
export_str.append(
@@ -1842,7 +1836,7 @@ def ComputeOutputFileName(self, spec, type=None):
"shared_library",
"executable",
):
- return "%s%s%s" % (prefix, target, extension)
+ return f"{prefix}{target}{extension}"
elif type == "none":
return "%s.stamp" % target
else:
@@ -1905,12 +1899,12 @@ def WriteVariableList(self, ninja_file, var, values):
ninja_file.variable(var, " ".join(values))
def WriteNewNinjaRule(
- self, name, args, description, is_cygwin, env, pool, depfile=None
+ self, name, args, description, win_shell_flags, env, pool, depfile=None
):
"""Write out a new ninja "rule" statement for a given command.
- Returns the name of the new rule, and a copy of |args| with variables
- expanded."""
+ Returns the name of the new rule, and a copy of |args| with variables
+ expanded."""
if self.flavor == "win":
args = [
@@ -1952,13 +1946,14 @@ def WriteNewNinjaRule(
if self.flavor == "win":
rspfile = rule_name + ".$unique_name.rsp"
# The cygwin case handles this inside the bash sub-shell.
- run_in = "" if is_cygwin else " " + self.build_to_base
- if is_cygwin:
+ run_in = "" if win_shell_flags.cygwin else " " + self.build_to_base
+ if win_shell_flags.cygwin:
rspfile_content = self.msvs_settings.BuildCygwinBashCommandLine(
args, self.build_to_base
)
else:
- rspfile_content = gyp.msvs_emulation.EncodeRspFileList(args)
+ rspfile_content = gyp.msvs_emulation.EncodeRspFileList(
+ args, win_shell_flags.quote)
command = (
"%s gyp-win-tool action-wrapper $arch " % sys.executable
+ rspfile
@@ -2147,7 +2142,7 @@ class MEMORYSTATUSEX(ctypes.Structure):
def _GetWinLinkRuleNameSuffix(embed_manifest):
"""Returns the suffix used to select an appropriate linking rule depending on
- whether the manifest embedding is enabled."""
+ whether the manifest embedding is enabled."""
return "_embed" if embed_manifest else ""
@@ -2395,7 +2390,6 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params, config_name
)
if flavor == "win":
master_ninja.variable("ld_host", ld_host)
- master_ninja.variable("ldxx_host", ldxx_host)
else:
master_ninja.variable(
"ld_host", CommandWithWrapper("LINK", wrappers, ld_host)
@@ -2538,10 +2532,12 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params, config_name
"solink",
description="SOLINK $lib",
restat=True,
- command=mtime_preserving_solink_base % {"suffix": "@$link_file_list"}, # noqa: E501
+ command=mtime_preserving_solink_base
+ % {"suffix": "@$link_file_list"}, # noqa: E501
rspfile="$link_file_list",
- rspfile_content=("-Wl,--whole-archive $in $solibs -Wl,"
- "--no-whole-archive $libs"),
+ rspfile_content=(
+ "-Wl,--whole-archive $in $solibs -Wl," "--no-whole-archive $libs"
+ ),
pool="link_pool",
)
master_ninja.rule(
@@ -2798,8 +2794,8 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params, config_name
this_make_global_settings = data[build_file].get("make_global_settings", [])
assert make_global_settings == this_make_global_settings, (
- "make_global_settings needs to be the same for all targets. %s vs. %s"
- % (this_make_global_settings, make_global_settings)
+ "make_global_settings needs to be the same for all targets. "
+ f"{this_make_global_settings} vs. {make_global_settings}"
)
spec = target_dicts[qualified_target]
@@ -2891,7 +2887,7 @@ def PerformBuild(data, configurations, params):
for config in configurations:
builddir = os.path.join(options.toplevel_dir, "out", config)
arguments = ["ninja", "-C", builddir]
- print("Building [%s]: %s" % (config, arguments))
+ print(f"Building [{config}]: {arguments}")
subprocess.check_call(arguments)
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja_test.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja_test.py
index abadcd9828e8b2..7d180685b21cf9 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja_test.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja_test.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
# Copyright (c) 2012 Google Inc. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode.py
index 9e7e99e9e13d2d..2f4d17e514e439 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode.py
@@ -2,7 +2,6 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
-from __future__ import print_function
import filecmp
import gyp.common
@@ -110,7 +109,7 @@ def CreateXCConfigurationList(configuration_names):
return xccl
-class XcodeProject(object):
+class XcodeProject:
def __init__(self, gyp_path, path, build_file_dict):
self.gyp_path = gyp_path
self.path = path
@@ -613,7 +612,7 @@ def PerformBuild(data, configurations, params):
for config in configurations:
arguments = ["xcodebuild", "-project", xcodeproj_path]
arguments += ["-configuration", config]
- print("Building [%s]: %s" % (config, arguments))
+ print(f"Building [{config}]: {arguments}")
subprocess.check_call(arguments)
@@ -1072,7 +1071,7 @@ def GenerateOutput(target_list, target_dicts, data, params):
# TODO(mark): There's a possibility for collision here. Consider
# target "t" rule "A_r" and target "t_A" rule "r".
makefile_name = "%s.make" % re.sub(
- "[^a-zA-Z0-9_]", "_", "%s_%s" % (target_name, rule["rule_name"])
+ "[^a-zA-Z0-9_]", "_", "{}_{}".format(target_name, rule["rule_name"])
)
makefile_path = os.path.join(
xcode_projects[build_file].path, makefile_name
@@ -1102,7 +1101,7 @@ def GenerateOutput(target_list, target_dicts, data, params):
eol = ""
else:
eol = " \\"
- makefile.write(" %s%s\n" % (concrete_output, eol))
+ makefile.write(f" {concrete_output}{eol}\n")
for (rule_source, concrete_outputs, message, action) in zip(
rule["rule_sources"],
@@ -1123,7 +1122,7 @@ def GenerateOutput(target_list, target_dicts, data, params):
bol = ""
else:
bol = " "
- makefile.write("%s%s \\\n" % (bol, concrete_output))
+ makefile.write(f"{bol}{concrete_output} \\\n")
concrete_output_dir = posixpath.dirname(concrete_output)
if (
@@ -1143,7 +1142,7 @@ def GenerateOutput(target_list, target_dicts, data, params):
eol = ""
else:
eol = " \\"
- makefile.write(" %s%s\n" % (prerequisite, eol))
+ makefile.write(f" {prerequisite}{eol}\n")
# Make sure that output directories exist before executing the rule
# action.
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode_test.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode_test.py
index 51fbca6a2a28f0..49772d1f4d8103 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode_test.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode_test.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
# Copyright (c) 2013 Google Inc. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/input.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/input.py
index 5504390c0bb33f..354958bfb2ab55 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/input.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/input.py
@@ -2,7 +2,6 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
-from __future__ import print_function
import ast
@@ -21,8 +20,6 @@
from gyp.common import GypError
from gyp.common import OrderedSet
-PY3 = bytes != str
-
# A list of types that are treated as linkable.
linkable_types = [
"executable",
@@ -228,17 +225,9 @@ def LoadOneBuildFile(build_file_path, data, aux_data, includes, is_target, check
return data[build_file_path]
if os.path.exists(build_file_path):
- # Open the build file for read ('r') with universal-newlines mode ('U')
- # to make sure platform specific newlines ('\r\n' or '\r') are converted to '\n'
- # which otherwise will fail eval()
- if sys.platform == "zos":
- # On z/OS, universal-newlines mode treats the file as an ascii file.
- # But since node-gyp produces ebcdic files, do not use that mode.
- build_file_contents = open(build_file_path, "r").read()
- else:
- build_file_contents = open(build_file_path, "rU").read()
+ build_file_contents = open(build_file_path, encoding='utf-8').read()
else:
- raise GypError("%s not found (cwd: %s)" % (build_file_path, os.getcwd()))
+ raise GypError(f"{build_file_path} not found (cwd: {os.getcwd()})")
build_file_data = None
try:
@@ -567,7 +556,7 @@ class ParallelProcessingError(Exception):
pass
-class ParallelState(object):
+class ParallelState:
"""Class to keep track of state when processing input files in parallel.
If build files are loaded in parallel, use this to keep track of
@@ -987,9 +976,8 @@ def ExpandVariables(input, phase, variables, build_file):
)
p_stdout, p_stderr = p.communicate("")
- if PY3:
- p_stdout = p_stdout.decode("utf-8")
- p_stderr = p_stderr.decode("utf-8")
+ p_stdout = p_stdout.decode("utf-8")
+ p_stderr = p_stderr.decode("utf-8")
if p.wait() != 0 or p_stderr:
sys.stderr.write(p_stderr)
@@ -1219,7 +1207,7 @@ def EvalSingleCondition(cond_expr, true_dict, false_dict, phase, variables, buil
except NameError as e:
gyp.common.ExceptionAppend(
e,
- "while evaluating condition '%s' in %s" % (cond_expr_expanded, build_file),
+ f"while evaluating condition '{cond_expr_expanded}' in {build_file}",
)
raise GypError(e)
@@ -1675,7 +1663,7 @@ def RemoveLinkDependenciesFromNoneTargets(targets):
)
-class DependencyGraphNode(object):
+class DependencyGraphNode:
"""
Attributes:
@@ -2252,7 +2240,7 @@ def is_in_set_or_list(x, s, items):
# Make membership testing of hashables in |to| (in particular, strings)
# faster.
- hashable_to_set = set(x for x in to if is_hashable(x))
+ hashable_to_set = {x for x in to if is_hashable(x)}
for item in fro:
singleton = False
if type(item) in (str, int):
@@ -2772,7 +2760,7 @@ def ValidateRulesInTarget(target, target_dict, extra_sources_for_rules):
rule_name = rule["rule_name"]
if rule_name in rule_names:
raise GypError(
- "rule %s exists in duplicate, target %s" % (rule_name, target)
+ f"rule {rule_name} exists in duplicate, target {target}"
)
rule_names[rule_name] = rule
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/input_test.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/input_test.py
index 6672ddc014b150..a18f72e9ebb0a7 100755
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/input_test.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/input_test.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
# Copyright 2013 Google Inc. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/mac_tool.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/mac_tool.py
index 07412578d19a24..59647c9a890349 100755
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/mac_tool.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/mac_tool.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
# Copyright (c) 2012 Google Inc. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
@@ -8,7 +8,6 @@
These functions are executed via gyp-mac-tool when using the Makefile generator.
"""
-from __future__ import print_function
import fcntl
import fnmatch
@@ -23,8 +22,6 @@
import sys
import tempfile
-PY3 = bytes != str
-
def main(args):
executor = MacTool()
@@ -33,7 +30,7 @@ def main(args):
sys.exit(exit_code)
-class MacTool(object):
+class MacTool:
"""This class performs all the Mac tooling steps. The methods can either be
executed directly, or dispatched from an argument list."""
@@ -179,7 +176,7 @@ def _DetectInputEncoding(self, file_name):
def ExecCopyInfoPlist(self, source, dest, convert_to_binary, *keys):
"""Copies the |source| Info.plist to the destination directory |dest|."""
# Read the source Info.plist into memory.
- with open(source, "r") as fd:
+ with open(source) as fd:
lines = fd.read()
# Insert synthesized key/value pairs (e.g. BuildMachineOSBuild).
@@ -251,7 +248,7 @@ def _WritePkgInfo(self, info_plist):
dest = os.path.join(os.path.dirname(info_plist), "PkgInfo")
with open(dest, "w") as fp:
- fp.write("%s%s" % (package_type, signature_code))
+ fp.write(f"{package_type}{signature_code}")
def ExecFlock(self, lockfile, *cmd_list):
"""Emulates the most basic behavior of Linux's flock(1)."""
@@ -278,9 +275,7 @@ def ExecFilterLibtool(self, *cmd_list):
# epoch=0, e.g. 1970-1-1 or 1969-12-31 depending on timezone.
env["ZERO_AR_DATE"] = "1"
libtoolout = subprocess.Popen(cmd_list, stderr=subprocess.PIPE, env=env)
- _, err = libtoolout.communicate()
- if PY3:
- err = err.decode("utf-8")
+ err = libtoolout.communicate()[1].decode("utf-8")
for line in err.splitlines():
if not libtool_re.match(line) and not libtool_re5.match(line):
print(line, file=sys.stderr)
@@ -540,7 +535,7 @@ def _FindProvisioningProfile(self, profile, bundle_identifier):
"application-identifier", ""
)
for team_identifier in profile_data.get("TeamIdentifier", []):
- app_id = "%s.%s" % (team_identifier, bundle_identifier)
+ app_id = f"{team_identifier}.{bundle_identifier}"
if fnmatch.fnmatch(app_id, app_id_pattern):
valid_provisioning_profiles[app_id_pattern] = (
profile_path,
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py
index 1afc1d687ed3f0..5b9c2712e091b4 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py
@@ -7,6 +7,7 @@
build systems, primarily ninja.
"""
+import collections
import os
import re
import subprocess
@@ -16,15 +17,13 @@
import gyp.MSVSUtil
import gyp.MSVSVersion
-PY3 = bytes != str
-
windows_quoter_regex = re.compile(r'(\\*)"')
-def QuoteForRspFile(arg):
+def QuoteForRspFile(arg, quote_cmd=True):
"""Quote a command line argument so that it appears as one argument when
- processed via cmd.exe and parsed by CommandLineToArgvW (as is typical for
- Windows programs)."""
+ processed via cmd.exe and parsed by CommandLineToArgvW (as is typical for
+ Windows programs)."""
# See http://goo.gl/cuFbX and http://goo.gl/dhPnp including the comment
# threads. This is actually the quoting rules for CommandLineToArgvW, not
# for the shell, because the shell doesn't do anything in Windows. This
@@ -38,7 +37,8 @@ def QuoteForRspFile(arg):
# For a literal quote, CommandLineToArgvW requires 2n+1 backslashes
# preceding it, and results in n backslashes + the quote. So we substitute
# in 2* what we match, +1 more, plus the quote.
- arg = windows_quoter_regex.sub(lambda mo: 2 * mo.group(1) + '\\"', arg)
+ if quote_cmd:
+ arg = windows_quoter_regex.sub(lambda mo: 2 * mo.group(1) + '\\"', arg)
# %'s also need to be doubled otherwise they're interpreted as batch
# positional arguments. Also make sure to escape the % so that they're
@@ -50,12 +50,17 @@ def QuoteForRspFile(arg):
# These commands are used in rsp files, so no escaping for the shell (via ^)
# is necessary.
- # Finally, wrap the whole thing in quotes so that the above quote rule
- # applies and whitespace isn't a word break.
- return '"' + arg + '"'
+ # As a workaround for programs that don't use CommandLineToArgvW, gyp
+ # supports msvs_quote_cmd=0, which simply disables all quoting.
+ if quote_cmd:
+ # Finally, wrap the whole thing in quotes so that the above quote rule
+ # applies and whitespace isn't a word break.
+ return f'"{arg}"'
+
+ return arg
-def EncodeRspFileList(args):
+def EncodeRspFileList(args, quote_cmd):
"""Process a list of arguments using QuoteCmdExeArgument."""
# Note that the first argument is assumed to be the command. Don't add
# quotes around it because then built-ins like 'echo', etc. won't work.
@@ -69,12 +74,13 @@ def EncodeRspFileList(args):
program = call + " " + os.path.normpath(program)
else:
program = os.path.normpath(args[0])
- return program + " " + " ".join(QuoteForRspFile(arg) for arg in args[1:])
+ return (program + " "
+ + " ".join(QuoteForRspFile(arg, quote_cmd) for arg in args[1:]))
def _GenericRetrieve(root, default, path):
"""Given a list of dictionary keys |path| and a tree of dicts |root|, find
- value at path, or return |default| if any of the path doesn't exist."""
+ value at path, or return |default| if any of the path doesn't exist."""
if not root:
return default
if not path:
@@ -95,7 +101,7 @@ def _AddPrefix(element, prefix):
def _DoRemapping(element, map):
"""If |element| then remap it through |map|. If |element| is iterable then
- each item will be remapped. Any elements not found will be removed."""
+ each item will be remapped. Any elements not found will be removed."""
if map is not None and element is not None:
if not callable(map):
map = map.get # Assume it's a dict, otherwise a callable to do the remap.
@@ -108,8 +114,8 @@ def _DoRemapping(element, map):
def _AppendOrReturn(append, element):
"""If |append| is None, simply return |element|. If |append| is not None,
- then add |element| to it, adding each item in |element| if it's a list or
- tuple."""
+ then add |element| to it, adding each item in |element| if it's a list or
+ tuple."""
if append is not None and element is not None:
if isinstance(element, list) or isinstance(element, tuple):
append.extend(element)
@@ -121,8 +127,8 @@ def _AppendOrReturn(append, element):
def _FindDirectXInstallation():
"""Try to find an installation location for the DirectX SDK. Check for the
- standard environment variable, and if that doesn't exist, try to find
- via the registry. May return None if not found in either location."""
+ standard environment variable, and if that doesn't exist, try to find
+ via the registry. May return None if not found in either location."""
# Return previously calculated value, if there is one
if hasattr(_FindDirectXInstallation, "dxsdk_dir"):
return _FindDirectXInstallation.dxsdk_dir
@@ -132,9 +138,7 @@ def _FindDirectXInstallation():
# Setup params to pass to and attempt to launch reg.exe.
cmd = ["reg.exe", "query", r"HKLM\Software\Microsoft\DirectX", "/s"]
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
- stdout = p.communicate()[0]
- if PY3:
- stdout = stdout.decode("utf-8")
+ stdout = p.communicate()[0].decode("utf-8")
for line in stdout.splitlines():
if "InstallPath" in line:
dxsdk_dir = line.split(" ")[3] + "\\"
@@ -146,7 +150,7 @@ def _FindDirectXInstallation():
def GetGlobalVSMacroEnv(vs_version):
"""Get a dict of variables mapping internal VS macro names to their gyp
- equivalents. Returns all variables that are independent of the target."""
+ equivalents. Returns all variables that are independent of the target."""
env = {}
# '$(VSInstallDir)' and '$(VCInstallDir)' are available when and only when
# Visual Studio is actually installed.
@@ -167,7 +171,7 @@ def GetGlobalVSMacroEnv(vs_version):
def ExtractSharedMSVSSystemIncludes(configs, generator_flags):
"""Finds msvs_system_include_dirs that are common to all targets, removes
- them from all targets, and returns an OrderedSet containing them."""
+ them from all targets, and returns an OrderedSet containing them."""
all_system_includes = OrderedSet(configs[0].get("msvs_system_include_dirs", []))
for config in configs[1:]:
system_includes = config.get("msvs_system_include_dirs", [])
@@ -193,10 +197,10 @@ def ExtractSharedMSVSSystemIncludes(configs, generator_flags):
return expanded_system_includes
-class MsvsSettings(object):
+class MsvsSettings:
"""A class that understands the gyp 'msvs_...' values (especially the
- msvs_settings field). They largely correpond to the VS2008 IDE DOM. This
- class helps map those settings to command line options."""
+ msvs_settings field). They largely correpond to the VS2008 IDE DOM. This
+ class helps map those settings to command line options."""
def __init__(self, spec, generator_flags):
self.spec = spec
@@ -229,7 +233,9 @@ def __init__(self, spec, generator_flags):
for config in configs.values():
if field in config:
unsupported += [
- "%s not supported (target %s)." % (field, spec["target_name"])
+ "{} not supported (target {}).".format(
+ field, spec["target_name"]
+ )
]
if unsupported:
raise Exception("\n".join(unsupported))
@@ -237,9 +243,9 @@ def __init__(self, spec, generator_flags):
def GetExtension(self):
"""Returns the extension for the target, with no leading dot.
- Uses 'product_extension' if specified, otherwise uses MSVS defaults based on
- the target type.
- """
+ Uses 'product_extension' if specified, otherwise uses MSVS defaults based on
+ the target type.
+ """
ext = self.spec.get("product_extension", None)
if ext:
return ext
@@ -247,7 +253,7 @@ def GetExtension(self):
def GetVSMacroEnv(self, base_to_build=None, config=None):
"""Get a dict of variables mapping internal VS macro names to their gyp
- equivalents."""
+ equivalents."""
target_arch = self.GetArch(config)
if target_arch == "x86":
target_platform = "Win32"
@@ -294,15 +300,15 @@ def AdjustLibraries(self, libraries):
def _GetAndMunge(self, field, path, default, prefix, append, map):
"""Retrieve a value from |field| at |path| or return |default|. If
- |append| is specified, and the item is found, it will be appended to that
- object instead of returned. If |map| is specified, results will be
- remapped through |map| before being returned or appended."""
+ |append| is specified, and the item is found, it will be appended to that
+ object instead of returned. If |map| is specified, results will be
+ remapped through |map| before being returned or appended."""
result = _GenericRetrieve(field, default, path)
result = _DoRemapping(result, map)
result = _AddPrefix(result, prefix)
return _AppendOrReturn(append, result)
- class _GetWrapper(object):
+ class _GetWrapper:
def __init__(self, parent, field, base_path, append=None):
self.parent = parent
self.field = field
@@ -321,7 +327,7 @@ def __call__(self, name, map=None, prefix="", default=None):
def GetArch(self, config):
"""Get architecture based on msvs_configuration_platform and
- msvs_target_platform. Returns either 'x86' or 'x64'."""
+ msvs_target_platform. Returns either 'x86' or 'x64'."""
configuration_platform = self.msvs_configuration_platform.get(config, "")
platform = self.msvs_target_platform.get(config, "")
if not platform: # If no specific override, use the configuration's.
@@ -335,7 +341,7 @@ def _TargetConfig(self, config):
# first level is globally for the configuration (this is what we consider
# "the" config at the gyp level, which will be something like 'Debug' or
# 'Release'), VS2015 and later only use this level
- if self.vs_version.short_name >= 2015:
+ if int(self.vs_version.short_name) >= 2015:
return config
# and a second target-specific configuration, which is an
# override for the global one. |config| is remapped here to take into
@@ -368,7 +374,7 @@ def _ConfigAttrib(
def AdjustIncludeDirs(self, include_dirs, config):
"""Updates include_dirs to expand VS specific paths, and adds the system
- include dirs used for platform SDK and similar."""
+ include dirs used for platform SDK and similar."""
config = self._TargetConfig(config)
includes = include_dirs + self.msvs_system_include_dirs[config]
includes.extend(
@@ -380,7 +386,7 @@ def AdjustIncludeDirs(self, include_dirs, config):
def AdjustMidlIncludeDirs(self, midl_include_dirs, config):
"""Updates midl_include_dirs to expand VS specific paths, and adds the
- system include dirs used for platform SDK and similar."""
+ system include dirs used for platform SDK and similar."""
config = self._TargetConfig(config)
includes = midl_include_dirs + self.msvs_system_include_dirs[config]
includes.extend(
@@ -392,7 +398,7 @@ def AdjustMidlIncludeDirs(self, midl_include_dirs, config):
def GetComputedDefines(self, config):
"""Returns the set of defines that are injected to the defines list based
- on other VS settings."""
+ on other VS settings."""
config = self._TargetConfig(config)
defines = []
if self._ConfigAttrib(["CharacterSet"], config) == "1":
@@ -408,7 +414,7 @@ def GetComputedDefines(self, config):
def GetCompilerPdbName(self, config, expand_special):
"""Get the pdb file name that should be used for compiler invocations, or
- None if there's no explicit name specified."""
+ None if there's no explicit name specified."""
config = self._TargetConfig(config)
pdbname = self._Setting(("VCCLCompilerTool", "ProgramDataBaseFileName"), config)
if pdbname:
@@ -417,7 +423,7 @@ def GetCompilerPdbName(self, config, expand_special):
def GetMapFileName(self, config, expand_special):
"""Gets the explicitly overridden map file name for a target or returns None
- if it's not set."""
+ if it's not set."""
config = self._TargetConfig(config)
map_file = self._Setting(("VCLinkerTool", "MapFileName"), config)
if map_file:
@@ -426,7 +432,7 @@ def GetMapFileName(self, config, expand_special):
def GetOutputName(self, config, expand_special):
"""Gets the explicitly overridden output name for a target or returns None
- if it's not overridden."""
+ if it's not overridden."""
config = self._TargetConfig(config)
type = self.spec["type"]
root = "VCLibrarianTool" if type == "static_library" else "VCLinkerTool"
@@ -440,7 +446,7 @@ def GetOutputName(self, config, expand_special):
def GetPDBName(self, config, expand_special, default):
"""Gets the explicitly overridden pdb name for a target or returns
- default if it's not overridden, or if no pdb will be generated."""
+ default if it's not overridden, or if no pdb will be generated."""
config = self._TargetConfig(config)
output_file = self._Setting(("VCLinkerTool", "ProgramDatabaseFile"), config)
generate_debug_info = self._Setting(
@@ -456,7 +462,7 @@ def GetPDBName(self, config, expand_special, default):
def GetNoImportLibrary(self, config):
"""If NoImportLibrary: true, ninja will not expect the output to include
- an import library."""
+ an import library."""
config = self._TargetConfig(config)
noimplib = self._Setting(("NoImportLibrary",), config)
return noimplib == "true"
@@ -539,7 +545,7 @@ def GetCflags(self, config):
)
]
)
- if self.vs_version.project_version >= 12.0:
+ if float(self.vs_version.project_version) >= 12.0:
# New flag introduced in VS2013 (project version 12.0) Forces writes to
# the program database (PDB) to be serialized through MSPDBSRV.EXE.
# https://msdn.microsoft.com/en-us/library/dn502518.aspx
@@ -549,8 +555,7 @@ def GetCflags(self, config):
return cflags
def _GetPchFlags(self, config, extension):
- """Get the flags to be added to the cflags for precompiled header support.
- """
+ """Get the flags to be added to the cflags for precompiled header support."""
config = self._TargetConfig(config)
# The PCH is only built once by a particular source file. Usage of PCH must
# only be for the same language (i.e. C vs. C++), so only include the pch
@@ -575,7 +580,7 @@ def GetCflagsCC(self, config):
def _GetAdditionalLibraryDirectories(self, root, config, gyp_to_build_path):
"""Get and normalize the list of paths in AdditionalLibraryDirectories
- setting."""
+ setting."""
config = self._TargetConfig(config)
libpaths = self._Setting(
(root, "AdditionalLibraryDirectories"), config, default=[]
@@ -622,14 +627,14 @@ def GetDefFile(self, gyp_to_build_path):
def _GetDefFileAsLdflags(self, ldflags, gyp_to_build_path):
""".def files get implicitly converted to a ModuleDefinitionFile for the
- linker in the VS generator. Emulate that behaviour here."""
+ linker in the VS generator. Emulate that behaviour here."""
def_file = self.GetDefFile(gyp_to_build_path)
if def_file:
ldflags.append('/DEF:"%s"' % def_file)
def GetPGDName(self, config, expand_special):
"""Gets the explicitly overridden pgd name for a target or returns None
- if it's not overridden."""
+ if it's not overridden."""
config = self._TargetConfig(config)
output_file = self._Setting(("VCLinkerTool", "ProfileGuidedDatabase"), config)
if output_file:
@@ -649,7 +654,7 @@ def GetLdflags(
build_dir,
):
"""Returns the flags that need to be added to link commands, and the
- manifest files."""
+ manifest files."""
config = self._TargetConfig(config)
ldflags = []
ld = self._GetWrapper(
@@ -709,7 +714,7 @@ def GetLdflags(
)
if stack_commit_size:
stack_commit_size = "," + stack_commit_size
- ldflags.append("/STACK:%s%s" % (stack_reserve_size, stack_commit_size))
+ ldflags.append(f"/STACK:{stack_reserve_size}{stack_commit_size}")
ld("TerminalServerAware", map={"1": ":NO", "2": ""}, prefix="/TSAWARE")
ld("LinkIncremental", map={"1": ":NO", "2": ""}, prefix="/INCREMENTAL")
@@ -775,12 +780,12 @@ def _GetLdManifestFlags(
self, config, name, gyp_to_build_path, allow_isolation, build_dir
):
"""Returns a 3-tuple:
- - the set of flags that need to be added to the link to generate
- a default manifest
- - the intermediate manifest that the linker will generate that should be
- used to assert it doesn't add anything to the merged one.
- - the list of all the manifest files to be merged by the manifest tool and
- included into the link."""
+ - the set of flags that need to be added to the link to generate
+ a default manifest
+ - the intermediate manifest that the linker will generate that should be
+ used to assert it doesn't add anything to the merged one.
+ - the list of all the manifest files to be merged by the manifest tool and
+ included into the link."""
generate_manifest = self._Setting(
("VCLinkerTool", "GenerateManifest"), config, default="true"
)
@@ -835,10 +840,10 @@ def _GetLdManifestFlags(
-
+
- """ % (
+""".format(
execution_level_map[execution_level],
ui_access,
)
@@ -867,7 +872,7 @@ def _GetLdManifestFlags(
def _GetAdditionalManifestFiles(self, config, gyp_to_build_path):
"""Gets additional manifest files that are added to the default one
- generated by the linker."""
+ generated by the linker."""
files = self._Setting(
("VCManifestTool", "AdditionalManifestFiles"), config, default=[]
)
@@ -880,7 +885,7 @@ def _GetAdditionalManifestFiles(self, config, gyp_to_build_path):
def IsUseLibraryDependencyInputs(self, config):
"""Returns whether the target should be linked via Use Library Dependency
- Inputs (using component .objs of a given .lib)."""
+ Inputs (using component .objs of a given .lib)."""
config = self._TargetConfig(config)
uldi = self._Setting(("VCLinkerTool", "UseLibraryDependencyInputs"), config)
return uldi == "true"
@@ -901,7 +906,7 @@ def IsLinkIncremental(self, config):
def GetRcflags(self, config, gyp_to_ninja_path):
"""Returns the flags that need to be added to invocations of the resource
- compiler."""
+ compiler."""
config = self._TargetConfig(config)
rcflags = []
rc = self._GetWrapper(
@@ -916,13 +921,13 @@ def GetRcflags(self, config, gyp_to_ninja_path):
def BuildCygwinBashCommandLine(self, args, path_to_base):
"""Build a command line that runs args via cygwin bash. We assume that all
- incoming paths are in Windows normpath'd form, so they need to be
- converted to posix style for the part of the command line that's passed to
- bash. We also have to do some Visual Studio macro emulation here because
- various rules use magic VS names for things. Also note that rules that
- contain ninja variables cannot be fixed here (for example ${source}), so
- the outer generator needs to make sure that the paths that are written out
- are in posix style, if the command line will be used here."""
+ incoming paths are in Windows normpath'd form, so they need to be
+ converted to posix style for the part of the command line that's passed to
+ bash. We also have to do some Visual Studio macro emulation here because
+ various rules use magic VS names for things. Also note that rules that
+ contain ninja variables cannot be fixed here (for example ${source}), so
+ the outer generator needs to make sure that the paths that are written out
+ are in posix style, if the command line will be used here."""
cygwin_dir = os.path.normpath(
os.path.join(path_to_base, self.msvs_cygwin_dirs[0])
)
@@ -932,17 +937,26 @@ def BuildCygwinBashCommandLine(self, args, path_to_base):
bash_cmd = " ".join(args)
cmd = (
'call "%s\\setup_env.bat" && set CYGWIN=nontsec && ' % cygwin_dir
- + 'bash -c "%s ; %s"' % (cd, bash_cmd)
+ + f'bash -c "{cd} ; {bash_cmd}"'
)
return cmd
- def IsRuleRunUnderCygwin(self, rule):
- """Determine if an action should be run under cygwin. If the variable is
- unset, or set to 1 we use cygwin."""
- return (
- int(rule.get("msvs_cygwin_shell", self.spec.get("msvs_cygwin_shell", 1)))
- != 0
- )
+ RuleShellFlags = collections.namedtuple("RuleShellFlags", ["cygwin", "quote"])
+
+ def GetRuleShellFlags(self, rule):
+ """Return RuleShellFlags about how the given rule should be run. This
+ includes whether it should run under cygwin (msvs_cygwin_shell), and
+ whether the commands should be quoted (msvs_quote_cmd)."""
+ # If the variable is unset, or set to 1 we use cygwin
+ cygwin = int(rule.get("msvs_cygwin_shell",
+ self.spec.get("msvs_cygwin_shell", 1))) != 0
+ # Default to quoting. There's only a few special instances where the
+ # target command uses non-standard command line parsing and handle quotes
+ # and quote escaping differently.
+ quote_cmd = int(rule.get("msvs_quote_cmd", 1))
+ assert quote_cmd != 0 or cygwin != 1, \
+ "msvs_quote_cmd=0 only applicable for msvs_cygwin_shell=0"
+ return MsvsSettings.RuleShellFlags(cygwin, quote_cmd)
def _HasExplicitRuleForExtension(self, spec, extension):
"""Determine if there's an explicit rule for a particular extension."""
@@ -959,19 +973,19 @@ def _HasExplicitIdlActions(self, spec):
def HasExplicitIdlRulesOrActions(self, spec):
"""Determine if there's an explicit rule or action for idl files. When
- there isn't we need to generate implicit rules to build MIDL .idl files."""
+ there isn't we need to generate implicit rules to build MIDL .idl files."""
return self._HasExplicitRuleForExtension(
spec, "idl"
) or self._HasExplicitIdlActions(spec)
def HasExplicitAsmRules(self, spec):
"""Determine if there's an explicit rule for asm files. When there isn't we
- need to generate implicit rules to assemble .asm files."""
+ need to generate implicit rules to assemble .asm files."""
return self._HasExplicitRuleForExtension(spec, "asm")
def GetIdlBuildData(self, source, config):
"""Determine the implicit outputs for an idl file. Returns output
- directory, outputs, and variables and flags that are required."""
+ directory, outputs, and variables and flags that are required."""
config = self._TargetConfig(config)
midl_get = self._GetWrapper(self, self.msvs_settings[config], "VCMIDLTool")
@@ -1010,10 +1024,10 @@ def _LanguageMatchesForPch(source_ext, pch_source_ext):
)
-class PrecompiledHeader(object):
+class PrecompiledHeader:
"""Helper to generate dependencies and build rules to handle generation of
- precompiled headers. Interface matches the GCH handler in xcode_emulation.py.
- """
+ precompiled headers. Interface matches the GCH handler in xcode_emulation.py.
+ """
def __init__(
self, settings, config, gyp_to_build_path, gyp_to_unique_output, obj_ext
@@ -1027,14 +1041,14 @@ def __init__(
def _PchHeader(self):
"""Get the header that will appear in an #include line for all source
- files."""
+ files."""
return self.settings.msvs_precompiled_header[self.config]
def GetObjDependencies(self, sources, objs, arch):
"""Given a list of sources files and the corresponding object files,
- returns a list of the pch files that should be depended upon. The
- additional wrapping in the return value is for interface compatibility
- with make.py on Mac, and xcode_emulation.py."""
+ returns a list of the pch files that should be depended upon. The
+ additional wrapping in the return value is for interface compatibility
+ with make.py on Mac, and xcode_emulation.py."""
assert arch is None
if not self._PchHeader():
return []
@@ -1046,14 +1060,14 @@ def GetObjDependencies(self, sources, objs, arch):
def GetPchBuildCommands(self, arch):
"""Not used on Windows as there are no additional build steps required
- (instead, existing steps are modified in GetFlagsModifications below)."""
+ (instead, existing steps are modified in GetFlagsModifications below)."""
return []
def GetFlagsModifications(
self, input, output, implicit, command, cflags_c, cflags_cc, expand_special
):
"""Get the modified cflags and implicit dependencies that should be used
- for the pch compilation step."""
+ for the pch compilation step."""
if input == self.pch_source:
pch_output = ["/Yc" + self._PchHeader()]
if command == "cxx":
@@ -1090,7 +1104,7 @@ def _GetVsvarsSetupArgs(generator_flags, arch):
def ExpandMacros(string, expansions):
"""Expand $(Variable) per expansions dict. See MsvsSettings.GetVSMacroEnv
- for the canonical way to retrieve a suitable dict."""
+ for the canonical way to retrieve a suitable dict."""
if "$" in string:
for old, new in expansions.items():
assert "$(" not in new, new
@@ -1100,7 +1114,7 @@ def ExpandMacros(string, expansions):
def _ExtractImportantEnvironment(output_of_set):
"""Extracts environment variables required for the toolchain to run from
- a textual dump output by the cmd.exe 'set' command."""
+ a textual dump output by the cmd.exe 'set' command."""
envvars_to_save = (
"goma_.*", # TODO(scottmg): This is ugly, but needed for goma.
"include",
@@ -1140,8 +1154,8 @@ def _ExtractImportantEnvironment(output_of_set):
def _FormatAsEnvironmentBlock(envvar_dict):
"""Format as an 'environment block' directly suitable for CreateProcess.
- Briefly this is a list of key=value\0, terminated by an additional \0. See
- CreateProcess documentation for more details."""
+ Briefly this is a list of key=value\0, terminated by an additional \0. See
+ CreateProcess documentation for more details."""
block = ""
nul = "\0"
for key, value in envvar_dict.items():
@@ -1152,7 +1166,7 @@ def _FormatAsEnvironmentBlock(envvar_dict):
def _ExtractCLPath(output_of_where):
"""Gets the path to cl.exe based on the output of calling the environment
- setup batch file, followed by the equivalent of `where`."""
+ setup batch file, followed by the equivalent of `where`."""
# Take the first line, as that's the first found in the PATH.
for line in output_of_where.strip().splitlines():
if line.startswith("LOC:"):
@@ -1163,19 +1177,19 @@ def GenerateEnvironmentFiles(
toplevel_build_dir, generator_flags, system_includes, open_out
):
"""It's not sufficient to have the absolute path to the compiler, linker,
- etc. on Windows, as those tools rely on .dlls being in the PATH. We also
- need to support both x86 and x64 compilers within the same build (to support
- msvs_target_platform hackery). Different architectures require a different
- compiler binary, and different supporting environment variables (INCLUDE,
- LIB, LIBPATH). So, we extract the environment here, wrap all invocations
- of compiler tools (cl, link, lib, rc, midl, etc.) via win_tool.py which
- sets up the environment, and then we do not prefix the compiler with
- an absolute path, instead preferring something like "cl.exe" in the rule
- which will then run whichever the environment setup has put in the path.
- When the following procedure to generate environment files does not
- meet your requirement (e.g. for custom toolchains), you can pass
- "-G ninja_use_custom_environment_files" to the gyp to suppress file
- generation and use custom environment files prepared by yourself."""
+ etc. on Windows, as those tools rely on .dlls being in the PATH. We also
+ need to support both x86 and x64 compilers within the same build (to support
+ msvs_target_platform hackery). Different architectures require a different
+ compiler binary, and different supporting environment variables (INCLUDE,
+ LIB, LIBPATH). So, we extract the environment here, wrap all invocations
+ of compiler tools (cl, link, lib, rc, midl, etc.) via win_tool.py which
+ sets up the environment, and then we do not prefix the compiler with
+ an absolute path, instead preferring something like "cl.exe" in the rule
+ which will then run whichever the environment setup has put in the path.
+ When the following procedure to generate environment files does not
+ meet your requirement (e.g. for custom toolchains), you can pass
+ "-G ninja_use_custom_environment_files" to the gyp to suppress file
+ generation and use custom environment files prepared by yourself."""
archs = ("x86", "x64")
if generator_flags.get("ninja_use_custom_environment_files", 0):
cl_paths = {}
@@ -1191,9 +1205,7 @@ def GenerateEnvironmentFiles(
popen = subprocess.Popen(
args, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT
)
- variables, _ = popen.communicate()
- if PY3:
- variables = variables.decode("utf-8")
+ variables = popen.communicate()[0].decode("utf-8")
if popen.returncode != 0:
raise Exception('"%s" failed with error %d' % (args, popen.returncode))
env = _ExtractImportantEnvironment(variables)
@@ -1216,19 +1228,17 @@ def GenerateEnvironmentFiles(
("&&", "for", "%i", "in", "(cl.exe)", "do", "@echo", "LOC:%~$PATH:i")
)
popen = subprocess.Popen(args, shell=True, stdout=subprocess.PIPE)
- output, _ = popen.communicate()
- if PY3:
- output = output.decode("utf-8")
+ output = popen.communicate()[0].decode("utf-8")
cl_paths[arch] = _ExtractCLPath(output)
return cl_paths
def VerifyMissingSources(sources, build_dir, generator_flags, gyp_to_ninja):
"""Emulate behavior of msvs_error_on_missing_sources present in the msvs
- generator: Check that all regular source files, i.e. not created at run time,
- exist on disk. Missing files cause needless recompilation when building via
- VS, and we want this check to match for people/bots that build using ninja,
- so they're not surprised when the VS build fails."""
+ generator: Check that all regular source files, i.e. not created at run time,
+ exist on disk. Missing files cause needless recompilation when building via
+ VS, and we want this check to match for people/bots that build using ninja,
+ so they're not surprised when the VS build fails."""
if int(generator_flags.get("msvs_error_on_missing_sources", 0)):
no_specials = filter(lambda x: "$" not in x, sources)
relative = [os.path.join(build_dir, gyp_to_ninja(s)) for s in no_specials]
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/ninja_syntax.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/ninja_syntax.py
index 14212358082a62..0e3e86c7430d0b 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/ninja_syntax.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/ninja_syntax.py
@@ -16,7 +16,7 @@ def escape_path(word):
return word.replace("$ ", "$$ ").replace(" ", "$ ").replace(":", "$:")
-class Writer(object):
+class Writer:
def __init__(self, output, width=78):
self.output = output
self.width = width
@@ -33,7 +33,7 @@ def variable(self, key, value, indent=0):
return
if isinstance(value, list):
value = " ".join(filter(None, value)) # Filter out empty strings.
- self._line("%s = %s" % (key, value), indent)
+ self._line(f"{key} = {value}", indent)
def pool(self, name, depth):
self._line("pool %s" % name)
@@ -89,7 +89,7 @@ def build(
all_inputs.extend(order_only)
self._line(
- "build %s: %s" % (" ".join(out_outputs), " ".join([rule] + all_inputs))
+ "build {}: {}".format(" ".join(out_outputs), " ".join([rule] + all_inputs))
)
if variables:
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/simple_copy.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/simple_copy.py
index e01106f9c4821a..729cec0636273b 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/simple_copy.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/simple_copy.py
@@ -36,10 +36,7 @@ def _deepcopy_atomic(x):
return x
-try:
- types = bool, float, int, str, type, type(None), long, unicode
-except NameError: # Python 3
- types = bool, float, int, str, type, type(None)
+types = bool, float, int, str, type, type(None)
for x in types:
d[x] = _deepcopy_atomic
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/win_tool.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/win_tool.py
index 758e9f5c456221..638eee40029411 100755
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/win_tool.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/win_tool.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
# Copyright (c) 2012 Google Inc. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
@@ -9,7 +9,6 @@
These functions are executed via gyp-win-tool when using the ninja generator.
"""
-from __future__ import print_function
import os
import re
@@ -20,7 +19,6 @@
import sys
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
-PY3 = bytes != str
# A regex matching an argument corresponding to the output filename passed to
# link.exe.
@@ -34,7 +32,7 @@ def main(args):
sys.exit(exit_code)
-class WinTool(object):
+class WinTool:
"""This class performs all the Windows tooling steps. The methods can either
be executed directly, or dispatched from an argument list."""
@@ -141,9 +139,7 @@ def ExecLinkWrapper(self, arch, use_separate_mspdbsrv, *args):
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
)
- out, _ = link.communicate()
- if PY3:
- out = out.decode("utf-8")
+ out = link.communicate()[0].decode("utf-8")
for line in out.splitlines():
if (
not line.startswith(" Creating library ")
@@ -223,17 +219,18 @@ def ExecLinkWithManifests(
our_manifest = "%(out)s.manifest" % variables
# Load and normalize the manifests. mt.exe sometimes removes whitespace,
# and sometimes doesn't unfortunately.
- with open(our_manifest, "r") as our_f:
- with open(assert_manifest, "r") as assert_f:
- our_data = our_f.read().translate(None, string.whitespace)
- assert_data = assert_f.read().translate(None, string.whitespace)
+ with open(our_manifest) as our_f:
+ with open(assert_manifest) as assert_f:
+ translator = str.maketrans('', '', string.whitespace)
+ our_data = our_f.read().translate(translator)
+ assert_data = assert_f.read().translate(translator)
if our_data != assert_data:
os.unlink(out)
def dump(filename):
print(filename, file=sys.stderr)
print("-----", file=sys.stderr)
- with open(filename, "r") as f:
+ with open(filename) as f:
print(f.read(), file=sys.stderr)
print("-----", file=sys.stderr)
@@ -256,9 +253,7 @@ def ExecManifestWrapper(self, arch, *args):
popen = subprocess.Popen(
args, shell=True, env=env, stdout=subprocess.PIPE, stderr=subprocess.STDOUT
)
- out, _ = popen.communicate()
- if PY3:
- out = out.decode("utf-8")
+ out = popen.communicate()[0].decode("utf-8")
for line in out.splitlines():
if line and "manifest authoring warning 81010002" not in line:
print(line)
@@ -302,16 +297,14 @@ def ExecMidlWrapper(self, arch, outdir, tlb, h, dlldata, iid, proxy, idl, *flags
popen = subprocess.Popen(
args, shell=True, env=env, stdout=subprocess.PIPE, stderr=subprocess.STDOUT
)
- out, _ = popen.communicate()
- if PY3:
- out = out.decode("utf-8")
+ out = popen.communicate()[0].decode("utf-8")
# Filter junk out of stdout, and write filtered versions. Output we want
# to filter is pairs of lines that look like this:
# Processing C:\Program Files (x86)\Microsoft SDKs\...\include\objidl.idl
# objidl.idl
lines = out.splitlines()
prefixes = ("Processing ", "64 bit Processing ")
- processing = set(os.path.basename(x) for x in lines if x.startswith(prefixes))
+ processing = {os.path.basename(x) for x in lines if x.startswith(prefixes)}
for line in lines:
if not line.startswith(prefixes) and line not in processing:
print(line)
@@ -323,9 +316,7 @@ def ExecAsmWrapper(self, arch, *args):
popen = subprocess.Popen(
args, shell=True, env=env, stdout=subprocess.PIPE, stderr=subprocess.STDOUT
)
- out, _ = popen.communicate()
- if PY3:
- out = out.decode("utf-8")
+ out = popen.communicate()[0].decode("utf-8")
for line in out.splitlines():
if (
not line.startswith("Copyright (C) Microsoft Corporation")
@@ -343,9 +334,7 @@ def ExecRcWrapper(self, arch, *args):
popen = subprocess.Popen(
args, shell=True, env=env, stdout=subprocess.PIPE, stderr=subprocess.STDOUT
)
- out, _ = popen.communicate()
- if PY3:
- out = out.decode("utf-8")
+ out = popen.communicate()[0].decode("utf-8")
for line in out.splitlines():
if (
not line.startswith("Microsoft (R) Windows (R) Resource Compiler")
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py
index 8af2b39f9a1479..a75d8eeab7bda0 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py
@@ -7,7 +7,6 @@
other build systems, such as make and ninja.
"""
-from __future__ import print_function
import copy
import gyp.common
@@ -19,8 +18,6 @@
import sys
from gyp.common import GypError
-PY3 = bytes != str
-
# Populated lazily by XcodeVersion, for efficiency, and to fix an issue when
# "xcodebuild" is called too quickly (it has been found to return incorrect
# version number).
@@ -40,7 +37,7 @@ def XcodeArchsVariableMapping(archs, archs_including_64_bit=None):
return mapping
-class XcodeArchsDefault(object):
+class XcodeArchsDefault:
"""A class to resolve ARCHS variable from xcode_settings, resolving Xcode
macros and implementing filtering by VALID_ARCHS. The expansion of macros
depends on the SDKROOT used ("macosx", "iphoneos", "iphonesimulator") and
@@ -148,7 +145,7 @@ def GetXcodeArchsDefault():
return XCODE_ARCHS_DEFAULT_CACHE
-class XcodeSettings(object):
+class XcodeSettings:
"""A class that understands the gyp 'xcode_settings' object."""
# Populated lazily by _SdkPath(). Shared by all XcodeSettings, so cached
@@ -281,7 +278,7 @@ def GetWrapperExtension(self):
else:
return "." + self.spec.get("product_extension", "app")
else:
- assert False, "Don't know extension for '%s', target '%s'" % (
+ assert False, "Don't know extension for '{}', target '{}'".format(
self.spec["type"],
self.spec["target_name"],
)
@@ -654,28 +651,32 @@ def GetCflags(self, configname, arch=None):
self._WarnUnimplemented("MACH_O_TYPE")
self._WarnUnimplemented("PRODUCT_TYPE")
- if arch is not None:
- archs = [arch]
- else:
- assert self.configname
- archs = self.GetActiveArchs(self.configname)
- if len(archs) != 1:
- # TODO: Supporting fat binaries will be annoying.
- self._WarnUnimplemented("ARCHS")
- archs = ["i386"]
- cflags.append("-arch " + archs[0])
-
- if archs[0] in ("i386", "x86_64"):
- if self._Test("GCC_ENABLE_SSE3_EXTENSIONS", "YES", default="NO"):
- cflags.append("-msse3")
- if self._Test(
- "GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS", "YES", default="NO"
- ):
- cflags.append("-mssse3") # Note 3rd 's'.
- if self._Test("GCC_ENABLE_SSE41_EXTENSIONS", "YES", default="NO"):
- cflags.append("-msse4.1")
- if self._Test("GCC_ENABLE_SSE42_EXTENSIONS", "YES", default="NO"):
- cflags.append("-msse4.2")
+ # If GYP_CROSSCOMPILE (--cross-compiling), disable architecture-specific
+ # additions and assume these will be provided as required via CC_host,
+ # CXX_host, CC_target and CXX_target.
+ if not gyp.common.CrossCompileRequested():
+ if arch is not None:
+ archs = [arch]
+ else:
+ assert self.configname
+ archs = self.GetActiveArchs(self.configname)
+ if len(archs) != 1:
+ # TODO: Supporting fat binaries will be annoying.
+ self._WarnUnimplemented("ARCHS")
+ archs = ["i386"]
+ cflags.append("-arch " + archs[0])
+
+ if archs[0] in ("i386", "x86_64"):
+ if self._Test("GCC_ENABLE_SSE3_EXTENSIONS", "YES", default="NO"):
+ cflags.append("-msse3")
+ if self._Test(
+ "GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS", "YES", default="NO"
+ ):
+ cflags.append("-mssse3") # Note 3rd 's'.
+ if self._Test("GCC_ENABLE_SSE41_EXTENSIONS", "YES", default="NO"):
+ cflags.append("-msse4.1")
+ if self._Test("GCC_ENABLE_SSE42_EXTENSIONS", "YES", default="NO"):
+ cflags.append("-msse4.2")
cflags += self._Settings().get("WARNING_CFLAGS", [])
@@ -938,16 +939,17 @@ def GetLdflags(self, configname, product_dir, gyp_to_build_path, arch=None):
+ gyp_to_build_path(self._Settings()["ORDER_FILE"])
)
- if arch is not None:
- archs = [arch]
- else:
- assert self.configname
- archs = self.GetActiveArchs(self.configname)
- if len(archs) != 1:
- # TODO: Supporting fat binaries will be annoying.
- self._WarnUnimplemented("ARCHS")
- archs = ["i386"]
- ldflags.append("-arch " + archs[0])
+ if not gyp.common.CrossCompileRequested():
+ if arch is not None:
+ archs = [arch]
+ else:
+ assert self.configname
+ archs = self.GetActiveArchs(self.configname)
+ if len(archs) != 1:
+ # TODO: Supporting fat binaries will be annoying.
+ self._WarnUnimplemented("ARCHS")
+ archs = ["i386"]
+ ldflags.append("-arch " + archs[0])
# Xcode adds the product directory by default.
# Rewrite -L. to -L./ to work around http://www.openradar.me/25313838
@@ -1083,7 +1085,7 @@ def _GetStripPostbuilds(self, configname, output_binary, quiet):
if not quiet:
result.append("echo STRIP\\(%s\\)" % self.spec["target_name"])
- result.append("strip %s %s" % (strip_flags, output_binary))
+ result.append(f"strip {strip_flags} {output_binary}")
self.configname = None
return result
@@ -1105,7 +1107,7 @@ def _GetDebugInfoPostbuilds(self, configname, output, output_binary, quiet):
):
if not quiet:
result.append("echo DSYMUTIL\\(%s\\)" % self.spec["target_name"])
- result.append("dsymutil %s -o %s" % (output_binary, output + ".dSYM"))
+ result.append("dsymutil {} -o {}".format(output_binary, output + ".dSYM"))
self.configname = None
return result
@@ -1138,7 +1140,7 @@ def _GetIOSPostbuilds(self, configname, output_binary):
source = os.path.join("${BUILT_PRODUCTS_DIR}", product_name)
test_host = os.path.dirname(settings.get("TEST_HOST"))
xctest_destination = os.path.join(test_host, "PlugIns", product_name)
- postbuilds.extend(["ditto %s %s" % (source, xctest_destination)])
+ postbuilds.extend([f"ditto {source} {xctest_destination}"])
key = self._GetIOSCodeSignIdentityKey(settings)
if not key:
@@ -1165,7 +1167,7 @@ def _GetIOSPostbuilds(self, configname, output_binary):
for framework in frameworks:
source = os.path.join(platform_root, framework)
destination = os.path.join(frameworks_dir, os.path.basename(framework))
- postbuilds.extend(["ditto %s %s" % (source, destination)])
+ postbuilds.extend([f"ditto {source} {destination}"])
# Then re-sign everything with 'preserve=True'
postbuilds.extend(
@@ -1366,7 +1368,7 @@ def _DefaultSdkRoot(self):
return ""
-class MacPrefixHeader(object):
+class MacPrefixHeader:
"""A class that helps with emulating Xcode's GCC_PREFIX_HEADER feature.
This feature consists of several pieces:
@@ -1556,9 +1558,7 @@ def GetStdoutQuiet(cmdlist):
Ignores the stderr.
Raises |GypError| if the command return with a non-zero return code."""
job = subprocess.Popen(cmdlist, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
- out = job.communicate()[0]
- if PY3:
- out = out.decode("utf-8")
+ out = job.communicate()[0].decode("utf-8")
if job.returncode != 0:
raise GypError("Error %d running %s" % (job.returncode, cmdlist[0]))
return out.rstrip("\n")
@@ -1568,9 +1568,7 @@ def GetStdout(cmdlist):
"""Returns the content of standard output returned by invoking |cmdlist|.
Raises |GypError| if the command return with a non-zero return code."""
job = subprocess.Popen(cmdlist, stdout=subprocess.PIPE)
- out = job.communicate()[0]
- if PY3:
- out = out.decode("utf-8")
+ out = job.communicate()[0].decode("utf-8")
if job.returncode != 0:
sys.stderr.write(out + "\n")
raise GypError("Error %d running %s" % (job.returncode, cmdlist[0]))
@@ -1866,7 +1864,7 @@ def GetEdges(node):
# definition contains all variables it references in a single string.
# We can then reverse the result of the topological sort at the end.
# Since: reverse(topsort(DAG)) = topsort(reverse_edges(DAG))
- matches = set([v for v in regex.findall(env[node]) if v in env])
+ matches = {v for v in regex.findall(env[node]) if v in env}
for dependee in matches:
assert "${" not in dependee, "Nested variables not supported: " + dependee
return matches
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_ninja.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_ninja.py
index 10ddcbccd0310b..bb74eacbeaf4ae 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_ninja.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_ninja.py
@@ -43,11 +43,11 @@ def _WriteWorkspace(main_gyp, sources_gyp, params):
workspace_file = os.path.join(workspace_path, "contents.xcworkspacedata")
try:
- with open(workspace_file, "r") as input_file:
+ with open(workspace_file) as input_file:
input_string = input_file.read()
if input_string == output_string:
return
- except IOError:
+ except OSError:
# Ignore errors if the file doesn't exist.
pass
@@ -214,7 +214,7 @@ def CreateWrapper(target_list, target_dicts, data, params):
if IsValidTargetForWrapper(target_extras, executable_target_pattern, spec):
# Add to new_target_list.
target_name = spec.get("target_name")
- new_target_name = "%s:%s#target" % (main_gyp, target_name)
+ new_target_name = f"{main_gyp}:{target_name}#target"
new_target_list.append(new_target_name)
# Add to new_target_dicts.
@@ -282,7 +282,7 @@ def CreateWrapper(target_list, target_dicts, data, params):
# Put sources_to_index in it's own gyp.
sources_gyp = os.path.join(os.path.dirname(main_gyp), sources_target_name + ".gyp")
- fully_qualified_target_name = "%s:%s#target" % (sources_gyp, sources_target_name)
+ fully_qualified_target_name = f"{sources_gyp}:{sources_target_name}#target"
# Add to new_target_list, new_target_dicts and new_data.
new_target_list.append(fully_qualified_target_name)
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/xcodeproj_file.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/xcodeproj_file.py
index d90dd99dccecf9..076eea37211179 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/xcodeproj_file.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/xcodeproj_file.py
@@ -138,19 +138,17 @@
"""
import gyp.common
+from functools import cmp_to_key
import hashlib
+from operator import attrgetter
import posixpath
import re
import struct
import sys
-try:
- basestring, cmp, unicode
-except NameError: # Python 3
- basestring = unicode = str
- def cmp(x, y):
- return (x > y) - (x < y)
+def cmp(x, y):
+ return (x > y) - (x < y)
# See XCObject._EncodeString. This pattern is used to determine when a string
@@ -199,7 +197,7 @@ def ConvertVariablesToShellSyntax(input_string):
return re.sub(r"\$\((.*?)\)", "${\\1}", input_string)
-class XCObject(object):
+class XCObject:
"""The abstract base of all class types used in Xcode project files.
Class variables:
@@ -301,8 +299,8 @@ def __repr__(self):
try:
name = self.Name()
except NotImplementedError:
- return "<%s at 0x%x>" % (self.__class__.__name__, id(self))
- return "<%s %r at 0x%x>" % (self.__class__.__name__, name, id(self))
+ return f"<{self.__class__.__name__} at 0x{id(self):x}>"
+ return f"<{self.__class__.__name__} {name!r} at 0x{id(self):x}>"
def Copy(self):
"""Make a copy of this object.
@@ -325,7 +323,7 @@ def Copy(self):
that._properties[key] = new_value
else:
that._properties[key] = value
- elif isinstance(value, (basestring, int)):
+ elif isinstance(value, (str, int)):
that._properties[key] = value
elif isinstance(value, list):
if is_strong:
@@ -427,6 +425,8 @@ def _HashUpdate(hash, data):
"""
hash.update(struct.pack(">i", len(data)))
+ if isinstance(data, str):
+ data = data.encode("utf-8")
hash.update(data)
if seed_hash is None:
@@ -616,7 +616,7 @@ def _XCPrintableValue(self, tabs, value, flatten_list=False):
comment = value.Comment()
elif isinstance(value, str):
printable += self._EncodeString(value)
- elif isinstance(value, basestring):
+ elif isinstance(value, str):
printable += self._EncodeString(value.encode("utf-8"))
elif isinstance(value, int):
printable += str(value)
@@ -791,7 +791,7 @@ def UpdateProperties(self, properties, do_copy=False):
)
for item in value:
if not isinstance(item, property_type) and not (
- isinstance(item, basestring) and property_type == str
+ isinstance(item, str) and property_type == str
):
# Accept unicode where str is specified. str is treated as
# UTF-8-encoded.
@@ -806,7 +806,7 @@ def UpdateProperties(self, properties, do_copy=False):
+ item.__class__.__name__
)
elif not isinstance(value, property_type) and not (
- isinstance(value, basestring) and property_type == str
+ isinstance(value, str) and property_type == str
):
# Accept unicode where str is specified. str is treated as
# UTF-8-encoded.
@@ -827,7 +827,7 @@ def UpdateProperties(self, properties, do_copy=False):
self._properties[property] = value.Copy()
else:
self._properties[property] = value
- elif isinstance(value, (basestring, int)):
+ elif isinstance(value, (str, int)):
self._properties[property] = value
elif isinstance(value, list):
if is_strong:
@@ -1487,7 +1487,7 @@ def TakeOverOnlyChild(self, recurse=False):
def SortGroup(self):
self._properties["children"] = sorted(
- self._properties["children"], cmp=lambda x, y: x.Compare(y)
+ self._properties["children"], key=cmp_to_key(lambda x, y: x.Compare(y))
)
# Recurse.
@@ -2185,7 +2185,7 @@ def SetDestination(self, path):
relative_path = path[1:]
else:
raise ValueError(
- "Can't use path %s in a %s" % (path, self.__class__.__name__)
+ f"Can't use path {path} in a {self.__class__.__name__}"
)
self._properties["dstPath"] = relative_path
@@ -2250,8 +2250,8 @@ class PBXContainerItemProxy(XCObject):
def __repr__(self):
props = self._properties
- name = "%s.gyp:%s" % (props["containerPortal"].Name(), props["remoteInfo"])
- return "<%s %r at 0x%x>" % (self.__class__.__name__, name, id(self))
+ name = "{}.gyp:{}".format(props["containerPortal"].Name(), props["remoteInfo"])
+ return f"<{self.__class__.__name__} {name!r} at 0x{id(self):x}>"
def Name(self):
# Admittedly not the best name, but it's what Xcode uses.
@@ -2288,7 +2288,7 @@ class PBXTargetDependency(XCObject):
def __repr__(self):
name = self._properties.get("name") or self._properties["target"].Name()
- return "<%s %r at 0x%x>" % (self.__class__.__name__, name, id(self))
+ return f"<{self.__class__.__name__} {name!r} at 0x{id(self):x}>"
def Name(self):
# Admittedly not the best name, but it's what Xcode uses.
@@ -2895,7 +2895,7 @@ def SortGroups(self):
# according to their defined order.
self._properties["mainGroup"]._properties["children"] = sorted(
self._properties["mainGroup"]._properties["children"],
- cmp=lambda x, y: x.CompareRootGroup(y),
+ key=cmp_to_key(lambda x, y: x.CompareRootGroup(y)),
)
# Sort everything else by putting group before files, and going
@@ -2990,9 +2990,7 @@ def AddOrGetProjectReference(self, other_pbxproject):
# Xcode seems to sort this list case-insensitively
self._properties["projectReferences"] = sorted(
self._properties["projectReferences"],
- cmp=lambda x, y: cmp(
- x["ProjectRef"].Name().lower(), y["ProjectRef"].Name().lower()
- ),
+ key=lambda x: x["ProjectRef"].Name().lower
)
else:
# The link already exists. Pull out the relevnt data.
@@ -3124,7 +3122,8 @@ def CompareProducts(x, y, remote_products):
product_group = ref_dict["ProductGroup"]
product_group._properties["children"] = sorted(
product_group._properties["children"],
- cmp=lambda x, y, rp=remote_products: CompareProducts(x, y, rp),
+ key=cmp_to_key(
+ lambda x, y, rp=remote_products: CompareProducts(x, y, rp)),
)
@@ -3159,7 +3158,7 @@ def Print(self, file=sys.stdout):
else:
self._XCPrint(file, 0, "{\n")
for property, value in sorted(
- self._properties.items(), cmp=lambda x, y: cmp(x, y)
+ self._properties.items()
):
if property == "objects":
self._PrintObjects(file)
@@ -3187,7 +3186,7 @@ def _PrintObjects(self, file):
self._XCPrint(file, 0, "\n")
self._XCPrint(file, 0, "/* Begin " + class_name + " section */\n")
for object in sorted(
- objects_by_class[class_name], cmp=lambda x, y: cmp(x.id, y.id)
+ objects_by_class[class_name], key=attrgetter("id")
):
object.Print(file)
self._XCPrint(file, 0, "/* End " + class_name + " section */\n")
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/xml_fix.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/xml_fix.py
index 0a945322b4587a..530196366946d8 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/xml_fix.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/xml_fix.py
@@ -39,12 +39,12 @@ def _Replacement_writexml(self, writer, indent="", addindent="", newl=""):
writer.write(">%s" % newl)
for node in self.childNodes:
node.writexml(writer, indent + addindent, addindent, newl)
- writer.write("%s%s>%s" % (indent, self.tagName, newl))
+ writer.write(f"{indent}{self.tagName}>{newl}")
else:
writer.write("/>%s" % newl)
-class XmlFix(object):
+class XmlFix:
"""Object to manage temporary patching of xml.dom.minidom."""
def __init__(self):
diff --git a/deps/npm/node_modules/node-gyp/gyp/setup.py b/deps/npm/node_modules/node-gyp/gyp/setup.py
index d1869c1b52055f..0ce46123cc6c10 100644
--- a/deps/npm/node_modules/node-gyp/gyp/setup.py
+++ b/deps/npm/node_modules/node-gyp/gyp/setup.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
# Copyright (c) 2009 Google Inc. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
@@ -15,7 +15,7 @@
setup(
name="gyp-next",
- version="0.6.2",
+ version="0.9.6",
description="A fork of the GYP build system for use in the Node.js projects",
long_description=long_description,
long_description_content_type="text/markdown",
@@ -25,7 +25,7 @@
package_dir={"": "pylib"},
packages=["gyp", "gyp.generator"],
entry_points={"console_scripts": ["gyp=gyp:script_main"]},
- python_requires=">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*",
+ python_requires=">=3.6",
classifiers=[
"Development Status :: 3 - Alpha",
"Environment :: Console",
@@ -33,12 +33,10 @@
"License :: OSI Approved :: BSD License",
"Natural Language :: English",
"Programming Language :: Python",
- "Programming Language :: Python :: 2",
- "Programming Language :: Python :: 2.7",
"Programming Language :: Python :: 3",
- "Programming Language :: Python :: 3.5",
"Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8",
+ "Programming Language :: Python :: 3.9",
],
)
diff --git a/deps/npm/node_modules/node-gyp/gyp/test_gyp.py b/deps/npm/node_modules/node-gyp/gyp/test_gyp.py
index 382e75272d8b6b..9ba264170f43ab 100755
--- a/deps/npm/node_modules/node-gyp/gyp/test_gyp.py
+++ b/deps/npm/node_modules/node-gyp/gyp/test_gyp.py
@@ -1,11 +1,10 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
# Copyright (c) 2012 Google Inc. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""gyptest.py -- test runner for GYP tests."""
-from __future__ import print_function
import argparse
import os
@@ -141,10 +140,7 @@ def main(argv=None):
if not args.quiet:
runner.print_results()
- if runner.failures:
- return 1
- else:
- return 0
+ return 1 if runner.failures else 0
def print_configuration_info():
@@ -153,8 +149,8 @@ def print_configuration_info():
sys.path.append(os.path.abspath("test/lib"))
import TestMac
- print(" Mac %s %s" % (platform.mac_ver()[0], platform.mac_ver()[2]))
- print(" Xcode %s" % TestMac.Xcode.Version())
+ print(f" Mac {platform.mac_ver()[0]} {platform.mac_ver()[2]}")
+ print(f" Xcode {TestMac.Xcode.Version()}")
elif sys.platform == "win32":
sys.path.append(os.path.abspath("pylib"))
import gyp.MSVSVersion
@@ -163,12 +159,12 @@ def print_configuration_info():
print(" MSVS %s" % gyp.MSVSVersion.SelectVisualStudioVersion().Description())
elif sys.platform in ("linux", "linux2"):
print(" Linux %s" % " ".join(platform.linux_distribution()))
- print(" Python %s" % platform.python_version())
- print(" PYTHONPATH=%s" % os.environ["PYTHONPATH"])
+ print(f" Python {platform.python_version()}")
+ print(f" PYTHONPATH={os.environ['PYTHONPATH']}")
print()
-class Runner(object):
+class Runner:
def __init__(self, formats, tests, gyp_options, verbose):
self.formats = formats
self.tests = tests
@@ -217,19 +213,15 @@ def run_test(self, test, fmt, i):
res = "skipped"
elif proc.returncode:
res = "failed"
- self.failures.append("(%s) %s" % (test, fmt))
+ self.failures.append(f"({test}) {fmt}")
else:
res = "passed"
- res_msg = " %s %.3fs" % (res, took)
+ res_msg = f" {res} {took:.3f}s"
self.print_(res_msg)
- if (
- stdout
- and not stdout.endswith("PASSED\n")
- and not (stdout.endswith("NO RESULT\n"))
- ):
+ if stdout and not stdout.endswith(("PASSED\n", "NO RESULT\n")):
print()
- print("\n".join(" %s" % line for line in stdout.splitlines()))
+ print("\n".join(f" {line}" for line in stdout.splitlines()))
elif not self.isatty:
print()
diff --git a/deps/npm/node_modules/node-gyp/gyp/tools/README b/deps/npm/node_modules/node-gyp/gyp/tools/README
index 712e4efbb7a062..84a73d15214b68 100644
--- a/deps/npm/node_modules/node-gyp/gyp/tools/README
+++ b/deps/npm/node_modules/node-gyp/gyp/tools/README
@@ -5,7 +5,7 @@ pretty_vcproj:
For example, if I want to diff the base.vcproj project:
- pretty_vcproj.py z:\dev\src-chrome\src\base\build\base.vcproj "$(SolutionDir)=z:\dev\src-chrome\src\chrome\\" "$(CHROMIUM_BUILD)=" "$(CHROME_BUILD_TYPE)=" > orignal.txt
+ pretty_vcproj.py z:\dev\src-chrome\src\base\build\base.vcproj "$(SolutionDir)=z:\dev\src-chrome\src\chrome\\" "$(CHROMIUM_BUILD)=" "$(CHROME_BUILD_TYPE)=" > original.txt
pretty_vcproj.py z:\dev\src-chrome\src\base\base_gyp.vcproj "$(SolutionDir)=z:\dev\src-chrome\src\chrome\\" "$(CHROMIUM_BUILD)=" "$(CHROME_BUILD_TYPE)=" > gyp.txt
And you can use your favorite diff tool to see the changes.
diff --git a/deps/npm/node_modules/node-gyp/gyp/tools/emacs/gyp-tests.el b/deps/npm/node_modules/node-gyp/gyp/tools/emacs/gyp-tests.el
index 11b84978860224..07afc58a93b110 100644
--- a/deps/npm/node_modules/node-gyp/gyp/tools/emacs/gyp-tests.el
+++ b/deps/npm/node_modules/node-gyp/gyp/tools/emacs/gyp-tests.el
@@ -30,7 +30,7 @@
"For the purposes of face comparison, we're not interested in the
differences between certain faces. For example, the difference between
font-lock-comment-delimiter and font-lock-comment-face."
- (case face
+ (cl-case face
((font-lock-comment-delimiter-face) font-lock-comment-face)
(t face)))
diff --git a/deps/npm/node_modules/node-gyp/gyp/tools/emacs/gyp.el b/deps/npm/node_modules/node-gyp/gyp/tools/emacs/gyp.el
index b98b155cedad03..042ff3a925cf0d 100644
--- a/deps/npm/node_modules/node-gyp/gyp/tools/emacs/gyp.el
+++ b/deps/npm/node_modules/node-gyp/gyp/tools/emacs/gyp.el
@@ -213,7 +213,7 @@
string-start)
(setq string-start (gyp-parse-to limit))
(if string-start
- (setq group (case (gyp-section-at-point)
+ (setq group (cl-case (gyp-section-at-point)
('dependencies 1)
('variables 2)
('conditions 2)
diff --git a/deps/npm/node_modules/node-gyp/gyp/tools/graphviz.py b/deps/npm/node_modules/node-gyp/gyp/tools/graphviz.py
index 1f3acf37fccd8a..f19426b69faa6d 100755
--- a/deps/npm/node_modules/node-gyp/gyp/tools/graphviz.py
+++ b/deps/npm/node_modules/node-gyp/gyp/tools/graphviz.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
# Copyright (c) 2011 Google Inc. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
@@ -8,7 +8,6 @@
generate input suitable for graphviz to render a dependency graph of
targets."""
-from __future__ import print_function
import collections
import json
@@ -66,7 +65,7 @@ def WriteGraph(edges):
target = targets[0]
build_file, target_name, toolset = ParseTarget(target)
print(
- ' "%s" [shape=box, label="%s\\n%s"]' % (target, filename, target_name)
+ f' "{target}" [shape=box, label="{filename}\\n{target_name}"]'
)
else:
# Group multiple nodes together in a subgraph.
@@ -74,14 +73,14 @@ def WriteGraph(edges):
print(' label = "%s"' % filename)
for target in targets:
build_file, target_name, toolset = ParseTarget(target)
- print(' "%s" [label="%s"]' % (target, target_name))
+ print(f' "{target}" [label="{target_name}"]')
print(" }")
# Now that we've placed all the nodes within subgraphs, output all
# the edges between nodes.
for src, dsts in edges.items():
for dst in dsts:
- print(' "%s" -> "%s"' % (src, dst))
+ print(f' "{src}" -> "{dst}"')
print("}")
diff --git a/deps/npm/node_modules/node-gyp/gyp/tools/pretty_gyp.py b/deps/npm/node_modules/node-gyp/gyp/tools/pretty_gyp.py
index 7313b4fe1b6710..4ffa44455181c3 100755
--- a/deps/npm/node_modules/node-gyp/gyp/tools/pretty_gyp.py
+++ b/deps/npm/node_modules/node-gyp/gyp/tools/pretty_gyp.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
# Copyright (c) 2012 Google Inc. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
@@ -6,7 +6,6 @@
"""Pretty-prints the contents of a GYP file."""
-from __future__ import print_function
import sys
import re
@@ -34,7 +33,7 @@ def mask_comments(input):
def quote_replace(matchobj):
- return "%s%s%s%s" % (
+ return "{}{}{}{}".format(
matchobj.group(1),
matchobj.group(2),
"x" * len(matchobj.group(3)),
diff --git a/deps/npm/node_modules/node-gyp/gyp/tools/pretty_sln.py b/deps/npm/node_modules/node-gyp/gyp/tools/pretty_sln.py
index 2b1cb1de747577..6ca0cd12a7ba06 100755
--- a/deps/npm/node_modules/node-gyp/gyp/tools/pretty_sln.py
+++ b/deps/npm/node_modules/node-gyp/gyp/tools/pretty_sln.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
# Copyright (c) 2012 Google Inc. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
@@ -12,7 +12,6 @@
Then it outputs a possible build order.
"""
-from __future__ import print_function
import os
import re
diff --git a/deps/npm/node_modules/node-gyp/gyp/tools/pretty_vcproj.py b/deps/npm/node_modules/node-gyp/gyp/tools/pretty_vcproj.py
index b171fae6cf4442..00d32debda51f0 100755
--- a/deps/npm/node_modules/node-gyp/gyp/tools/pretty_vcproj.py
+++ b/deps/npm/node_modules/node-gyp/gyp/tools/pretty_vcproj.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
# Copyright (c) 2012 Google Inc. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
@@ -12,7 +12,6 @@
It outputs the resulting xml to stdout.
"""
-from __future__ import print_function
import os
import sys
@@ -21,27 +20,22 @@
from xml.dom.minidom import Node
__author__ = "nsylvain (Nicolas Sylvain)"
-
-try:
- cmp
-except NameError:
-
- def cmp(x, y):
- return (x > y) - (x < y)
+ARGUMENTS = None
+REPLACEMENTS = dict()
-REPLACEMENTS = dict()
-ARGUMENTS = None
+def cmp(x, y):
+ return (x > y) - (x < y)
-class CmpTuple(object):
+class CmpTuple:
"""Compare function between 2 tuple."""
def __call__(self, x, y):
return cmp(x[0], y[0])
-class CmpNode(object):
+class CmpNode:
"""Compare function between 2 xml nodes."""
def __call__(self, x, y):
@@ -72,7 +66,7 @@ def get_string(node):
def PrettyPrintNode(node, indent=0):
if node.nodeType == Node.TEXT_NODE:
if node.data.strip():
- print("%s%s" % (" " * indent, node.data.strip()))
+ print("{}{}".format(" " * indent, node.data.strip()))
return
if node.childNodes:
@@ -84,23 +78,23 @@ def PrettyPrintNode(node, indent=0):
# Print the main tag
if attr_count == 0:
- print("%s<%s>" % (" " * indent, node.nodeName))
+ print("{}<{}>".format(" " * indent, node.nodeName))
else:
- print("%s<%s" % (" " * indent, node.nodeName))
+ print("{}<{}".format(" " * indent, node.nodeName))
all_attributes = []
for (name, value) in node.attributes.items():
all_attributes.append((name, value))
all_attributes.sort(CmpTuple())
for (name, value) in all_attributes:
- print('%s %s="%s"' % (" " * indent, name, value))
+ print('{} {}="{}"'.format(" " * indent, name, value))
print("%s>" % (" " * indent))
if node.nodeValue:
- print("%s %s" % (" " * indent, node.nodeValue))
+ print("{} {}".format(" " * indent, node.nodeValue))
for sub_node in node.childNodes:
PrettyPrintNode(sub_node, indent=indent + 2)
- print("%s%s>" % (" " * indent, node.nodeName))
+ print("{}{}>".format(" " * indent, node.nodeName))
def FlattenFilter(node):
diff --git a/deps/npm/node_modules/node-gyp/lib/configure.js b/deps/npm/node_modules/node-gyp/lib/configure.js
index d4342b9d76a60d..038ccbf20f15bf 100644
--- a/deps/npm/node_modules/node-gyp/lib/configure.js
+++ b/deps/npm/node_modules/node-gyp/lib/configure.js
@@ -76,7 +76,9 @@ function configure (gyp, argv, callback) {
if (err) {
return callback(err)
}
- log.verbose('build dir', '"build" dir needed to be created?', isNew)
+ log.verbose(
+ 'build dir', '"build" dir needed to be created?', isNew ? 'Yes' : 'No'
+ )
if (win) {
findVisualStudio(release.semver, gyp.opts.msvs_version,
createConfigFile)
@@ -96,7 +98,7 @@ function configure (gyp, argv, callback) {
log.verbose('build/' + configFilename, 'creating config file')
- var config = process.config || {}
+ var config = process.config ? JSON.parse(JSON.stringify(process.config)) : {}
var defaults = config.target_defaults
var variables = config.variables
diff --git a/deps/npm/node_modules/node-gyp/lib/find-python.js b/deps/npm/node_modules/node-gyp/lib/find-python.js
index af269de2fc6ca3..a445e825b9d7e3 100644
--- a/deps/npm/node_modules/node-gyp/lib/find-python.js
+++ b/deps/npm/node_modules/node-gyp/lib/find-python.js
@@ -1,6 +1,5 @@
'use strict'
-const path = require('path')
const log = require('npmlog')
const semver = require('semver')
const cp = require('child_process')
@@ -8,6 +7,38 @@ const extend = require('util')._extend // eslint-disable-line
const win = process.platform === 'win32'
const logWithPrefix = require('./util').logWithPrefix
+const systemDrive = process.env.SystemDrive || 'C:'
+const username = process.env.USERNAME || process.env.USER || getOsUserInfo()
+const localAppData = process.env.LOCALAPPDATA || `${systemDrive}\\${username}\\AppData\\Local`
+const foundLocalAppData = process.env.LOCALAPPDATA || username
+const programFiles = process.env.ProgramW6432 || process.env.ProgramFiles || `${systemDrive}\\Program Files`
+const programFilesX86 = process.env['ProgramFiles(x86)'] || `${programFiles} (x86)`
+
+const winDefaultLocationsArray = []
+for (const majorMinor of ['39', '38', '37', '36']) {
+ if (foundLocalAppData) {
+ winDefaultLocationsArray.push(
+ `${localAppData}\\Programs\\Python\\Python${majorMinor}\\python.exe`,
+ `${programFiles}\\Python${majorMinor}\\python.exe`,
+ `${localAppData}\\Programs\\Python\\Python${majorMinor}-32\\python.exe`,
+ `${programFiles}\\Python${majorMinor}-32\\python.exe`,
+ `${programFilesX86}\\Python${majorMinor}-32\\python.exe`
+ )
+ } else {
+ winDefaultLocationsArray.push(
+ `${programFiles}\\Python${majorMinor}\\python.exe`,
+ `${programFiles}\\Python${majorMinor}-32\\python.exe`,
+ `${programFilesX86}\\Python${majorMinor}-32\\python.exe`
+ )
+ }
+}
+
+function getOsUserInfo () {
+ try {
+ return require('os').userInfo().username
+ } catch (e) {}
+}
+
function PythonFinder (configPython, callback) {
this.callback = callback
this.configPython = configPython
@@ -18,17 +49,14 @@ PythonFinder.prototype = {
log: logWithPrefix(log, 'find Python'),
argsExecutable: ['-c', 'import sys; print(sys.executable);'],
argsVersion: ['-c', 'import sys; print("%s.%s.%s" % sys.version_info[:3]);'],
- semverRange: '2.7.x || >=3.5.0',
+ semverRange: '>=3.6.0',
// These can be overridden for testing:
execFile: cp.execFile,
env: process.env,
win: win,
pyLauncher: 'py.exe',
- winDefaultLocations: [
- path.join(process.env.SystemDrive || 'C:', 'Python37', 'python.exe'),
- path.join(process.env.SystemDrive || 'C:', 'Python27', 'python.exe')
- ],
+ winDefaultLocations: winDefaultLocationsArray,
// Logs a message at verbose level, but also saves it to be displayed later
// at error level if an error occurs. This should help diagnose the problem.
@@ -96,11 +124,6 @@ PythonFinder.prototype = {
before: () => { this.addLog('checking if "python" can be used') },
check: this.checkCommand,
arg: 'python'
- },
- {
- before: () => { this.addLog('checking if "python2" can be used') },
- check: this.checkCommand,
- arg: 'python2'
}
]
@@ -119,7 +142,7 @@ PythonFinder.prototype = {
checks.push({
before: () => {
this.addLog(
- 'checking if the py launcher can be used to find Python')
+ 'checking if the py launcher can be used to find Python 3')
},
check: this.checkPyLauncher
})
@@ -188,10 +211,15 @@ PythonFinder.prototype = {
// Distributions of Python on Windows by default install with the "py.exe"
// Python launcher which is more likely to exist than the Python executable
// being in the $PATH.
+ // Because the Python launcher supports Python 2 and Python 3, we should
+ // explicitly request a Python 3 version. This is done by supplying "-3" as
+ // the first command line argument. Since "py.exe -3" would be an invalid
+ // executable for "execFile", we have to use the launcher to figure out
+ // where the actual "python.exe" executable is located.
checkPyLauncher: function checkPyLauncher (errorCallback) {
this.log.verbose(
- `- executing "${this.pyLauncher}" to get Python executable path`)
- this.run(this.pyLauncher, this.argsExecutable, false,
+ `- executing "${this.pyLauncher}" to get Python 3 executable path`)
+ this.run(this.pyLauncher, ['-3', ...this.argsExecutable], false,
function (err, execPath) {
// Possible outcomes: same as checkCommand
if (err) {
diff --git a/deps/npm/node_modules/node-gyp/lib/find-visualstudio.js b/deps/npm/node_modules/node-gyp/lib/find-visualstudio.js
index 9c6dad90f8ad97..f2cce327e7cd32 100644
--- a/deps/npm/node_modules/node-gyp/lib/find-visualstudio.js
+++ b/deps/npm/node_modules/node-gyp/lib/find-visualstudio.js
@@ -399,7 +399,7 @@ VisualStudioFinder.prototype = {
})
},
- // After finding a usable version of Visual Stuido:
+ // After finding a usable version of Visual Studio:
// - add it to validVersions to be displayed at the end if a specific
// version was requested and not found;
// - check if this is the version that was requested.
diff --git a/deps/npm/node_modules/node-gyp/lib/install.js b/deps/npm/node_modules/node-gyp/lib/install.js
index f9fa2b34bd30cb..99f6d8592a3fd4 100644
--- a/deps/npm/node_modules/node-gyp/lib/install.js
+++ b/deps/npm/node_modules/node-gyp/lib/install.js
@@ -4,55 +4,42 @@ const fs = require('graceful-fs')
const os = require('os')
const tar = require('tar')
const path = require('path')
+const util = require('util')
+const stream = require('stream')
const crypto = require('crypto')
const log = require('npmlog')
const semver = require('semver')
-const request = require('request')
+const fetch = require('make-fetch-happen')
const processRelease = require('./process-release')
const win = process.platform === 'win32'
-const getProxyFromURI = require('./proxy')
+const streamPipeline = util.promisify(stream.pipeline)
-function install (fs, gyp, argv, callback) {
- var release = processRelease(argv, gyp, process.version, process.release)
+/**
+ * @param {typeof import('graceful-fs')} fs
+ */
- // ensure no double-callbacks happen
- function cb (err) {
- if (cb.done) {
- return
- }
- cb.done = true
- if (err) {
- log.warn('install', 'got an error, rolling back install')
- // roll-back the install if anything went wrong
- gyp.commands.remove([release.versionDir], function () {
- callback(err)
- })
- } else {
- callback(null, release.version)
- }
- }
+async function install (fs, gyp, argv) {
+ const release = processRelease(argv, gyp, process.version, process.release)
// Determine which node dev files version we are installing
log.verbose('install', 'input version string %j', release.version)
if (!release.semver) {
// could not parse the version string with semver
- return callback(new Error('Invalid version number: ' + release.version))
+ throw new Error('Invalid version number: ' + release.version)
}
if (semver.lt(release.version, '0.8.0')) {
- return callback(new Error('Minimum target version is `0.8.0` or greater. Got: ' + release.version))
+ throw new Error('Minimum target version is `0.8.0` or greater. Got: ' + release.version)
}
// 0.x.y-pre versions are not published yet and cannot be installed. Bail.
if (release.semver.prerelease[0] === 'pre') {
log.verbose('detected "pre" node version', release.version)
- if (gyp.opts.nodedir) {
- log.verbose('--nodedir flag was passed; skipping install', gyp.opts.nodedir)
- callback()
- } else {
- callback(new Error('"pre" versions of node cannot be installed, use the --nodedir flag instead'))
+ if (!gyp.opts.nodedir) {
+ throw new Error('"pre" versions of node cannot be installed, use the --nodedir flag instead')
}
+ log.verbose('--nodedir flag was passed; skipping install', gyp.opts.nodedir)
return
}
@@ -60,296 +47,225 @@ function install (fs, gyp, argv, callback) {
log.verbose('install', 'installing version: %s', release.versionDir)
// the directory where the dev files will be installed
- var devDir = path.resolve(gyp.devDir, release.versionDir)
+ const devDir = path.resolve(gyp.devDir, release.versionDir)
// If '--ensure' was passed, then don't *always* install the version;
// check if it is already installed, and only install when needed
if (gyp.opts.ensure) {
log.verbose('install', '--ensure was passed, so won\'t reinstall if already installed')
- fs.stat(devDir, function (err) {
- if (err) {
- if (err.code === 'ENOENT') {
- log.verbose('install', 'version not already installed, continuing with install', release.version)
- go()
- } else if (err.code === 'EACCES') {
- eaccesFallback(err)
- } else {
- cb(err)
+ try {
+ await fs.promises.stat(devDir)
+ } catch (err) {
+ if (err.code === 'ENOENT') {
+ log.verbose('install', 'version not already installed, continuing with install', release.version)
+ try {
+ return await go()
+ } catch (err) {
+ return rollback(err)
}
- return
+ } else if (err.code === 'EACCES') {
+ return eaccesFallback(err)
}
- log.verbose('install', 'version is already installed, need to check "installVersion"')
- var installVersionFile = path.resolve(devDir, 'installVersion')
- fs.readFile(installVersionFile, 'ascii', function (err, ver) {
- if (err && err.code !== 'ENOENT') {
- return cb(err)
- }
- var installVersion = parseInt(ver, 10) || 0
- log.verbose('got "installVersion"', installVersion)
- log.verbose('needs "installVersion"', gyp.package.installVersion)
- if (installVersion < gyp.package.installVersion) {
- log.verbose('install', 'version is no good; reinstalling')
- go()
- } else {
- log.verbose('install', 'version is good')
- cb()
- }
- })
- })
+ throw err
+ }
+ log.verbose('install', 'version is already installed, need to check "installVersion"')
+ const installVersionFile = path.resolve(devDir, 'installVersion')
+ let installVersion = 0
+ try {
+ const ver = await fs.promises.readFile(installVersionFile, 'ascii')
+ installVersion = parseInt(ver, 10) || 0
+ } catch (err) {
+ if (err.code !== 'ENOENT') {
+ throw err
+ }
+ }
+ log.verbose('got "installVersion"', installVersion)
+ log.verbose('needs "installVersion"', gyp.package.installVersion)
+ if (installVersion < gyp.package.installVersion) {
+ log.verbose('install', 'version is no good; reinstalling')
+ try {
+ return await go()
+ } catch (err) {
+ return rollback(err)
+ }
+ }
+ log.verbose('install', 'version is good')
} else {
- go()
- }
-
- function getContentSha (res, callback) {
- var shasum = crypto.createHash('sha256')
- res.on('data', function (chunk) {
- shasum.update(chunk)
- }).on('end', function () {
- callback(null, shasum.digest('hex'))
- })
+ try {
+ return await go()
+ } catch (err) {
+ return rollback(err)
+ }
}
- function go () {
+ async function go () {
log.verbose('ensuring nodedir is created', devDir)
// first create the dir for the node dev files
- fs.mkdir(devDir, { recursive: true }, function (err, created) {
- if (err) {
- if (err.code === 'EACCES') {
- eaccesFallback(err)
- } else {
- cb(err)
- }
- return
- }
+ try {
+ const created = await fs.promises.mkdir(devDir, { recursive: true })
if (created) {
log.verbose('created nodedir', created)
}
-
- // now download the node tarball
- var tarPath = gyp.opts.tarball
- var badDownload = false
- var extractCount = 0
- var contentShasums = {}
- var expectShasums = {}
-
- // checks if a file to be extracted from the tarball is valid.
- // only .h header files and the gyp files get extracted
- function isValid (path) {
- var isValid = valid(path)
- if (isValid) {
- log.verbose('extracted file from tarball', path)
- extractCount++
- } else {
- // invalid
- log.silly('ignoring from tarball', path)
- }
- return isValid
+ } catch (err) {
+ if (err.code === 'EACCES') {
+ return eaccesFallback(err)
}
- // download the tarball and extract!
- if (tarPath) {
- return tar.extract({
- file: tarPath,
- strip: 1,
- filter: isValid,
- cwd: devDir
- }).then(afterTarball, cb)
- }
+ throw err
+ }
- try {
- var req = download(gyp, process.env, release.tarballUrl)
- } catch (e) {
- return cb(e)
+ // now download the node tarball
+ const tarPath = gyp.opts.tarball
+ let extractCount = 0
+ const contentShasums = {}
+ const expectShasums = {}
+
+ // checks if a file to be extracted from the tarball is valid.
+ // only .h header files and the gyp files get extracted
+ function isValid (path) {
+ const isValid = valid(path)
+ if (isValid) {
+ log.verbose('extracted file from tarball', path)
+ extractCount++
+ } else {
+ // invalid
+ log.silly('ignoring from tarball', path)
}
+ return isValid
+ }
- // something went wrong downloading the tarball?
- req.on('error', function (err) {
- if (err.code === 'ENOTFOUND') {
- return cb(new Error('This is most likely not a problem with node-gyp or the package itself and\n' +
- 'is related to network connectivity. In most cases you are behind a proxy or have bad \n' +
- 'network settings.'))
- }
- badDownload = true
- cb(err)
- })
+ // download the tarball and extract!
- req.on('close', function () {
- if (extractCount === 0) {
- cb(new Error('Connection closed while downloading tarball file'))
- }
+ if (tarPath) {
+ await tar.extract({
+ file: tarPath,
+ strip: 1,
+ filter: isValid,
+ cwd: devDir
})
+ } else {
+ try {
+ const res = await download(gyp, release.tarballUrl)
- req.on('response', function (res) {
- if (res.statusCode !== 200) {
- badDownload = true
- cb(new Error(res.statusCode + ' response downloading ' + release.tarballUrl))
- return
+ if (res.status !== 200) {
+ throw new Error(`${res.status} response downloading ${release.tarballUrl}`)
}
- // content checksum
- getContentSha(res, function (_, checksum) {
- var filename = path.basename(release.tarballUrl).trim()
- contentShasums[filename] = checksum
- log.verbose('content checksum', filename, checksum)
- })
-
- // start unzipping and untaring
- res.pipe(tar.extract({
- strip: 1,
- cwd: devDir,
- filter: isValid
- }).on('close', afterTarball).on('error', cb))
- })
- // invoked after the tarball has finished being extracted
- function afterTarball () {
- if (badDownload) {
- return
- }
- if (extractCount === 0) {
- return cb(new Error('There was a fatal problem while downloading/extracting the tarball'))
+ await streamPipeline(
+ res.body,
+ // content checksum
+ new ShaSum((_, checksum) => {
+ const filename = path.basename(release.tarballUrl).trim()
+ contentShasums[filename] = checksum
+ log.verbose('content checksum', filename, checksum)
+ }),
+ tar.extract({
+ strip: 1,
+ cwd: devDir,
+ filter: isValid
+ })
+ )
+ } catch (err) {
+ // something went wrong downloading the tarball?
+ if (err.code === 'ENOTFOUND') {
+ throw new Error('This is most likely not a problem with node-gyp or the package itself and\n' +
+ 'is related to network connectivity. In most cases you are behind a proxy or have bad \n' +
+ 'network settings.')
}
- log.verbose('tarball', 'done parsing tarball')
- var async = 0
+ throw err
+ }
+ }
- if (win) {
- // need to download node.lib
- async++
- downloadNodeLib(deref)
- }
+ // invoked after the tarball has finished being extracted
+ if (extractCount === 0) {
+ throw new Error('There was a fatal problem while downloading/extracting the tarball')
+ }
- // write the "installVersion" file
- async++
- var installVersionPath = path.resolve(devDir, 'installVersion')
- fs.writeFile(installVersionPath, gyp.package.installVersion + '\n', deref)
+ log.verbose('tarball', 'done parsing tarball')
+
+ const installVersionPath = path.resolve(devDir, 'installVersion')
+ await Promise.all([
+ // need to download node.lib
+ ...(win ? downloadNodeLib() : []),
+ // write the "installVersion" file
+ fs.promises.writeFile(installVersionPath, gyp.package.installVersion + '\n'),
+ // Only download SHASUMS.txt if we downloaded something in need of SHA verification
+ ...(!tarPath || win ? [downloadShasums()] : [])
+ ])
+
+ log.verbose('download contents checksum', JSON.stringify(contentShasums))
+ // check content shasums
+ for (const k in contentShasums) {
+ log.verbose('validating download checksum for ' + k, '(%s == %s)', contentShasums[k], expectShasums[k])
+ if (contentShasums[k] !== expectShasums[k]) {
+ throw new Error(k + ' local checksum ' + contentShasums[k] + ' not match remote ' + expectShasums[k])
+ }
+ }
- // Only download SHASUMS.txt if we downloaded something in need of SHA verification
- if (!tarPath || win) {
- // download SHASUMS.txt
- async++
- downloadShasums(deref)
- }
+ async function downloadShasums () {
+ log.verbose('check download content checksum, need to download `SHASUMS256.txt`...')
+ log.verbose('checksum url', release.shasumsUrl)
- if (async === 0) {
- // no async tasks required
- cb()
- }
+ const res = await download(gyp, release.shasumsUrl)
- function deref (err) {
- if (err) {
- return cb(err)
- }
+ if (res.status !== 200) {
+ throw new Error(`${res.status} status code downloading checksum`)
+ }
- async--
- if (!async) {
- log.verbose('download contents checksum', JSON.stringify(contentShasums))
- // check content shasums
- for (var k in contentShasums) {
- log.verbose('validating download checksum for ' + k, '(%s == %s)', contentShasums[k], expectShasums[k])
- if (contentShasums[k] !== expectShasums[k]) {
- cb(new Error(k + ' local checksum ' + contentShasums[k] + ' not match remote ' + expectShasums[k]))
- return
- }
- }
- cb()
- }
+ for (const line of (await res.text()).trim().split('\n')) {
+ const items = line.trim().split(/\s+/)
+ if (items.length !== 2) {
+ return
}
+
+ // 0035d18e2dcf9aad669b1c7c07319e17abfe3762 ./node-v0.11.4.tar.gz
+ const name = items[1].replace(/^\.\//, '')
+ expectShasums[name] = items[0]
}
- function downloadShasums (done) {
- log.verbose('check download content checksum, need to download `SHASUMS256.txt`...')
- log.verbose('checksum url', release.shasumsUrl)
- try {
- var req = download(gyp, process.env, release.shasumsUrl)
- } catch (e) {
- return cb(e)
- }
+ log.verbose('checksum data', JSON.stringify(expectShasums))
+ }
- req.on('error', done)
- req.on('response', function (res) {
- if (res.statusCode !== 200) {
- done(new Error(res.statusCode + ' status code downloading checksum'))
- return
+ function downloadNodeLib () {
+ log.verbose('on Windows; need to download `' + release.name + '.lib`...')
+ const archs = ['ia32', 'x64', 'arm64']
+ return archs.map(async (arch) => {
+ const dir = path.resolve(devDir, arch)
+ const targetLibPath = path.resolve(dir, release.name + '.lib')
+ const { libUrl, libPath } = release[arch]
+ const name = `${arch} ${release.name}.lib`
+ log.verbose(name, 'dir', dir)
+ log.verbose(name, 'url', libUrl)
+
+ await fs.promises.mkdir(dir, { recursive: true })
+ log.verbose('streaming', name, 'to:', targetLibPath)
+
+ const res = await download(gyp, libUrl)
+
+ if (res.status === 403 || res.status === 404) {
+ if (arch === 'arm64') {
+ // Arm64 is a newer platform on Windows and not all node distributions provide it.
+ log.verbose(`${name} was not found in ${libUrl}`)
+ } else {
+ log.warn(`${name} was not found in ${libUrl}`)
}
+ return
+ } else if (res.status !== 200) {
+ throw new Error(`${res.status} status code downloading ${name}`)
+ }
- var chunks = []
- res.on('data', function (chunk) {
- chunks.push(chunk)
- })
- res.on('end', function () {
- var lines = Buffer.concat(chunks).toString().trim().split('\n')
- lines.forEach(function (line) {
- var items = line.trim().split(/\s+/)
- if (items.length !== 2) {
- return
- }
-
- // 0035d18e2dcf9aad669b1c7c07319e17abfe3762 ./node-v0.11.4.tar.gz
- var name = items[1].replace(/^\.\//, '')
- expectShasums[name] = items[0]
- })
-
- log.verbose('checksum data', JSON.stringify(expectShasums))
- done()
- })
- })
- }
-
- function downloadNodeLib (done) {
- log.verbose('on Windows; need to download `' + release.name + '.lib`...')
- var archs = ['ia32', 'x64', 'arm64']
- var async = archs.length
- archs.forEach(function (arch) {
- var dir = path.resolve(devDir, arch)
- var targetLibPath = path.resolve(dir, release.name + '.lib')
- var libUrl = release[arch].libUrl
- var libPath = release[arch].libPath
- var name = arch + ' ' + release.name + '.lib'
- log.verbose(name, 'dir', dir)
- log.verbose(name, 'url', libUrl)
-
- fs.mkdir(dir, { recursive: true }, function (err) {
- if (err) {
- return done(err)
- }
- log.verbose('streaming', name, 'to:', targetLibPath)
-
- try {
- var req = download(gyp, process.env, libUrl, cb)
- } catch (e) {
- return cb(e)
- }
-
- req.on('error', done)
- req.on('response', function (res) {
- if (res.statusCode === 403 || res.statusCode === 404) {
- if (arch === 'arm64') {
- // Arm64 is a newer platform on Windows and not all node distributions provide it.
- log.verbose(`${name} was not found in ${libUrl}`)
- } else {
- log.warn(`${name} was not found in ${libUrl}`)
- }
- return
- } else if (res.statusCode !== 200) {
- done(new Error(res.statusCode + ' status code downloading ' + name))
- return
- }
-
- getContentSha(res, function (_, checksum) {
- contentShasums[libPath] = checksum
- log.verbose('content checksum', libPath, checksum)
- })
-
- var ws = fs.createWriteStream(targetLibPath)
- ws.on('error', cb)
- req.pipe(ws)
- })
- req.on('end', function () { --async || done() })
- })
- })
- } // downloadNodeLib()
- }) // mkdir()
+ return streamPipeline(
+ res.body,
+ new ShaSum((_, checksum) => {
+ contentShasums[libPath] = checksum
+ log.verbose('content checksum', libPath, checksum)
+ }),
+ fs.createWriteStream(targetLibPath)
+ )
+ })
+ } // downloadNodeLib()
} // go()
/**
@@ -358,10 +274,17 @@ function install (fs, gyp, argv, callback) {
function valid (file) {
// header files
- var extname = path.extname(file)
+ const extname = path.extname(file)
return extname === '.h' || extname === '.gypi'
}
+ async function rollback (err) {
+ log.warn('install', 'got an error, rolling back install')
+ // roll-back the install if anything went wrong
+ await util.promisify(gyp.commands.remove)([release.versionDir])
+ throw err
+ }
+
/**
* The EACCES fallback is a workaround for npm's `sudo` behavior, where
* it drops the permissions before invoking any child processes (like
@@ -371,14 +294,14 @@ function install (fs, gyp, argv, callback) {
* the compilation will succeed...
*/
- function eaccesFallback (err) {
- var noretry = '--node_gyp_internal_noretry'
+ async function eaccesFallback (err) {
+ const noretry = '--node_gyp_internal_noretry'
if (argv.indexOf(noretry) !== -1) {
- return cb(err)
+ throw err
}
- var tmpdir = os.tmpdir()
+ const tmpdir = os.tmpdir()
gyp.devDir = path.resolve(tmpdir, '.node-gyp')
- var userString = ''
+ let userString = ''
try {
// os.userInfo can fail on some systems, it's not critical here
userString = ` ("${os.userInfo().username}")`
@@ -389,59 +312,65 @@ function install (fs, gyp, argv, callback) {
log.verbose('tmpdir == cwd', 'automatically will remove dev files after to save disk space')
gyp.todo.push({ name: 'remove', args: argv })
}
- gyp.commands.install([noretry].concat(argv), cb)
+ return util.promisify(gyp.commands.install)([noretry].concat(argv))
+ }
+}
+
+class ShaSum extends stream.Transform {
+ constructor (callback) {
+ super()
+ this._callback = callback
+ this._digester = crypto.createHash('sha256')
+ }
+
+ _transform (chunk, _, callback) {
+ this._digester.update(chunk)
+ callback(null, chunk)
+ }
+
+ _flush (callback) {
+ this._callback(null, this._digester.digest('hex'))
+ callback()
}
}
-function download (gyp, env, url) {
+async function download (gyp, url) {
log.http('GET', url)
- var requestOpts = {
- uri: url,
+ const requestOpts = {
headers: {
- 'User-Agent': 'node-gyp v' + gyp.version + ' (node ' + process.version + ')',
+ 'User-Agent': `node-gyp v${gyp.version} (node ${process.version})`,
Connection: 'keep-alive'
- }
+ },
+ proxy: gyp.opts.proxy,
+ noProxy: gyp.opts.noproxy
}
- var cafile = gyp.opts.cafile
+ const cafile = gyp.opts.cafile
if (cafile) {
- requestOpts.ca = readCAFile(cafile)
- }
-
- // basic support for a proxy server
- var proxyUrl = getProxyFromURI(gyp, env, url)
- if (proxyUrl) {
- if (/^https?:\/\//i.test(proxyUrl)) {
- log.verbose('download', 'using proxy url: "%s"', proxyUrl)
- requestOpts.proxy = proxyUrl
- } else {
- log.warn('download', 'ignoring invalid "proxy" config setting: "%s"', proxyUrl)
- }
+ requestOpts.ca = await readCAFile(cafile)
}
- var req = request(requestOpts)
- req.on('response', function (res) {
- log.http(res.statusCode, url)
- })
+ const res = await fetch(url, requestOpts)
+ log.http(res.status, res.url)
- return req
+ return res
}
-function readCAFile (filename) {
+async function readCAFile (filename) {
// The CA file can contain multiple certificates so split on certificate
// boundaries. [\S\s]*? is used to match everything including newlines.
- var ca = fs.readFileSync(filename, 'utf8')
- var re = /(-----BEGIN CERTIFICATE-----[\S\s]*?-----END CERTIFICATE-----)/g
+ const ca = await fs.promises.readFile(filename, 'utf8')
+ const re = /(-----BEGIN CERTIFICATE-----[\S\s]*?-----END CERTIFICATE-----)/g
return ca.match(re)
}
module.exports = function (gyp, argv, callback) {
- return install(fs, gyp, argv, callback)
+ install(fs, gyp, argv).then(callback.bind(undefined, null), callback)
}
module.exports.test = {
- download: download,
- install: install,
- readCAFile: readCAFile
+ download,
+ install,
+ readCAFile
}
module.exports.usage = 'Install node development files for the specified node version.'
diff --git a/deps/npm/node_modules/node-gyp/lib/proxy.js b/deps/npm/node_modules/node-gyp/lib/proxy.js
deleted file mode 100644
index 92d9ed2f7f0855..00000000000000
--- a/deps/npm/node_modules/node-gyp/lib/proxy.js
+++ /dev/null
@@ -1,92 +0,0 @@
-'use strict'
-// Taken from https://github.com/request/request/blob/212570b/lib/getProxyFromURI.js
-
-const url = require('url')
-
-function formatHostname (hostname) {
- // canonicalize the hostname, so that 'oogle.com' won't match 'google.com'
- return hostname.replace(/^\.*/, '.').toLowerCase()
-}
-
-function parseNoProxyZone (zone) {
- zone = zone.trim().toLowerCase()
-
- var zoneParts = zone.split(':', 2)
- var zoneHost = formatHostname(zoneParts[0])
- var zonePort = zoneParts[1]
- var hasPort = zone.indexOf(':') > -1
-
- return { hostname: zoneHost, port: zonePort, hasPort: hasPort }
-}
-
-function uriInNoProxy (uri, noProxy) {
- var port = uri.port || (uri.protocol === 'https:' ? '443' : '80')
- var hostname = formatHostname(uri.hostname)
- var noProxyList = noProxy.split(',')
-
- // iterate through the noProxyList until it finds a match.
- return noProxyList.map(parseNoProxyZone).some(function (noProxyZone) {
- var isMatchedAt = hostname.indexOf(noProxyZone.hostname)
- var hostnameMatched = (
- isMatchedAt > -1 &&
- (isMatchedAt === hostname.length - noProxyZone.hostname.length)
- )
-
- if (noProxyZone.hasPort) {
- return (port === noProxyZone.port) && hostnameMatched
- }
-
- return hostnameMatched
- })
-}
-
-function getProxyFromURI (gyp, env, uri) {
- // If a string URI/URL was given, parse it into a URL object
- if (typeof uri === 'string') {
- // eslint-disable-next-line
- uri = url.parse(uri)
- }
-
- // Decide the proper request proxy to use based on the request URI object and the
- // environmental variables (NO_PROXY, HTTP_PROXY, etc.)
- // respect NO_PROXY environment variables (see: https://lynx.invisible-island.net/lynx2.8.7/breakout/lynx_help/keystrokes/environments.html)
-
- var noProxy = gyp.opts.noproxy || env.NO_PROXY || env.no_proxy || env.npm_config_noproxy || ''
-
- // if the noProxy is a wildcard then return null
-
- if (noProxy === '*') {
- return null
- }
-
- // if the noProxy is not empty and the uri is found return null
-
- if (noProxy !== '' && uriInNoProxy(uri, noProxy)) {
- return null
- }
-
- // Check for HTTP or HTTPS Proxy in environment Else default to null
-
- if (uri.protocol === 'http:') {
- return gyp.opts.proxy ||
- env.HTTP_PROXY ||
- env.http_proxy ||
- env.npm_config_proxy || null
- }
-
- if (uri.protocol === 'https:') {
- return gyp.opts.proxy ||
- env.HTTPS_PROXY ||
- env.https_proxy ||
- env.HTTP_PROXY ||
- env.http_proxy ||
- env.npm_config_proxy || null
- }
-
- // if none of that works, return null
- // (What uri protocol are you using then?)
-
- return null
-}
-
-module.exports = getProxyFromURI
diff --git a/deps/npm/node_modules/node-gyp/macOS_Catalina.md b/deps/npm/node_modules/node-gyp/macOS_Catalina.md
index ca2fd234733dd1..4fe0f29b21eb52 100644
--- a/deps/npm/node_modules/node-gyp/macOS_Catalina.md
+++ b/deps/npm/node_modules/node-gyp/macOS_Catalina.md
@@ -40,7 +40,7 @@ To see if `Xcode Command Line Tools` is installed in a way that will work with `
curl -sL https://github.com/nodejs/node-gyp/raw/master/macOS_Catalina_acid_test.sh | bash
```
-If test succeeded, _you are done_! You should be ready to install `node-gyp`.
+If test succeeded, _you are done_! You should be ready to [install](https://github.com/nodejs/node-gyp#installation) `node-gyp`.
If test failed, there is a problem with your Xcode Command Line Tools installation. [Continue to Solutions](#Solutions).
@@ -89,7 +89,7 @@ There are three ways to install the Xcode libraries `node-gyp` needs on macOS. P
### I did all that and the acid test still does not pass :-(
1. `sudo rm -rf $(xcode-select -print-path)` # Enter root password. No output is normal.
2. `sudo rm -rf /Library/Developer/CommandLineTools` # Enter root password.
-3. `xcode-select --reset`
+3. `sudo xcode-select --reset`
4. `xcode-select --install`
5. If the [_acid test_ steps above](#The-acid-test) still does _not_ pass then...
6. `npm explore npm -g -- npm install node-gyp@latest`
diff --git a/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/LICENSE b/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/LICENSE
new file mode 100644
index 00000000000000..8d28acf866d932
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/LICENSE
@@ -0,0 +1,16 @@
+ISC License
+
+Copyright (c) npm, Inc.
+
+Permission to use, copy, modify, and/or distribute this software for
+any purpose with or without fee is hereby granted, provided that the
+above copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE COPYRIGHT HOLDER DISCLAIMS
+ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
+CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
+USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/agent.js b/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/agent.js
new file mode 100644
index 00000000000000..e27eb4f3a801da
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/agent.js
@@ -0,0 +1,209 @@
+'use strict'
+const LRU = require('lru-cache')
+const url = require('url')
+const isLambda = require('is-lambda')
+
+const AGENT_CACHE = new LRU({ max: 50 })
+let HttpsAgent
+let HttpAgent
+
+module.exports = getAgent
+
+const getAgentTimeout = timeout =>
+ typeof timeout !== 'number' || !timeout ? 0 : timeout + 1
+
+const getMaxSockets = maxSockets => maxSockets || 15
+
+function getAgent (uri, opts) {
+ const parsedUri = new url.URL(typeof uri === 'string' ? uri : uri.url)
+ const isHttps = parsedUri.protocol === 'https:'
+ const pxuri = getProxyUri(parsedUri.href, opts)
+
+ // If opts.timeout is zero, set the agentTimeout to zero as well. A timeout
+ // of zero disables the timeout behavior (OS limits still apply). Else, if
+ // opts.timeout is a non-zero value, set it to timeout + 1, to ensure that
+ // the node-fetch-npm timeout will always fire first, giving us more
+ // consistent errors.
+ const agentTimeout = getAgentTimeout(opts.timeout)
+ const agentMaxSockets = getMaxSockets(opts.maxSockets)
+
+ const key = [
+ `https:${isHttps}`,
+ pxuri
+ ? `proxy:${pxuri.protocol}//${pxuri.host}:${pxuri.port}`
+ : '>no-proxy<',
+ `local-address:${opts.localAddress || '>no-local-address<'}`,
+ `strict-ssl:${isHttps ? !!opts.strictSSL : '>no-strict-ssl<'}`,
+ `ca:${(isHttps && opts.ca) || '>no-ca<'}`,
+ `cert:${(isHttps && opts.cert) || '>no-cert<'}`,
+ `key:${(isHttps && opts.key) || '>no-key<'}`,
+ `timeout:${agentTimeout}`,
+ `maxSockets:${agentMaxSockets}`,
+ ].join(':')
+
+ if (opts.agent != null) { // `agent: false` has special behavior!
+ return opts.agent
+ }
+
+ // keep alive in AWS lambda makes no sense
+ const lambdaAgent = !isLambda ? null
+ : isHttps ? require('https').globalAgent
+ : require('http').globalAgent
+
+ if (isLambda && !pxuri)
+ return lambdaAgent
+
+ if (AGENT_CACHE.peek(key))
+ return AGENT_CACHE.get(key)
+
+ if (pxuri) {
+ const pxopts = isLambda ? {
+ ...opts,
+ agent: lambdaAgent,
+ } : opts
+ const proxy = getProxy(pxuri, pxopts, isHttps)
+ AGENT_CACHE.set(key, proxy)
+ return proxy
+ }
+
+ if (!HttpsAgent) {
+ HttpAgent = require('agentkeepalive')
+ HttpsAgent = HttpAgent.HttpsAgent
+ }
+
+ const agent = isHttps ? new HttpsAgent({
+ maxSockets: agentMaxSockets,
+ ca: opts.ca,
+ cert: opts.cert,
+ key: opts.key,
+ localAddress: opts.localAddress,
+ rejectUnauthorized: opts.strictSSL,
+ timeout: agentTimeout,
+ }) : new HttpAgent({
+ maxSockets: agentMaxSockets,
+ localAddress: opts.localAddress,
+ timeout: agentTimeout,
+ })
+ AGENT_CACHE.set(key, agent)
+ return agent
+}
+
+function checkNoProxy (uri, opts) {
+ const host = new url.URL(uri).hostname.split('.').reverse()
+ let noproxy = (opts.noProxy || getProcessEnv('no_proxy'))
+ if (typeof noproxy === 'string')
+ noproxy = noproxy.split(/\s*,\s*/g)
+
+ return noproxy && noproxy.some(no => {
+ const noParts = no.split('.').filter(x => x).reverse()
+ if (!noParts.length)
+ return false
+ for (let i = 0; i < noParts.length; i++) {
+ if (host[i] !== noParts[i])
+ return false
+ }
+ return true
+ })
+}
+
+module.exports.getProcessEnv = getProcessEnv
+
+function getProcessEnv (env) {
+ if (!env)
+ return
+
+ let value
+
+ if (Array.isArray(env)) {
+ for (const e of env) {
+ value = process.env[e] ||
+ process.env[e.toUpperCase()] ||
+ process.env[e.toLowerCase()]
+ if (typeof value !== 'undefined')
+ break
+ }
+ }
+
+ if (typeof env === 'string') {
+ value = process.env[env] ||
+ process.env[env.toUpperCase()] ||
+ process.env[env.toLowerCase()]
+ }
+
+ return value
+}
+
+module.exports.getProxyUri = getProxyUri
+function getProxyUri (uri, opts) {
+ const protocol = new url.URL(uri).protocol
+
+ const proxy = opts.proxy ||
+ (
+ protocol === 'https:' &&
+ getProcessEnv('https_proxy')
+ ) ||
+ (
+ protocol === 'http:' &&
+ getProcessEnv(['https_proxy', 'http_proxy', 'proxy'])
+ )
+ if (!proxy)
+ return null
+
+ const parsedProxy = (typeof proxy === 'string') ? new url.URL(proxy) : proxy
+
+ return !checkNoProxy(uri, opts) && parsedProxy
+}
+
+const getAuth = u =>
+ u.username && u.password ? `${u.username}:${u.password}`
+ : u.username ? u.username
+ : null
+
+const getPath = u => u.pathname + u.search + u.hash
+
+let HttpProxyAgent
+let HttpsProxyAgent
+let SocksProxyAgent
+module.exports.getProxy = getProxy
+function getProxy (proxyUrl, opts, isHttps) {
+ const popts = {
+ host: proxyUrl.hostname,
+ port: proxyUrl.port,
+ protocol: proxyUrl.protocol,
+ path: getPath(proxyUrl),
+ auth: getAuth(proxyUrl),
+ ca: opts.ca,
+ cert: opts.cert,
+ key: opts.key,
+ timeout: getAgentTimeout(opts.timeout),
+ localAddress: opts.localAddress,
+ maxSockets: getMaxSockets(opts.maxSockets),
+ rejectUnauthorized: opts.strictSSL,
+ }
+
+ if (proxyUrl.protocol === 'http:' || proxyUrl.protocol === 'https:') {
+ if (!isHttps) {
+ if (!HttpProxyAgent)
+ HttpProxyAgent = require('http-proxy-agent')
+
+ return new HttpProxyAgent(popts)
+ } else {
+ if (!HttpsProxyAgent)
+ HttpsProxyAgent = require('https-proxy-agent')
+
+ return new HttpsProxyAgent(popts)
+ }
+ } else if (proxyUrl.protocol.startsWith('socks')) {
+ if (!SocksProxyAgent)
+ SocksProxyAgent = require('socks-proxy-agent')
+
+ return new SocksProxyAgent(popts)
+ } else {
+ throw Object.assign(
+ new Error(`unsupported proxy protocol: '${proxyUrl.protocol}'`),
+ {
+ url: proxyUrl.href,
+ }
+ )
+ }
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/cache.js b/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/cache.js
new file mode 100644
index 00000000000000..234e3a41d0519a
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/cache.js
@@ -0,0 +1,260 @@
+'use strict'
+
+const fetch = require('minipass-fetch')
+const cacache = require('cacache')
+const ssri = require('ssri')
+const url = require('url')
+
+const Minipass = require('minipass')
+const MinipassFlush = require('minipass-flush')
+const MinipassCollect = require('minipass-collect')
+const MinipassPipeline = require('minipass-pipeline')
+
+const MAX_MEM_SIZE = 5 * 1024 * 1024 // 5MB
+
+// some headers should never be stored in the cache, either because
+// they're a security footgun to leave lying around, or because we
+// just don't need them taking up space.
+// set to undefined so they're omitted from the JSON.stringify
+const pruneHeaders = {
+ authorization: undefined,
+ 'npm-session': undefined,
+ 'set-cookie': undefined,
+ 'cf-ray': undefined,
+ 'cf-cache-status': undefined,
+ 'cf-request-id': undefined,
+ 'x-fetch-attempts': undefined,
+}
+
+function cacheKey (req) {
+ const parsed = new url.URL(req.url)
+ return `make-fetch-happen:request-cache:${
+ url.format({
+ protocol: parsed.protocol,
+ slashes: true,
+ port: parsed.port,
+ hostname: parsed.hostname,
+ pathname: parsed.pathname,
+ search: parsed.search,
+ })
+ }`
+}
+
+// This is a cacache-based implementation of the Cache standard,
+// using node-fetch.
+// docs: https://developer.mozilla.org/en-US/docs/Web/API/Cache
+//
+module.exports = class Cache {
+ constructor (path, opts) {
+ this._path = path
+ this.Promise = (opts && opts.Promise) || Promise
+ }
+
+ static get pruneHeaders () {
+ // exposed for testing, not modifiable
+ return { ...pruneHeaders }
+ }
+
+ // Returns a Promise that resolves to the response associated with the first
+ // matching request in the Cache object.
+ match (req, opts) {
+ const key = cacheKey(req)
+ return cacache.get.info(this._path, key).then(info => {
+ return info && cacache.get.hasContent(
+ this._path, info.integrity, opts
+ ).then(exists => exists && info)
+ }).then(info => {
+ if (info && info.metadata && matchDetails(req, {
+ url: info.metadata.url,
+ reqHeaders: new fetch.Headers(info.metadata.reqHeaders),
+ resHeaders: new fetch.Headers(info.metadata.resHeaders),
+ cacheIntegrity: info.integrity,
+ integrity: opts && opts.integrity,
+ })) {
+ const resHeaders = new fetch.Headers(info.metadata.resHeaders)
+ addCacheHeaders(resHeaders, this._path, key, info.integrity, info.time)
+ if (req.method === 'HEAD') {
+ return new fetch.Response(null, {
+ url: req.url,
+ headers: resHeaders,
+ status: 200,
+ })
+ }
+ const cachePath = this._path
+ // avoid opening cache file handles until a user actually tries to
+ // read from it.
+ const body = new Minipass()
+ const fitInMemory = info.size < MAX_MEM_SIZE
+ const removeOnResume = () => body.removeListener('resume', onResume)
+ const onResume =
+ opts.memoize !== false && fitInMemory
+ ? () => {
+ const c = cacache.get.stream.byDigest(cachePath, info.integrity, {
+ memoize: opts.memoize,
+ })
+ c.on('error', /* istanbul ignore next */ err => {
+ body.emit('error', err)
+ })
+ c.pipe(body)
+ }
+ : () => {
+ removeOnResume()
+ cacache.get.byDigest(cachePath, info.integrity, {
+ memoize: opts.memoize,
+ })
+ .then(data => body.end(data))
+ .catch(/* istanbul ignore next */ err => {
+ body.emit('error', err)
+ })
+ }
+ body.once('resume', onResume)
+ body.once('end', () => removeOnResume)
+ return this.Promise.resolve(new fetch.Response(body, {
+ url: req.url,
+ headers: resHeaders,
+ status: 200,
+ size: info.size,
+ }))
+ }
+ })
+ }
+
+ // Takes both a request and its response and adds it to the given cache.
+ put (req, response, opts) {
+ opts = opts || {}
+ const size = response.headers.get('content-length')
+ const fitInMemory = !!size && opts.memoize !== false && size < MAX_MEM_SIZE
+ const ckey = cacheKey(req)
+ const cacheOpts = {
+ algorithms: opts.algorithms,
+ metadata: {
+ url: req.url,
+ reqHeaders: {
+ ...req.headers.raw(),
+ ...pruneHeaders,
+ },
+ resHeaders: {
+ ...response.headers.raw(),
+ ...pruneHeaders,
+ },
+ },
+ size,
+ memoize: fitInMemory && opts.memoize,
+ }
+ if (req.method === 'HEAD' || response.status === 304) {
+ // Update metadata without writing
+ return cacache.get.info(this._path, ckey).then(info => {
+ // Providing these will bypass content write
+ cacheOpts.integrity = info.integrity
+ addCacheHeaders(
+ response.headers, this._path, ckey, info.integrity, info.time
+ )
+
+ return new MinipassPipeline(
+ cacache.get.stream.byDigest(this._path, info.integrity, cacheOpts),
+ cacache.put.stream(this._path, ckey, cacheOpts)
+ ).promise().then(() => {
+ return response
+ })
+ })
+ }
+ const oldBody = response.body
+ // the flush is the last thing in the pipeline. Build the pipeline
+ // back-to-front so we don't consume the data before we use it!
+ // We unshift in either a tee-stream to the cache put stream,
+ // or a collecter that dumps it to cache in one go, then the
+ // old body to bring in the data.
+ const newBody = new MinipassPipeline(new MinipassFlush({
+ flush () {
+ return cacheWritePromise
+ },
+ }))
+
+ let cacheWriteResolve, cacheWriteReject
+ const cacheWritePromise = new Promise((resolve, reject) => {
+ cacheWriteResolve = resolve
+ cacheWriteReject = reject
+ })
+ const cachePath = this._path
+
+ if (fitInMemory) {
+ const collecter = new MinipassCollect.PassThrough()
+ collecter.on('collect', data => {
+ cacache.put(
+ cachePath,
+ ckey,
+ data,
+ cacheOpts
+ ).then(cacheWriteResolve, cacheWriteReject)
+ })
+ newBody.unshift(collecter)
+ } else {
+ const tee = new Minipass()
+ const cacheStream = cacache.put.stream(
+ cachePath,
+ ckey,
+ cacheOpts
+ )
+ tee.pipe(cacheStream)
+ cacheStream.promise().then(cacheWriteResolve, cacheWriteReject)
+ newBody.unshift(tee)
+ }
+
+ newBody.unshift(oldBody)
+ return Promise.resolve(new fetch.Response(newBody, response))
+ }
+
+ // Finds the Cache entry whose key is the request, and if found, deletes the
+ // Cache entry and returns a Promise that resolves to true. If no Cache entry
+ // is found, it returns false.
+ 'delete' (req, opts) {
+ opts = opts || {}
+ if (typeof opts.memoize === 'object') {
+ if (opts.memoize.reset)
+ opts.memoize.reset()
+ else if (opts.memoize.clear)
+ opts.memoize.clear()
+ else {
+ Object.keys(opts.memoize).forEach(k => {
+ opts.memoize[k] = null
+ })
+ }
+ }
+ return cacache.rm.entry(
+ this._path,
+ cacheKey(req)
+ // TODO - true/false
+ ).then(() => false)
+ }
+}
+
+function matchDetails (req, cached) {
+ const reqUrl = new url.URL(req.url)
+ const cacheUrl = new url.URL(cached.url)
+ const vary = cached.resHeaders.get('Vary')
+ // https://tools.ietf.org/html/rfc7234#section-4.1
+ if (vary) {
+ if (vary.match(/\*/))
+ return false
+ else {
+ const fieldsMatch = vary.split(/\s*,\s*/).every(field => {
+ return cached.reqHeaders.get(field) === req.headers.get(field)
+ })
+ if (!fieldsMatch)
+ return false
+ }
+ }
+ if (cached.integrity)
+ return ssri.parse(cached.integrity).match(cached.cacheIntegrity)
+
+ reqUrl.hash = null
+ cacheUrl.hash = null
+ return url.format(reqUrl) === url.format(cacheUrl)
+}
+
+function addCacheHeaders (resHeaders, path, key, hash, time) {
+ resHeaders.set('X-Local-Cache', encodeURIComponent(path))
+ resHeaders.set('X-Local-Cache-Key', encodeURIComponent(key))
+ resHeaders.set('X-Local-Cache-Hash', encodeURIComponent(hash))
+ resHeaders.set('X-Local-Cache-Time', new Date(time).toUTCString())
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/index.js b/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/index.js
new file mode 100644
index 00000000000000..54f72049c1d52b
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/index.js
@@ -0,0 +1,457 @@
+'use strict'
+
+const url = require('url')
+const fetch = require('minipass-fetch')
+const pkg = require('./package.json')
+const retry = require('promise-retry')
+let ssri
+
+const Minipass = require('minipass')
+const MinipassPipeline = require('minipass-pipeline')
+const getAgent = require('./agent')
+const setWarning = require('./warning')
+
+const configureOptions = require('./utils/configure-options')
+const iterableToObject = require('./utils/iterable-to-object')
+const makePolicy = require('./utils/make-policy')
+
+const isURL = /^https?:/
+const USER_AGENT = `${pkg.name}/${pkg.version} (+https://npm.im/${pkg.name})`
+
+const RETRY_ERRORS = [
+ 'ECONNRESET', // remote socket closed on us
+ 'ECONNREFUSED', // remote host refused to open connection
+ 'EADDRINUSE', // failed to bind to a local port (proxy?)
+ 'ETIMEDOUT', // someone in the transaction is WAY TOO SLOW
+ // Known codes we do NOT retry on:
+ // ENOTFOUND (getaddrinfo failure. Either bad hostname, or offline)
+]
+
+const RETRY_TYPES = [
+ 'request-timeout',
+]
+
+// https://fetch.spec.whatwg.org/#http-network-or-cache-fetch
+module.exports = cachingFetch
+cachingFetch.defaults = function (_uri, _opts) {
+ const fetch = this
+ if (typeof _uri === 'object') {
+ _opts = _uri
+ _uri = null
+ }
+
+ function defaultedFetch (uri, opts) {
+ const finalOpts = Object.assign({}, _opts || {}, opts || {})
+ return fetch(uri || _uri, finalOpts)
+ }
+
+ defaultedFetch.defaults = fetch.defaults
+ defaultedFetch.delete = fetch.delete
+ return defaultedFetch
+}
+
+cachingFetch.delete = cacheDelete
+function cacheDelete (uri, opts) {
+ opts = configureOptions(opts)
+ if (opts.cacheManager) {
+ const req = new fetch.Request(uri, {
+ method: opts.method,
+ headers: opts.headers,
+ })
+ return opts.cacheManager.delete(req, opts)
+ }
+}
+
+function initializeSsri () {
+ if (!ssri)
+ ssri = require('ssri')
+}
+
+function cachingFetch (uri, _opts) {
+ const opts = configureOptions(_opts)
+
+ if (opts.integrity) {
+ initializeSsri()
+ // if verifying integrity, fetch must not decompress
+ opts.compress = false
+ }
+
+ const isCachable = (
+ (
+ opts.method === 'GET' ||
+ opts.method === 'HEAD'
+ ) &&
+ Boolean(opts.cacheManager) &&
+ opts.cache !== 'no-store' &&
+ opts.cache !== 'reload'
+ )
+
+ if (isCachable) {
+ const req = new fetch.Request(uri, {
+ method: opts.method,
+ headers: opts.headers,
+ })
+
+ return opts.cacheManager.match(req, opts).then(res => {
+ if (res) {
+ const warningCode = (res.headers.get('Warning') || '').match(/^\d+/)
+ if (warningCode && +warningCode >= 100 && +warningCode < 200) {
+ // https://tools.ietf.org/html/rfc7234#section-4.3.4
+ //
+ // If a stored response is selected for update, the cache MUST:
+ //
+ // * delete any Warning header fields in the stored response with
+ // warn-code 1xx (see Section 5.5);
+ //
+ // * retain any Warning header fields in the stored response with
+ // warn-code 2xx;
+ //
+ res.headers.delete('Warning')
+ }
+
+ if (opts.cache === 'default' && !isStale(req, res))
+ return res
+
+ if (opts.cache === 'default' || opts.cache === 'no-cache')
+ return conditionalFetch(req, res, opts)
+
+ if (opts.cache === 'force-cache' || opts.cache === 'only-if-cached') {
+ // 112 Disconnected operation
+ // SHOULD be included if the cache is intentionally disconnected from
+ // the rest of the network for a period of time.
+ // (https://tools.ietf.org/html/rfc2616#section-14.46)
+ setWarning(res, 112, 'Disconnected operation')
+ return res
+ }
+ }
+
+ if (!res && opts.cache === 'only-if-cached') {
+ const errorMsg = `request to ${
+ uri
+ } failed: cache mode is 'only-if-cached' but no cached response available.`
+
+ const err = new Error(errorMsg)
+ err.code = 'ENOTCACHED'
+ throw err
+ }
+
+ // Missing cache entry, or mode is default (if stale), reload, no-store
+ return remoteFetch(req.url, opts)
+ })
+ }
+ return remoteFetch(uri, opts)
+}
+
+// https://tools.ietf.org/html/rfc7234#section-4.2
+function isStale (req, res) {
+ const _req = {
+ url: req.url,
+ method: req.method,
+ headers: iterableToObject(req.headers),
+ }
+
+ const policy = makePolicy(req, res)
+
+ const responseTime = res.headers.get('x-local-cache-time') ||
+ /* istanbul ignore next - would be weird to get a 'stale'
+ * response that didn't come from cache with a cache time header */
+ (res.headers.get('date') || 0)
+
+ policy._responseTime = new Date(responseTime)
+
+ const bool = !policy.satisfiesWithoutRevalidation(_req)
+ const headers = policy.responseHeaders()
+ if (headers.warning && /^113\b/.test(headers.warning)) {
+ // Possible to pick up a rfc7234 warning at this point.
+ // This is kind of a weird place to stick this, should probably go
+ // in cachingFetch. But by putting it here, we save an extra
+ // CachePolicy object construction.
+ res.headers.append('warning', headers.warning)
+ }
+ return bool
+}
+
+function mustRevalidate (res) {
+ return (res.headers.get('cache-control') || '').match(/must-revalidate/i)
+}
+
+function conditionalFetch (req, cachedRes, opts) {
+ const _req = {
+ url: req.url,
+ method: req.method,
+ headers: Object.assign({}, opts.headers || {}),
+ }
+
+ const policy = makePolicy(req, cachedRes)
+ opts.headers = policy.revalidationHeaders(_req)
+
+ return remoteFetch(req.url, opts)
+ .then(condRes => {
+ const revalidatedPolicy = policy.revalidatedPolicy(_req, {
+ status: condRes.status,
+ headers: iterableToObject(condRes.headers),
+ })
+
+ if (condRes.status >= 500 && !mustRevalidate(cachedRes)) {
+ // 111 Revalidation failed
+ // MUST be included if a cache returns a stale response because an
+ // attempt to revalidate the response failed, due to an inability to
+ // reach the server.
+ // (https://tools.ietf.org/html/rfc2616#section-14.46)
+ setWarning(cachedRes, 111, 'Revalidation failed')
+ return cachedRes
+ }
+
+ if (condRes.status === 304) { // 304 Not Modified
+ // Create a synthetic response from the cached body and original req
+ const synthRes = new fetch.Response(cachedRes.body, condRes)
+ return opts.cacheManager.put(req, synthRes, opts)
+ .then(newRes => {
+ // Get the list first, because if we delete while iterating,
+ // it'll throw off the count and not make it through all
+ // of them.
+ const newHeaders = revalidatedPolicy.policy.responseHeaders()
+ const toDelete = [...newRes.headers.keys()]
+ .filter(k => !newHeaders[k])
+ for (const key of toDelete)
+ newRes.headers.delete(key)
+
+ for (const [key, val] of Object.entries(newHeaders))
+ newRes.headers.set(key, val)
+
+ return newRes
+ })
+ }
+
+ return condRes
+ })
+ .then(res => res)
+ .catch(err => {
+ if (mustRevalidate(cachedRes))
+ throw err
+ else {
+ // 111 Revalidation failed
+ // MUST be included if a cache returns a stale response because an
+ // attempt to revalidate the response failed, due to an inability to
+ // reach the server.
+ // (https://tools.ietf.org/html/rfc2616#section-14.46)
+ setWarning(cachedRes, 111, 'Revalidation failed')
+ // 199 Miscellaneous warning
+ // The warning text MAY include arbitrary information to be presented to
+ // a human user, or logged. A system receiving this warning MUST NOT take
+ // any automated action, besides presenting the warning to the user.
+ // (https://tools.ietf.org/html/rfc2616#section-14.46)
+ setWarning(
+ cachedRes,
+ 199,
+ `Miscellaneous Warning ${err.code}: ${err.message}`
+ )
+
+ return cachedRes
+ }
+ })
+}
+
+function remoteFetchHandleIntegrity (res, integrity) {
+ if (res.status !== 200)
+ return res // Error responses aren't subject to integrity checks.
+
+ const oldBod = res.body
+ const newBod = ssri.integrityStream({
+ integrity,
+ })
+ return new fetch.Response(new MinipassPipeline(oldBod, newBod), res)
+}
+
+function remoteFetch (uri, opts) {
+ const agent = getAgent(uri, opts)
+ const headers = opts.headers instanceof fetch.Headers
+ ? opts.headers
+ : new fetch.Headers(opts.headers)
+ if (!headers.get('connection'))
+ headers.set('connection', agent ? 'keep-alive' : 'close')
+
+ if (!headers.get('user-agent'))
+ headers.set('user-agent', USER_AGENT)
+
+ const reqOpts = {
+ agent,
+ body: opts.body,
+ compress: opts.compress,
+ follow: opts.follow,
+ headers,
+ method: opts.method,
+ redirect: 'manual',
+ size: opts.size,
+ counter: opts.counter,
+ timeout: opts.timeout,
+ ca: opts.ca,
+ cert: opts.cert,
+ key: opts.key,
+ rejectUnauthorized: opts.strictSSL,
+ }
+
+ return retry(
+ (retryHandler, attemptNum) => {
+ const req = new fetch.Request(uri, reqOpts)
+ return fetch(req)
+ .then((res) => {
+ if (opts.integrity)
+ res = remoteFetchHandleIntegrity(res, opts.integrity)
+
+ res.headers.set('x-fetch-attempts', attemptNum)
+
+ const isStream = Minipass.isStream(req.body)
+
+ if (opts.cacheManager) {
+ const isMethodGetHead = (
+ req.method === 'GET' ||
+ req.method === 'HEAD'
+ )
+
+ const isCachable = (
+ opts.cache !== 'no-store' &&
+ isMethodGetHead &&
+ makePolicy(req, res).storable() &&
+ res.status === 200 // No other statuses should be stored!
+ )
+
+ if (isCachable)
+ return opts.cacheManager.put(req, res, opts)
+
+ if (!isMethodGetHead) {
+ return opts.cacheManager.delete(req).then(() => {
+ if (res.status >= 500 && req.method !== 'POST' && !isStream) {
+ if (typeof opts.onRetry === 'function')
+ opts.onRetry(res)
+
+ return retryHandler(res)
+ }
+
+ return res
+ })
+ }
+ }
+
+ const isRetriable = (
+ req.method !== 'POST' &&
+ !isStream &&
+ (
+ res.status === 408 || // Request Timeout
+ res.status === 420 || // Enhance Your Calm (usually Twitter rate-limit)
+ res.status === 429 || // Too Many Requests ("standard" rate-limiting)
+ res.status >= 500 // Assume server errors are momentary hiccups
+ )
+ )
+
+ if (isRetriable) {
+ if (typeof opts.onRetry === 'function')
+ opts.onRetry(res)
+
+ return retryHandler(res)
+ }
+
+ if (!fetch.isRedirect(res.status))
+ return res
+
+ if (opts.redirect === 'manual')
+ return res
+
+ // if (!fetch.isRedirect(res.status) || opts.redirect === 'manual') {
+ // return res
+ // }
+
+ // handle redirects - matches behavior of fetch: https://github.com/bitinn/node-fetch
+ if (opts.redirect === 'error') {
+ const err = new fetch.FetchError(`redirect mode is set to error: ${uri}`, 'no-redirect', { code: 'ENOREDIRECT' })
+ throw err
+ }
+
+ if (!res.headers.get('location')) {
+ const err = new fetch.FetchError(`redirect location header missing at: ${uri}`, 'no-location', { code: 'EINVALIDREDIRECT' })
+ throw err
+ }
+
+ if (req.counter >= req.follow) {
+ const err = new fetch.FetchError(`maximum redirect reached at: ${uri}`, 'max-redirect', { code: 'EMAXREDIRECT' })
+ throw err
+ }
+
+ const resolvedUrlParsed = new url.URL(res.headers.get('location'), req.url)
+ const resolvedUrl = url.format(resolvedUrlParsed)
+ const redirectURL = (isURL.test(res.headers.get('location')))
+ ? new url.URL(res.headers.get('location'))
+ : resolvedUrlParsed
+
+ // Comment below is used under the following license:
+ // Copyright (c) 2010-2012 Mikeal Rogers
+ // Licensed under the Apache License, Version 2.0 (the "License");
+ // you may not use this file except in compliance with the License.
+ // You may obtain a copy of the License at
+ // http://www.apache.org/licenses/LICENSE-2.0
+ // Unless required by applicable law or agreed to in writing,
+ // software distributed under the License is distributed on an "AS
+ // IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ // express or implied. See the License for the specific language
+ // governing permissions and limitations under the License.
+
+ // Remove authorization if changing hostnames (but not if just
+ // changing ports or protocols). This matches the behavior of request:
+ // https://github.com/request/request/blob/b12a6245/lib/redirect.js#L134-L138
+ if (new url.URL(req.url).hostname !== redirectURL.hostname)
+ req.headers.delete('authorization')
+
+ // for POST request with 301/302 response, or any request with 303 response,
+ // use GET when following redirect
+ if (
+ res.status === 303 ||
+ (
+ req.method === 'POST' &&
+ (
+ res.status === 301 ||
+ res.status === 302
+ )
+ )
+ ) {
+ opts.method = 'GET'
+ opts.body = null
+ req.headers.delete('content-length')
+ }
+
+ opts.headers = {}
+ req.headers.forEach((value, name) => {
+ opts.headers[name] = value
+ })
+
+ opts.counter = ++req.counter
+ return cachingFetch(resolvedUrl, opts)
+ })
+ .catch(err => {
+ const code = (err.code === 'EPROMISERETRY')
+ ? err.retried.code
+ : err.code
+
+ const isRetryError = (
+ RETRY_ERRORS.indexOf(code) === -1 &&
+ RETRY_TYPES.indexOf(err.type) === -1
+ )
+
+ if (req.method === 'POST' || isRetryError)
+ throw err
+
+ if (typeof opts.onRetry === 'function')
+ opts.onRetry(err)
+
+ return retryHandler(err)
+ })
+ },
+ opts.retry
+ ).catch(err => {
+ if (err.status >= 400 && err.type !== 'system') {
+ // this is an HTTP response "error" that we care about
+ return err
+ }
+
+ throw err
+ })
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/package.json b/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/package.json
new file mode 100644
index 00000000000000..7e854dcdf08805
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/package.json
@@ -0,0 +1,72 @@
+{
+ "name": "make-fetch-happen",
+ "version": "8.0.14",
+ "description": "Opinionated, caching, retrying fetch client",
+ "main": "index.js",
+ "files": [
+ "*.js",
+ "lib",
+ "utils"
+ ],
+ "scripts": {
+ "preversion": "npm t",
+ "postversion": "npm publish",
+ "prepublishOnly": "git push --follow-tags",
+ "test": "tap test/*.js",
+ "posttest": "npm run lint",
+ "eslint": "eslint",
+ "lint": "npm run eslint -- *.js utils test",
+ "lintfix": "npm run lint -- --fix"
+ },
+ "repository": "https://github.com/npm/make-fetch-happen",
+ "keywords": [
+ "http",
+ "request",
+ "fetch",
+ "mean girls",
+ "caching",
+ "cache",
+ "subresource integrity"
+ ],
+ "author": {
+ "name": "Kat Marchán",
+ "email": "kzm@zkat.tech",
+ "twitter": "maybekatz"
+ },
+ "license": "ISC",
+ "dependencies": {
+ "agentkeepalive": "^4.1.3",
+ "cacache": "^15.0.5",
+ "http-cache-semantics": "^4.1.0",
+ "http-proxy-agent": "^4.0.1",
+ "https-proxy-agent": "^5.0.0",
+ "is-lambda": "^1.0.1",
+ "lru-cache": "^6.0.0",
+ "minipass": "^3.1.3",
+ "minipass-collect": "^1.0.2",
+ "minipass-fetch": "^1.3.2",
+ "minipass-flush": "^1.0.5",
+ "minipass-pipeline": "^1.2.4",
+ "promise-retry": "^2.0.1",
+ "socks-proxy-agent": "^5.0.0",
+ "ssri": "^8.0.0"
+ },
+ "devDependencies": {
+ "eslint": "^7.14.0",
+ "eslint-plugin-import": "^2.22.1",
+ "eslint-plugin-node": "^11.1.0",
+ "eslint-plugin-promise": "^4.2.1",
+ "eslint-plugin-standard": "^5.0.0",
+ "mkdirp": "^1.0.4",
+ "nock": "^11.9.1",
+ "npmlog": "^4.1.2",
+ "require-inject": "^1.4.2",
+ "rimraf": "^2.7.1",
+ "safe-buffer": "^5.2.1",
+ "standard-version": "^7.1.0",
+ "tap": "^14.11.0"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/utils/configure-options.js b/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/utils/configure-options.js
new file mode 100644
index 00000000000000..75ea5d15ecda01
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/utils/configure-options.js
@@ -0,0 +1,32 @@
+'use strict'
+
+const initializeCache = require('./initialize-cache')
+
+module.exports = function configureOptions (_opts) {
+ const opts = Object.assign({}, _opts || {})
+ opts.method = (opts.method || 'GET').toUpperCase()
+
+ if (!opts.retry) {
+ // opts.retry was falsy; set default
+ opts.retry = { retries: 0 }
+ } else {
+ if (typeof opts.retry !== 'object') {
+ // Shorthand
+ if (typeof opts.retry === 'number')
+ opts.retry = { retries: opts.retry }
+
+ if (typeof opts.retry === 'string') {
+ const value = parseInt(opts.retry, 10)
+ opts.retry = (value) ? { retries: value } : { retries: 0 }
+ }
+ } else {
+ // Set default retries
+ opts.retry = Object.assign({}, { retries: 0 }, opts.retry)
+ }
+ }
+
+ if (opts.cacheManager)
+ initializeCache(opts)
+
+ return opts
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/utils/initialize-cache.js b/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/utils/initialize-cache.js
new file mode 100644
index 00000000000000..9f96bf56226ef5
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/utils/initialize-cache.js
@@ -0,0 +1,26 @@
+'use strict'
+
+const isHeaderConditional = require('./is-header-conditional')
+// Default cacache-based cache
+const Cache = require('../cache')
+
+module.exports = function initializeCache (opts) {
+ /**
+ * NOTE: `opts.cacheManager` is the path to cache
+ * We're making the assumption that if `opts.cacheManager` *isn't* a string,
+ * it's a cache object
+ */
+ if (typeof opts.cacheManager === 'string') {
+ // Need to make a cache object
+ opts.cacheManager = new Cache(opts.cacheManager, opts)
+ }
+
+ opts.cache = opts.cache || 'default'
+
+ if (opts.cache === 'default' && isHeaderConditional(opts.headers)) {
+ // If header list contains `If-Modified-Since`, `If-None-Match`,
+ // `If-Unmodified-Since`, `If-Match`, or `If-Range`, fetch will set cache
+ // mode to "no-store" if it is "default".
+ opts.cache = 'no-store'
+ }
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/utils/is-header-conditional.js b/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/utils/is-header-conditional.js
new file mode 100644
index 00000000000000..5081e0ce127e26
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/utils/is-header-conditional.js
@@ -0,0 +1,17 @@
+'use strict'
+
+module.exports = function isHeaderConditional (headers) {
+ if (!headers || typeof headers !== 'object')
+ return false
+
+ const modifiers = [
+ 'if-modified-since',
+ 'if-none-match',
+ 'if-unmodified-since',
+ 'if-match',
+ 'if-range',
+ ]
+
+ return Object.keys(headers)
+ .some(h => modifiers.indexOf(h.toLowerCase()) !== -1)
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/utils/iterable-to-object.js b/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/utils/iterable-to-object.js
new file mode 100644
index 00000000000000..1fe5ba65448d60
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/utils/iterable-to-object.js
@@ -0,0 +1,9 @@
+'use strict'
+
+module.exports = function iterableToObject (iter) {
+ const obj = {}
+ for (const k of iter.keys())
+ obj[k] = iter.get(k)
+
+ return obj
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/utils/make-policy.js b/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/utils/make-policy.js
new file mode 100644
index 00000000000000..5e884847dd8f45
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/utils/make-policy.js
@@ -0,0 +1,19 @@
+'use strict'
+
+const CachePolicy = require('http-cache-semantics')
+
+const iterableToObject = require('./iterable-to-object')
+
+module.exports = function makePolicy (req, res) {
+ const _req = {
+ url: req.url,
+ method: req.method,
+ headers: iterableToObject(req.headers),
+ }
+ const _res = {
+ status: res.status,
+ headers: iterableToObject(res.headers),
+ }
+
+ return new CachePolicy(_req, _res, { shared: false })
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/warning.js b/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/warning.js
new file mode 100644
index 00000000000000..2b96024714e3be
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/warning.js
@@ -0,0 +1,24 @@
+const url = require('url')
+
+module.exports = setWarning
+
+function setWarning (reqOrRes, code, message, replace) {
+ // Warning = "Warning" ":" 1#warning-value
+ // warning-value = warn-code SP warn-agent SP warn-text [SP warn-date]
+ // warn-code = 3DIGIT
+ // warn-agent = ( host [ ":" port ] ) | pseudonym
+ // ; the name or pseudonym of the server adding
+ // ; the Warning header, for use in debugging
+ // warn-text = quoted-string
+ // warn-date = <"> HTTP-date <">
+ // (https://tools.ietf.org/html/rfc2616#section-14.46)
+ const host = new url.URL(reqOrRes.url).host
+ const jsonMessage = JSON.stringify(message)
+ const jsonDate = JSON.stringify(new Date().toUTCString())
+ const header = replace ? 'set' : 'append'
+
+ reqOrRes.headers[header](
+ 'Warning',
+ `${code} ${host} ${jsonMessage} ${jsonDate}`
+ )
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/socks-proxy-agent/dist/agent.d.ts b/deps/npm/node_modules/node-gyp/node_modules/socks-proxy-agent/dist/agent.d.ts
new file mode 100644
index 00000000000000..52341a1b55d90b
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/socks-proxy-agent/dist/agent.d.ts
@@ -0,0 +1,21 @@
+///
+import net from 'net';
+import { Agent, ClientRequest, RequestOptions } from 'agent-base';
+import { SocksProxyAgentOptions } from '.';
+/**
+ * The `SocksProxyAgent`.
+ *
+ * @api public
+ */
+export default class SocksProxyAgent extends Agent {
+ private lookup;
+ private proxy;
+ constructor(_opts: string | SocksProxyAgentOptions);
+ /**
+ * Initiates a SOCKS connection to the specified SOCKS proxy server,
+ * which in turn connects to the specified remote host and port.
+ *
+ * @api protected
+ */
+ callback(req: ClientRequest, opts: RequestOptions): Promise;
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/socks-proxy-agent/dist/agent.js b/deps/npm/node_modules/node-gyp/node_modules/socks-proxy-agent/dist/agent.js
new file mode 100644
index 00000000000000..7af0d62f80d594
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/socks-proxy-agent/dist/agent.js
@@ -0,0 +1,180 @@
+"use strict";
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const dns_1 = __importDefault(require("dns"));
+const tls_1 = __importDefault(require("tls"));
+const url_1 = __importDefault(require("url"));
+const debug_1 = __importDefault(require("debug"));
+const agent_base_1 = require("agent-base");
+const socks_1 = require("socks");
+const debug = debug_1.default('socks-proxy-agent');
+function dnsLookup(host) {
+ return new Promise((resolve, reject) => {
+ dns_1.default.lookup(host, (err, res) => {
+ if (err) {
+ reject(err);
+ }
+ else {
+ resolve(res);
+ }
+ });
+ });
+}
+function parseSocksProxy(opts) {
+ let port = 0;
+ let lookup = false;
+ let type = 5;
+ // Prefer `hostname` over `host`, because of `url.parse()`
+ const host = opts.hostname || opts.host;
+ if (!host) {
+ throw new TypeError('No "host"');
+ }
+ if (typeof opts.port === 'number') {
+ port = opts.port;
+ }
+ else if (typeof opts.port === 'string') {
+ port = parseInt(opts.port, 10);
+ }
+ // From RFC 1928, Section 3: https://tools.ietf.org/html/rfc1928#section-3
+ // "The SOCKS service is conventionally located on TCP port 1080"
+ if (!port) {
+ port = 1080;
+ }
+ // figure out if we want socks v4 or v5, based on the "protocol" used.
+ // Defaults to 5.
+ if (opts.protocol) {
+ switch (opts.protocol.replace(':', '')) {
+ case 'socks4':
+ lookup = true;
+ // pass through
+ case 'socks4a':
+ type = 4;
+ break;
+ case 'socks5':
+ lookup = true;
+ // pass through
+ case 'socks': // no version specified, default to 5h
+ case 'socks5h':
+ type = 5;
+ break;
+ default:
+ throw new TypeError(`A "socks" protocol must be specified! Got: ${opts.protocol}`);
+ }
+ }
+ if (typeof opts.type !== 'undefined') {
+ if (opts.type === 4 || opts.type === 5) {
+ type = opts.type;
+ }
+ else {
+ throw new TypeError(`"type" must be 4 or 5, got: ${opts.type}`);
+ }
+ }
+ const proxy = {
+ host,
+ port,
+ type
+ };
+ let userId = opts.userId || opts.username;
+ let password = opts.password;
+ if (opts.auth) {
+ const auth = opts.auth.split(':');
+ userId = auth[0];
+ password = auth[1];
+ }
+ if (userId) {
+ Object.defineProperty(proxy, 'userId', {
+ value: userId,
+ enumerable: false
+ });
+ }
+ if (password) {
+ Object.defineProperty(proxy, 'password', {
+ value: password,
+ enumerable: false
+ });
+ }
+ return { lookup, proxy };
+}
+/**
+ * The `SocksProxyAgent`.
+ *
+ * @api public
+ */
+class SocksProxyAgent extends agent_base_1.Agent {
+ constructor(_opts) {
+ let opts;
+ if (typeof _opts === 'string') {
+ opts = url_1.default.parse(_opts);
+ }
+ else {
+ opts = _opts;
+ }
+ if (!opts) {
+ throw new TypeError('a SOCKS proxy server `host` and `port` must be specified!');
+ }
+ super(opts);
+ const parsedProxy = parseSocksProxy(opts);
+ this.lookup = parsedProxy.lookup;
+ this.proxy = parsedProxy.proxy;
+ }
+ /**
+ * Initiates a SOCKS connection to the specified SOCKS proxy server,
+ * which in turn connects to the specified remote host and port.
+ *
+ * @api protected
+ */
+ callback(req, opts) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const { lookup, proxy } = this;
+ let { host, port, timeout } = opts;
+ if (!host) {
+ throw new Error('No `host` defined!');
+ }
+ if (lookup) {
+ // Client-side DNS resolution for "4" and "5" socks proxy versions.
+ host = yield dnsLookup(host);
+ }
+ const socksOpts = {
+ proxy,
+ destination: { host, port },
+ command: 'connect',
+ timeout
+ };
+ debug('Creating socks proxy connection: %o', socksOpts);
+ const { socket } = yield socks_1.SocksClient.createConnection(socksOpts);
+ debug('Successfully created socks proxy connection');
+ if (opts.secureEndpoint) {
+ // The proxy is connecting to a TLS server, so upgrade
+ // this socket connection to a TLS connection.
+ debug('Upgrading socket connection to TLS');
+ const servername = opts.servername || host;
+ return tls_1.default.connect(Object.assign(Object.assign({}, omit(opts, 'host', 'hostname', 'path', 'port')), { socket,
+ servername }));
+ }
+ return socket;
+ });
+ }
+}
+exports.default = SocksProxyAgent;
+function omit(obj, ...keys) {
+ const ret = {};
+ let key;
+ for (key in obj) {
+ if (!keys.includes(key)) {
+ ret[key] = obj[key];
+ }
+ }
+ return ret;
+}
+//# sourceMappingURL=agent.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/node-gyp/node_modules/socks-proxy-agent/dist/agent.js.map b/deps/npm/node_modules/node-gyp/node_modules/socks-proxy-agent/dist/agent.js.map
new file mode 100644
index 00000000000000..f36e1f8bba1473
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/socks-proxy-agent/dist/agent.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,8CAAsB;AAEtB,8CAAsB;AACtB,8CAAsB;AACtB,kDAAgC;AAChC,2CAAkE;AAClE,iCAAoE;AAGpE,MAAM,KAAK,GAAG,eAAW,CAAC,mBAAmB,CAAC,CAAC;AAE/C,SAAS,SAAS,CAAC,IAAY;IAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACtC,aAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YAC7B,IAAI,GAAG,EAAE;gBACR,MAAM,CAAC,GAAG,CAAC,CAAC;aACZ;iBAAM;gBACN,OAAO,CAAC,GAAG,CAAC,CAAC;aACb;QACF,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CACvB,IAA4B;IAE5B,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,IAAI,GAAuB,CAAC,CAAC;IAEjC,0DAA0D;IAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC;IACxC,IAAI,CAAC,IAAI,EAAE;QACV,MAAM,IAAI,SAAS,CAAC,WAAW,CAAC,CAAC;KACjC;IAED,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;QAClC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;KACjB;SAAM,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;QACzC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;KAC/B;IAED,0EAA0E;IAC1E,iEAAiE;IACjE,IAAI,CAAC,IAAI,EAAE;QACV,IAAI,GAAG,IAAI,CAAC;KACZ;IAED,sEAAsE;IACtE,iBAAiB;IACjB,IAAI,IAAI,CAAC,QAAQ,EAAE;QAClB,QAAQ,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE;YACvC,KAAK,QAAQ;gBACZ,MAAM,GAAG,IAAI,CAAC;YACf,eAAe;YACf,KAAK,SAAS;gBACb,IAAI,GAAG,CAAC,CAAC;gBACT,MAAM;YACP,KAAK,QAAQ;gBACZ,MAAM,GAAG,IAAI,CAAC;YACf,eAAe;YACf,KAAK,OAAO,CAAC,CAAC,sCAAsC;YACpD,KAAK,SAAS;gBACb,IAAI,GAAG,CAAC,CAAC;gBACT,MAAM;YACP;gBACC,MAAM,IAAI,SAAS,CAClB,8CAA8C,IAAI,CAAC,QAAQ,EAAE,CAC7D,CAAC;SACH;KACD;IAED,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE;QACrC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE;YACvC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;SACjB;aAAM;YACN,MAAM,IAAI,SAAS,CAAC,+BAA+B,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;SAChE;KACD;IAED,MAAM,KAAK,GAAe;QACzB,IAAI;QACJ,IAAI;QACJ,IAAI;KACJ,CAAC;IAEF,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC;IAC1C,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC7B,IAAI,IAAI,CAAC,IAAI,EAAE;QACd,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;KACnB;IACD,IAAI,MAAM,EAAE;QACX,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE;YACtC,KAAK,EAAE,MAAM;YACb,UAAU,EAAE,KAAK;SACjB,CAAC,CAAC;KACH;IACD,IAAI,QAAQ,EAAE;QACb,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE;YACxC,KAAK,EAAE,QAAQ;YACf,UAAU,EAAE,KAAK;SACjB,CAAC,CAAC;KACH;IAED,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAC1B,CAAC;AAED;;;;GAIG;AACH,MAAqB,eAAgB,SAAQ,kBAAK;IAIjD,YAAY,KAAsC;QACjD,IAAI,IAA4B,CAAC;QACjC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC9B,IAAI,GAAG,aAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;SACxB;aAAM;YACN,IAAI,GAAG,KAAK,CAAC;SACb;QACD,IAAI,CAAC,IAAI,EAAE;YACV,MAAM,IAAI,SAAS,CAClB,2DAA2D,CAC3D,CAAC;SACF;QACD,KAAK,CAAC,IAAI,CAAC,CAAC;QAEZ,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;QACjC,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;IAChC,CAAC;IAED;;;;;OAKG;IACG,QAAQ,CACb,GAAkB,EAClB,IAAoB;;YAEpB,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;YAC/B,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;YAEnC,IAAI,CAAC,IAAI,EAAE;gBACV,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;aACtC;YAED,IAAI,MAAM,EAAE;gBACX,mEAAmE;gBACnE,IAAI,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;aAC7B;YAED,MAAM,SAAS,GAAuB;gBACrC,KAAK;gBACL,WAAW,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;gBAC3B,OAAO,EAAE,SAAS;gBAClB,OAAO;aACP,CAAC;YACF,KAAK,CAAC,qCAAqC,EAAE,SAAS,CAAC,CAAC;YACxD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,mBAAW,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;YACjE,KAAK,CAAC,6CAA6C,CAAC,CAAC;YAErD,IAAI,IAAI,CAAC,cAAc,EAAE;gBACxB,sDAAsD;gBACtD,8CAA8C;gBAC9C,KAAK,CAAC,oCAAoC,CAAC,CAAC;gBAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC;gBAC3C,OAAO,aAAG,CAAC,OAAO,iCACd,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,KACjD,MAAM;oBACN,UAAU,IACT,CAAC;aACH;YAED,OAAO,MAAM,CAAC;QACf,CAAC;KAAA;CACD;AArED,kCAqEC;AAED,SAAS,IAAI,CACZ,GAAM,EACN,GAAG,IAAO;IAIV,MAAM,GAAG,GAAG,EAEX,CAAC;IACF,IAAI,GAAqB,CAAC;IAC1B,KAAK,GAAG,IAAI,GAAG,EAAE;QAChB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACxB,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;SACpB;KACD;IACD,OAAO,GAAG,CAAC;AACZ,CAAC"}
\ No newline at end of file
diff --git a/deps/npm/node_modules/node-gyp/node_modules/socks-proxy-agent/dist/index.d.ts b/deps/npm/node_modules/node-gyp/node_modules/socks-proxy-agent/dist/index.d.ts
new file mode 100644
index 00000000000000..8fe0e58884a9d7
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/socks-proxy-agent/dist/index.d.ts
@@ -0,0 +1,19 @@
+///
+import { Url } from 'url';
+import { SocksProxy } from 'socks';
+import { AgentOptions } from 'agent-base';
+import _SocksProxyAgent from './agent';
+declare function createSocksProxyAgent(opts: string | createSocksProxyAgent.SocksProxyAgentOptions): _SocksProxyAgent;
+declare namespace createSocksProxyAgent {
+ interface BaseSocksProxyAgentOptions {
+ host?: string | null;
+ port?: string | number | null;
+ username?: string | null;
+ }
+ export interface SocksProxyAgentOptions extends AgentOptions, BaseSocksProxyAgentOptions, Partial> {
+ }
+ export type SocksProxyAgent = _SocksProxyAgent;
+ export const SocksProxyAgent: typeof _SocksProxyAgent;
+ export {};
+}
+export = createSocksProxyAgent;
diff --git a/deps/npm/node_modules/node-gyp/node_modules/socks-proxy-agent/dist/index.js b/deps/npm/node_modules/node-gyp/node_modules/socks-proxy-agent/dist/index.js
new file mode 100644
index 00000000000000..dd1e49a77e436c
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/socks-proxy-agent/dist/index.js
@@ -0,0 +1,14 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+const agent_1 = __importDefault(require("./agent"));
+function createSocksProxyAgent(opts) {
+ return new agent_1.default(opts);
+}
+(function (createSocksProxyAgent) {
+ createSocksProxyAgent.SocksProxyAgent = agent_1.default;
+ createSocksProxyAgent.prototype = agent_1.default.prototype;
+})(createSocksProxyAgent || (createSocksProxyAgent = {}));
+module.exports = createSocksProxyAgent;
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/node-gyp/node_modules/socks-proxy-agent/dist/index.js.map b/deps/npm/node_modules/node-gyp/node_modules/socks-proxy-agent/dist/index.js.map
new file mode 100644
index 00000000000000..56fa84868a165d
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/socks-proxy-agent/dist/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;AAGA,oDAAuC;AAEvC,SAAS,qBAAqB,CAC7B,IAA2D;IAE3D,OAAO,IAAI,eAAgB,CAAC,IAAI,CAAC,CAAC;AACnC,CAAC;AAED,WAAU,qBAAqB;IAajB,qCAAe,GAAG,eAAgB,CAAC;IAEhD,qBAAqB,CAAC,SAAS,GAAG,eAAgB,CAAC,SAAS,CAAC;AAC9D,CAAC,EAhBS,qBAAqB,KAArB,qBAAqB,QAgB9B;AAED,iBAAS,qBAAqB,CAAC"}
\ No newline at end of file
diff --git a/deps/npm/node_modules/node-gyp/node_modules/socks-proxy-agent/package.json b/deps/npm/node_modules/node-gyp/node_modules/socks-proxy-agent/package.json
new file mode 100644
index 00000000000000..bdb8367fbc524a
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/socks-proxy-agent/package.json
@@ -0,0 +1,64 @@
+{
+ "name": "socks-proxy-agent",
+ "version": "5.0.1",
+ "description": "A SOCKS proxy `http.Agent` implementation for HTTP and HTTPS",
+ "main": "dist/index",
+ "typings": "dist/index",
+ "files": [
+ "dist"
+ ],
+ "scripts": {
+ "prebuild": "rimraf dist",
+ "build": "tsc",
+ "test": "mocha --reporter spec",
+ "test-lint": "eslint src --ext .js,.ts",
+ "prepublishOnly": "npm run build"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/TooTallNate/node-socks-proxy-agent.git"
+ },
+ "keywords": [
+ "socks",
+ "socks4",
+ "socks4a",
+ "socks5",
+ "socks5h",
+ "proxy",
+ "http",
+ "https",
+ "agent"
+ ],
+ "author": "Nathan Rajlich (http://n8.io/)",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/TooTallNate/node-socks-proxy-agent/issues"
+ },
+ "dependencies": {
+ "agent-base": "^6.0.2",
+ "debug": "4",
+ "socks": "^2.3.3"
+ },
+ "devDependencies": {
+ "@types/debug": "4",
+ "@types/node": "^12.12.11",
+ "@typescript-eslint/eslint-plugin": "1.6.0",
+ "@typescript-eslint/parser": "1.1.0",
+ "eslint": "5.16.0",
+ "eslint-config-airbnb": "17.1.0",
+ "eslint-config-prettier": "4.1.0",
+ "eslint-import-resolver-typescript": "1.1.1",
+ "eslint-plugin-import": "2.16.0",
+ "eslint-plugin-jsx-a11y": "6.2.1",
+ "eslint-plugin-react": "7.12.4",
+ "mocha": "^6.2.2",
+ "proxy": "1",
+ "raw-body": "^2.3.2",
+ "rimraf": "^3.0.0",
+ "socksv5": "TooTallNate/socksv5#fix/dstSock-close-event",
+ "typescript": "^3.5.3"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+}
diff --git a/deps/npm/node_modules/node-gyp/package.json b/deps/npm/node_modules/node-gyp/package.json
index 8e256f01702f02..ec5c3c5529a217 100644
--- a/deps/npm/node_modules/node-gyp/package.json
+++ b/deps/npm/node_modules/node-gyp/package.json
@@ -11,7 +11,7 @@
"bindings",
"gyp"
],
- "version": "7.1.2",
+ "version": "8.2.0",
"installVersion": 9,
"author": "Nathan Rajlich (http://tootallnate.net)",
"repository": {
@@ -24,13 +24,13 @@
"dependencies": {
"env-paths": "^2.2.0",
"glob": "^7.1.4",
- "graceful-fs": "^4.2.3",
+ "graceful-fs": "^4.2.6",
+ "make-fetch-happen": "^8.0.14",
"nopt": "^5.0.0",
"npmlog": "^4.1.2",
- "request": "^2.88.2",
"rimraf": "^3.0.2",
- "semver": "^7.3.2",
- "tar": "^6.0.2",
+ "semver": "^7.3.5",
+ "tar": "^6.1.2",
"which": "^2.0.2"
},
"engines": {
diff --git a/deps/npm/node_modules/node-gyp/test/fixtures/test-charmap.py b/deps/npm/node_modules/node-gyp/test/fixtures/test-charmap.py
index b338f915bc38ff..63aa77bb482ef2 100644
--- a/deps/npm/node_modules/node-gyp/test/fixtures/test-charmap.py
+++ b/deps/npm/node_modules/node-gyp/test/fixtures/test-charmap.py
@@ -1,30 +1,31 @@
-from __future__ import print_function
import sys
import locale
try:
- reload(sys)
+ reload(sys)
except NameError: # Python 3
- pass
+ pass
+
def main():
- encoding = locale.getdefaultlocale()[1]
- if not encoding:
- return False
+ encoding = locale.getdefaultlocale()[1]
+ if not encoding:
+ return False
- try:
- sys.setdefaultencoding(encoding)
- except AttributeError: # Python 3
- pass
+ try:
+ sys.setdefaultencoding(encoding)
+ except AttributeError: # Python 3
+ pass
+
+ textmap = {
+ "cp936": "\u4e2d\u6587",
+ "cp1252": "Lat\u012Bna",
+ "cp932": "\u306b\u307b\u3093\u3054",
+ }
+ if encoding in textmap:
+ print(textmap[encoding])
+ return True
- textmap = {
- 'cp936': u'\u4e2d\u6587',
- 'cp1252': u'Lat\u012Bna',
- 'cp932': u'\u306b\u307b\u3093\u3054'
- }
- if encoding in textmap:
- print(textmap[encoding])
- return True
-if __name__ == '__main__':
- print(main())
+if __name__ == "__main__":
+ print(main())
diff --git a/deps/npm/node_modules/node-gyp/test/test-download.js b/deps/npm/node_modules/node-gyp/test/test-download.js
index fe373e3280ce66..71a3c0d092dfe4 100644
--- a/deps/npm/node_modules/node-gyp/test/test-download.js
+++ b/deps/npm/node_modules/node-gyp/test/test-download.js
@@ -1,8 +1,9 @@
'use strict'
-const test = require('tap').test
+const { test } = require('tap')
const fs = require('fs')
const path = require('path')
+const util = require('util')
const http = require('http')
const https = require('https')
const install = require('../lib/install')
@@ -14,191 +15,142 @@ const log = require('npmlog')
log.level = 'warn'
-test('download over http', function (t) {
+test('download over http', async (t) => {
t.plan(2)
- var server = http.createServer(function (req, res) {
- t.strictEqual(req.headers['user-agent'],
- 'node-gyp v42 (node ' + process.version + ')')
+ const server = http.createServer((req, res) => {
+ t.strictEqual(req.headers['user-agent'], `node-gyp v42 (node ${process.version})`)
res.end('ok')
- server.close()
})
- var host = 'localhost'
- server.listen(0, host, function () {
- var port = this.address().port
- var gyp = {
- opts: {},
- version: '42'
- }
- var url = 'http://' + host + ':' + port
- var req = install.test.download(gyp, {}, url)
- req.on('response', function (res) {
- var body = ''
- res.setEncoding('utf8')
- res.on('data', function (data) {
- body += data
- })
- res.on('end', function () {
- t.strictEqual(body, 'ok')
- })
- })
- })
+ t.tearDown(() => new Promise((resolve) => server.close(resolve)))
+
+ const host = 'localhost'
+ await new Promise((resolve) => server.listen(0, host, resolve))
+ const { port } = server.address()
+ const gyp = {
+ opts: {},
+ version: '42'
+ }
+ const url = `http://${host}:${port}`
+ const res = await install.test.download(gyp, url)
+ t.strictEqual(await res.text(), 'ok')
})
-test('download over https with custom ca', function (t) {
+test('download over https with custom ca', async (t) => {
t.plan(3)
- var cert = fs.readFileSync(path.join(__dirname, 'fixtures/server.crt'), 'utf8')
- var key = fs.readFileSync(path.join(__dirname, 'fixtures/server.key'), 'utf8')
+ const cafile = path.join(__dirname, '/fixtures/ca.crt')
+ const [cert, key, ca] = await Promise.all([
+ fs.promises.readFile(path.join(__dirname, 'fixtures/server.crt'), 'utf8'),
+ fs.promises.readFile(path.join(__dirname, 'fixtures/server.key'), 'utf8'),
+ install.test.readCAFile(cafile)
+ ])
- var cafile = path.join(__dirname, '/fixtures/ca.crt')
- var ca = install.test.readCAFile(cafile)
t.strictEqual(ca.length, 1)
- var options = { ca: ca, cert: cert, key: key }
- var server = https.createServer(options, function (req, res) {
- t.strictEqual(req.headers['user-agent'],
- 'node-gyp v42 (node ' + process.version + ')')
+ const options = { ca: ca, cert: cert, key: key }
+ const server = https.createServer(options, (req, res) => {
+ t.strictEqual(req.headers['user-agent'], `node-gyp v42 (node ${process.version})`)
res.end('ok')
- server.close()
})
- server.on('clientError', function (err) {
- throw err
- })
+ t.tearDown(() => new Promise((resolve) => server.close(resolve)))
- var host = 'localhost'
- server.listen(8000, host, function () {
- var port = this.address().port
- var gyp = {
- opts: { cafile: cafile },
- version: '42'
- }
- var url = 'https://' + host + ':' + port
- var req = install.test.download(gyp, {}, url)
- req.on('response', function (res) {
- var body = ''
- res.setEncoding('utf8')
- res.on('data', function (data) {
- body += data
- })
- res.on('end', function () {
- t.strictEqual(body, 'ok')
- })
- })
- })
+ server.on('clientError', (err) => { throw err })
+
+ const host = 'localhost'
+ await new Promise((resolve) => server.listen(0, host, resolve))
+ const { port } = server.address()
+ const gyp = {
+ opts: { cafile },
+ version: '42'
+ }
+ const url = `https://${host}:${port}`
+ const res = await install.test.download(gyp, url)
+ t.strictEqual(await res.text(), 'ok')
})
-test('download over http with proxy', function (t) {
+test('download over http with proxy', async (t) => {
t.plan(2)
- var server = http.createServer(function (req, res) {
- t.strictEqual(req.headers['user-agent'],
- 'node-gyp v42 (node ' + process.version + ')')
+ const server = http.createServer((_, res) => {
res.end('ok')
- pserver.close(function () {
- server.close()
- })
})
- var pserver = http.createServer(function (req, res) {
- t.strictEqual(req.headers['user-agent'],
- 'node-gyp v42 (node ' + process.version + ')')
+ const pserver = http.createServer((req, res) => {
+ t.strictEqual(req.headers['user-agent'], `node-gyp v42 (node ${process.version})`)
res.end('proxy ok')
- server.close(function () {
- pserver.close()
- })
})
- var host = 'localhost'
- server.listen(0, host, function () {
- var port = this.address().port
- pserver.listen(port + 1, host, function () {
- var gyp = {
- opts: {
- proxy: 'http://' + host + ':' + (port + 1)
- },
- version: '42'
- }
- var url = 'http://' + host + ':' + port
- var req = install.test.download(gyp, {}, url)
- req.on('response', function (res) {
- var body = ''
- res.setEncoding('utf8')
- res.on('data', function (data) {
- body += data
- })
- res.on('end', function () {
- t.strictEqual(body, 'proxy ok')
- })
- })
- })
- })
+ t.tearDown(() => Promise.all([
+ new Promise((resolve) => server.close(resolve)),
+ new Promise((resolve) => pserver.close(resolve))
+ ]))
+
+ const host = 'localhost'
+ await new Promise((resolve) => server.listen(0, host, resolve))
+ const { port } = server.address()
+ await new Promise((resolve) => pserver.listen(port + 1, host, resolve))
+ const gyp = {
+ opts: {
+ proxy: `http://${host}:${port + 1}`,
+ noproxy: 'bad'
+ },
+ version: '42'
+ }
+ const url = `http://${host}:${port}`
+ const res = await install.test.download(gyp, url)
+ t.strictEqual(await res.text(), 'proxy ok')
})
-test('download over http with noproxy', function (t) {
+test('download over http with noproxy', async (t) => {
t.plan(2)
- var server = http.createServer(function (req, res) {
- t.strictEqual(req.headers['user-agent'],
- 'node-gyp v42 (node ' + process.version + ')')
+ const server = http.createServer((req, res) => {
+ t.strictEqual(req.headers['user-agent'], `node-gyp v42 (node ${process.version})`)
res.end('ok')
- pserver.close(function () {
- server.close()
- })
})
- var pserver = http.createServer(function (req, res) {
- t.strictEqual(req.headers['user-agent'],
- 'node-gyp v42 (node ' + process.version + ')')
+ const pserver = http.createServer((_, res) => {
res.end('proxy ok')
- server.close(function () {
- pserver.close()
- })
})
- var host = 'localhost'
- server.listen(0, host, function () {
- var port = this.address().port
- pserver.listen(port + 1, host, function () {
- var gyp = {
- opts: {
- proxy: 'http://' + host + ':' + (port + 1),
- noproxy: 'localhost'
- },
- version: '42'
- }
- var url = 'http://' + host + ':' + port
- var req = install.test.download(gyp, {}, url)
- req.on('response', function (res) {
- var body = ''
- res.setEncoding('utf8')
- res.on('data', function (data) {
- body += data
- })
- res.on('end', function () {
- t.strictEqual(body, 'ok')
- })
- })
- })
- })
+ t.tearDown(() => Promise.all([
+ new Promise((resolve) => server.close(resolve)),
+ new Promise((resolve) => pserver.close(resolve))
+ ]))
+
+ const host = 'localhost'
+ await new Promise((resolve) => server.listen(0, host, resolve))
+ const { port } = server.address()
+ await new Promise((resolve) => pserver.listen(port + 1, host, resolve))
+ const gyp = {
+ opts: {
+ proxy: `http://${host}:${port + 1}`,
+ noproxy: host
+ },
+ version: '42'
+ }
+ const url = `http://${host}:${port}`
+ const res = await install.test.download(gyp, url)
+ t.strictEqual(await res.text(), 'ok')
})
-test('download with missing cafile', function (t) {
+test('download with missing cafile', async (t) => {
t.plan(1)
- var gyp = {
+ const gyp = {
opts: { cafile: 'no.such.file' }
}
try {
- install.test.download(gyp, {}, 'http://bad/')
+ await install.test.download(gyp, {}, 'http://bad/')
} catch (e) {
t.ok(/no.such.file/.test(e.message))
}
})
-test('check certificate splitting', function (t) {
- var cas = install.test.readCAFile(path.join(__dirname, 'fixtures/ca-bundle.crt'))
+test('check certificate splitting', async (t) => {
+ const cas = await install.test.readCAFile(path.join(__dirname, 'fixtures/ca-bundle.crt'))
t.plan(2)
t.strictEqual(cas.length, 2)
t.notStrictEqual(cas[0], cas[1])
@@ -206,7 +158,7 @@ test('check certificate splitting', function (t) {
// only run this test if we are running a version of Node with predictable version path behavior
-test('download headers (actual)', function (t) {
+test('download headers (actual)', async (t) => {
if (process.env.FAST_TEST ||
process.release.name !== 'node' ||
semver.prerelease(process.version) !== null ||
@@ -214,55 +166,42 @@ test('download headers (actual)', function (t) {
return t.skip('Skipping actual download of headers due to test environment configuration')
}
- t.plan(17)
+ t.plan(12)
const expectedDir = path.join(devDir, process.version.replace(/^v/, ''))
- rimraf(expectedDir, (err) => {
- t.ifError(err)
-
- const prog = gyp()
- prog.parseArgv([])
- prog.devDir = devDir
- log.level = 'warn'
- install(prog, [], (err) => {
- t.ifError(err)
-
- fs.readFile(path.join(expectedDir, 'installVersion'), 'utf8', (err, data) => {
- t.ifError(err)
- t.strictEqual(data, '9\n', 'correct installVersion')
- })
-
- fs.readdir(path.join(expectedDir, 'include/node'), (err, list) => {
- t.ifError(err)
-
- t.ok(list.includes('common.gypi'))
- t.ok(list.includes('config.gypi'))
- t.ok(list.includes('node.h'))
- t.ok(list.includes('node_version.h'))
- t.ok(list.includes('openssl'))
- t.ok(list.includes('uv'))
- t.ok(list.includes('uv.h'))
- t.ok(list.includes('v8-platform.h'))
- t.ok(list.includes('v8.h'))
- t.ok(list.includes('zlib.h'))
- })
-
- fs.readFile(path.join(expectedDir, 'include/node/node_version.h'), 'utf8', (err, contents) => {
- t.ifError(err)
-
- const lines = contents.split('\n')
-
- // extract the 3 version parts from the defines to build a valid version string and
- // and check them against our current env version
- const version = ['major', 'minor', 'patch'].reduce((version, type) => {
- const re = new RegExp(`^#define\\sNODE_${type.toUpperCase()}_VERSION`)
- const line = lines.find((l) => re.test(l))
- const i = line ? parseInt(line.replace(/^[^0-9]+([0-9]+).*$/, '$1'), 10) : 'ERROR'
- return `${version}${type !== 'major' ? '.' : 'v'}${i}`
- }, '')
-
- t.strictEqual(version, process.version)
- })
- })
- })
+ await util.promisify(rimraf)(expectedDir)
+
+ const prog = gyp()
+ prog.parseArgv([])
+ prog.devDir = devDir
+ log.level = 'warn'
+ await util.promisify(install)(prog, [])
+
+ const data = await fs.promises.readFile(path.join(expectedDir, 'installVersion'), 'utf8')
+ t.strictEqual(data, '9\n', 'correct installVersion')
+
+ const list = await fs.promises.readdir(path.join(expectedDir, 'include/node'))
+ t.ok(list.includes('common.gypi'))
+ t.ok(list.includes('config.gypi'))
+ t.ok(list.includes('node.h'))
+ t.ok(list.includes('node_version.h'))
+ t.ok(list.includes('openssl'))
+ t.ok(list.includes('uv'))
+ t.ok(list.includes('uv.h'))
+ t.ok(list.includes('v8-platform.h'))
+ t.ok(list.includes('v8.h'))
+ t.ok(list.includes('zlib.h'))
+
+ const lines = (await fs.promises.readFile(path.join(expectedDir, 'include/node/node_version.h'), 'utf8')).split('\n')
+
+ // extract the 3 version parts from the defines to build a valid version string and
+ // and check them against our current env version
+ const version = ['major', 'minor', 'patch'].reduce((version, type) => {
+ const re = new RegExp(`^#define\\sNODE_${type.toUpperCase()}_VERSION`)
+ const line = lines.find((l) => re.test(l))
+ const i = line ? parseInt(line.replace(/^[^0-9]+([0-9]+).*$/, '$1'), 10) : 'ERROR'
+ return `${version}${type !== 'major' ? '.' : 'v'}${i}`
+ }, '')
+
+ t.strictEqual(version, process.version)
})
diff --git a/deps/npm/node_modules/node-gyp/test/test-find-python.js b/deps/npm/node_modules/node-gyp/test/test-find-python.js
index 6be887f7eb3fcf..67d0b2664f0b1f 100644
--- a/deps/npm/node_modules/node-gyp/test/test-find-python.js
+++ b/deps/npm/node_modules/node-gyp/test/test-find-python.js
@@ -16,13 +16,8 @@ test('find python', function (t) {
t.strictEqual(err, null)
var proc = execFile(found, ['-V'], function (err, stdout, stderr) {
t.strictEqual(err, null)
- if (/Python 2/.test(stderr)) {
- t.strictEqual(stdout, '')
- t.ok(/Python 2/.test(stderr))
- } else {
- t.ok(/Python 3/.test(stdout))
- t.strictEqual(stderr, '')
- }
+ t.ok(/Python 3/.test(stdout))
+ t.strictEqual(stderr, '')
})
proc.stdout.setEncoding('utf-8')
proc.stderr.setEncoding('utf-8')
@@ -66,7 +61,7 @@ test('find python - python', function (t) {
poison(f, 'execFile')
t.strictEqual(program, '/path/python')
t.ok(/sys\.version_info/.test(args[1]))
- cb(null, '2.7.15')
+ cb(null, '3.9.1')
}
t.strictEqual(program,
process.platform === 'win32' ? '"python"' : 'python')
@@ -146,13 +141,14 @@ test('find python - no python2, no python, unix', function (t) {
})
test('find python - no python, use python launcher', function (t) {
- t.plan(3)
+ t.plan(4)
var f = new TestPythonFinder(null, done)
f.win = true
f.execFile = function (program, args, opts, cb) {
if (program === 'py.exe') {
+ t.notEqual(args.indexOf('-3'), -1)
t.notEqual(args.indexOf('-c'), -1)
return cb(null, 'Z:\\snake.exe')
}
@@ -162,7 +158,7 @@ test('find python - no python, use python launcher', function (t) {
cb(new Error('not found'))
} else if (/sys\.version_info/.test(args[args.length - 1])) {
if (program === 'Z:\\snake.exe') {
- cb(null, '2.7.14')
+ cb(null, '3.9.0')
} else {
t.fail()
}
@@ -181,9 +177,9 @@ test('find python - no python, use python launcher', function (t) {
test('find python - no python, no python launcher, good guess', function (t) {
t.plan(2)
- var re = /C:[\\/]Python37[\\/]python[.]exe/
var f = new TestPythonFinder(null, done)
f.win = true
+ const expectedProgram = f.winDefaultLocations[0]
f.execFile = function (program, args, opts, cb) {
if (program === 'py.exe') {
@@ -191,7 +187,7 @@ test('find python - no python, no python launcher, good guess', function (t) {
}
if (/sys\.executable/.test(args[args.length - 1])) {
cb(new Error('not found'))
- } else if (re.test(program) &&
+ } else if (program === expectedProgram &&
/sys\.version_info/.test(args[args.length - 1])) {
cb(null, '3.7.3')
} else {
@@ -202,7 +198,7 @@ test('find python - no python, no python launcher, good guess', function (t) {
function done (err, python) {
t.strictEqual(err, null)
- t.ok(re.test(python))
+ t.ok(python === expectedProgram)
}
})
diff --git a/deps/npm/node_modules/node-gyp/test/test-install.js b/deps/npm/node_modules/node-gyp/test/test-install.js
index c3317155e0f3d7..5039dc992eb470 100644
--- a/deps/npm/node_modules/node-gyp/test/test-install.js
+++ b/deps/npm/node_modules/node-gyp/test/test-install.js
@@ -1,38 +1,46 @@
'use strict'
-const test = require('tap').test
-const install = require('../lib/install').test.install
+const { test } = require('tap')
+const { test: { install } } = require('../lib/install')
+const log = require('npmlog')
-require('npmlog').level = 'error' // we expect a warning
+log.level = 'error' // we expect a warning
-test('EACCES retry once', function (t) {
+test('EACCES retry once', async (t) => {
t.plan(3)
- var fs = {}
- fs.stat = function (path, cb) {
- var err = new Error()
- err.code = 'EACCES'
- cb(err)
- t.ok(true)
+ const fs = {
+ promises: {
+ stat (_) {
+ const err = new Error()
+ err.code = 'EACCES'
+ t.ok(true)
+ throw err
+ }
+ }
}
- var gyp = {}
- gyp.devDir = __dirname
- gyp.opts = {}
- gyp.opts.ensure = true
- gyp.commands = {}
- gyp.commands.install = function (argv, cb) {
- install(fs, gyp, argv, cb)
- }
- gyp.commands.remove = function (argv, cb) {
- cb()
+ const Gyp = {
+ devDir: __dirname,
+ opts: {
+ ensure: true
+ },
+ commands: {
+ install (argv, cb) {
+ install(fs, Gyp, argv).then(cb, cb)
+ },
+ remove (_, cb) {
+ cb()
+ }
+ }
}
- gyp.commands.install([], function (err) {
+ try {
+ await install(fs, Gyp, [])
+ } catch (err) {
t.ok(true)
if (/"pre" versions of node cannot be installed/.test(err.message)) {
t.ok(true)
- t.ok(true)
}
- })
+ }
})
diff --git a/deps/npm/node_modules/node-gyp/update-gyp.py b/deps/npm/node_modules/node-gyp/update-gyp.py
index aa2bcb9eb991ff..bb84f071a61d30 100755
--- a/deps/npm/node_modules/node-gyp/update-gyp.py
+++ b/deps/npm/node_modules/node-gyp/update-gyp.py
@@ -4,14 +4,13 @@
import os
import shutil
import subprocess
-import sys
import tarfile
import tempfile
import urllib.request
BASE_URL = "https://github.com/nodejs/gyp-next/archive/"
CHECKOUT_PATH = os.path.dirname(os.path.realpath(__file__))
-CHECKOUT_GYP_PATH = os.path.join(CHECKOUT_PATH, 'gyp')
+CHECKOUT_GYP_PATH = os.path.join(CHECKOUT_PATH, "gyp")
parser = argparse.ArgumentParser()
parser.add_argument("tag", help="gyp tag to update to")
@@ -21,25 +20,27 @@
changed_files = subprocess.check_output(["git", "diff", "--name-only"]).strip()
if changed_files:
- raise Exception("Can't update gyp while you have uncommitted changes in node-gyp")
+ raise Exception("Can't update gyp while you have uncommitted changes in node-gyp")
with tempfile.TemporaryDirectory() as tmp_dir:
- tar_file = os.path.join(tmp_dir, 'gyp.tar.gz')
- unzip_target = os.path.join(tmp_dir, 'gyp')
- with open(tar_file, 'wb') as f:
- print("Downloading gyp-next@" + args.tag + " into temporary directory...")
- print("From: " + tar_url)
- with urllib.request.urlopen(tar_url) as in_file:
- f.write(in_file.read())
-
- print("Unzipping...")
- with tarfile.open(tar_file, "r:gz") as tar_ref:
- tar_ref.extractall(unzip_target)
-
- print("Moving to current checkout (" + CHECKOUT_PATH + ")...")
- if os.path.exists(CHECKOUT_GYP_PATH):
- shutil.rmtree(CHECKOUT_GYP_PATH)
- shutil.move(os.path.join(unzip_target, os.listdir(unzip_target)[0]), CHECKOUT_GYP_PATH)
+ tar_file = os.path.join(tmp_dir, "gyp.tar.gz")
+ unzip_target = os.path.join(tmp_dir, "gyp")
+ with open(tar_file, "wb") as f:
+ print("Downloading gyp-next@" + args.tag + " into temporary directory...")
+ print("From: " + tar_url)
+ with urllib.request.urlopen(tar_url) as in_file:
+ f.write(in_file.read())
+
+ print("Unzipping...")
+ with tarfile.open(tar_file, "r:gz") as tar_ref:
+ tar_ref.extractall(unzip_target)
+
+ print("Moving to current checkout (" + CHECKOUT_PATH + ")...")
+ if os.path.exists(CHECKOUT_GYP_PATH):
+ shutil.rmtree(CHECKOUT_GYP_PATH)
+ shutil.move(
+ os.path.join(unzip_target, os.listdir(unzip_target)[0]), CHECKOUT_GYP_PATH
+ )
subprocess.check_output(["git", "add", "gyp"], cwd=CHECKOUT_PATH)
-subprocess.check_output(["git", "commit", "-m", "gyp: update gyp to " + args.tag])
+subprocess.check_output(["git", "commit", "-m", "feat(gyp): update gyp to " + args.tag])
diff --git a/deps/npm/node_modules/oauth-sign/LICENSE b/deps/npm/node_modules/oauth-sign/LICENSE
deleted file mode 100644
index a4a9aee0c2fa14..00000000000000
--- a/deps/npm/node_modules/oauth-sign/LICENSE
+++ /dev/null
@@ -1,55 +0,0 @@
-Apache License
-
-Version 2.0, January 2004
-
-http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
-
-"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
-
-"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
-
-"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
-
-"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
-
-"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
-
-"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
-
-"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
-
-"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
-
-"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
-
-You must give any other recipients of the Work or Derivative Works a copy of this License; and
-
-You must cause any modified files to carry prominent notices stating that You changed the files; and
-
-You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
-
-If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
\ No newline at end of file
diff --git a/deps/npm/node_modules/oauth-sign/index.js b/deps/npm/node_modules/oauth-sign/index.js
deleted file mode 100644
index 6482f77b54be85..00000000000000
--- a/deps/npm/node_modules/oauth-sign/index.js
+++ /dev/null
@@ -1,146 +0,0 @@
-var crypto = require('crypto')
-
-function sha (key, body, algorithm) {
- return crypto.createHmac(algorithm, key).update(body).digest('base64')
-}
-
-function rsa (key, body) {
- return crypto.createSign('RSA-SHA1').update(body).sign(key, 'base64')
-}
-
-function rfc3986 (str) {
- return encodeURIComponent(str)
- .replace(/!/g,'%21')
- .replace(/\*/g,'%2A')
- .replace(/\(/g,'%28')
- .replace(/\)/g,'%29')
- .replace(/'/g,'%27')
-}
-
-// Maps object to bi-dimensional array
-// Converts { foo: 'A', bar: [ 'b', 'B' ]} to
-// [ ['foo', 'A'], ['bar', 'b'], ['bar', 'B'] ]
-function map (obj) {
- var key, val, arr = []
- for (key in obj) {
- val = obj[key]
- if (Array.isArray(val))
- for (var i = 0; i < val.length; i++)
- arr.push([key, val[i]])
- else if (typeof val === 'object')
- for (var prop in val)
- arr.push([key + '[' + prop + ']', val[prop]])
- else
- arr.push([key, val])
- }
- return arr
-}
-
-// Compare function for sort
-function compare (a, b) {
- return a > b ? 1 : a < b ? -1 : 0
-}
-
-function generateBase (httpMethod, base_uri, params) {
- // adapted from https://dev.twitter.com/docs/auth/oauth and
- // https://dev.twitter.com/docs/auth/creating-signature
-
- // Parameter normalization
- // http://tools.ietf.org/html/rfc5849#section-3.4.1.3.2
- var normalized = map(params)
- // 1. First, the name and value of each parameter are encoded
- .map(function (p) {
- return [ rfc3986(p[0]), rfc3986(p[1] || '') ]
- })
- // 2. The parameters are sorted by name, using ascending byte value
- // ordering. If two or more parameters share the same name, they
- // are sorted by their value.
- .sort(function (a, b) {
- return compare(a[0], b[0]) || compare(a[1], b[1])
- })
- // 3. The name of each parameter is concatenated to its corresponding
- // value using an "=" character (ASCII code 61) as a separator, even
- // if the value is empty.
- .map(function (p) { return p.join('=') })
- // 4. The sorted name/value pairs are concatenated together into a
- // single string by using an "&" character (ASCII code 38) as
- // separator.
- .join('&')
-
- var base = [
- rfc3986(httpMethod ? httpMethod.toUpperCase() : 'GET'),
- rfc3986(base_uri),
- rfc3986(normalized)
- ].join('&')
-
- return base
-}
-
-function hmacsign (httpMethod, base_uri, params, consumer_secret, token_secret) {
- var base = generateBase(httpMethod, base_uri, params)
- var key = [
- consumer_secret || '',
- token_secret || ''
- ].map(rfc3986).join('&')
-
- return sha(key, base, 'sha1')
-}
-
-function hmacsign256 (httpMethod, base_uri, params, consumer_secret, token_secret) {
- var base = generateBase(httpMethod, base_uri, params)
- var key = [
- consumer_secret || '',
- token_secret || ''
- ].map(rfc3986).join('&')
-
- return sha(key, base, 'sha256')
-}
-
-function rsasign (httpMethod, base_uri, params, private_key, token_secret) {
- var base = generateBase(httpMethod, base_uri, params)
- var key = private_key || ''
-
- return rsa(key, base)
-}
-
-function plaintext (consumer_secret, token_secret) {
- var key = [
- consumer_secret || '',
- token_secret || ''
- ].map(rfc3986).join('&')
-
- return key
-}
-
-function sign (signMethod, httpMethod, base_uri, params, consumer_secret, token_secret) {
- var method
- var skipArgs = 1
-
- switch (signMethod) {
- case 'RSA-SHA1':
- method = rsasign
- break
- case 'HMAC-SHA1':
- method = hmacsign
- break
- case 'HMAC-SHA256':
- method = hmacsign256
- break
- case 'PLAINTEXT':
- method = plaintext
- skipArgs = 4
- break
- default:
- throw new Error('Signature method not supported: ' + signMethod)
- }
-
- return method.apply(null, [].slice.call(arguments, skipArgs))
-}
-
-exports.hmacsign = hmacsign
-exports.hmacsign256 = hmacsign256
-exports.rsasign = rsasign
-exports.plaintext = plaintext
-exports.sign = sign
-exports.rfc3986 = rfc3986
-exports.generateBase = generateBase
\ No newline at end of file
diff --git a/deps/npm/node_modules/oauth-sign/package.json b/deps/npm/node_modules/oauth-sign/package.json
deleted file mode 100644
index 036d2b0bc6687a..00000000000000
--- a/deps/npm/node_modules/oauth-sign/package.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "author": "Mikeal Rogers (http://www.futurealoof.com)",
- "name": "oauth-sign",
- "description": "OAuth 1 signing. Formerly a vendor lib in mikeal/request, now a standalone module.",
- "version": "0.9.0",
- "license": "Apache-2.0",
- "repository": {
- "url": "https://github.com/mikeal/oauth-sign"
- },
- "main": "index.js",
- "files": [
- "index.js"
- ],
- "dependencies": {},
- "devDependencies": {},
- "optionalDependencies": {},
- "engines": {
- "node": "*"
- },
- "scripts": {
- "test": "node test.js"
- }
-}
diff --git a/deps/npm/node_modules/pacote/package.json b/deps/npm/node_modules/pacote/package.json
index 437bb8f79e1d88..17933ad128e3c0 100644
--- a/deps/npm/node_modules/pacote/package.json
+++ b/deps/npm/node_modules/pacote/package.json
@@ -1,6 +1,6 @@
{
"name": "pacote",
- "version": "11.3.5",
+ "version": "12.0.0",
"description": "JavaScript package downloader",
"author": "Isaac Z. Schlueter (https://izs.me)",
"bin": {
@@ -36,7 +36,7 @@
"@npmcli/git": "^2.1.0",
"@npmcli/installed-package-contents": "^1.0.6",
"@npmcli/promise-spawn": "^1.2.0",
- "@npmcli/run-script": "^1.8.2",
+ "@npmcli/run-script": "^2.0.0",
"cacache": "^15.0.5",
"chownr": "^2.0.0",
"fs-minipass": "^2.1.0",
@@ -54,7 +54,7 @@
"tar": "^6.1.0"
},
"engines": {
- "node": ">=10"
+ "node": "^12.13.0 || ^14.15.0 || >=16"
},
"repository": "git@github.com:npm/pacote"
}
diff --git a/deps/npm/node_modules/performance-now/.tm_properties b/deps/npm/node_modules/performance-now/.tm_properties
deleted file mode 100644
index 4b8eb3f610c314..00000000000000
--- a/deps/npm/node_modules/performance-now/.tm_properties
+++ /dev/null
@@ -1,7 +0,0 @@
-excludeDirectories = "{.git,node_modules}"
-excludeInFolderSearch = "{excludeDirectories,lib}"
-
-includeFiles = "{.gitignore,.npmignore,.travis.yml}"
-
-[ attr.untitled ]
-fileType = 'source.coffee'
\ No newline at end of file
diff --git a/deps/npm/node_modules/performance-now/lib/performance-now.js b/deps/npm/node_modules/performance-now/lib/performance-now.js
deleted file mode 100644
index 37f569da1e066b..00000000000000
--- a/deps/npm/node_modules/performance-now/lib/performance-now.js
+++ /dev/null
@@ -1,36 +0,0 @@
-// Generated by CoffeeScript 1.12.2
-(function() {
- var getNanoSeconds, hrtime, loadTime, moduleLoadTime, nodeLoadTime, upTime;
-
- if ((typeof performance !== "undefined" && performance !== null) && performance.now) {
- module.exports = function() {
- return performance.now();
- };
- } else if ((typeof process !== "undefined" && process !== null) && process.hrtime) {
- module.exports = function() {
- return (getNanoSeconds() - nodeLoadTime) / 1e6;
- };
- hrtime = process.hrtime;
- getNanoSeconds = function() {
- var hr;
- hr = hrtime();
- return hr[0] * 1e9 + hr[1];
- };
- moduleLoadTime = getNanoSeconds();
- upTime = process.uptime() * 1e9;
- nodeLoadTime = moduleLoadTime - upTime;
- } else if (Date.now) {
- module.exports = function() {
- return Date.now() - loadTime;
- };
- loadTime = Date.now();
- } else {
- module.exports = function() {
- return new Date().getTime() - loadTime;
- };
- loadTime = new Date().getTime();
- }
-
-}).call(this);
-
-//# sourceMappingURL=performance-now.js.map
diff --git a/deps/npm/node_modules/performance-now/lib/performance-now.js.map b/deps/npm/node_modules/performance-now/lib/performance-now.js.map
deleted file mode 100644
index bef83626d876dd..00000000000000
--- a/deps/npm/node_modules/performance-now/lib/performance-now.js.map
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "version": 3,
- "file": "performance-now.js",
- "sourceRoot": "..",
- "sources": [
- "src/performance-now.coffee"
- ],
- "names": [],
- "mappings": ";AAAA;AAAA,MAAA;;EAAA,IAAG,4DAAA,IAAiB,WAAW,CAAC,GAAhC;IACE,MAAM,CAAC,OAAP,GAAiB,SAAA;aAAG,WAAW,CAAC,GAAZ,CAAA;IAAH,EADnB;GAAA,MAEK,IAAG,oDAAA,IAAa,OAAO,CAAC,MAAxB;IACH,MAAM,CAAC,OAAP,GAAiB,SAAA;aAAG,CAAC,cAAA,CAAA,CAAA,GAAmB,YAApB,CAAA,GAAoC;IAAvC;IACjB,MAAA,GAAS,OAAO,CAAC;IACjB,cAAA,GAAiB,SAAA;AACf,UAAA;MAAA,EAAA,GAAK,MAAA,CAAA;aACL,EAAG,CAAA,CAAA,CAAH,GAAQ,GAAR,GAAc,EAAG,CAAA,CAAA;IAFF;IAGjB,cAAA,GAAiB,cAAA,CAAA;IACjB,MAAA,GAAS,OAAO,CAAC,MAAR,CAAA,CAAA,GAAmB;IAC5B,YAAA,GAAe,cAAA,GAAiB,OAR7B;GAAA,MASA,IAAG,IAAI,CAAC,GAAR;IACH,MAAM,CAAC,OAAP,GAAiB,SAAA;aAAG,IAAI,CAAC,GAAL,CAAA,CAAA,GAAa;IAAhB;IACjB,QAAA,GAAW,IAAI,CAAC,GAAL,CAAA,EAFR;GAAA,MAAA;IAIH,MAAM,CAAC,OAAP,GAAiB,SAAA;aAAO,IAAA,IAAA,CAAA,CAAM,CAAC,OAAP,CAAA,CAAJ,GAAuB;IAA1B;IACjB,QAAA,GAAe,IAAA,IAAA,CAAA,CAAM,CAAC,OAAP,CAAA,EALZ;;AAXL"
-}
\ No newline at end of file
diff --git a/deps/npm/node_modules/performance-now/package.json b/deps/npm/node_modules/performance-now/package.json
deleted file mode 100644
index 962bfc85ff8fe1..00000000000000
--- a/deps/npm/node_modules/performance-now/package.json
+++ /dev/null
@@ -1,35 +0,0 @@
-{
- "name": "performance-now",
- "description": "Implements performance.now (based on process.hrtime).",
- "keywords": [],
- "version": "2.1.0",
- "author": "Braveg1rl ",
- "license": "MIT",
- "homepage": "https://github.com/braveg1rl/performance-now",
- "bugs": "https://github.com/braveg1rl/performance-now/issues",
- "repository": {
- "type": "git",
- "url": "git://github.com/braveg1rl/performance-now.git"
- },
- "private": false,
- "dependencies": {},
- "devDependencies": {
- "bluebird": "^3.4.7",
- "call-delayed": "^1.0.0",
- "chai": "^3.5.0",
- "chai-increasing": "^1.2.0",
- "coffee-script": "~1.12.2",
- "mocha": "~3.2.0",
- "pre-commit": "^1.2.2"
- },
- "optionalDependencies": {},
- "main": "lib/performance-now.js",
- "scripts": {
- "build": "mkdir -p lib && rm -rf lib/* && node_modules/.bin/coffee --compile -m --output lib/ src/",
- "prepublish": "npm test",
- "pretest": "npm run build",
- "test": "node_modules/.bin/mocha",
- "watch": "node_modules/.bin/coffee --watch --compile --output lib/ src/"
- },
- "typings": "src/index.d.ts"
-}
diff --git a/deps/npm/node_modules/performance-now/src/index.d.ts b/deps/npm/node_modules/performance-now/src/index.d.ts
deleted file mode 100644
index 68dca8eddc83ca..00000000000000
--- a/deps/npm/node_modules/performance-now/src/index.d.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-// This file describes the package to typescript.
-
-/**
- * Returns the number of milliseconds since the page was loaded (if browser)
- * or the node process was started.
- */
-declare function now(): number;
-export = now;
diff --git a/deps/npm/node_modules/performance-now/src/performance-now.coffee b/deps/npm/node_modules/performance-now/src/performance-now.coffee
deleted file mode 100644
index a8e075a40feda9..00000000000000
--- a/deps/npm/node_modules/performance-now/src/performance-now.coffee
+++ /dev/null
@@ -1,17 +0,0 @@
-if performance? and performance.now
- module.exports = -> performance.now()
-else if process? and process.hrtime
- module.exports = -> (getNanoSeconds() - nodeLoadTime) / 1e6
- hrtime = process.hrtime
- getNanoSeconds = ->
- hr = hrtime()
- hr[0] * 1e9 + hr[1]
- moduleLoadTime = getNanoSeconds()
- upTime = process.uptime() * 1e9
- nodeLoadTime = moduleLoadTime - upTime
-else if Date.now
- module.exports = -> Date.now() - loadTime
- loadTime = Date.now()
-else
- module.exports = -> new Date().getTime() - loadTime
- loadTime = new Date().getTime()
diff --git a/deps/npm/node_modules/performance-now/test/mocha.opts b/deps/npm/node_modules/performance-now/test/mocha.opts
deleted file mode 100644
index 55d8492707f336..00000000000000
--- a/deps/npm/node_modules/performance-now/test/mocha.opts
+++ /dev/null
@@ -1,3 +0,0 @@
---require coffee-script/register
---compilers coffee:coffee-script/register
---reporter spec
\ No newline at end of file
diff --git a/deps/npm/node_modules/performance-now/test/performance-now.coffee b/deps/npm/node_modules/performance-now/test/performance-now.coffee
deleted file mode 100644
index c99e95cd2cb860..00000000000000
--- a/deps/npm/node_modules/performance-now/test/performance-now.coffee
+++ /dev/null
@@ -1,43 +0,0 @@
-chai = require "chai"
-chai.use(require "chai-increasing")
-{assert,expect} = chai
-Bluebird = require "bluebird"
-
-now = require "../"
-
-getUptime = -> process.uptime() * 1e3
-
-describe "now", ->
- it "reported time differs at most 1ms from a freshly reported uptime", ->
- assert.isAtMost Math.abs(now()-getUptime()), 1
-
- it "two subsequent calls return an increasing number", ->
- assert.isBelow now(), now()
-
- it "has less than 10 microseconds overhead", ->
- assert.isBelow Math.abs(now() - now()), 0.010
-
- it "can be called 1 million times in under 1 second (averaging under 1 microsecond per call)", ->
- @timeout 1000
- now() for [0...1e6]
- undefined
-
- it "for 10,000 numbers, number n is never bigger than number n-1", ->
- stamps = (now() for [1...10000])
- expect(stamps).to.be.increasing
-
- it "shows that at least 0.2 ms has passed after a timeout of 1 ms", ->
- earlier = now()
- Bluebird.resolve().delay(1).then -> assert.isAbove (now()-earlier), 0.2
-
- it "shows that at most 3 ms has passed after a timeout of 1 ms", ->
- earlier = now()
- Bluebird.resolve().delay(1).then -> assert.isBelow (now()-earlier), 3
-
- it "shows that at least 190ms ms has passed after a timeout of 200ms", ->
- earlier = now()
- Bluebird.resolve().delay(200).then -> assert.isAbove (now()-earlier), 190
-
- it "shows that at most 220 ms has passed after a timeout of 200ms", ->
- earlier = now()
- Bluebird.resolve().delay(200).then -> assert.isBelow (now()-earlier), 220
diff --git a/deps/npm/node_modules/performance-now/test/scripts.coffee b/deps/npm/node_modules/performance-now/test/scripts.coffee
deleted file mode 100644
index 16312f185c8445..00000000000000
--- a/deps/npm/node_modules/performance-now/test/scripts.coffee
+++ /dev/null
@@ -1,27 +0,0 @@
-Bluebird = require "bluebird"
-exec = require("child_process").execSync
-{assert} = require "chai"
-
-describe "scripts/initital-value.coffee (module.uptime(), expressed in milliseconds)", ->
- result = exec("./test/scripts/initial-value.coffee").toString().trim()
- it "printed #{result}", ->
- it "printed a value above 100", -> assert.isAbove result, 100
- it "printed a value below 350", -> assert.isBelow result, 350
-
-describe "scripts/delayed-require.coffee (sum of uptime and 250 ms delay`)", ->
- result = exec("./test/scripts/delayed-require.coffee").toString().trim()
- it "printed #{result}", ->
- it "printed a value above 350", -> assert.isAbove result, 350
- it "printed a value below 600", -> assert.isBelow result, 600
-
-describe "scripts/delayed-call.coffee (sum of uptime and 250 ms delay`)", ->
- result = exec("./test/scripts/delayed-call.coffee").toString().trim()
- it "printed #{result}", ->
- it "printed a value above 350", -> assert.isAbove result, 350
- it "printed a value below 600", -> assert.isBelow result, 600
-
-describe "scripts/difference.coffee", ->
- result = exec("./test/scripts/difference.coffee").toString().trim()
- it "printed #{result}", ->
- it "printed a value above 0.005", -> assert.isAbove result, 0.005
- it "printed a value below 0.07", -> assert.isBelow result, 0.07
diff --git a/deps/npm/node_modules/performance-now/test/scripts/delayed-call.coffee b/deps/npm/node_modules/performance-now/test/scripts/delayed-call.coffee
deleted file mode 100755
index 0c3bab5949b74b..00000000000000
--- a/deps/npm/node_modules/performance-now/test/scripts/delayed-call.coffee
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env ./node_modules/.bin/coffee
-
-###
-Expected output is a number above 350 and below 600.
-The time reported is relative to the time the node.js process was started
-this is approximately at `(Date.now() process.uptime() * 1000)`
-###
-
-delay = require "call-delayed"
-now = require "../../lib/performance-now"
-delay 250, -> console.log now().toFixed 3
diff --git a/deps/npm/node_modules/performance-now/test/scripts/delayed-require.coffee b/deps/npm/node_modules/performance-now/test/scripts/delayed-require.coffee
deleted file mode 100755
index 3ddee952f2c30c..00000000000000
--- a/deps/npm/node_modules/performance-now/test/scripts/delayed-require.coffee
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/usr/bin/env ./node_modules/.bin/coffee
-
-###
-Expected output is a number above 350 and below 600.
-The time reported is relative to the time the node.js process was started
-this is approximately at `(Date.now() process.uptime() * 1000)`
-###
-
-delay = require "call-delayed"
-delay 250, ->
- now = require "../../lib/performance-now"
- console.log now().toFixed 3
diff --git a/deps/npm/node_modules/performance-now/test/scripts/difference.coffee b/deps/npm/node_modules/performance-now/test/scripts/difference.coffee
deleted file mode 100755
index 0b5edf6c6b2a02..00000000000000
--- a/deps/npm/node_modules/performance-now/test/scripts/difference.coffee
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/usr/bin/env ./node_modules/.bin/coffee
-
-# Expected output is above 0.005 and below 0.07.
-
-now = require('../../lib/performance-now')
-console.log -(now() - now()).toFixed 3
diff --git a/deps/npm/node_modules/performance-now/test/scripts/initial-value.coffee b/deps/npm/node_modules/performance-now/test/scripts/initial-value.coffee
deleted file mode 100755
index 19ef4e0f3e732f..00000000000000
--- a/deps/npm/node_modules/performance-now/test/scripts/initial-value.coffee
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/env ./node_modules/.bin/coffee
-
-###
-Expected output is a number above 100 and below 350.
-The time reported is relative to the time the node.js process was started
-this is approximately at `(Date.now() process.uptime() * 1000)`
-###
-
-now = require '../../lib/performance-now'
-console.log now().toFixed 3
diff --git a/deps/npm/node_modules/psl/browserstack-logo.svg b/deps/npm/node_modules/psl/browserstack-logo.svg
deleted file mode 100644
index 195f64d2feab41..00000000000000
--- a/deps/npm/node_modules/psl/browserstack-logo.svg
+++ /dev/null
@@ -1,90 +0,0 @@
-
-
-
-
-Browserstack-logo-white
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/deps/npm/node_modules/psl/data/rules.json b/deps/npm/node_modules/psl/data/rules.json
deleted file mode 100644
index e19abdc8938dc4..00000000000000
--- a/deps/npm/node_modules/psl/data/rules.json
+++ /dev/null
@@ -1,8834 +0,0 @@
-[
-"ac",
-"com.ac",
-"edu.ac",
-"gov.ac",
-"net.ac",
-"mil.ac",
-"org.ac",
-"ad",
-"nom.ad",
-"ae",
-"co.ae",
-"net.ae",
-"org.ae",
-"sch.ae",
-"ac.ae",
-"gov.ae",
-"mil.ae",
-"aero",
-"accident-investigation.aero",
-"accident-prevention.aero",
-"aerobatic.aero",
-"aeroclub.aero",
-"aerodrome.aero",
-"agents.aero",
-"aircraft.aero",
-"airline.aero",
-"airport.aero",
-"air-surveillance.aero",
-"airtraffic.aero",
-"air-traffic-control.aero",
-"ambulance.aero",
-"amusement.aero",
-"association.aero",
-"author.aero",
-"ballooning.aero",
-"broker.aero",
-"caa.aero",
-"cargo.aero",
-"catering.aero",
-"certification.aero",
-"championship.aero",
-"charter.aero",
-"civilaviation.aero",
-"club.aero",
-"conference.aero",
-"consultant.aero",
-"consulting.aero",
-"control.aero",
-"council.aero",
-"crew.aero",
-"design.aero",
-"dgca.aero",
-"educator.aero",
-"emergency.aero",
-"engine.aero",
-"engineer.aero",
-"entertainment.aero",
-"equipment.aero",
-"exchange.aero",
-"express.aero",
-"federation.aero",
-"flight.aero",
-"freight.aero",
-"fuel.aero",
-"gliding.aero",
-"government.aero",
-"groundhandling.aero",
-"group.aero",
-"hanggliding.aero",
-"homebuilt.aero",
-"insurance.aero",
-"journal.aero",
-"journalist.aero",
-"leasing.aero",
-"logistics.aero",
-"magazine.aero",
-"maintenance.aero",
-"media.aero",
-"microlight.aero",
-"modelling.aero",
-"navigation.aero",
-"parachuting.aero",
-"paragliding.aero",
-"passenger-association.aero",
-"pilot.aero",
-"press.aero",
-"production.aero",
-"recreation.aero",
-"repbody.aero",
-"res.aero",
-"research.aero",
-"rotorcraft.aero",
-"safety.aero",
-"scientist.aero",
-"services.aero",
-"show.aero",
-"skydiving.aero",
-"software.aero",
-"student.aero",
-"trader.aero",
-"trading.aero",
-"trainer.aero",
-"union.aero",
-"workinggroup.aero",
-"works.aero",
-"af",
-"gov.af",
-"com.af",
-"org.af",
-"net.af",
-"edu.af",
-"ag",
-"com.ag",
-"org.ag",
-"net.ag",
-"co.ag",
-"nom.ag",
-"ai",
-"off.ai",
-"com.ai",
-"net.ai",
-"org.ai",
-"al",
-"com.al",
-"edu.al",
-"gov.al",
-"mil.al",
-"net.al",
-"org.al",
-"am",
-"co.am",
-"com.am",
-"commune.am",
-"net.am",
-"org.am",
-"ao",
-"ed.ao",
-"gv.ao",
-"og.ao",
-"co.ao",
-"pb.ao",
-"it.ao",
-"aq",
-"ar",
-"com.ar",
-"edu.ar",
-"gob.ar",
-"gov.ar",
-"int.ar",
-"mil.ar",
-"musica.ar",
-"net.ar",
-"org.ar",
-"tur.ar",
-"arpa",
-"e164.arpa",
-"in-addr.arpa",
-"ip6.arpa",
-"iris.arpa",
-"uri.arpa",
-"urn.arpa",
-"as",
-"gov.as",
-"asia",
-"at",
-"ac.at",
-"co.at",
-"gv.at",
-"or.at",
-"au",
-"com.au",
-"net.au",
-"org.au",
-"edu.au",
-"gov.au",
-"asn.au",
-"id.au",
-"info.au",
-"conf.au",
-"oz.au",
-"act.au",
-"nsw.au",
-"nt.au",
-"qld.au",
-"sa.au",
-"tas.au",
-"vic.au",
-"wa.au",
-"act.edu.au",
-"catholic.edu.au",
-"nsw.edu.au",
-"nt.edu.au",
-"qld.edu.au",
-"sa.edu.au",
-"tas.edu.au",
-"vic.edu.au",
-"wa.edu.au",
-"qld.gov.au",
-"sa.gov.au",
-"tas.gov.au",
-"vic.gov.au",
-"wa.gov.au",
-"education.tas.edu.au",
-"schools.nsw.edu.au",
-"aw",
-"com.aw",
-"ax",
-"az",
-"com.az",
-"net.az",
-"int.az",
-"gov.az",
-"org.az",
-"edu.az",
-"info.az",
-"pp.az",
-"mil.az",
-"name.az",
-"pro.az",
-"biz.az",
-"ba",
-"com.ba",
-"edu.ba",
-"gov.ba",
-"mil.ba",
-"net.ba",
-"org.ba",
-"bb",
-"biz.bb",
-"co.bb",
-"com.bb",
-"edu.bb",
-"gov.bb",
-"info.bb",
-"net.bb",
-"org.bb",
-"store.bb",
-"tv.bb",
-"*.bd",
-"be",
-"ac.be",
-"bf",
-"gov.bf",
-"bg",
-"a.bg",
-"b.bg",
-"c.bg",
-"d.bg",
-"e.bg",
-"f.bg",
-"g.bg",
-"h.bg",
-"i.bg",
-"j.bg",
-"k.bg",
-"l.bg",
-"m.bg",
-"n.bg",
-"o.bg",
-"p.bg",
-"q.bg",
-"r.bg",
-"s.bg",
-"t.bg",
-"u.bg",
-"v.bg",
-"w.bg",
-"x.bg",
-"y.bg",
-"z.bg",
-"0.bg",
-"1.bg",
-"2.bg",
-"3.bg",
-"4.bg",
-"5.bg",
-"6.bg",
-"7.bg",
-"8.bg",
-"9.bg",
-"bh",
-"com.bh",
-"edu.bh",
-"net.bh",
-"org.bh",
-"gov.bh",
-"bi",
-"co.bi",
-"com.bi",
-"edu.bi",
-"or.bi",
-"org.bi",
-"biz",
-"bj",
-"asso.bj",
-"barreau.bj",
-"gouv.bj",
-"bm",
-"com.bm",
-"edu.bm",
-"gov.bm",
-"net.bm",
-"org.bm",
-"bn",
-"com.bn",
-"edu.bn",
-"gov.bn",
-"net.bn",
-"org.bn",
-"bo",
-"com.bo",
-"edu.bo",
-"gob.bo",
-"int.bo",
-"org.bo",
-"net.bo",
-"mil.bo",
-"tv.bo",
-"web.bo",
-"academia.bo",
-"agro.bo",
-"arte.bo",
-"blog.bo",
-"bolivia.bo",
-"ciencia.bo",
-"cooperativa.bo",
-"democracia.bo",
-"deporte.bo",
-"ecologia.bo",
-"economia.bo",
-"empresa.bo",
-"indigena.bo",
-"industria.bo",
-"info.bo",
-"medicina.bo",
-"movimiento.bo",
-"musica.bo",
-"natural.bo",
-"nombre.bo",
-"noticias.bo",
-"patria.bo",
-"politica.bo",
-"profesional.bo",
-"plurinacional.bo",
-"pueblo.bo",
-"revista.bo",
-"salud.bo",
-"tecnologia.bo",
-"tksat.bo",
-"transporte.bo",
-"wiki.bo",
-"br",
-"9guacu.br",
-"abc.br",
-"adm.br",
-"adv.br",
-"agr.br",
-"aju.br",
-"am.br",
-"anani.br",
-"aparecida.br",
-"arq.br",
-"art.br",
-"ato.br",
-"b.br",
-"barueri.br",
-"belem.br",
-"bhz.br",
-"bio.br",
-"blog.br",
-"bmd.br",
-"boavista.br",
-"bsb.br",
-"campinagrande.br",
-"campinas.br",
-"caxias.br",
-"cim.br",
-"cng.br",
-"cnt.br",
-"com.br",
-"contagem.br",
-"coop.br",
-"cri.br",
-"cuiaba.br",
-"curitiba.br",
-"def.br",
-"ecn.br",
-"eco.br",
-"edu.br",
-"emp.br",
-"eng.br",
-"esp.br",
-"etc.br",
-"eti.br",
-"far.br",
-"feira.br",
-"flog.br",
-"floripa.br",
-"fm.br",
-"fnd.br",
-"fortal.br",
-"fot.br",
-"foz.br",
-"fst.br",
-"g12.br",
-"ggf.br",
-"goiania.br",
-"gov.br",
-"ac.gov.br",
-"al.gov.br",
-"am.gov.br",
-"ap.gov.br",
-"ba.gov.br",
-"ce.gov.br",
-"df.gov.br",
-"es.gov.br",
-"go.gov.br",
-"ma.gov.br",
-"mg.gov.br",
-"ms.gov.br",
-"mt.gov.br",
-"pa.gov.br",
-"pb.gov.br",
-"pe.gov.br",
-"pi.gov.br",
-"pr.gov.br",
-"rj.gov.br",
-"rn.gov.br",
-"ro.gov.br",
-"rr.gov.br",
-"rs.gov.br",
-"sc.gov.br",
-"se.gov.br",
-"sp.gov.br",
-"to.gov.br",
-"gru.br",
-"imb.br",
-"ind.br",
-"inf.br",
-"jab.br",
-"jampa.br",
-"jdf.br",
-"joinville.br",
-"jor.br",
-"jus.br",
-"leg.br",
-"lel.br",
-"londrina.br",
-"macapa.br",
-"maceio.br",
-"manaus.br",
-"maringa.br",
-"mat.br",
-"med.br",
-"mil.br",
-"morena.br",
-"mp.br",
-"mus.br",
-"natal.br",
-"net.br",
-"niteroi.br",
-"*.nom.br",
-"not.br",
-"ntr.br",
-"odo.br",
-"ong.br",
-"org.br",
-"osasco.br",
-"palmas.br",
-"poa.br",
-"ppg.br",
-"pro.br",
-"psc.br",
-"psi.br",
-"pvh.br",
-"qsl.br",
-"radio.br",
-"rec.br",
-"recife.br",
-"ribeirao.br",
-"rio.br",
-"riobranco.br",
-"riopreto.br",
-"salvador.br",
-"sampa.br",
-"santamaria.br",
-"santoandre.br",
-"saobernardo.br",
-"saogonca.br",
-"sjc.br",
-"slg.br",
-"slz.br",
-"sorocaba.br",
-"srv.br",
-"taxi.br",
-"tc.br",
-"teo.br",
-"the.br",
-"tmp.br",
-"trd.br",
-"tur.br",
-"tv.br",
-"udi.br",
-"vet.br",
-"vix.br",
-"vlog.br",
-"wiki.br",
-"zlg.br",
-"bs",
-"com.bs",
-"net.bs",
-"org.bs",
-"edu.bs",
-"gov.bs",
-"bt",
-"com.bt",
-"edu.bt",
-"gov.bt",
-"net.bt",
-"org.bt",
-"bv",
-"bw",
-"co.bw",
-"org.bw",
-"by",
-"gov.by",
-"mil.by",
-"com.by",
-"of.by",
-"bz",
-"com.bz",
-"net.bz",
-"org.bz",
-"edu.bz",
-"gov.bz",
-"ca",
-"ab.ca",
-"bc.ca",
-"mb.ca",
-"nb.ca",
-"nf.ca",
-"nl.ca",
-"ns.ca",
-"nt.ca",
-"nu.ca",
-"on.ca",
-"pe.ca",
-"qc.ca",
-"sk.ca",
-"yk.ca",
-"gc.ca",
-"cat",
-"cc",
-"cd",
-"gov.cd",
-"cf",
-"cg",
-"ch",
-"ci",
-"org.ci",
-"or.ci",
-"com.ci",
-"co.ci",
-"edu.ci",
-"ed.ci",
-"ac.ci",
-"net.ci",
-"go.ci",
-"asso.ci",
-"aéroport.ci",
-"int.ci",
-"presse.ci",
-"md.ci",
-"gouv.ci",
-"*.ck",
-"!www.ck",
-"cl",
-"aprendemas.cl",
-"co.cl",
-"gob.cl",
-"gov.cl",
-"mil.cl",
-"cm",
-"co.cm",
-"com.cm",
-"gov.cm",
-"net.cm",
-"cn",
-"ac.cn",
-"com.cn",
-"edu.cn",
-"gov.cn",
-"net.cn",
-"org.cn",
-"mil.cn",
-"公司.cn",
-"网络.cn",
-"網絡.cn",
-"ah.cn",
-"bj.cn",
-"cq.cn",
-"fj.cn",
-"gd.cn",
-"gs.cn",
-"gz.cn",
-"gx.cn",
-"ha.cn",
-"hb.cn",
-"he.cn",
-"hi.cn",
-"hl.cn",
-"hn.cn",
-"jl.cn",
-"js.cn",
-"jx.cn",
-"ln.cn",
-"nm.cn",
-"nx.cn",
-"qh.cn",
-"sc.cn",
-"sd.cn",
-"sh.cn",
-"sn.cn",
-"sx.cn",
-"tj.cn",
-"xj.cn",
-"xz.cn",
-"yn.cn",
-"zj.cn",
-"hk.cn",
-"mo.cn",
-"tw.cn",
-"co",
-"arts.co",
-"com.co",
-"edu.co",
-"firm.co",
-"gov.co",
-"info.co",
-"int.co",
-"mil.co",
-"net.co",
-"nom.co",
-"org.co",
-"rec.co",
-"web.co",
-"com",
-"coop",
-"cr",
-"ac.cr",
-"co.cr",
-"ed.cr",
-"fi.cr",
-"go.cr",
-"or.cr",
-"sa.cr",
-"cu",
-"com.cu",
-"edu.cu",
-"org.cu",
-"net.cu",
-"gov.cu",
-"inf.cu",
-"cv",
-"cw",
-"com.cw",
-"edu.cw",
-"net.cw",
-"org.cw",
-"cx",
-"gov.cx",
-"cy",
-"ac.cy",
-"biz.cy",
-"com.cy",
-"ekloges.cy",
-"gov.cy",
-"ltd.cy",
-"name.cy",
-"net.cy",
-"org.cy",
-"parliament.cy",
-"press.cy",
-"pro.cy",
-"tm.cy",
-"cz",
-"de",
-"dj",
-"dk",
-"dm",
-"com.dm",
-"net.dm",
-"org.dm",
-"edu.dm",
-"gov.dm",
-"do",
-"art.do",
-"com.do",
-"edu.do",
-"gob.do",
-"gov.do",
-"mil.do",
-"net.do",
-"org.do",
-"sld.do",
-"web.do",
-"dz",
-"com.dz",
-"org.dz",
-"net.dz",
-"gov.dz",
-"edu.dz",
-"asso.dz",
-"pol.dz",
-"art.dz",
-"ec",
-"com.ec",
-"info.ec",
-"net.ec",
-"fin.ec",
-"k12.ec",
-"med.ec",
-"pro.ec",
-"org.ec",
-"edu.ec",
-"gov.ec",
-"gob.ec",
-"mil.ec",
-"edu",
-"ee",
-"edu.ee",
-"gov.ee",
-"riik.ee",
-"lib.ee",
-"med.ee",
-"com.ee",
-"pri.ee",
-"aip.ee",
-"org.ee",
-"fie.ee",
-"eg",
-"com.eg",
-"edu.eg",
-"eun.eg",
-"gov.eg",
-"mil.eg",
-"name.eg",
-"net.eg",
-"org.eg",
-"sci.eg",
-"*.er",
-"es",
-"com.es",
-"nom.es",
-"org.es",
-"gob.es",
-"edu.es",
-"et",
-"com.et",
-"gov.et",
-"org.et",
-"edu.et",
-"biz.et",
-"name.et",
-"info.et",
-"net.et",
-"eu",
-"fi",
-"aland.fi",
-"fj",
-"ac.fj",
-"biz.fj",
-"com.fj",
-"gov.fj",
-"info.fj",
-"mil.fj",
-"name.fj",
-"net.fj",
-"org.fj",
-"pro.fj",
-"*.fk",
-"fm",
-"fo",
-"fr",
-"asso.fr",
-"com.fr",
-"gouv.fr",
-"nom.fr",
-"prd.fr",
-"tm.fr",
-"aeroport.fr",
-"avocat.fr",
-"avoues.fr",
-"cci.fr",
-"chambagri.fr",
-"chirurgiens-dentistes.fr",
-"experts-comptables.fr",
-"geometre-expert.fr",
-"greta.fr",
-"huissier-justice.fr",
-"medecin.fr",
-"notaires.fr",
-"pharmacien.fr",
-"port.fr",
-"veterinaire.fr",
-"ga",
-"gb",
-"gd",
-"ge",
-"com.ge",
-"edu.ge",
-"gov.ge",
-"org.ge",
-"mil.ge",
-"net.ge",
-"pvt.ge",
-"gf",
-"gg",
-"co.gg",
-"net.gg",
-"org.gg",
-"gh",
-"com.gh",
-"edu.gh",
-"gov.gh",
-"org.gh",
-"mil.gh",
-"gi",
-"com.gi",
-"ltd.gi",
-"gov.gi",
-"mod.gi",
-"edu.gi",
-"org.gi",
-"gl",
-"co.gl",
-"com.gl",
-"edu.gl",
-"net.gl",
-"org.gl",
-"gm",
-"gn",
-"ac.gn",
-"com.gn",
-"edu.gn",
-"gov.gn",
-"org.gn",
-"net.gn",
-"gov",
-"gp",
-"com.gp",
-"net.gp",
-"mobi.gp",
-"edu.gp",
-"org.gp",
-"asso.gp",
-"gq",
-"gr",
-"com.gr",
-"edu.gr",
-"net.gr",
-"org.gr",
-"gov.gr",
-"gs",
-"gt",
-"com.gt",
-"edu.gt",
-"gob.gt",
-"ind.gt",
-"mil.gt",
-"net.gt",
-"org.gt",
-"gu",
-"com.gu",
-"edu.gu",
-"gov.gu",
-"guam.gu",
-"info.gu",
-"net.gu",
-"org.gu",
-"web.gu",
-"gw",
-"gy",
-"co.gy",
-"com.gy",
-"edu.gy",
-"gov.gy",
-"net.gy",
-"org.gy",
-"hk",
-"com.hk",
-"edu.hk",
-"gov.hk",
-"idv.hk",
-"net.hk",
-"org.hk",
-"公司.hk",
-"教育.hk",
-"敎育.hk",
-"政府.hk",
-"個人.hk",
-"个人.hk",
-"箇人.hk",
-"網络.hk",
-"网络.hk",
-"组織.hk",
-"網絡.hk",
-"网絡.hk",
-"组织.hk",
-"組織.hk",
-"組织.hk",
-"hm",
-"hn",
-"com.hn",
-"edu.hn",
-"org.hn",
-"net.hn",
-"mil.hn",
-"gob.hn",
-"hr",
-"iz.hr",
-"from.hr",
-"name.hr",
-"com.hr",
-"ht",
-"com.ht",
-"shop.ht",
-"firm.ht",
-"info.ht",
-"adult.ht",
-"net.ht",
-"pro.ht",
-"org.ht",
-"med.ht",
-"art.ht",
-"coop.ht",
-"pol.ht",
-"asso.ht",
-"edu.ht",
-"rel.ht",
-"gouv.ht",
-"perso.ht",
-"hu",
-"co.hu",
-"info.hu",
-"org.hu",
-"priv.hu",
-"sport.hu",
-"tm.hu",
-"2000.hu",
-"agrar.hu",
-"bolt.hu",
-"casino.hu",
-"city.hu",
-"erotica.hu",
-"erotika.hu",
-"film.hu",
-"forum.hu",
-"games.hu",
-"hotel.hu",
-"ingatlan.hu",
-"jogasz.hu",
-"konyvelo.hu",
-"lakas.hu",
-"media.hu",
-"news.hu",
-"reklam.hu",
-"sex.hu",
-"shop.hu",
-"suli.hu",
-"szex.hu",
-"tozsde.hu",
-"utazas.hu",
-"video.hu",
-"id",
-"ac.id",
-"biz.id",
-"co.id",
-"desa.id",
-"go.id",
-"mil.id",
-"my.id",
-"net.id",
-"or.id",
-"ponpes.id",
-"sch.id",
-"web.id",
-"ie",
-"gov.ie",
-"il",
-"ac.il",
-"co.il",
-"gov.il",
-"idf.il",
-"k12.il",
-"muni.il",
-"net.il",
-"org.il",
-"im",
-"ac.im",
-"co.im",
-"com.im",
-"ltd.co.im",
-"net.im",
-"org.im",
-"plc.co.im",
-"tt.im",
-"tv.im",
-"in",
-"co.in",
-"firm.in",
-"net.in",
-"org.in",
-"gen.in",
-"ind.in",
-"nic.in",
-"ac.in",
-"edu.in",
-"res.in",
-"gov.in",
-"mil.in",
-"info",
-"int",
-"eu.int",
-"io",
-"com.io",
-"iq",
-"gov.iq",
-"edu.iq",
-"mil.iq",
-"com.iq",
-"org.iq",
-"net.iq",
-"ir",
-"ac.ir",
-"co.ir",
-"gov.ir",
-"id.ir",
-"net.ir",
-"org.ir",
-"sch.ir",
-"ایران.ir",
-"ايران.ir",
-"is",
-"net.is",
-"com.is",
-"edu.is",
-"gov.is",
-"org.is",
-"int.is",
-"it",
-"gov.it",
-"edu.it",
-"abr.it",
-"abruzzo.it",
-"aosta-valley.it",
-"aostavalley.it",
-"bas.it",
-"basilicata.it",
-"cal.it",
-"calabria.it",
-"cam.it",
-"campania.it",
-"emilia-romagna.it",
-"emiliaromagna.it",
-"emr.it",
-"friuli-v-giulia.it",
-"friuli-ve-giulia.it",
-"friuli-vegiulia.it",
-"friuli-venezia-giulia.it",
-"friuli-veneziagiulia.it",
-"friuli-vgiulia.it",
-"friuliv-giulia.it",
-"friulive-giulia.it",
-"friulivegiulia.it",
-"friulivenezia-giulia.it",
-"friuliveneziagiulia.it",
-"friulivgiulia.it",
-"fvg.it",
-"laz.it",
-"lazio.it",
-"lig.it",
-"liguria.it",
-"lom.it",
-"lombardia.it",
-"lombardy.it",
-"lucania.it",
-"mar.it",
-"marche.it",
-"mol.it",
-"molise.it",
-"piedmont.it",
-"piemonte.it",
-"pmn.it",
-"pug.it",
-"puglia.it",
-"sar.it",
-"sardegna.it",
-"sardinia.it",
-"sic.it",
-"sicilia.it",
-"sicily.it",
-"taa.it",
-"tos.it",
-"toscana.it",
-"trentin-sud-tirol.it",
-"trentin-süd-tirol.it",
-"trentin-sudtirol.it",
-"trentin-südtirol.it",
-"trentin-sued-tirol.it",
-"trentin-suedtirol.it",
-"trentino-a-adige.it",
-"trentino-aadige.it",
-"trentino-alto-adige.it",
-"trentino-altoadige.it",
-"trentino-s-tirol.it",
-"trentino-stirol.it",
-"trentino-sud-tirol.it",
-"trentino-süd-tirol.it",
-"trentino-sudtirol.it",
-"trentino-südtirol.it",
-"trentino-sued-tirol.it",
-"trentino-suedtirol.it",
-"trentino.it",
-"trentinoa-adige.it",
-"trentinoaadige.it",
-"trentinoalto-adige.it",
-"trentinoaltoadige.it",
-"trentinos-tirol.it",
-"trentinostirol.it",
-"trentinosud-tirol.it",
-"trentinosüd-tirol.it",
-"trentinosudtirol.it",
-"trentinosüdtirol.it",
-"trentinosued-tirol.it",
-"trentinosuedtirol.it",
-"trentinsud-tirol.it",
-"trentinsüd-tirol.it",
-"trentinsudtirol.it",
-"trentinsüdtirol.it",
-"trentinsued-tirol.it",
-"trentinsuedtirol.it",
-"tuscany.it",
-"umb.it",
-"umbria.it",
-"val-d-aosta.it",
-"val-daosta.it",
-"vald-aosta.it",
-"valdaosta.it",
-"valle-aosta.it",
-"valle-d-aosta.it",
-"valle-daosta.it",
-"valleaosta.it",
-"valled-aosta.it",
-"valledaosta.it",
-"vallee-aoste.it",
-"vallée-aoste.it",
-"vallee-d-aoste.it",
-"vallée-d-aoste.it",
-"valleeaoste.it",
-"valléeaoste.it",
-"valleedaoste.it",
-"valléedaoste.it",
-"vao.it",
-"vda.it",
-"ven.it",
-"veneto.it",
-"ag.it",
-"agrigento.it",
-"al.it",
-"alessandria.it",
-"alto-adige.it",
-"altoadige.it",
-"an.it",
-"ancona.it",
-"andria-barletta-trani.it",
-"andria-trani-barletta.it",
-"andriabarlettatrani.it",
-"andriatranibarletta.it",
-"ao.it",
-"aosta.it",
-"aoste.it",
-"ap.it",
-"aq.it",
-"aquila.it",
-"ar.it",
-"arezzo.it",
-"ascoli-piceno.it",
-"ascolipiceno.it",
-"asti.it",
-"at.it",
-"av.it",
-"avellino.it",
-"ba.it",
-"balsan-sudtirol.it",
-"balsan-südtirol.it",
-"balsan-suedtirol.it",
-"balsan.it",
-"bari.it",
-"barletta-trani-andria.it",
-"barlettatraniandria.it",
-"belluno.it",
-"benevento.it",
-"bergamo.it",
-"bg.it",
-"bi.it",
-"biella.it",
-"bl.it",
-"bn.it",
-"bo.it",
-"bologna.it",
-"bolzano-altoadige.it",
-"bolzano.it",
-"bozen-sudtirol.it",
-"bozen-südtirol.it",
-"bozen-suedtirol.it",
-"bozen.it",
-"br.it",
-"brescia.it",
-"brindisi.it",
-"bs.it",
-"bt.it",
-"bulsan-sudtirol.it",
-"bulsan-südtirol.it",
-"bulsan-suedtirol.it",
-"bulsan.it",
-"bz.it",
-"ca.it",
-"cagliari.it",
-"caltanissetta.it",
-"campidano-medio.it",
-"campidanomedio.it",
-"campobasso.it",
-"carbonia-iglesias.it",
-"carboniaiglesias.it",
-"carrara-massa.it",
-"carraramassa.it",
-"caserta.it",
-"catania.it",
-"catanzaro.it",
-"cb.it",
-"ce.it",
-"cesena-forli.it",
-"cesena-forlì.it",
-"cesenaforli.it",
-"cesenaforlì.it",
-"ch.it",
-"chieti.it",
-"ci.it",
-"cl.it",
-"cn.it",
-"co.it",
-"como.it",
-"cosenza.it",
-"cr.it",
-"cremona.it",
-"crotone.it",
-"cs.it",
-"ct.it",
-"cuneo.it",
-"cz.it",
-"dell-ogliastra.it",
-"dellogliastra.it",
-"en.it",
-"enna.it",
-"fc.it",
-"fe.it",
-"fermo.it",
-"ferrara.it",
-"fg.it",
-"fi.it",
-"firenze.it",
-"florence.it",
-"fm.it",
-"foggia.it",
-"forli-cesena.it",
-"forlì-cesena.it",
-"forlicesena.it",
-"forlìcesena.it",
-"fr.it",
-"frosinone.it",
-"ge.it",
-"genoa.it",
-"genova.it",
-"go.it",
-"gorizia.it",
-"gr.it",
-"grosseto.it",
-"iglesias-carbonia.it",
-"iglesiascarbonia.it",
-"im.it",
-"imperia.it",
-"is.it",
-"isernia.it",
-"kr.it",
-"la-spezia.it",
-"laquila.it",
-"laspezia.it",
-"latina.it",
-"lc.it",
-"le.it",
-"lecce.it",
-"lecco.it",
-"li.it",
-"livorno.it",
-"lo.it",
-"lodi.it",
-"lt.it",
-"lu.it",
-"lucca.it",
-"macerata.it",
-"mantova.it",
-"massa-carrara.it",
-"massacarrara.it",
-"matera.it",
-"mb.it",
-"mc.it",
-"me.it",
-"medio-campidano.it",
-"mediocampidano.it",
-"messina.it",
-"mi.it",
-"milan.it",
-"milano.it",
-"mn.it",
-"mo.it",
-"modena.it",
-"monza-brianza.it",
-"monza-e-della-brianza.it",
-"monza.it",
-"monzabrianza.it",
-"monzaebrianza.it",
-"monzaedellabrianza.it",
-"ms.it",
-"mt.it",
-"na.it",
-"naples.it",
-"napoli.it",
-"no.it",
-"novara.it",
-"nu.it",
-"nuoro.it",
-"og.it",
-"ogliastra.it",
-"olbia-tempio.it",
-"olbiatempio.it",
-"or.it",
-"oristano.it",
-"ot.it",
-"pa.it",
-"padova.it",
-"padua.it",
-"palermo.it",
-"parma.it",
-"pavia.it",
-"pc.it",
-"pd.it",
-"pe.it",
-"perugia.it",
-"pesaro-urbino.it",
-"pesarourbino.it",
-"pescara.it",
-"pg.it",
-"pi.it",
-"piacenza.it",
-"pisa.it",
-"pistoia.it",
-"pn.it",
-"po.it",
-"pordenone.it",
-"potenza.it",
-"pr.it",
-"prato.it",
-"pt.it",
-"pu.it",
-"pv.it",
-"pz.it",
-"ra.it",
-"ragusa.it",
-"ravenna.it",
-"rc.it",
-"re.it",
-"reggio-calabria.it",
-"reggio-emilia.it",
-"reggiocalabria.it",
-"reggioemilia.it",
-"rg.it",
-"ri.it",
-"rieti.it",
-"rimini.it",
-"rm.it",
-"rn.it",
-"ro.it",
-"roma.it",
-"rome.it",
-"rovigo.it",
-"sa.it",
-"salerno.it",
-"sassari.it",
-"savona.it",
-"si.it",
-"siena.it",
-"siracusa.it",
-"so.it",
-"sondrio.it",
-"sp.it",
-"sr.it",
-"ss.it",
-"suedtirol.it",
-"südtirol.it",
-"sv.it",
-"ta.it",
-"taranto.it",
-"te.it",
-"tempio-olbia.it",
-"tempioolbia.it",
-"teramo.it",
-"terni.it",
-"tn.it",
-"to.it",
-"torino.it",
-"tp.it",
-"tr.it",
-"trani-andria-barletta.it",
-"trani-barletta-andria.it",
-"traniandriabarletta.it",
-"tranibarlettaandria.it",
-"trapani.it",
-"trento.it",
-"treviso.it",
-"trieste.it",
-"ts.it",
-"turin.it",
-"tv.it",
-"ud.it",
-"udine.it",
-"urbino-pesaro.it",
-"urbinopesaro.it",
-"va.it",
-"varese.it",
-"vb.it",
-"vc.it",
-"ve.it",
-"venezia.it",
-"venice.it",
-"verbania.it",
-"vercelli.it",
-"verona.it",
-"vi.it",
-"vibo-valentia.it",
-"vibovalentia.it",
-"vicenza.it",
-"viterbo.it",
-"vr.it",
-"vs.it",
-"vt.it",
-"vv.it",
-"je",
-"co.je",
-"net.je",
-"org.je",
-"*.jm",
-"jo",
-"com.jo",
-"org.jo",
-"net.jo",
-"edu.jo",
-"sch.jo",
-"gov.jo",
-"mil.jo",
-"name.jo",
-"jobs",
-"jp",
-"ac.jp",
-"ad.jp",
-"co.jp",
-"ed.jp",
-"go.jp",
-"gr.jp",
-"lg.jp",
-"ne.jp",
-"or.jp",
-"aichi.jp",
-"akita.jp",
-"aomori.jp",
-"chiba.jp",
-"ehime.jp",
-"fukui.jp",
-"fukuoka.jp",
-"fukushima.jp",
-"gifu.jp",
-"gunma.jp",
-"hiroshima.jp",
-"hokkaido.jp",
-"hyogo.jp",
-"ibaraki.jp",
-"ishikawa.jp",
-"iwate.jp",
-"kagawa.jp",
-"kagoshima.jp",
-"kanagawa.jp",
-"kochi.jp",
-"kumamoto.jp",
-"kyoto.jp",
-"mie.jp",
-"miyagi.jp",
-"miyazaki.jp",
-"nagano.jp",
-"nagasaki.jp",
-"nara.jp",
-"niigata.jp",
-"oita.jp",
-"okayama.jp",
-"okinawa.jp",
-"osaka.jp",
-"saga.jp",
-"saitama.jp",
-"shiga.jp",
-"shimane.jp",
-"shizuoka.jp",
-"tochigi.jp",
-"tokushima.jp",
-"tokyo.jp",
-"tottori.jp",
-"toyama.jp",
-"wakayama.jp",
-"yamagata.jp",
-"yamaguchi.jp",
-"yamanashi.jp",
-"栃木.jp",
-"愛知.jp",
-"愛媛.jp",
-"兵庫.jp",
-"熊本.jp",
-"茨城.jp",
-"北海道.jp",
-"千葉.jp",
-"和歌山.jp",
-"長崎.jp",
-"長野.jp",
-"新潟.jp",
-"青森.jp",
-"静岡.jp",
-"東京.jp",
-"石川.jp",
-"埼玉.jp",
-"三重.jp",
-"京都.jp",
-"佐賀.jp",
-"大分.jp",
-"大阪.jp",
-"奈良.jp",
-"宮城.jp",
-"宮崎.jp",
-"富山.jp",
-"山口.jp",
-"山形.jp",
-"山梨.jp",
-"岩手.jp",
-"岐阜.jp",
-"岡山.jp",
-"島根.jp",
-"広島.jp",
-"徳島.jp",
-"沖縄.jp",
-"滋賀.jp",
-"神奈川.jp",
-"福井.jp",
-"福岡.jp",
-"福島.jp",
-"秋田.jp",
-"群馬.jp",
-"香川.jp",
-"高知.jp",
-"鳥取.jp",
-"鹿児島.jp",
-"*.kawasaki.jp",
-"*.kitakyushu.jp",
-"*.kobe.jp",
-"*.nagoya.jp",
-"*.sapporo.jp",
-"*.sendai.jp",
-"*.yokohama.jp",
-"!city.kawasaki.jp",
-"!city.kitakyushu.jp",
-"!city.kobe.jp",
-"!city.nagoya.jp",
-"!city.sapporo.jp",
-"!city.sendai.jp",
-"!city.yokohama.jp",
-"aisai.aichi.jp",
-"ama.aichi.jp",
-"anjo.aichi.jp",
-"asuke.aichi.jp",
-"chiryu.aichi.jp",
-"chita.aichi.jp",
-"fuso.aichi.jp",
-"gamagori.aichi.jp",
-"handa.aichi.jp",
-"hazu.aichi.jp",
-"hekinan.aichi.jp",
-"higashiura.aichi.jp",
-"ichinomiya.aichi.jp",
-"inazawa.aichi.jp",
-"inuyama.aichi.jp",
-"isshiki.aichi.jp",
-"iwakura.aichi.jp",
-"kanie.aichi.jp",
-"kariya.aichi.jp",
-"kasugai.aichi.jp",
-"kira.aichi.jp",
-"kiyosu.aichi.jp",
-"komaki.aichi.jp",
-"konan.aichi.jp",
-"kota.aichi.jp",
-"mihama.aichi.jp",
-"miyoshi.aichi.jp",
-"nishio.aichi.jp",
-"nisshin.aichi.jp",
-"obu.aichi.jp",
-"oguchi.aichi.jp",
-"oharu.aichi.jp",
-"okazaki.aichi.jp",
-"owariasahi.aichi.jp",
-"seto.aichi.jp",
-"shikatsu.aichi.jp",
-"shinshiro.aichi.jp",
-"shitara.aichi.jp",
-"tahara.aichi.jp",
-"takahama.aichi.jp",
-"tobishima.aichi.jp",
-"toei.aichi.jp",
-"togo.aichi.jp",
-"tokai.aichi.jp",
-"tokoname.aichi.jp",
-"toyoake.aichi.jp",
-"toyohashi.aichi.jp",
-"toyokawa.aichi.jp",
-"toyone.aichi.jp",
-"toyota.aichi.jp",
-"tsushima.aichi.jp",
-"yatomi.aichi.jp",
-"akita.akita.jp",
-"daisen.akita.jp",
-"fujisato.akita.jp",
-"gojome.akita.jp",
-"hachirogata.akita.jp",
-"happou.akita.jp",
-"higashinaruse.akita.jp",
-"honjo.akita.jp",
-"honjyo.akita.jp",
-"ikawa.akita.jp",
-"kamikoani.akita.jp",
-"kamioka.akita.jp",
-"katagami.akita.jp",
-"kazuno.akita.jp",
-"kitaakita.akita.jp",
-"kosaka.akita.jp",
-"kyowa.akita.jp",
-"misato.akita.jp",
-"mitane.akita.jp",
-"moriyoshi.akita.jp",
-"nikaho.akita.jp",
-"noshiro.akita.jp",
-"odate.akita.jp",
-"oga.akita.jp",
-"ogata.akita.jp",
-"semboku.akita.jp",
-"yokote.akita.jp",
-"yurihonjo.akita.jp",
-"aomori.aomori.jp",
-"gonohe.aomori.jp",
-"hachinohe.aomori.jp",
-"hashikami.aomori.jp",
-"hiranai.aomori.jp",
-"hirosaki.aomori.jp",
-"itayanagi.aomori.jp",
-"kuroishi.aomori.jp",
-"misawa.aomori.jp",
-"mutsu.aomori.jp",
-"nakadomari.aomori.jp",
-"noheji.aomori.jp",
-"oirase.aomori.jp",
-"owani.aomori.jp",
-"rokunohe.aomori.jp",
-"sannohe.aomori.jp",
-"shichinohe.aomori.jp",
-"shingo.aomori.jp",
-"takko.aomori.jp",
-"towada.aomori.jp",
-"tsugaru.aomori.jp",
-"tsuruta.aomori.jp",
-"abiko.chiba.jp",
-"asahi.chiba.jp",
-"chonan.chiba.jp",
-"chosei.chiba.jp",
-"choshi.chiba.jp",
-"chuo.chiba.jp",
-"funabashi.chiba.jp",
-"futtsu.chiba.jp",
-"hanamigawa.chiba.jp",
-"ichihara.chiba.jp",
-"ichikawa.chiba.jp",
-"ichinomiya.chiba.jp",
-"inzai.chiba.jp",
-"isumi.chiba.jp",
-"kamagaya.chiba.jp",
-"kamogawa.chiba.jp",
-"kashiwa.chiba.jp",
-"katori.chiba.jp",
-"katsuura.chiba.jp",
-"kimitsu.chiba.jp",
-"kisarazu.chiba.jp",
-"kozaki.chiba.jp",
-"kujukuri.chiba.jp",
-"kyonan.chiba.jp",
-"matsudo.chiba.jp",
-"midori.chiba.jp",
-"mihama.chiba.jp",
-"minamiboso.chiba.jp",
-"mobara.chiba.jp",
-"mutsuzawa.chiba.jp",
-"nagara.chiba.jp",
-"nagareyama.chiba.jp",
-"narashino.chiba.jp",
-"narita.chiba.jp",
-"noda.chiba.jp",
-"oamishirasato.chiba.jp",
-"omigawa.chiba.jp",
-"onjuku.chiba.jp",
-"otaki.chiba.jp",
-"sakae.chiba.jp",
-"sakura.chiba.jp",
-"shimofusa.chiba.jp",
-"shirako.chiba.jp",
-"shiroi.chiba.jp",
-"shisui.chiba.jp",
-"sodegaura.chiba.jp",
-"sosa.chiba.jp",
-"tako.chiba.jp",
-"tateyama.chiba.jp",
-"togane.chiba.jp",
-"tohnosho.chiba.jp",
-"tomisato.chiba.jp",
-"urayasu.chiba.jp",
-"yachimata.chiba.jp",
-"yachiyo.chiba.jp",
-"yokaichiba.chiba.jp",
-"yokoshibahikari.chiba.jp",
-"yotsukaido.chiba.jp",
-"ainan.ehime.jp",
-"honai.ehime.jp",
-"ikata.ehime.jp",
-"imabari.ehime.jp",
-"iyo.ehime.jp",
-"kamijima.ehime.jp",
-"kihoku.ehime.jp",
-"kumakogen.ehime.jp",
-"masaki.ehime.jp",
-"matsuno.ehime.jp",
-"matsuyama.ehime.jp",
-"namikata.ehime.jp",
-"niihama.ehime.jp",
-"ozu.ehime.jp",
-"saijo.ehime.jp",
-"seiyo.ehime.jp",
-"shikokuchuo.ehime.jp",
-"tobe.ehime.jp",
-"toon.ehime.jp",
-"uchiko.ehime.jp",
-"uwajima.ehime.jp",
-"yawatahama.ehime.jp",
-"echizen.fukui.jp",
-"eiheiji.fukui.jp",
-"fukui.fukui.jp",
-"ikeda.fukui.jp",
-"katsuyama.fukui.jp",
-"mihama.fukui.jp",
-"minamiechizen.fukui.jp",
-"obama.fukui.jp",
-"ohi.fukui.jp",
-"ono.fukui.jp",
-"sabae.fukui.jp",
-"sakai.fukui.jp",
-"takahama.fukui.jp",
-"tsuruga.fukui.jp",
-"wakasa.fukui.jp",
-"ashiya.fukuoka.jp",
-"buzen.fukuoka.jp",
-"chikugo.fukuoka.jp",
-"chikuho.fukuoka.jp",
-"chikujo.fukuoka.jp",
-"chikushino.fukuoka.jp",
-"chikuzen.fukuoka.jp",
-"chuo.fukuoka.jp",
-"dazaifu.fukuoka.jp",
-"fukuchi.fukuoka.jp",
-"hakata.fukuoka.jp",
-"higashi.fukuoka.jp",
-"hirokawa.fukuoka.jp",
-"hisayama.fukuoka.jp",
-"iizuka.fukuoka.jp",
-"inatsuki.fukuoka.jp",
-"kaho.fukuoka.jp",
-"kasuga.fukuoka.jp",
-"kasuya.fukuoka.jp",
-"kawara.fukuoka.jp",
-"keisen.fukuoka.jp",
-"koga.fukuoka.jp",
-"kurate.fukuoka.jp",
-"kurogi.fukuoka.jp",
-"kurume.fukuoka.jp",
-"minami.fukuoka.jp",
-"miyako.fukuoka.jp",
-"miyama.fukuoka.jp",
-"miyawaka.fukuoka.jp",
-"mizumaki.fukuoka.jp",
-"munakata.fukuoka.jp",
-"nakagawa.fukuoka.jp",
-"nakama.fukuoka.jp",
-"nishi.fukuoka.jp",
-"nogata.fukuoka.jp",
-"ogori.fukuoka.jp",
-"okagaki.fukuoka.jp",
-"okawa.fukuoka.jp",
-"oki.fukuoka.jp",
-"omuta.fukuoka.jp",
-"onga.fukuoka.jp",
-"onojo.fukuoka.jp",
-"oto.fukuoka.jp",
-"saigawa.fukuoka.jp",
-"sasaguri.fukuoka.jp",
-"shingu.fukuoka.jp",
-"shinyoshitomi.fukuoka.jp",
-"shonai.fukuoka.jp",
-"soeda.fukuoka.jp",
-"sue.fukuoka.jp",
-"tachiarai.fukuoka.jp",
-"tagawa.fukuoka.jp",
-"takata.fukuoka.jp",
-"toho.fukuoka.jp",
-"toyotsu.fukuoka.jp",
-"tsuiki.fukuoka.jp",
-"ukiha.fukuoka.jp",
-"umi.fukuoka.jp",
-"usui.fukuoka.jp",
-"yamada.fukuoka.jp",
-"yame.fukuoka.jp",
-"yanagawa.fukuoka.jp",
-"yukuhashi.fukuoka.jp",
-"aizubange.fukushima.jp",
-"aizumisato.fukushima.jp",
-"aizuwakamatsu.fukushima.jp",
-"asakawa.fukushima.jp",
-"bandai.fukushima.jp",
-"date.fukushima.jp",
-"fukushima.fukushima.jp",
-"furudono.fukushima.jp",
-"futaba.fukushima.jp",
-"hanawa.fukushima.jp",
-"higashi.fukushima.jp",
-"hirata.fukushima.jp",
-"hirono.fukushima.jp",
-"iitate.fukushima.jp",
-"inawashiro.fukushima.jp",
-"ishikawa.fukushima.jp",
-"iwaki.fukushima.jp",
-"izumizaki.fukushima.jp",
-"kagamiishi.fukushima.jp",
-"kaneyama.fukushima.jp",
-"kawamata.fukushima.jp",
-"kitakata.fukushima.jp",
-"kitashiobara.fukushima.jp",
-"koori.fukushima.jp",
-"koriyama.fukushima.jp",
-"kunimi.fukushima.jp",
-"miharu.fukushima.jp",
-"mishima.fukushima.jp",
-"namie.fukushima.jp",
-"nango.fukushima.jp",
-"nishiaizu.fukushima.jp",
-"nishigo.fukushima.jp",
-"okuma.fukushima.jp",
-"omotego.fukushima.jp",
-"ono.fukushima.jp",
-"otama.fukushima.jp",
-"samegawa.fukushima.jp",
-"shimogo.fukushima.jp",
-"shirakawa.fukushima.jp",
-"showa.fukushima.jp",
-"soma.fukushima.jp",
-"sukagawa.fukushima.jp",
-"taishin.fukushima.jp",
-"tamakawa.fukushima.jp",
-"tanagura.fukushima.jp",
-"tenei.fukushima.jp",
-"yabuki.fukushima.jp",
-"yamato.fukushima.jp",
-"yamatsuri.fukushima.jp",
-"yanaizu.fukushima.jp",
-"yugawa.fukushima.jp",
-"anpachi.gifu.jp",
-"ena.gifu.jp",
-"gifu.gifu.jp",
-"ginan.gifu.jp",
-"godo.gifu.jp",
-"gujo.gifu.jp",
-"hashima.gifu.jp",
-"hichiso.gifu.jp",
-"hida.gifu.jp",
-"higashishirakawa.gifu.jp",
-"ibigawa.gifu.jp",
-"ikeda.gifu.jp",
-"kakamigahara.gifu.jp",
-"kani.gifu.jp",
-"kasahara.gifu.jp",
-"kasamatsu.gifu.jp",
-"kawaue.gifu.jp",
-"kitagata.gifu.jp",
-"mino.gifu.jp",
-"minokamo.gifu.jp",
-"mitake.gifu.jp",
-"mizunami.gifu.jp",
-"motosu.gifu.jp",
-"nakatsugawa.gifu.jp",
-"ogaki.gifu.jp",
-"sakahogi.gifu.jp",
-"seki.gifu.jp",
-"sekigahara.gifu.jp",
-"shirakawa.gifu.jp",
-"tajimi.gifu.jp",
-"takayama.gifu.jp",
-"tarui.gifu.jp",
-"toki.gifu.jp",
-"tomika.gifu.jp",
-"wanouchi.gifu.jp",
-"yamagata.gifu.jp",
-"yaotsu.gifu.jp",
-"yoro.gifu.jp",
-"annaka.gunma.jp",
-"chiyoda.gunma.jp",
-"fujioka.gunma.jp",
-"higashiagatsuma.gunma.jp",
-"isesaki.gunma.jp",
-"itakura.gunma.jp",
-"kanna.gunma.jp",
-"kanra.gunma.jp",
-"katashina.gunma.jp",
-"kawaba.gunma.jp",
-"kiryu.gunma.jp",
-"kusatsu.gunma.jp",
-"maebashi.gunma.jp",
-"meiwa.gunma.jp",
-"midori.gunma.jp",
-"minakami.gunma.jp",
-"naganohara.gunma.jp",
-"nakanojo.gunma.jp",
-"nanmoku.gunma.jp",
-"numata.gunma.jp",
-"oizumi.gunma.jp",
-"ora.gunma.jp",
-"ota.gunma.jp",
-"shibukawa.gunma.jp",
-"shimonita.gunma.jp",
-"shinto.gunma.jp",
-"showa.gunma.jp",
-"takasaki.gunma.jp",
-"takayama.gunma.jp",
-"tamamura.gunma.jp",
-"tatebayashi.gunma.jp",
-"tomioka.gunma.jp",
-"tsukiyono.gunma.jp",
-"tsumagoi.gunma.jp",
-"ueno.gunma.jp",
-"yoshioka.gunma.jp",
-"asaminami.hiroshima.jp",
-"daiwa.hiroshima.jp",
-"etajima.hiroshima.jp",
-"fuchu.hiroshima.jp",
-"fukuyama.hiroshima.jp",
-"hatsukaichi.hiroshima.jp",
-"higashihiroshima.hiroshima.jp",
-"hongo.hiroshima.jp",
-"jinsekikogen.hiroshima.jp",
-"kaita.hiroshima.jp",
-"kui.hiroshima.jp",
-"kumano.hiroshima.jp",
-"kure.hiroshima.jp",
-"mihara.hiroshima.jp",
-"miyoshi.hiroshima.jp",
-"naka.hiroshima.jp",
-"onomichi.hiroshima.jp",
-"osakikamijima.hiroshima.jp",
-"otake.hiroshima.jp",
-"saka.hiroshima.jp",
-"sera.hiroshima.jp",
-"seranishi.hiroshima.jp",
-"shinichi.hiroshima.jp",
-"shobara.hiroshima.jp",
-"takehara.hiroshima.jp",
-"abashiri.hokkaido.jp",
-"abira.hokkaido.jp",
-"aibetsu.hokkaido.jp",
-"akabira.hokkaido.jp",
-"akkeshi.hokkaido.jp",
-"asahikawa.hokkaido.jp",
-"ashibetsu.hokkaido.jp",
-"ashoro.hokkaido.jp",
-"assabu.hokkaido.jp",
-"atsuma.hokkaido.jp",
-"bibai.hokkaido.jp",
-"biei.hokkaido.jp",
-"bifuka.hokkaido.jp",
-"bihoro.hokkaido.jp",
-"biratori.hokkaido.jp",
-"chippubetsu.hokkaido.jp",
-"chitose.hokkaido.jp",
-"date.hokkaido.jp",
-"ebetsu.hokkaido.jp",
-"embetsu.hokkaido.jp",
-"eniwa.hokkaido.jp",
-"erimo.hokkaido.jp",
-"esan.hokkaido.jp",
-"esashi.hokkaido.jp",
-"fukagawa.hokkaido.jp",
-"fukushima.hokkaido.jp",
-"furano.hokkaido.jp",
-"furubira.hokkaido.jp",
-"haboro.hokkaido.jp",
-"hakodate.hokkaido.jp",
-"hamatonbetsu.hokkaido.jp",
-"hidaka.hokkaido.jp",
-"higashikagura.hokkaido.jp",
-"higashikawa.hokkaido.jp",
-"hiroo.hokkaido.jp",
-"hokuryu.hokkaido.jp",
-"hokuto.hokkaido.jp",
-"honbetsu.hokkaido.jp",
-"horokanai.hokkaido.jp",
-"horonobe.hokkaido.jp",
-"ikeda.hokkaido.jp",
-"imakane.hokkaido.jp",
-"ishikari.hokkaido.jp",
-"iwamizawa.hokkaido.jp",
-"iwanai.hokkaido.jp",
-"kamifurano.hokkaido.jp",
-"kamikawa.hokkaido.jp",
-"kamishihoro.hokkaido.jp",
-"kamisunagawa.hokkaido.jp",
-"kamoenai.hokkaido.jp",
-"kayabe.hokkaido.jp",
-"kembuchi.hokkaido.jp",
-"kikonai.hokkaido.jp",
-"kimobetsu.hokkaido.jp",
-"kitahiroshima.hokkaido.jp",
-"kitami.hokkaido.jp",
-"kiyosato.hokkaido.jp",
-"koshimizu.hokkaido.jp",
-"kunneppu.hokkaido.jp",
-"kuriyama.hokkaido.jp",
-"kuromatsunai.hokkaido.jp",
-"kushiro.hokkaido.jp",
-"kutchan.hokkaido.jp",
-"kyowa.hokkaido.jp",
-"mashike.hokkaido.jp",
-"matsumae.hokkaido.jp",
-"mikasa.hokkaido.jp",
-"minamifurano.hokkaido.jp",
-"mombetsu.hokkaido.jp",
-"moseushi.hokkaido.jp",
-"mukawa.hokkaido.jp",
-"muroran.hokkaido.jp",
-"naie.hokkaido.jp",
-"nakagawa.hokkaido.jp",
-"nakasatsunai.hokkaido.jp",
-"nakatombetsu.hokkaido.jp",
-"nanae.hokkaido.jp",
-"nanporo.hokkaido.jp",
-"nayoro.hokkaido.jp",
-"nemuro.hokkaido.jp",
-"niikappu.hokkaido.jp",
-"niki.hokkaido.jp",
-"nishiokoppe.hokkaido.jp",
-"noboribetsu.hokkaido.jp",
-"numata.hokkaido.jp",
-"obihiro.hokkaido.jp",
-"obira.hokkaido.jp",
-"oketo.hokkaido.jp",
-"okoppe.hokkaido.jp",
-"otaru.hokkaido.jp",
-"otobe.hokkaido.jp",
-"otofuke.hokkaido.jp",
-"otoineppu.hokkaido.jp",
-"oumu.hokkaido.jp",
-"ozora.hokkaido.jp",
-"pippu.hokkaido.jp",
-"rankoshi.hokkaido.jp",
-"rebun.hokkaido.jp",
-"rikubetsu.hokkaido.jp",
-"rishiri.hokkaido.jp",
-"rishirifuji.hokkaido.jp",
-"saroma.hokkaido.jp",
-"sarufutsu.hokkaido.jp",
-"shakotan.hokkaido.jp",
-"shari.hokkaido.jp",
-"shibecha.hokkaido.jp",
-"shibetsu.hokkaido.jp",
-"shikabe.hokkaido.jp",
-"shikaoi.hokkaido.jp",
-"shimamaki.hokkaido.jp",
-"shimizu.hokkaido.jp",
-"shimokawa.hokkaido.jp",
-"shinshinotsu.hokkaido.jp",
-"shintoku.hokkaido.jp",
-"shiranuka.hokkaido.jp",
-"shiraoi.hokkaido.jp",
-"shiriuchi.hokkaido.jp",
-"sobetsu.hokkaido.jp",
-"sunagawa.hokkaido.jp",
-"taiki.hokkaido.jp",
-"takasu.hokkaido.jp",
-"takikawa.hokkaido.jp",
-"takinoue.hokkaido.jp",
-"teshikaga.hokkaido.jp",
-"tobetsu.hokkaido.jp",
-"tohma.hokkaido.jp",
-"tomakomai.hokkaido.jp",
-"tomari.hokkaido.jp",
-"toya.hokkaido.jp",
-"toyako.hokkaido.jp",
-"toyotomi.hokkaido.jp",
-"toyoura.hokkaido.jp",
-"tsubetsu.hokkaido.jp",
-"tsukigata.hokkaido.jp",
-"urakawa.hokkaido.jp",
-"urausu.hokkaido.jp",
-"uryu.hokkaido.jp",
-"utashinai.hokkaido.jp",
-"wakkanai.hokkaido.jp",
-"wassamu.hokkaido.jp",
-"yakumo.hokkaido.jp",
-"yoichi.hokkaido.jp",
-"aioi.hyogo.jp",
-"akashi.hyogo.jp",
-"ako.hyogo.jp",
-"amagasaki.hyogo.jp",
-"aogaki.hyogo.jp",
-"asago.hyogo.jp",
-"ashiya.hyogo.jp",
-"awaji.hyogo.jp",
-"fukusaki.hyogo.jp",
-"goshiki.hyogo.jp",
-"harima.hyogo.jp",
-"himeji.hyogo.jp",
-"ichikawa.hyogo.jp",
-"inagawa.hyogo.jp",
-"itami.hyogo.jp",
-"kakogawa.hyogo.jp",
-"kamigori.hyogo.jp",
-"kamikawa.hyogo.jp",
-"kasai.hyogo.jp",
-"kasuga.hyogo.jp",
-"kawanishi.hyogo.jp",
-"miki.hyogo.jp",
-"minamiawaji.hyogo.jp",
-"nishinomiya.hyogo.jp",
-"nishiwaki.hyogo.jp",
-"ono.hyogo.jp",
-"sanda.hyogo.jp",
-"sannan.hyogo.jp",
-"sasayama.hyogo.jp",
-"sayo.hyogo.jp",
-"shingu.hyogo.jp",
-"shinonsen.hyogo.jp",
-"shiso.hyogo.jp",
-"sumoto.hyogo.jp",
-"taishi.hyogo.jp",
-"taka.hyogo.jp",
-"takarazuka.hyogo.jp",
-"takasago.hyogo.jp",
-"takino.hyogo.jp",
-"tamba.hyogo.jp",
-"tatsuno.hyogo.jp",
-"toyooka.hyogo.jp",
-"yabu.hyogo.jp",
-"yashiro.hyogo.jp",
-"yoka.hyogo.jp",
-"yokawa.hyogo.jp",
-"ami.ibaraki.jp",
-"asahi.ibaraki.jp",
-"bando.ibaraki.jp",
-"chikusei.ibaraki.jp",
-"daigo.ibaraki.jp",
-"fujishiro.ibaraki.jp",
-"hitachi.ibaraki.jp",
-"hitachinaka.ibaraki.jp",
-"hitachiomiya.ibaraki.jp",
-"hitachiota.ibaraki.jp",
-"ibaraki.ibaraki.jp",
-"ina.ibaraki.jp",
-"inashiki.ibaraki.jp",
-"itako.ibaraki.jp",
-"iwama.ibaraki.jp",
-"joso.ibaraki.jp",
-"kamisu.ibaraki.jp",
-"kasama.ibaraki.jp",
-"kashima.ibaraki.jp",
-"kasumigaura.ibaraki.jp",
-"koga.ibaraki.jp",
-"miho.ibaraki.jp",
-"mito.ibaraki.jp",
-"moriya.ibaraki.jp",
-"naka.ibaraki.jp",
-"namegata.ibaraki.jp",
-"oarai.ibaraki.jp",
-"ogawa.ibaraki.jp",
-"omitama.ibaraki.jp",
-"ryugasaki.ibaraki.jp",
-"sakai.ibaraki.jp",
-"sakuragawa.ibaraki.jp",
-"shimodate.ibaraki.jp",
-"shimotsuma.ibaraki.jp",
-"shirosato.ibaraki.jp",
-"sowa.ibaraki.jp",
-"suifu.ibaraki.jp",
-"takahagi.ibaraki.jp",
-"tamatsukuri.ibaraki.jp",
-"tokai.ibaraki.jp",
-"tomobe.ibaraki.jp",
-"tone.ibaraki.jp",
-"toride.ibaraki.jp",
-"tsuchiura.ibaraki.jp",
-"tsukuba.ibaraki.jp",
-"uchihara.ibaraki.jp",
-"ushiku.ibaraki.jp",
-"yachiyo.ibaraki.jp",
-"yamagata.ibaraki.jp",
-"yawara.ibaraki.jp",
-"yuki.ibaraki.jp",
-"anamizu.ishikawa.jp",
-"hakui.ishikawa.jp",
-"hakusan.ishikawa.jp",
-"kaga.ishikawa.jp",
-"kahoku.ishikawa.jp",
-"kanazawa.ishikawa.jp",
-"kawakita.ishikawa.jp",
-"komatsu.ishikawa.jp",
-"nakanoto.ishikawa.jp",
-"nanao.ishikawa.jp",
-"nomi.ishikawa.jp",
-"nonoichi.ishikawa.jp",
-"noto.ishikawa.jp",
-"shika.ishikawa.jp",
-"suzu.ishikawa.jp",
-"tsubata.ishikawa.jp",
-"tsurugi.ishikawa.jp",
-"uchinada.ishikawa.jp",
-"wajima.ishikawa.jp",
-"fudai.iwate.jp",
-"fujisawa.iwate.jp",
-"hanamaki.iwate.jp",
-"hiraizumi.iwate.jp",
-"hirono.iwate.jp",
-"ichinohe.iwate.jp",
-"ichinoseki.iwate.jp",
-"iwaizumi.iwate.jp",
-"iwate.iwate.jp",
-"joboji.iwate.jp",
-"kamaishi.iwate.jp",
-"kanegasaki.iwate.jp",
-"karumai.iwate.jp",
-"kawai.iwate.jp",
-"kitakami.iwate.jp",
-"kuji.iwate.jp",
-"kunohe.iwate.jp",
-"kuzumaki.iwate.jp",
-"miyako.iwate.jp",
-"mizusawa.iwate.jp",
-"morioka.iwate.jp",
-"ninohe.iwate.jp",
-"noda.iwate.jp",
-"ofunato.iwate.jp",
-"oshu.iwate.jp",
-"otsuchi.iwate.jp",
-"rikuzentakata.iwate.jp",
-"shiwa.iwate.jp",
-"shizukuishi.iwate.jp",
-"sumita.iwate.jp",
-"tanohata.iwate.jp",
-"tono.iwate.jp",
-"yahaba.iwate.jp",
-"yamada.iwate.jp",
-"ayagawa.kagawa.jp",
-"higashikagawa.kagawa.jp",
-"kanonji.kagawa.jp",
-"kotohira.kagawa.jp",
-"manno.kagawa.jp",
-"marugame.kagawa.jp",
-"mitoyo.kagawa.jp",
-"naoshima.kagawa.jp",
-"sanuki.kagawa.jp",
-"tadotsu.kagawa.jp",
-"takamatsu.kagawa.jp",
-"tonosho.kagawa.jp",
-"uchinomi.kagawa.jp",
-"utazu.kagawa.jp",
-"zentsuji.kagawa.jp",
-"akune.kagoshima.jp",
-"amami.kagoshima.jp",
-"hioki.kagoshima.jp",
-"isa.kagoshima.jp",
-"isen.kagoshima.jp",
-"izumi.kagoshima.jp",
-"kagoshima.kagoshima.jp",
-"kanoya.kagoshima.jp",
-"kawanabe.kagoshima.jp",
-"kinko.kagoshima.jp",
-"kouyama.kagoshima.jp",
-"makurazaki.kagoshima.jp",
-"matsumoto.kagoshima.jp",
-"minamitane.kagoshima.jp",
-"nakatane.kagoshima.jp",
-"nishinoomote.kagoshima.jp",
-"satsumasendai.kagoshima.jp",
-"soo.kagoshima.jp",
-"tarumizu.kagoshima.jp",
-"yusui.kagoshima.jp",
-"aikawa.kanagawa.jp",
-"atsugi.kanagawa.jp",
-"ayase.kanagawa.jp",
-"chigasaki.kanagawa.jp",
-"ebina.kanagawa.jp",
-"fujisawa.kanagawa.jp",
-"hadano.kanagawa.jp",
-"hakone.kanagawa.jp",
-"hiratsuka.kanagawa.jp",
-"isehara.kanagawa.jp",
-"kaisei.kanagawa.jp",
-"kamakura.kanagawa.jp",
-"kiyokawa.kanagawa.jp",
-"matsuda.kanagawa.jp",
-"minamiashigara.kanagawa.jp",
-"miura.kanagawa.jp",
-"nakai.kanagawa.jp",
-"ninomiya.kanagawa.jp",
-"odawara.kanagawa.jp",
-"oi.kanagawa.jp",
-"oiso.kanagawa.jp",
-"sagamihara.kanagawa.jp",
-"samukawa.kanagawa.jp",
-"tsukui.kanagawa.jp",
-"yamakita.kanagawa.jp",
-"yamato.kanagawa.jp",
-"yokosuka.kanagawa.jp",
-"yugawara.kanagawa.jp",
-"zama.kanagawa.jp",
-"zushi.kanagawa.jp",
-"aki.kochi.jp",
-"geisei.kochi.jp",
-"hidaka.kochi.jp",
-"higashitsuno.kochi.jp",
-"ino.kochi.jp",
-"kagami.kochi.jp",
-"kami.kochi.jp",
-"kitagawa.kochi.jp",
-"kochi.kochi.jp",
-"mihara.kochi.jp",
-"motoyama.kochi.jp",
-"muroto.kochi.jp",
-"nahari.kochi.jp",
-"nakamura.kochi.jp",
-"nankoku.kochi.jp",
-"nishitosa.kochi.jp",
-"niyodogawa.kochi.jp",
-"ochi.kochi.jp",
-"okawa.kochi.jp",
-"otoyo.kochi.jp",
-"otsuki.kochi.jp",
-"sakawa.kochi.jp",
-"sukumo.kochi.jp",
-"susaki.kochi.jp",
-"tosa.kochi.jp",
-"tosashimizu.kochi.jp",
-"toyo.kochi.jp",
-"tsuno.kochi.jp",
-"umaji.kochi.jp",
-"yasuda.kochi.jp",
-"yusuhara.kochi.jp",
-"amakusa.kumamoto.jp",
-"arao.kumamoto.jp",
-"aso.kumamoto.jp",
-"choyo.kumamoto.jp",
-"gyokuto.kumamoto.jp",
-"kamiamakusa.kumamoto.jp",
-"kikuchi.kumamoto.jp",
-"kumamoto.kumamoto.jp",
-"mashiki.kumamoto.jp",
-"mifune.kumamoto.jp",
-"minamata.kumamoto.jp",
-"minamioguni.kumamoto.jp",
-"nagasu.kumamoto.jp",
-"nishihara.kumamoto.jp",
-"oguni.kumamoto.jp",
-"ozu.kumamoto.jp",
-"sumoto.kumamoto.jp",
-"takamori.kumamoto.jp",
-"uki.kumamoto.jp",
-"uto.kumamoto.jp",
-"yamaga.kumamoto.jp",
-"yamato.kumamoto.jp",
-"yatsushiro.kumamoto.jp",
-"ayabe.kyoto.jp",
-"fukuchiyama.kyoto.jp",
-"higashiyama.kyoto.jp",
-"ide.kyoto.jp",
-"ine.kyoto.jp",
-"joyo.kyoto.jp",
-"kameoka.kyoto.jp",
-"kamo.kyoto.jp",
-"kita.kyoto.jp",
-"kizu.kyoto.jp",
-"kumiyama.kyoto.jp",
-"kyotamba.kyoto.jp",
-"kyotanabe.kyoto.jp",
-"kyotango.kyoto.jp",
-"maizuru.kyoto.jp",
-"minami.kyoto.jp",
-"minamiyamashiro.kyoto.jp",
-"miyazu.kyoto.jp",
-"muko.kyoto.jp",
-"nagaokakyo.kyoto.jp",
-"nakagyo.kyoto.jp",
-"nantan.kyoto.jp",
-"oyamazaki.kyoto.jp",
-"sakyo.kyoto.jp",
-"seika.kyoto.jp",
-"tanabe.kyoto.jp",
-"uji.kyoto.jp",
-"ujitawara.kyoto.jp",
-"wazuka.kyoto.jp",
-"yamashina.kyoto.jp",
-"yawata.kyoto.jp",
-"asahi.mie.jp",
-"inabe.mie.jp",
-"ise.mie.jp",
-"kameyama.mie.jp",
-"kawagoe.mie.jp",
-"kiho.mie.jp",
-"kisosaki.mie.jp",
-"kiwa.mie.jp",
-"komono.mie.jp",
-"kumano.mie.jp",
-"kuwana.mie.jp",
-"matsusaka.mie.jp",
-"meiwa.mie.jp",
-"mihama.mie.jp",
-"minamiise.mie.jp",
-"misugi.mie.jp",
-"miyama.mie.jp",
-"nabari.mie.jp",
-"shima.mie.jp",
-"suzuka.mie.jp",
-"tado.mie.jp",
-"taiki.mie.jp",
-"taki.mie.jp",
-"tamaki.mie.jp",
-"toba.mie.jp",
-"tsu.mie.jp",
-"udono.mie.jp",
-"ureshino.mie.jp",
-"watarai.mie.jp",
-"yokkaichi.mie.jp",
-"furukawa.miyagi.jp",
-"higashimatsushima.miyagi.jp",
-"ishinomaki.miyagi.jp",
-"iwanuma.miyagi.jp",
-"kakuda.miyagi.jp",
-"kami.miyagi.jp",
-"kawasaki.miyagi.jp",
-"marumori.miyagi.jp",
-"matsushima.miyagi.jp",
-"minamisanriku.miyagi.jp",
-"misato.miyagi.jp",
-"murata.miyagi.jp",
-"natori.miyagi.jp",
-"ogawara.miyagi.jp",
-"ohira.miyagi.jp",
-"onagawa.miyagi.jp",
-"osaki.miyagi.jp",
-"rifu.miyagi.jp",
-"semine.miyagi.jp",
-"shibata.miyagi.jp",
-"shichikashuku.miyagi.jp",
-"shikama.miyagi.jp",
-"shiogama.miyagi.jp",
-"shiroishi.miyagi.jp",
-"tagajo.miyagi.jp",
-"taiwa.miyagi.jp",
-"tome.miyagi.jp",
-"tomiya.miyagi.jp",
-"wakuya.miyagi.jp",
-"watari.miyagi.jp",
-"yamamoto.miyagi.jp",
-"zao.miyagi.jp",
-"aya.miyazaki.jp",
-"ebino.miyazaki.jp",
-"gokase.miyazaki.jp",
-"hyuga.miyazaki.jp",
-"kadogawa.miyazaki.jp",
-"kawaminami.miyazaki.jp",
-"kijo.miyazaki.jp",
-"kitagawa.miyazaki.jp",
-"kitakata.miyazaki.jp",
-"kitaura.miyazaki.jp",
-"kobayashi.miyazaki.jp",
-"kunitomi.miyazaki.jp",
-"kushima.miyazaki.jp",
-"mimata.miyazaki.jp",
-"miyakonojo.miyazaki.jp",
-"miyazaki.miyazaki.jp",
-"morotsuka.miyazaki.jp",
-"nichinan.miyazaki.jp",
-"nishimera.miyazaki.jp",
-"nobeoka.miyazaki.jp",
-"saito.miyazaki.jp",
-"shiiba.miyazaki.jp",
-"shintomi.miyazaki.jp",
-"takaharu.miyazaki.jp",
-"takanabe.miyazaki.jp",
-"takazaki.miyazaki.jp",
-"tsuno.miyazaki.jp",
-"achi.nagano.jp",
-"agematsu.nagano.jp",
-"anan.nagano.jp",
-"aoki.nagano.jp",
-"asahi.nagano.jp",
-"azumino.nagano.jp",
-"chikuhoku.nagano.jp",
-"chikuma.nagano.jp",
-"chino.nagano.jp",
-"fujimi.nagano.jp",
-"hakuba.nagano.jp",
-"hara.nagano.jp",
-"hiraya.nagano.jp",
-"iida.nagano.jp",
-"iijima.nagano.jp",
-"iiyama.nagano.jp",
-"iizuna.nagano.jp",
-"ikeda.nagano.jp",
-"ikusaka.nagano.jp",
-"ina.nagano.jp",
-"karuizawa.nagano.jp",
-"kawakami.nagano.jp",
-"kiso.nagano.jp",
-"kisofukushima.nagano.jp",
-"kitaaiki.nagano.jp",
-"komagane.nagano.jp",
-"komoro.nagano.jp",
-"matsukawa.nagano.jp",
-"matsumoto.nagano.jp",
-"miasa.nagano.jp",
-"minamiaiki.nagano.jp",
-"minamimaki.nagano.jp",
-"minamiminowa.nagano.jp",
-"minowa.nagano.jp",
-"miyada.nagano.jp",
-"miyota.nagano.jp",
-"mochizuki.nagano.jp",
-"nagano.nagano.jp",
-"nagawa.nagano.jp",
-"nagiso.nagano.jp",
-"nakagawa.nagano.jp",
-"nakano.nagano.jp",
-"nozawaonsen.nagano.jp",
-"obuse.nagano.jp",
-"ogawa.nagano.jp",
-"okaya.nagano.jp",
-"omachi.nagano.jp",
-"omi.nagano.jp",
-"ookuwa.nagano.jp",
-"ooshika.nagano.jp",
-"otaki.nagano.jp",
-"otari.nagano.jp",
-"sakae.nagano.jp",
-"sakaki.nagano.jp",
-"saku.nagano.jp",
-"sakuho.nagano.jp",
-"shimosuwa.nagano.jp",
-"shinanomachi.nagano.jp",
-"shiojiri.nagano.jp",
-"suwa.nagano.jp",
-"suzaka.nagano.jp",
-"takagi.nagano.jp",
-"takamori.nagano.jp",
-"takayama.nagano.jp",
-"tateshina.nagano.jp",
-"tatsuno.nagano.jp",
-"togakushi.nagano.jp",
-"togura.nagano.jp",
-"tomi.nagano.jp",
-"ueda.nagano.jp",
-"wada.nagano.jp",
-"yamagata.nagano.jp",
-"yamanouchi.nagano.jp",
-"yasaka.nagano.jp",
-"yasuoka.nagano.jp",
-"chijiwa.nagasaki.jp",
-"futsu.nagasaki.jp",
-"goto.nagasaki.jp",
-"hasami.nagasaki.jp",
-"hirado.nagasaki.jp",
-"iki.nagasaki.jp",
-"isahaya.nagasaki.jp",
-"kawatana.nagasaki.jp",
-"kuchinotsu.nagasaki.jp",
-"matsuura.nagasaki.jp",
-"nagasaki.nagasaki.jp",
-"obama.nagasaki.jp",
-"omura.nagasaki.jp",
-"oseto.nagasaki.jp",
-"saikai.nagasaki.jp",
-"sasebo.nagasaki.jp",
-"seihi.nagasaki.jp",
-"shimabara.nagasaki.jp",
-"shinkamigoto.nagasaki.jp",
-"togitsu.nagasaki.jp",
-"tsushima.nagasaki.jp",
-"unzen.nagasaki.jp",
-"ando.nara.jp",
-"gose.nara.jp",
-"heguri.nara.jp",
-"higashiyoshino.nara.jp",
-"ikaruga.nara.jp",
-"ikoma.nara.jp",
-"kamikitayama.nara.jp",
-"kanmaki.nara.jp",
-"kashiba.nara.jp",
-"kashihara.nara.jp",
-"katsuragi.nara.jp",
-"kawai.nara.jp",
-"kawakami.nara.jp",
-"kawanishi.nara.jp",
-"koryo.nara.jp",
-"kurotaki.nara.jp",
-"mitsue.nara.jp",
-"miyake.nara.jp",
-"nara.nara.jp",
-"nosegawa.nara.jp",
-"oji.nara.jp",
-"ouda.nara.jp",
-"oyodo.nara.jp",
-"sakurai.nara.jp",
-"sango.nara.jp",
-"shimoichi.nara.jp",
-"shimokitayama.nara.jp",
-"shinjo.nara.jp",
-"soni.nara.jp",
-"takatori.nara.jp",
-"tawaramoto.nara.jp",
-"tenkawa.nara.jp",
-"tenri.nara.jp",
-"uda.nara.jp",
-"yamatokoriyama.nara.jp",
-"yamatotakada.nara.jp",
-"yamazoe.nara.jp",
-"yoshino.nara.jp",
-"aga.niigata.jp",
-"agano.niigata.jp",
-"gosen.niigata.jp",
-"itoigawa.niigata.jp",
-"izumozaki.niigata.jp",
-"joetsu.niigata.jp",
-"kamo.niigata.jp",
-"kariwa.niigata.jp",
-"kashiwazaki.niigata.jp",
-"minamiuonuma.niigata.jp",
-"mitsuke.niigata.jp",
-"muika.niigata.jp",
-"murakami.niigata.jp",
-"myoko.niigata.jp",
-"nagaoka.niigata.jp",
-"niigata.niigata.jp",
-"ojiya.niigata.jp",
-"omi.niigata.jp",
-"sado.niigata.jp",
-"sanjo.niigata.jp",
-"seiro.niigata.jp",
-"seirou.niigata.jp",
-"sekikawa.niigata.jp",
-"shibata.niigata.jp",
-"tagami.niigata.jp",
-"tainai.niigata.jp",
-"tochio.niigata.jp",
-"tokamachi.niigata.jp",
-"tsubame.niigata.jp",
-"tsunan.niigata.jp",
-"uonuma.niigata.jp",
-"yahiko.niigata.jp",
-"yoita.niigata.jp",
-"yuzawa.niigata.jp",
-"beppu.oita.jp",
-"bungoono.oita.jp",
-"bungotakada.oita.jp",
-"hasama.oita.jp",
-"hiji.oita.jp",
-"himeshima.oita.jp",
-"hita.oita.jp",
-"kamitsue.oita.jp",
-"kokonoe.oita.jp",
-"kuju.oita.jp",
-"kunisaki.oita.jp",
-"kusu.oita.jp",
-"oita.oita.jp",
-"saiki.oita.jp",
-"taketa.oita.jp",
-"tsukumi.oita.jp",
-"usa.oita.jp",
-"usuki.oita.jp",
-"yufu.oita.jp",
-"akaiwa.okayama.jp",
-"asakuchi.okayama.jp",
-"bizen.okayama.jp",
-"hayashima.okayama.jp",
-"ibara.okayama.jp",
-"kagamino.okayama.jp",
-"kasaoka.okayama.jp",
-"kibichuo.okayama.jp",
-"kumenan.okayama.jp",
-"kurashiki.okayama.jp",
-"maniwa.okayama.jp",
-"misaki.okayama.jp",
-"nagi.okayama.jp",
-"niimi.okayama.jp",
-"nishiawakura.okayama.jp",
-"okayama.okayama.jp",
-"satosho.okayama.jp",
-"setouchi.okayama.jp",
-"shinjo.okayama.jp",
-"shoo.okayama.jp",
-"soja.okayama.jp",
-"takahashi.okayama.jp",
-"tamano.okayama.jp",
-"tsuyama.okayama.jp",
-"wake.okayama.jp",
-"yakage.okayama.jp",
-"aguni.okinawa.jp",
-"ginowan.okinawa.jp",
-"ginoza.okinawa.jp",
-"gushikami.okinawa.jp",
-"haebaru.okinawa.jp",
-"higashi.okinawa.jp",
-"hirara.okinawa.jp",
-"iheya.okinawa.jp",
-"ishigaki.okinawa.jp",
-"ishikawa.okinawa.jp",
-"itoman.okinawa.jp",
-"izena.okinawa.jp",
-"kadena.okinawa.jp",
-"kin.okinawa.jp",
-"kitadaito.okinawa.jp",
-"kitanakagusuku.okinawa.jp",
-"kumejima.okinawa.jp",
-"kunigami.okinawa.jp",
-"minamidaito.okinawa.jp",
-"motobu.okinawa.jp",
-"nago.okinawa.jp",
-"naha.okinawa.jp",
-"nakagusuku.okinawa.jp",
-"nakijin.okinawa.jp",
-"nanjo.okinawa.jp",
-"nishihara.okinawa.jp",
-"ogimi.okinawa.jp",
-"okinawa.okinawa.jp",
-"onna.okinawa.jp",
-"shimoji.okinawa.jp",
-"taketomi.okinawa.jp",
-"tarama.okinawa.jp",
-"tokashiki.okinawa.jp",
-"tomigusuku.okinawa.jp",
-"tonaki.okinawa.jp",
-"urasoe.okinawa.jp",
-"uruma.okinawa.jp",
-"yaese.okinawa.jp",
-"yomitan.okinawa.jp",
-"yonabaru.okinawa.jp",
-"yonaguni.okinawa.jp",
-"zamami.okinawa.jp",
-"abeno.osaka.jp",
-"chihayaakasaka.osaka.jp",
-"chuo.osaka.jp",
-"daito.osaka.jp",
-"fujiidera.osaka.jp",
-"habikino.osaka.jp",
-"hannan.osaka.jp",
-"higashiosaka.osaka.jp",
-"higashisumiyoshi.osaka.jp",
-"higashiyodogawa.osaka.jp",
-"hirakata.osaka.jp",
-"ibaraki.osaka.jp",
-"ikeda.osaka.jp",
-"izumi.osaka.jp",
-"izumiotsu.osaka.jp",
-"izumisano.osaka.jp",
-"kadoma.osaka.jp",
-"kaizuka.osaka.jp",
-"kanan.osaka.jp",
-"kashiwara.osaka.jp",
-"katano.osaka.jp",
-"kawachinagano.osaka.jp",
-"kishiwada.osaka.jp",
-"kita.osaka.jp",
-"kumatori.osaka.jp",
-"matsubara.osaka.jp",
-"minato.osaka.jp",
-"minoh.osaka.jp",
-"misaki.osaka.jp",
-"moriguchi.osaka.jp",
-"neyagawa.osaka.jp",
-"nishi.osaka.jp",
-"nose.osaka.jp",
-"osakasayama.osaka.jp",
-"sakai.osaka.jp",
-"sayama.osaka.jp",
-"sennan.osaka.jp",
-"settsu.osaka.jp",
-"shijonawate.osaka.jp",
-"shimamoto.osaka.jp",
-"suita.osaka.jp",
-"tadaoka.osaka.jp",
-"taishi.osaka.jp",
-"tajiri.osaka.jp",
-"takaishi.osaka.jp",
-"takatsuki.osaka.jp",
-"tondabayashi.osaka.jp",
-"toyonaka.osaka.jp",
-"toyono.osaka.jp",
-"yao.osaka.jp",
-"ariake.saga.jp",
-"arita.saga.jp",
-"fukudomi.saga.jp",
-"genkai.saga.jp",
-"hamatama.saga.jp",
-"hizen.saga.jp",
-"imari.saga.jp",
-"kamimine.saga.jp",
-"kanzaki.saga.jp",
-"karatsu.saga.jp",
-"kashima.saga.jp",
-"kitagata.saga.jp",
-"kitahata.saga.jp",
-"kiyama.saga.jp",
-"kouhoku.saga.jp",
-"kyuragi.saga.jp",
-"nishiarita.saga.jp",
-"ogi.saga.jp",
-"omachi.saga.jp",
-"ouchi.saga.jp",
-"saga.saga.jp",
-"shiroishi.saga.jp",
-"taku.saga.jp",
-"tara.saga.jp",
-"tosu.saga.jp",
-"yoshinogari.saga.jp",
-"arakawa.saitama.jp",
-"asaka.saitama.jp",
-"chichibu.saitama.jp",
-"fujimi.saitama.jp",
-"fujimino.saitama.jp",
-"fukaya.saitama.jp",
-"hanno.saitama.jp",
-"hanyu.saitama.jp",
-"hasuda.saitama.jp",
-"hatogaya.saitama.jp",
-"hatoyama.saitama.jp",
-"hidaka.saitama.jp",
-"higashichichibu.saitama.jp",
-"higashimatsuyama.saitama.jp",
-"honjo.saitama.jp",
-"ina.saitama.jp",
-"iruma.saitama.jp",
-"iwatsuki.saitama.jp",
-"kamiizumi.saitama.jp",
-"kamikawa.saitama.jp",
-"kamisato.saitama.jp",
-"kasukabe.saitama.jp",
-"kawagoe.saitama.jp",
-"kawaguchi.saitama.jp",
-"kawajima.saitama.jp",
-"kazo.saitama.jp",
-"kitamoto.saitama.jp",
-"koshigaya.saitama.jp",
-"kounosu.saitama.jp",
-"kuki.saitama.jp",
-"kumagaya.saitama.jp",
-"matsubushi.saitama.jp",
-"minano.saitama.jp",
-"misato.saitama.jp",
-"miyashiro.saitama.jp",
-"miyoshi.saitama.jp",
-"moroyama.saitama.jp",
-"nagatoro.saitama.jp",
-"namegawa.saitama.jp",
-"niiza.saitama.jp",
-"ogano.saitama.jp",
-"ogawa.saitama.jp",
-"ogose.saitama.jp",
-"okegawa.saitama.jp",
-"omiya.saitama.jp",
-"otaki.saitama.jp",
-"ranzan.saitama.jp",
-"ryokami.saitama.jp",
-"saitama.saitama.jp",
-"sakado.saitama.jp",
-"satte.saitama.jp",
-"sayama.saitama.jp",
-"shiki.saitama.jp",
-"shiraoka.saitama.jp",
-"soka.saitama.jp",
-"sugito.saitama.jp",
-"toda.saitama.jp",
-"tokigawa.saitama.jp",
-"tokorozawa.saitama.jp",
-"tsurugashima.saitama.jp",
-"urawa.saitama.jp",
-"warabi.saitama.jp",
-"yashio.saitama.jp",
-"yokoze.saitama.jp",
-"yono.saitama.jp",
-"yorii.saitama.jp",
-"yoshida.saitama.jp",
-"yoshikawa.saitama.jp",
-"yoshimi.saitama.jp",
-"aisho.shiga.jp",
-"gamo.shiga.jp",
-"higashiomi.shiga.jp",
-"hikone.shiga.jp",
-"koka.shiga.jp",
-"konan.shiga.jp",
-"kosei.shiga.jp",
-"koto.shiga.jp",
-"kusatsu.shiga.jp",
-"maibara.shiga.jp",
-"moriyama.shiga.jp",
-"nagahama.shiga.jp",
-"nishiazai.shiga.jp",
-"notogawa.shiga.jp",
-"omihachiman.shiga.jp",
-"otsu.shiga.jp",
-"ritto.shiga.jp",
-"ryuoh.shiga.jp",
-"takashima.shiga.jp",
-"takatsuki.shiga.jp",
-"torahime.shiga.jp",
-"toyosato.shiga.jp",
-"yasu.shiga.jp",
-"akagi.shimane.jp",
-"ama.shimane.jp",
-"gotsu.shimane.jp",
-"hamada.shimane.jp",
-"higashiizumo.shimane.jp",
-"hikawa.shimane.jp",
-"hikimi.shimane.jp",
-"izumo.shimane.jp",
-"kakinoki.shimane.jp",
-"masuda.shimane.jp",
-"matsue.shimane.jp",
-"misato.shimane.jp",
-"nishinoshima.shimane.jp",
-"ohda.shimane.jp",
-"okinoshima.shimane.jp",
-"okuizumo.shimane.jp",
-"shimane.shimane.jp",
-"tamayu.shimane.jp",
-"tsuwano.shimane.jp",
-"unnan.shimane.jp",
-"yakumo.shimane.jp",
-"yasugi.shimane.jp",
-"yatsuka.shimane.jp",
-"arai.shizuoka.jp",
-"atami.shizuoka.jp",
-"fuji.shizuoka.jp",
-"fujieda.shizuoka.jp",
-"fujikawa.shizuoka.jp",
-"fujinomiya.shizuoka.jp",
-"fukuroi.shizuoka.jp",
-"gotemba.shizuoka.jp",
-"haibara.shizuoka.jp",
-"hamamatsu.shizuoka.jp",
-"higashiizu.shizuoka.jp",
-"ito.shizuoka.jp",
-"iwata.shizuoka.jp",
-"izu.shizuoka.jp",
-"izunokuni.shizuoka.jp",
-"kakegawa.shizuoka.jp",
-"kannami.shizuoka.jp",
-"kawanehon.shizuoka.jp",
-"kawazu.shizuoka.jp",
-"kikugawa.shizuoka.jp",
-"kosai.shizuoka.jp",
-"makinohara.shizuoka.jp",
-"matsuzaki.shizuoka.jp",
-"minamiizu.shizuoka.jp",
-"mishima.shizuoka.jp",
-"morimachi.shizuoka.jp",
-"nishiizu.shizuoka.jp",
-"numazu.shizuoka.jp",
-"omaezaki.shizuoka.jp",
-"shimada.shizuoka.jp",
-"shimizu.shizuoka.jp",
-"shimoda.shizuoka.jp",
-"shizuoka.shizuoka.jp",
-"susono.shizuoka.jp",
-"yaizu.shizuoka.jp",
-"yoshida.shizuoka.jp",
-"ashikaga.tochigi.jp",
-"bato.tochigi.jp",
-"haga.tochigi.jp",
-"ichikai.tochigi.jp",
-"iwafune.tochigi.jp",
-"kaminokawa.tochigi.jp",
-"kanuma.tochigi.jp",
-"karasuyama.tochigi.jp",
-"kuroiso.tochigi.jp",
-"mashiko.tochigi.jp",
-"mibu.tochigi.jp",
-"moka.tochigi.jp",
-"motegi.tochigi.jp",
-"nasu.tochigi.jp",
-"nasushiobara.tochigi.jp",
-"nikko.tochigi.jp",
-"nishikata.tochigi.jp",
-"nogi.tochigi.jp",
-"ohira.tochigi.jp",
-"ohtawara.tochigi.jp",
-"oyama.tochigi.jp",
-"sakura.tochigi.jp",
-"sano.tochigi.jp",
-"shimotsuke.tochigi.jp",
-"shioya.tochigi.jp",
-"takanezawa.tochigi.jp",
-"tochigi.tochigi.jp",
-"tsuga.tochigi.jp",
-"ujiie.tochigi.jp",
-"utsunomiya.tochigi.jp",
-"yaita.tochigi.jp",
-"aizumi.tokushima.jp",
-"anan.tokushima.jp",
-"ichiba.tokushima.jp",
-"itano.tokushima.jp",
-"kainan.tokushima.jp",
-"komatsushima.tokushima.jp",
-"matsushige.tokushima.jp",
-"mima.tokushima.jp",
-"minami.tokushima.jp",
-"miyoshi.tokushima.jp",
-"mugi.tokushima.jp",
-"nakagawa.tokushima.jp",
-"naruto.tokushima.jp",
-"sanagochi.tokushima.jp",
-"shishikui.tokushima.jp",
-"tokushima.tokushima.jp",
-"wajiki.tokushima.jp",
-"adachi.tokyo.jp",
-"akiruno.tokyo.jp",
-"akishima.tokyo.jp",
-"aogashima.tokyo.jp",
-"arakawa.tokyo.jp",
-"bunkyo.tokyo.jp",
-"chiyoda.tokyo.jp",
-"chofu.tokyo.jp",
-"chuo.tokyo.jp",
-"edogawa.tokyo.jp",
-"fuchu.tokyo.jp",
-"fussa.tokyo.jp",
-"hachijo.tokyo.jp",
-"hachioji.tokyo.jp",
-"hamura.tokyo.jp",
-"higashikurume.tokyo.jp",
-"higashimurayama.tokyo.jp",
-"higashiyamato.tokyo.jp",
-"hino.tokyo.jp",
-"hinode.tokyo.jp",
-"hinohara.tokyo.jp",
-"inagi.tokyo.jp",
-"itabashi.tokyo.jp",
-"katsushika.tokyo.jp",
-"kita.tokyo.jp",
-"kiyose.tokyo.jp",
-"kodaira.tokyo.jp",
-"koganei.tokyo.jp",
-"kokubunji.tokyo.jp",
-"komae.tokyo.jp",
-"koto.tokyo.jp",
-"kouzushima.tokyo.jp",
-"kunitachi.tokyo.jp",
-"machida.tokyo.jp",
-"meguro.tokyo.jp",
-"minato.tokyo.jp",
-"mitaka.tokyo.jp",
-"mizuho.tokyo.jp",
-"musashimurayama.tokyo.jp",
-"musashino.tokyo.jp",
-"nakano.tokyo.jp",
-"nerima.tokyo.jp",
-"ogasawara.tokyo.jp",
-"okutama.tokyo.jp",
-"ome.tokyo.jp",
-"oshima.tokyo.jp",
-"ota.tokyo.jp",
-"setagaya.tokyo.jp",
-"shibuya.tokyo.jp",
-"shinagawa.tokyo.jp",
-"shinjuku.tokyo.jp",
-"suginami.tokyo.jp",
-"sumida.tokyo.jp",
-"tachikawa.tokyo.jp",
-"taito.tokyo.jp",
-"tama.tokyo.jp",
-"toshima.tokyo.jp",
-"chizu.tottori.jp",
-"hino.tottori.jp",
-"kawahara.tottori.jp",
-"koge.tottori.jp",
-"kotoura.tottori.jp",
-"misasa.tottori.jp",
-"nanbu.tottori.jp",
-"nichinan.tottori.jp",
-"sakaiminato.tottori.jp",
-"tottori.tottori.jp",
-"wakasa.tottori.jp",
-"yazu.tottori.jp",
-"yonago.tottori.jp",
-"asahi.toyama.jp",
-"fuchu.toyama.jp",
-"fukumitsu.toyama.jp",
-"funahashi.toyama.jp",
-"himi.toyama.jp",
-"imizu.toyama.jp",
-"inami.toyama.jp",
-"johana.toyama.jp",
-"kamiichi.toyama.jp",
-"kurobe.toyama.jp",
-"nakaniikawa.toyama.jp",
-"namerikawa.toyama.jp",
-"nanto.toyama.jp",
-"nyuzen.toyama.jp",
-"oyabe.toyama.jp",
-"taira.toyama.jp",
-"takaoka.toyama.jp",
-"tateyama.toyama.jp",
-"toga.toyama.jp",
-"tonami.toyama.jp",
-"toyama.toyama.jp",
-"unazuki.toyama.jp",
-"uozu.toyama.jp",
-"yamada.toyama.jp",
-"arida.wakayama.jp",
-"aridagawa.wakayama.jp",
-"gobo.wakayama.jp",
-"hashimoto.wakayama.jp",
-"hidaka.wakayama.jp",
-"hirogawa.wakayama.jp",
-"inami.wakayama.jp",
-"iwade.wakayama.jp",
-"kainan.wakayama.jp",
-"kamitonda.wakayama.jp",
-"katsuragi.wakayama.jp",
-"kimino.wakayama.jp",
-"kinokawa.wakayama.jp",
-"kitayama.wakayama.jp",
-"koya.wakayama.jp",
-"koza.wakayama.jp",
-"kozagawa.wakayama.jp",
-"kudoyama.wakayama.jp",
-"kushimoto.wakayama.jp",
-"mihama.wakayama.jp",
-"misato.wakayama.jp",
-"nachikatsuura.wakayama.jp",
-"shingu.wakayama.jp",
-"shirahama.wakayama.jp",
-"taiji.wakayama.jp",
-"tanabe.wakayama.jp",
-"wakayama.wakayama.jp",
-"yuasa.wakayama.jp",
-"yura.wakayama.jp",
-"asahi.yamagata.jp",
-"funagata.yamagata.jp",
-"higashine.yamagata.jp",
-"iide.yamagata.jp",
-"kahoku.yamagata.jp",
-"kaminoyama.yamagata.jp",
-"kaneyama.yamagata.jp",
-"kawanishi.yamagata.jp",
-"mamurogawa.yamagata.jp",
-"mikawa.yamagata.jp",
-"murayama.yamagata.jp",
-"nagai.yamagata.jp",
-"nakayama.yamagata.jp",
-"nanyo.yamagata.jp",
-"nishikawa.yamagata.jp",
-"obanazawa.yamagata.jp",
-"oe.yamagata.jp",
-"oguni.yamagata.jp",
-"ohkura.yamagata.jp",
-"oishida.yamagata.jp",
-"sagae.yamagata.jp",
-"sakata.yamagata.jp",
-"sakegawa.yamagata.jp",
-"shinjo.yamagata.jp",
-"shirataka.yamagata.jp",
-"shonai.yamagata.jp",
-"takahata.yamagata.jp",
-"tendo.yamagata.jp",
-"tozawa.yamagata.jp",
-"tsuruoka.yamagata.jp",
-"yamagata.yamagata.jp",
-"yamanobe.yamagata.jp",
-"yonezawa.yamagata.jp",
-"yuza.yamagata.jp",
-"abu.yamaguchi.jp",
-"hagi.yamaguchi.jp",
-"hikari.yamaguchi.jp",
-"hofu.yamaguchi.jp",
-"iwakuni.yamaguchi.jp",
-"kudamatsu.yamaguchi.jp",
-"mitou.yamaguchi.jp",
-"nagato.yamaguchi.jp",
-"oshima.yamaguchi.jp",
-"shimonoseki.yamaguchi.jp",
-"shunan.yamaguchi.jp",
-"tabuse.yamaguchi.jp",
-"tokuyama.yamaguchi.jp",
-"toyota.yamaguchi.jp",
-"ube.yamaguchi.jp",
-"yuu.yamaguchi.jp",
-"chuo.yamanashi.jp",
-"doshi.yamanashi.jp",
-"fuefuki.yamanashi.jp",
-"fujikawa.yamanashi.jp",
-"fujikawaguchiko.yamanashi.jp",
-"fujiyoshida.yamanashi.jp",
-"hayakawa.yamanashi.jp",
-"hokuto.yamanashi.jp",
-"ichikawamisato.yamanashi.jp",
-"kai.yamanashi.jp",
-"kofu.yamanashi.jp",
-"koshu.yamanashi.jp",
-"kosuge.yamanashi.jp",
-"minami-alps.yamanashi.jp",
-"minobu.yamanashi.jp",
-"nakamichi.yamanashi.jp",
-"nanbu.yamanashi.jp",
-"narusawa.yamanashi.jp",
-"nirasaki.yamanashi.jp",
-"nishikatsura.yamanashi.jp",
-"oshino.yamanashi.jp",
-"otsuki.yamanashi.jp",
-"showa.yamanashi.jp",
-"tabayama.yamanashi.jp",
-"tsuru.yamanashi.jp",
-"uenohara.yamanashi.jp",
-"yamanakako.yamanashi.jp",
-"yamanashi.yamanashi.jp",
-"ke",
-"ac.ke",
-"co.ke",
-"go.ke",
-"info.ke",
-"me.ke",
-"mobi.ke",
-"ne.ke",
-"or.ke",
-"sc.ke",
-"kg",
-"org.kg",
-"net.kg",
-"com.kg",
-"edu.kg",
-"gov.kg",
-"mil.kg",
-"*.kh",
-"ki",
-"edu.ki",
-"biz.ki",
-"net.ki",
-"org.ki",
-"gov.ki",
-"info.ki",
-"com.ki",
-"km",
-"org.km",
-"nom.km",
-"gov.km",
-"prd.km",
-"tm.km",
-"edu.km",
-"mil.km",
-"ass.km",
-"com.km",
-"coop.km",
-"asso.km",
-"presse.km",
-"medecin.km",
-"notaires.km",
-"pharmaciens.km",
-"veterinaire.km",
-"gouv.km",
-"kn",
-"net.kn",
-"org.kn",
-"edu.kn",
-"gov.kn",
-"kp",
-"com.kp",
-"edu.kp",
-"gov.kp",
-"org.kp",
-"rep.kp",
-"tra.kp",
-"kr",
-"ac.kr",
-"co.kr",
-"es.kr",
-"go.kr",
-"hs.kr",
-"kg.kr",
-"mil.kr",
-"ms.kr",
-"ne.kr",
-"or.kr",
-"pe.kr",
-"re.kr",
-"sc.kr",
-"busan.kr",
-"chungbuk.kr",
-"chungnam.kr",
-"daegu.kr",
-"daejeon.kr",
-"gangwon.kr",
-"gwangju.kr",
-"gyeongbuk.kr",
-"gyeonggi.kr",
-"gyeongnam.kr",
-"incheon.kr",
-"jeju.kr",
-"jeonbuk.kr",
-"jeonnam.kr",
-"seoul.kr",
-"ulsan.kr",
-"kw",
-"com.kw",
-"edu.kw",
-"emb.kw",
-"gov.kw",
-"ind.kw",
-"net.kw",
-"org.kw",
-"ky",
-"edu.ky",
-"gov.ky",
-"com.ky",
-"org.ky",
-"net.ky",
-"kz",
-"org.kz",
-"edu.kz",
-"net.kz",
-"gov.kz",
-"mil.kz",
-"com.kz",
-"la",
-"int.la",
-"net.la",
-"info.la",
-"edu.la",
-"gov.la",
-"per.la",
-"com.la",
-"org.la",
-"lb",
-"com.lb",
-"edu.lb",
-"gov.lb",
-"net.lb",
-"org.lb",
-"lc",
-"com.lc",
-"net.lc",
-"co.lc",
-"org.lc",
-"edu.lc",
-"gov.lc",
-"li",
-"lk",
-"gov.lk",
-"sch.lk",
-"net.lk",
-"int.lk",
-"com.lk",
-"org.lk",
-"edu.lk",
-"ngo.lk",
-"soc.lk",
-"web.lk",
-"ltd.lk",
-"assn.lk",
-"grp.lk",
-"hotel.lk",
-"ac.lk",
-"lr",
-"com.lr",
-"edu.lr",
-"gov.lr",
-"org.lr",
-"net.lr",
-"ls",
-"ac.ls",
-"biz.ls",
-"co.ls",
-"edu.ls",
-"gov.ls",
-"info.ls",
-"net.ls",
-"org.ls",
-"sc.ls",
-"lt",
-"gov.lt",
-"lu",
-"lv",
-"com.lv",
-"edu.lv",
-"gov.lv",
-"org.lv",
-"mil.lv",
-"id.lv",
-"net.lv",
-"asn.lv",
-"conf.lv",
-"ly",
-"com.ly",
-"net.ly",
-"gov.ly",
-"plc.ly",
-"edu.ly",
-"sch.ly",
-"med.ly",
-"org.ly",
-"id.ly",
-"ma",
-"co.ma",
-"net.ma",
-"gov.ma",
-"org.ma",
-"ac.ma",
-"press.ma",
-"mc",
-"tm.mc",
-"asso.mc",
-"md",
-"me",
-"co.me",
-"net.me",
-"org.me",
-"edu.me",
-"ac.me",
-"gov.me",
-"its.me",
-"priv.me",
-"mg",
-"org.mg",
-"nom.mg",
-"gov.mg",
-"prd.mg",
-"tm.mg",
-"edu.mg",
-"mil.mg",
-"com.mg",
-"co.mg",
-"mh",
-"mil",
-"mk",
-"com.mk",
-"org.mk",
-"net.mk",
-"edu.mk",
-"gov.mk",
-"inf.mk",
-"name.mk",
-"ml",
-"com.ml",
-"edu.ml",
-"gouv.ml",
-"gov.ml",
-"net.ml",
-"org.ml",
-"presse.ml",
-"*.mm",
-"mn",
-"gov.mn",
-"edu.mn",
-"org.mn",
-"mo",
-"com.mo",
-"net.mo",
-"org.mo",
-"edu.mo",
-"gov.mo",
-"mobi",
-"mp",
-"mq",
-"mr",
-"gov.mr",
-"ms",
-"com.ms",
-"edu.ms",
-"gov.ms",
-"net.ms",
-"org.ms",
-"mt",
-"com.mt",
-"edu.mt",
-"net.mt",
-"org.mt",
-"mu",
-"com.mu",
-"net.mu",
-"org.mu",
-"gov.mu",
-"ac.mu",
-"co.mu",
-"or.mu",
-"museum",
-"academy.museum",
-"agriculture.museum",
-"air.museum",
-"airguard.museum",
-"alabama.museum",
-"alaska.museum",
-"amber.museum",
-"ambulance.museum",
-"american.museum",
-"americana.museum",
-"americanantiques.museum",
-"americanart.museum",
-"amsterdam.museum",
-"and.museum",
-"annefrank.museum",
-"anthro.museum",
-"anthropology.museum",
-"antiques.museum",
-"aquarium.museum",
-"arboretum.museum",
-"archaeological.museum",
-"archaeology.museum",
-"architecture.museum",
-"art.museum",
-"artanddesign.museum",
-"artcenter.museum",
-"artdeco.museum",
-"arteducation.museum",
-"artgallery.museum",
-"arts.museum",
-"artsandcrafts.museum",
-"asmatart.museum",
-"assassination.museum",
-"assisi.museum",
-"association.museum",
-"astronomy.museum",
-"atlanta.museum",
-"austin.museum",
-"australia.museum",
-"automotive.museum",
-"aviation.museum",
-"axis.museum",
-"badajoz.museum",
-"baghdad.museum",
-"bahn.museum",
-"bale.museum",
-"baltimore.museum",
-"barcelona.museum",
-"baseball.museum",
-"basel.museum",
-"baths.museum",
-"bauern.museum",
-"beauxarts.museum",
-"beeldengeluid.museum",
-"bellevue.museum",
-"bergbau.museum",
-"berkeley.museum",
-"berlin.museum",
-"bern.museum",
-"bible.museum",
-"bilbao.museum",
-"bill.museum",
-"birdart.museum",
-"birthplace.museum",
-"bonn.museum",
-"boston.museum",
-"botanical.museum",
-"botanicalgarden.museum",
-"botanicgarden.museum",
-"botany.museum",
-"brandywinevalley.museum",
-"brasil.museum",
-"bristol.museum",
-"british.museum",
-"britishcolumbia.museum",
-"broadcast.museum",
-"brunel.museum",
-"brussel.museum",
-"brussels.museum",
-"bruxelles.museum",
-"building.museum",
-"burghof.museum",
-"bus.museum",
-"bushey.museum",
-"cadaques.museum",
-"california.museum",
-"cambridge.museum",
-"can.museum",
-"canada.museum",
-"capebreton.museum",
-"carrier.museum",
-"cartoonart.museum",
-"casadelamoneda.museum",
-"castle.museum",
-"castres.museum",
-"celtic.museum",
-"center.museum",
-"chattanooga.museum",
-"cheltenham.museum",
-"chesapeakebay.museum",
-"chicago.museum",
-"children.museum",
-"childrens.museum",
-"childrensgarden.museum",
-"chiropractic.museum",
-"chocolate.museum",
-"christiansburg.museum",
-"cincinnati.museum",
-"cinema.museum",
-"circus.museum",
-"civilisation.museum",
-"civilization.museum",
-"civilwar.museum",
-"clinton.museum",
-"clock.museum",
-"coal.museum",
-"coastaldefence.museum",
-"cody.museum",
-"coldwar.museum",
-"collection.museum",
-"colonialwilliamsburg.museum",
-"coloradoplateau.museum",
-"columbia.museum",
-"columbus.museum",
-"communication.museum",
-"communications.museum",
-"community.museum",
-"computer.museum",
-"computerhistory.museum",
-"comunicações.museum",
-"contemporary.museum",
-"contemporaryart.museum",
-"convent.museum",
-"copenhagen.museum",
-"corporation.museum",
-"correios-e-telecomunicações.museum",
-"corvette.museum",
-"costume.museum",
-"countryestate.museum",
-"county.museum",
-"crafts.museum",
-"cranbrook.museum",
-"creation.museum",
-"cultural.museum",
-"culturalcenter.museum",
-"culture.museum",
-"cyber.museum",
-"cymru.museum",
-"dali.museum",
-"dallas.museum",
-"database.museum",
-"ddr.museum",
-"decorativearts.museum",
-"delaware.museum",
-"delmenhorst.museum",
-"denmark.museum",
-"depot.museum",
-"design.museum",
-"detroit.museum",
-"dinosaur.museum",
-"discovery.museum",
-"dolls.museum",
-"donostia.museum",
-"durham.museum",
-"eastafrica.museum",
-"eastcoast.museum",
-"education.museum",
-"educational.museum",
-"egyptian.museum",
-"eisenbahn.museum",
-"elburg.museum",
-"elvendrell.museum",
-"embroidery.museum",
-"encyclopedic.museum",
-"england.museum",
-"entomology.museum",
-"environment.museum",
-"environmentalconservation.museum",
-"epilepsy.museum",
-"essex.museum",
-"estate.museum",
-"ethnology.museum",
-"exeter.museum",
-"exhibition.museum",
-"family.museum",
-"farm.museum",
-"farmequipment.museum",
-"farmers.museum",
-"farmstead.museum",
-"field.museum",
-"figueres.museum",
-"filatelia.museum",
-"film.museum",
-"fineart.museum",
-"finearts.museum",
-"finland.museum",
-"flanders.museum",
-"florida.museum",
-"force.museum",
-"fortmissoula.museum",
-"fortworth.museum",
-"foundation.museum",
-"francaise.museum",
-"frankfurt.museum",
-"franziskaner.museum",
-"freemasonry.museum",
-"freiburg.museum",
-"fribourg.museum",
-"frog.museum",
-"fundacio.museum",
-"furniture.museum",
-"gallery.museum",
-"garden.museum",
-"gateway.museum",
-"geelvinck.museum",
-"gemological.museum",
-"geology.museum",
-"georgia.museum",
-"giessen.museum",
-"glas.museum",
-"glass.museum",
-"gorge.museum",
-"grandrapids.museum",
-"graz.museum",
-"guernsey.museum",
-"halloffame.museum",
-"hamburg.museum",
-"handson.museum",
-"harvestcelebration.museum",
-"hawaii.museum",
-"health.museum",
-"heimatunduhren.museum",
-"hellas.museum",
-"helsinki.museum",
-"hembygdsforbund.museum",
-"heritage.museum",
-"histoire.museum",
-"historical.museum",
-"historicalsociety.museum",
-"historichouses.museum",
-"historisch.museum",
-"historisches.museum",
-"history.museum",
-"historyofscience.museum",
-"horology.museum",
-"house.museum",
-"humanities.museum",
-"illustration.museum",
-"imageandsound.museum",
-"indian.museum",
-"indiana.museum",
-"indianapolis.museum",
-"indianmarket.museum",
-"intelligence.museum",
-"interactive.museum",
-"iraq.museum",
-"iron.museum",
-"isleofman.museum",
-"jamison.museum",
-"jefferson.museum",
-"jerusalem.museum",
-"jewelry.museum",
-"jewish.museum",
-"jewishart.museum",
-"jfk.museum",
-"journalism.museum",
-"judaica.museum",
-"judygarland.museum",
-"juedisches.museum",
-"juif.museum",
-"karate.museum",
-"karikatur.museum",
-"kids.museum",
-"koebenhavn.museum",
-"koeln.museum",
-"kunst.museum",
-"kunstsammlung.museum",
-"kunstunddesign.museum",
-"labor.museum",
-"labour.museum",
-"lajolla.museum",
-"lancashire.museum",
-"landes.museum",
-"lans.museum",
-"läns.museum",
-"larsson.museum",
-"lewismiller.museum",
-"lincoln.museum",
-"linz.museum",
-"living.museum",
-"livinghistory.museum",
-"localhistory.museum",
-"london.museum",
-"losangeles.museum",
-"louvre.museum",
-"loyalist.museum",
-"lucerne.museum",
-"luxembourg.museum",
-"luzern.museum",
-"mad.museum",
-"madrid.museum",
-"mallorca.museum",
-"manchester.museum",
-"mansion.museum",
-"mansions.museum",
-"manx.museum",
-"marburg.museum",
-"maritime.museum",
-"maritimo.museum",
-"maryland.museum",
-"marylhurst.museum",
-"media.museum",
-"medical.museum",
-"medizinhistorisches.museum",
-"meeres.museum",
-"memorial.museum",
-"mesaverde.museum",
-"michigan.museum",
-"midatlantic.museum",
-"military.museum",
-"mill.museum",
-"miners.museum",
-"mining.museum",
-"minnesota.museum",
-"missile.museum",
-"missoula.museum",
-"modern.museum",
-"moma.museum",
-"money.museum",
-"monmouth.museum",
-"monticello.museum",
-"montreal.museum",
-"moscow.museum",
-"motorcycle.museum",
-"muenchen.museum",
-"muenster.museum",
-"mulhouse.museum",
-"muncie.museum",
-"museet.museum",
-"museumcenter.museum",
-"museumvereniging.museum",
-"music.museum",
-"national.museum",
-"nationalfirearms.museum",
-"nationalheritage.museum",
-"nativeamerican.museum",
-"naturalhistory.museum",
-"naturalhistorymuseum.museum",
-"naturalsciences.museum",
-"nature.museum",
-"naturhistorisches.museum",
-"natuurwetenschappen.museum",
-"naumburg.museum",
-"naval.museum",
-"nebraska.museum",
-"neues.museum",
-"newhampshire.museum",
-"newjersey.museum",
-"newmexico.museum",
-"newport.museum",
-"newspaper.museum",
-"newyork.museum",
-"niepce.museum",
-"norfolk.museum",
-"north.museum",
-"nrw.museum",
-"nyc.museum",
-"nyny.museum",
-"oceanographic.museum",
-"oceanographique.museum",
-"omaha.museum",
-"online.museum",
-"ontario.museum",
-"openair.museum",
-"oregon.museum",
-"oregontrail.museum",
-"otago.museum",
-"oxford.museum",
-"pacific.museum",
-"paderborn.museum",
-"palace.museum",
-"paleo.museum",
-"palmsprings.museum",
-"panama.museum",
-"paris.museum",
-"pasadena.museum",
-"pharmacy.museum",
-"philadelphia.museum",
-"philadelphiaarea.museum",
-"philately.museum",
-"phoenix.museum",
-"photography.museum",
-"pilots.museum",
-"pittsburgh.museum",
-"planetarium.museum",
-"plantation.museum",
-"plants.museum",
-"plaza.museum",
-"portal.museum",
-"portland.museum",
-"portlligat.museum",
-"posts-and-telecommunications.museum",
-"preservation.museum",
-"presidio.museum",
-"press.museum",
-"project.museum",
-"public.museum",
-"pubol.museum",
-"quebec.museum",
-"railroad.museum",
-"railway.museum",
-"research.museum",
-"resistance.museum",
-"riodejaneiro.museum",
-"rochester.museum",
-"rockart.museum",
-"roma.museum",
-"russia.museum",
-"saintlouis.museum",
-"salem.museum",
-"salvadordali.museum",
-"salzburg.museum",
-"sandiego.museum",
-"sanfrancisco.museum",
-"santabarbara.museum",
-"santacruz.museum",
-"santafe.museum",
-"saskatchewan.museum",
-"satx.museum",
-"savannahga.museum",
-"schlesisches.museum",
-"schoenbrunn.museum",
-"schokoladen.museum",
-"school.museum",
-"schweiz.museum",
-"science.museum",
-"scienceandhistory.museum",
-"scienceandindustry.museum",
-"sciencecenter.museum",
-"sciencecenters.museum",
-"science-fiction.museum",
-"sciencehistory.museum",
-"sciences.museum",
-"sciencesnaturelles.museum",
-"scotland.museum",
-"seaport.museum",
-"settlement.museum",
-"settlers.museum",
-"shell.museum",
-"sherbrooke.museum",
-"sibenik.museum",
-"silk.museum",
-"ski.museum",
-"skole.museum",
-"society.museum",
-"sologne.museum",
-"soundandvision.museum",
-"southcarolina.museum",
-"southwest.museum",
-"space.museum",
-"spy.museum",
-"square.museum",
-"stadt.museum",
-"stalbans.museum",
-"starnberg.museum",
-"state.museum",
-"stateofdelaware.museum",
-"station.museum",
-"steam.museum",
-"steiermark.museum",
-"stjohn.museum",
-"stockholm.museum",
-"stpetersburg.museum",
-"stuttgart.museum",
-"suisse.museum",
-"surgeonshall.museum",
-"surrey.museum",
-"svizzera.museum",
-"sweden.museum",
-"sydney.museum",
-"tank.museum",
-"tcm.museum",
-"technology.museum",
-"telekommunikation.museum",
-"television.museum",
-"texas.museum",
-"textile.museum",
-"theater.museum",
-"time.museum",
-"timekeeping.museum",
-"topology.museum",
-"torino.museum",
-"touch.museum",
-"town.museum",
-"transport.museum",
-"tree.museum",
-"trolley.museum",
-"trust.museum",
-"trustee.museum",
-"uhren.museum",
-"ulm.museum",
-"undersea.museum",
-"university.museum",
-"usa.museum",
-"usantiques.museum",
-"usarts.museum",
-"uscountryestate.museum",
-"usculture.museum",
-"usdecorativearts.museum",
-"usgarden.museum",
-"ushistory.museum",
-"ushuaia.museum",
-"uslivinghistory.museum",
-"utah.museum",
-"uvic.museum",
-"valley.museum",
-"vantaa.museum",
-"versailles.museum",
-"viking.museum",
-"village.museum",
-"virginia.museum",
-"virtual.museum",
-"virtuel.museum",
-"vlaanderen.museum",
-"volkenkunde.museum",
-"wales.museum",
-"wallonie.museum",
-"war.museum",
-"washingtondc.museum",
-"watchandclock.museum",
-"watch-and-clock.museum",
-"western.museum",
-"westfalen.museum",
-"whaling.museum",
-"wildlife.museum",
-"williamsburg.museum",
-"windmill.museum",
-"workshop.museum",
-"york.museum",
-"yorkshire.museum",
-"yosemite.museum",
-"youth.museum",
-"zoological.museum",
-"zoology.museum",
-"ירושלים.museum",
-"иком.museum",
-"mv",
-"aero.mv",
-"biz.mv",
-"com.mv",
-"coop.mv",
-"edu.mv",
-"gov.mv",
-"info.mv",
-"int.mv",
-"mil.mv",
-"museum.mv",
-"name.mv",
-"net.mv",
-"org.mv",
-"pro.mv",
-"mw",
-"ac.mw",
-"biz.mw",
-"co.mw",
-"com.mw",
-"coop.mw",
-"edu.mw",
-"gov.mw",
-"int.mw",
-"museum.mw",
-"net.mw",
-"org.mw",
-"mx",
-"com.mx",
-"org.mx",
-"gob.mx",
-"edu.mx",
-"net.mx",
-"my",
-"com.my",
-"net.my",
-"org.my",
-"gov.my",
-"edu.my",
-"mil.my",
-"name.my",
-"mz",
-"ac.mz",
-"adv.mz",
-"co.mz",
-"edu.mz",
-"gov.mz",
-"mil.mz",
-"net.mz",
-"org.mz",
-"na",
-"info.na",
-"pro.na",
-"name.na",
-"school.na",
-"or.na",
-"dr.na",
-"us.na",
-"mx.na",
-"ca.na",
-"in.na",
-"cc.na",
-"tv.na",
-"ws.na",
-"mobi.na",
-"co.na",
-"com.na",
-"org.na",
-"name",
-"nc",
-"asso.nc",
-"nom.nc",
-"ne",
-"net",
-"nf",
-"com.nf",
-"net.nf",
-"per.nf",
-"rec.nf",
-"web.nf",
-"arts.nf",
-"firm.nf",
-"info.nf",
-"other.nf",
-"store.nf",
-"ng",
-"com.ng",
-"edu.ng",
-"gov.ng",
-"i.ng",
-"mil.ng",
-"mobi.ng",
-"name.ng",
-"net.ng",
-"org.ng",
-"sch.ng",
-"ni",
-"ac.ni",
-"biz.ni",
-"co.ni",
-"com.ni",
-"edu.ni",
-"gob.ni",
-"in.ni",
-"info.ni",
-"int.ni",
-"mil.ni",
-"net.ni",
-"nom.ni",
-"org.ni",
-"web.ni",
-"nl",
-"no",
-"fhs.no",
-"vgs.no",
-"fylkesbibl.no",
-"folkebibl.no",
-"museum.no",
-"idrett.no",
-"priv.no",
-"mil.no",
-"stat.no",
-"dep.no",
-"kommune.no",
-"herad.no",
-"aa.no",
-"ah.no",
-"bu.no",
-"fm.no",
-"hl.no",
-"hm.no",
-"jan-mayen.no",
-"mr.no",
-"nl.no",
-"nt.no",
-"of.no",
-"ol.no",
-"oslo.no",
-"rl.no",
-"sf.no",
-"st.no",
-"svalbard.no",
-"tm.no",
-"tr.no",
-"va.no",
-"vf.no",
-"gs.aa.no",
-"gs.ah.no",
-"gs.bu.no",
-"gs.fm.no",
-"gs.hl.no",
-"gs.hm.no",
-"gs.jan-mayen.no",
-"gs.mr.no",
-"gs.nl.no",
-"gs.nt.no",
-"gs.of.no",
-"gs.ol.no",
-"gs.oslo.no",
-"gs.rl.no",
-"gs.sf.no",
-"gs.st.no",
-"gs.svalbard.no",
-"gs.tm.no",
-"gs.tr.no",
-"gs.va.no",
-"gs.vf.no",
-"akrehamn.no",
-"åkrehamn.no",
-"algard.no",
-"ålgård.no",
-"arna.no",
-"brumunddal.no",
-"bryne.no",
-"bronnoysund.no",
-"brønnøysund.no",
-"drobak.no",
-"drøbak.no",
-"egersund.no",
-"fetsund.no",
-"floro.no",
-"florø.no",
-"fredrikstad.no",
-"hokksund.no",
-"honefoss.no",
-"hønefoss.no",
-"jessheim.no",
-"jorpeland.no",
-"jørpeland.no",
-"kirkenes.no",
-"kopervik.no",
-"krokstadelva.no",
-"langevag.no",
-"langevåg.no",
-"leirvik.no",
-"mjondalen.no",
-"mjøndalen.no",
-"mo-i-rana.no",
-"mosjoen.no",
-"mosjøen.no",
-"nesoddtangen.no",
-"orkanger.no",
-"osoyro.no",
-"osøyro.no",
-"raholt.no",
-"råholt.no",
-"sandnessjoen.no",
-"sandnessjøen.no",
-"skedsmokorset.no",
-"slattum.no",
-"spjelkavik.no",
-"stathelle.no",
-"stavern.no",
-"stjordalshalsen.no",
-"stjørdalshalsen.no",
-"tananger.no",
-"tranby.no",
-"vossevangen.no",
-"afjord.no",
-"åfjord.no",
-"agdenes.no",
-"al.no",
-"ål.no",
-"alesund.no",
-"ålesund.no",
-"alstahaug.no",
-"alta.no",
-"áltá.no",
-"alaheadju.no",
-"álaheadju.no",
-"alvdal.no",
-"amli.no",
-"åmli.no",
-"amot.no",
-"åmot.no",
-"andebu.no",
-"andoy.no",
-"andøy.no",
-"andasuolo.no",
-"ardal.no",
-"årdal.no",
-"aremark.no",
-"arendal.no",
-"ås.no",
-"aseral.no",
-"åseral.no",
-"asker.no",
-"askim.no",
-"askvoll.no",
-"askoy.no",
-"askøy.no",
-"asnes.no",
-"åsnes.no",
-"audnedaln.no",
-"aukra.no",
-"aure.no",
-"aurland.no",
-"aurskog-holand.no",
-"aurskog-høland.no",
-"austevoll.no",
-"austrheim.no",
-"averoy.no",
-"averøy.no",
-"balestrand.no",
-"ballangen.no",
-"balat.no",
-"bálát.no",
-"balsfjord.no",
-"bahccavuotna.no",
-"báhccavuotna.no",
-"bamble.no",
-"bardu.no",
-"beardu.no",
-"beiarn.no",
-"bajddar.no",
-"bájddar.no",
-"baidar.no",
-"báidár.no",
-"berg.no",
-"bergen.no",
-"berlevag.no",
-"berlevåg.no",
-"bearalvahki.no",
-"bearalváhki.no",
-"bindal.no",
-"birkenes.no",
-"bjarkoy.no",
-"bjarkøy.no",
-"bjerkreim.no",
-"bjugn.no",
-"bodo.no",
-"bodø.no",
-"badaddja.no",
-"bådåddjå.no",
-"budejju.no",
-"bokn.no",
-"bremanger.no",
-"bronnoy.no",
-"brønnøy.no",
-"bygland.no",
-"bykle.no",
-"barum.no",
-"bærum.no",
-"bo.telemark.no",
-"bø.telemark.no",
-"bo.nordland.no",
-"bø.nordland.no",
-"bievat.no",
-"bievát.no",
-"bomlo.no",
-"bømlo.no",
-"batsfjord.no",
-"båtsfjord.no",
-"bahcavuotna.no",
-"báhcavuotna.no",
-"dovre.no",
-"drammen.no",
-"drangedal.no",
-"dyroy.no",
-"dyrøy.no",
-"donna.no",
-"dønna.no",
-"eid.no",
-"eidfjord.no",
-"eidsberg.no",
-"eidskog.no",
-"eidsvoll.no",
-"eigersund.no",
-"elverum.no",
-"enebakk.no",
-"engerdal.no",
-"etne.no",
-"etnedal.no",
-"evenes.no",
-"evenassi.no",
-"evenášši.no",
-"evje-og-hornnes.no",
-"farsund.no",
-"fauske.no",
-"fuossko.no",
-"fuoisku.no",
-"fedje.no",
-"fet.no",
-"finnoy.no",
-"finnøy.no",
-"fitjar.no",
-"fjaler.no",
-"fjell.no",
-"flakstad.no",
-"flatanger.no",
-"flekkefjord.no",
-"flesberg.no",
-"flora.no",
-"fla.no",
-"flå.no",
-"folldal.no",
-"forsand.no",
-"fosnes.no",
-"frei.no",
-"frogn.no",
-"froland.no",
-"frosta.no",
-"frana.no",
-"fræna.no",
-"froya.no",
-"frøya.no",
-"fusa.no",
-"fyresdal.no",
-"forde.no",
-"førde.no",
-"gamvik.no",
-"gangaviika.no",
-"gáŋgaviika.no",
-"gaular.no",
-"gausdal.no",
-"gildeskal.no",
-"gildeskål.no",
-"giske.no",
-"gjemnes.no",
-"gjerdrum.no",
-"gjerstad.no",
-"gjesdal.no",
-"gjovik.no",
-"gjøvik.no",
-"gloppen.no",
-"gol.no",
-"gran.no",
-"grane.no",
-"granvin.no",
-"gratangen.no",
-"grimstad.no",
-"grong.no",
-"kraanghke.no",
-"kråanghke.no",
-"grue.no",
-"gulen.no",
-"hadsel.no",
-"halden.no",
-"halsa.no",
-"hamar.no",
-"hamaroy.no",
-"habmer.no",
-"hábmer.no",
-"hapmir.no",
-"hápmir.no",
-"hammerfest.no",
-"hammarfeasta.no",
-"hámmárfeasta.no",
-"haram.no",
-"hareid.no",
-"harstad.no",
-"hasvik.no",
-"aknoluokta.no",
-"ákŋoluokta.no",
-"hattfjelldal.no",
-"aarborte.no",
-"haugesund.no",
-"hemne.no",
-"hemnes.no",
-"hemsedal.no",
-"heroy.more-og-romsdal.no",
-"herøy.møre-og-romsdal.no",
-"heroy.nordland.no",
-"herøy.nordland.no",
-"hitra.no",
-"hjartdal.no",
-"hjelmeland.no",
-"hobol.no",
-"hobøl.no",
-"hof.no",
-"hol.no",
-"hole.no",
-"holmestrand.no",
-"holtalen.no",
-"holtålen.no",
-"hornindal.no",
-"horten.no",
-"hurdal.no",
-"hurum.no",
-"hvaler.no",
-"hyllestad.no",
-"hagebostad.no",
-"hægebostad.no",
-"hoyanger.no",
-"høyanger.no",
-"hoylandet.no",
-"høylandet.no",
-"ha.no",
-"hå.no",
-"ibestad.no",
-"inderoy.no",
-"inderøy.no",
-"iveland.no",
-"jevnaker.no",
-"jondal.no",
-"jolster.no",
-"jølster.no",
-"karasjok.no",
-"karasjohka.no",
-"kárášjohka.no",
-"karlsoy.no",
-"galsa.no",
-"gálsá.no",
-"karmoy.no",
-"karmøy.no",
-"kautokeino.no",
-"guovdageaidnu.no",
-"klepp.no",
-"klabu.no",
-"klæbu.no",
-"kongsberg.no",
-"kongsvinger.no",
-"kragero.no",
-"kragerø.no",
-"kristiansand.no",
-"kristiansund.no",
-"krodsherad.no",
-"krødsherad.no",
-"kvalsund.no",
-"rahkkeravju.no",
-"ráhkkerávju.no",
-"kvam.no",
-"kvinesdal.no",
-"kvinnherad.no",
-"kviteseid.no",
-"kvitsoy.no",
-"kvitsøy.no",
-"kvafjord.no",
-"kvæfjord.no",
-"giehtavuoatna.no",
-"kvanangen.no",
-"kvænangen.no",
-"navuotna.no",
-"návuotna.no",
-"kafjord.no",
-"kåfjord.no",
-"gaivuotna.no",
-"gáivuotna.no",
-"larvik.no",
-"lavangen.no",
-"lavagis.no",
-"loabat.no",
-"loabát.no",
-"lebesby.no",
-"davvesiida.no",
-"leikanger.no",
-"leirfjord.no",
-"leka.no",
-"leksvik.no",
-"lenvik.no",
-"leangaviika.no",
-"leaŋgaviika.no",
-"lesja.no",
-"levanger.no",
-"lier.no",
-"lierne.no",
-"lillehammer.no",
-"lillesand.no",
-"lindesnes.no",
-"lindas.no",
-"lindås.no",
-"lom.no",
-"loppa.no",
-"lahppi.no",
-"láhppi.no",
-"lund.no",
-"lunner.no",
-"luroy.no",
-"lurøy.no",
-"luster.no",
-"lyngdal.no",
-"lyngen.no",
-"ivgu.no",
-"lardal.no",
-"lerdal.no",
-"lærdal.no",
-"lodingen.no",
-"lødingen.no",
-"lorenskog.no",
-"lørenskog.no",
-"loten.no",
-"løten.no",
-"malvik.no",
-"masoy.no",
-"måsøy.no",
-"muosat.no",
-"muosát.no",
-"mandal.no",
-"marker.no",
-"marnardal.no",
-"masfjorden.no",
-"meland.no",
-"meldal.no",
-"melhus.no",
-"meloy.no",
-"meløy.no",
-"meraker.no",
-"meråker.no",
-"moareke.no",
-"moåreke.no",
-"midsund.no",
-"midtre-gauldal.no",
-"modalen.no",
-"modum.no",
-"molde.no",
-"moskenes.no",
-"moss.no",
-"mosvik.no",
-"malselv.no",
-"målselv.no",
-"malatvuopmi.no",
-"málatvuopmi.no",
-"namdalseid.no",
-"aejrie.no",
-"namsos.no",
-"namsskogan.no",
-"naamesjevuemie.no",
-"nååmesjevuemie.no",
-"laakesvuemie.no",
-"nannestad.no",
-"narvik.no",
-"narviika.no",
-"naustdal.no",
-"nedre-eiker.no",
-"nes.akershus.no",
-"nes.buskerud.no",
-"nesna.no",
-"nesodden.no",
-"nesseby.no",
-"unjarga.no",
-"unjárga.no",
-"nesset.no",
-"nissedal.no",
-"nittedal.no",
-"nord-aurdal.no",
-"nord-fron.no",
-"nord-odal.no",
-"norddal.no",
-"nordkapp.no",
-"davvenjarga.no",
-"davvenjárga.no",
-"nordre-land.no",
-"nordreisa.no",
-"raisa.no",
-"ráisa.no",
-"nore-og-uvdal.no",
-"notodden.no",
-"naroy.no",
-"nærøy.no",
-"notteroy.no",
-"nøtterøy.no",
-"odda.no",
-"oksnes.no",
-"øksnes.no",
-"oppdal.no",
-"oppegard.no",
-"oppegård.no",
-"orkdal.no",
-"orland.no",
-"ørland.no",
-"orskog.no",
-"ørskog.no",
-"orsta.no",
-"ørsta.no",
-"os.hedmark.no",
-"os.hordaland.no",
-"osen.no",
-"osteroy.no",
-"osterøy.no",
-"ostre-toten.no",
-"østre-toten.no",
-"overhalla.no",
-"ovre-eiker.no",
-"øvre-eiker.no",
-"oyer.no",
-"øyer.no",
-"oygarden.no",
-"øygarden.no",
-"oystre-slidre.no",
-"øystre-slidre.no",
-"porsanger.no",
-"porsangu.no",
-"porsáŋgu.no",
-"porsgrunn.no",
-"radoy.no",
-"radøy.no",
-"rakkestad.no",
-"rana.no",
-"ruovat.no",
-"randaberg.no",
-"rauma.no",
-"rendalen.no",
-"rennebu.no",
-"rennesoy.no",
-"rennesøy.no",
-"rindal.no",
-"ringebu.no",
-"ringerike.no",
-"ringsaker.no",
-"rissa.no",
-"risor.no",
-"risør.no",
-"roan.no",
-"rollag.no",
-"rygge.no",
-"ralingen.no",
-"rælingen.no",
-"rodoy.no",
-"rødøy.no",
-"romskog.no",
-"rømskog.no",
-"roros.no",
-"røros.no",
-"rost.no",
-"røst.no",
-"royken.no",
-"røyken.no",
-"royrvik.no",
-"røyrvik.no",
-"rade.no",
-"råde.no",
-"salangen.no",
-"siellak.no",
-"saltdal.no",
-"salat.no",
-"sálát.no",
-"sálat.no",
-"samnanger.no",
-"sande.more-og-romsdal.no",
-"sande.møre-og-romsdal.no",
-"sande.vestfold.no",
-"sandefjord.no",
-"sandnes.no",
-"sandoy.no",
-"sandøy.no",
-"sarpsborg.no",
-"sauda.no",
-"sauherad.no",
-"sel.no",
-"selbu.no",
-"selje.no",
-"seljord.no",
-"sigdal.no",
-"siljan.no",
-"sirdal.no",
-"skaun.no",
-"skedsmo.no",
-"ski.no",
-"skien.no",
-"skiptvet.no",
-"skjervoy.no",
-"skjervøy.no",
-"skierva.no",
-"skiervá.no",
-"skjak.no",
-"skjåk.no",
-"skodje.no",
-"skanland.no",
-"skånland.no",
-"skanit.no",
-"skánit.no",
-"smola.no",
-"smøla.no",
-"snillfjord.no",
-"snasa.no",
-"snåsa.no",
-"snoasa.no",
-"snaase.no",
-"snåase.no",
-"sogndal.no",
-"sokndal.no",
-"sola.no",
-"solund.no",
-"songdalen.no",
-"sortland.no",
-"spydeberg.no",
-"stange.no",
-"stavanger.no",
-"steigen.no",
-"steinkjer.no",
-"stjordal.no",
-"stjørdal.no",
-"stokke.no",
-"stor-elvdal.no",
-"stord.no",
-"stordal.no",
-"storfjord.no",
-"omasvuotna.no",
-"strand.no",
-"stranda.no",
-"stryn.no",
-"sula.no",
-"suldal.no",
-"sund.no",
-"sunndal.no",
-"surnadal.no",
-"sveio.no",
-"svelvik.no",
-"sykkylven.no",
-"sogne.no",
-"søgne.no",
-"somna.no",
-"sømna.no",
-"sondre-land.no",
-"søndre-land.no",
-"sor-aurdal.no",
-"sør-aurdal.no",
-"sor-fron.no",
-"sør-fron.no",
-"sor-odal.no",
-"sør-odal.no",
-"sor-varanger.no",
-"sør-varanger.no",
-"matta-varjjat.no",
-"mátta-várjjat.no",
-"sorfold.no",
-"sørfold.no",
-"sorreisa.no",
-"sørreisa.no",
-"sorum.no",
-"sørum.no",
-"tana.no",
-"deatnu.no",
-"time.no",
-"tingvoll.no",
-"tinn.no",
-"tjeldsund.no",
-"dielddanuorri.no",
-"tjome.no",
-"tjøme.no",
-"tokke.no",
-"tolga.no",
-"torsken.no",
-"tranoy.no",
-"tranøy.no",
-"tromso.no",
-"tromsø.no",
-"tromsa.no",
-"romsa.no",
-"trondheim.no",
-"troandin.no",
-"trysil.no",
-"trana.no",
-"træna.no",
-"trogstad.no",
-"trøgstad.no",
-"tvedestrand.no",
-"tydal.no",
-"tynset.no",
-"tysfjord.no",
-"divtasvuodna.no",
-"divttasvuotna.no",
-"tysnes.no",
-"tysvar.no",
-"tysvær.no",
-"tonsberg.no",
-"tønsberg.no",
-"ullensaker.no",
-"ullensvang.no",
-"ulvik.no",
-"utsira.no",
-"vadso.no",
-"vadsø.no",
-"cahcesuolo.no",
-"čáhcesuolo.no",
-"vaksdal.no",
-"valle.no",
-"vang.no",
-"vanylven.no",
-"vardo.no",
-"vardø.no",
-"varggat.no",
-"várggát.no",
-"vefsn.no",
-"vaapste.no",
-"vega.no",
-"vegarshei.no",
-"vegårshei.no",
-"vennesla.no",
-"verdal.no",
-"verran.no",
-"vestby.no",
-"vestnes.no",
-"vestre-slidre.no",
-"vestre-toten.no",
-"vestvagoy.no",
-"vestvågøy.no",
-"vevelstad.no",
-"vik.no",
-"vikna.no",
-"vindafjord.no",
-"volda.no",
-"voss.no",
-"varoy.no",
-"værøy.no",
-"vagan.no",
-"vågan.no",
-"voagat.no",
-"vagsoy.no",
-"vågsøy.no",
-"vaga.no",
-"vågå.no",
-"valer.ostfold.no",
-"våler.østfold.no",
-"valer.hedmark.no",
-"våler.hedmark.no",
-"*.np",
-"nr",
-"biz.nr",
-"info.nr",
-"gov.nr",
-"edu.nr",
-"org.nr",
-"net.nr",
-"com.nr",
-"nu",
-"nz",
-"ac.nz",
-"co.nz",
-"cri.nz",
-"geek.nz",
-"gen.nz",
-"govt.nz",
-"health.nz",
-"iwi.nz",
-"kiwi.nz",
-"maori.nz",
-"mil.nz",
-"māori.nz",
-"net.nz",
-"org.nz",
-"parliament.nz",
-"school.nz",
-"om",
-"co.om",
-"com.om",
-"edu.om",
-"gov.om",
-"med.om",
-"museum.om",
-"net.om",
-"org.om",
-"pro.om",
-"onion",
-"org",
-"pa",
-"ac.pa",
-"gob.pa",
-"com.pa",
-"org.pa",
-"sld.pa",
-"edu.pa",
-"net.pa",
-"ing.pa",
-"abo.pa",
-"med.pa",
-"nom.pa",
-"pe",
-"edu.pe",
-"gob.pe",
-"nom.pe",
-"mil.pe",
-"org.pe",
-"com.pe",
-"net.pe",
-"pf",
-"com.pf",
-"org.pf",
-"edu.pf",
-"*.pg",
-"ph",
-"com.ph",
-"net.ph",
-"org.ph",
-"gov.ph",
-"edu.ph",
-"ngo.ph",
-"mil.ph",
-"i.ph",
-"pk",
-"com.pk",
-"net.pk",
-"edu.pk",
-"org.pk",
-"fam.pk",
-"biz.pk",
-"web.pk",
-"gov.pk",
-"gob.pk",
-"gok.pk",
-"gon.pk",
-"gop.pk",
-"gos.pk",
-"info.pk",
-"pl",
-"com.pl",
-"net.pl",
-"org.pl",
-"aid.pl",
-"agro.pl",
-"atm.pl",
-"auto.pl",
-"biz.pl",
-"edu.pl",
-"gmina.pl",
-"gsm.pl",
-"info.pl",
-"mail.pl",
-"miasta.pl",
-"media.pl",
-"mil.pl",
-"nieruchomosci.pl",
-"nom.pl",
-"pc.pl",
-"powiat.pl",
-"priv.pl",
-"realestate.pl",
-"rel.pl",
-"sex.pl",
-"shop.pl",
-"sklep.pl",
-"sos.pl",
-"szkola.pl",
-"targi.pl",
-"tm.pl",
-"tourism.pl",
-"travel.pl",
-"turystyka.pl",
-"gov.pl",
-"ap.gov.pl",
-"ic.gov.pl",
-"is.gov.pl",
-"us.gov.pl",
-"kmpsp.gov.pl",
-"kppsp.gov.pl",
-"kwpsp.gov.pl",
-"psp.gov.pl",
-"wskr.gov.pl",
-"kwp.gov.pl",
-"mw.gov.pl",
-"ug.gov.pl",
-"um.gov.pl",
-"umig.gov.pl",
-"ugim.gov.pl",
-"upow.gov.pl",
-"uw.gov.pl",
-"starostwo.gov.pl",
-"pa.gov.pl",
-"po.gov.pl",
-"psse.gov.pl",
-"pup.gov.pl",
-"rzgw.gov.pl",
-"sa.gov.pl",
-"so.gov.pl",
-"sr.gov.pl",
-"wsa.gov.pl",
-"sko.gov.pl",
-"uzs.gov.pl",
-"wiih.gov.pl",
-"winb.gov.pl",
-"pinb.gov.pl",
-"wios.gov.pl",
-"witd.gov.pl",
-"wzmiuw.gov.pl",
-"piw.gov.pl",
-"wiw.gov.pl",
-"griw.gov.pl",
-"wif.gov.pl",
-"oum.gov.pl",
-"sdn.gov.pl",
-"zp.gov.pl",
-"uppo.gov.pl",
-"mup.gov.pl",
-"wuoz.gov.pl",
-"konsulat.gov.pl",
-"oirm.gov.pl",
-"augustow.pl",
-"babia-gora.pl",
-"bedzin.pl",
-"beskidy.pl",
-"bialowieza.pl",
-"bialystok.pl",
-"bielawa.pl",
-"bieszczady.pl",
-"boleslawiec.pl",
-"bydgoszcz.pl",
-"bytom.pl",
-"cieszyn.pl",
-"czeladz.pl",
-"czest.pl",
-"dlugoleka.pl",
-"elblag.pl",
-"elk.pl",
-"glogow.pl",
-"gniezno.pl",
-"gorlice.pl",
-"grajewo.pl",
-"ilawa.pl",
-"jaworzno.pl",
-"jelenia-gora.pl",
-"jgora.pl",
-"kalisz.pl",
-"kazimierz-dolny.pl",
-"karpacz.pl",
-"kartuzy.pl",
-"kaszuby.pl",
-"katowice.pl",
-"kepno.pl",
-"ketrzyn.pl",
-"klodzko.pl",
-"kobierzyce.pl",
-"kolobrzeg.pl",
-"konin.pl",
-"konskowola.pl",
-"kutno.pl",
-"lapy.pl",
-"lebork.pl",
-"legnica.pl",
-"lezajsk.pl",
-"limanowa.pl",
-"lomza.pl",
-"lowicz.pl",
-"lubin.pl",
-"lukow.pl",
-"malbork.pl",
-"malopolska.pl",
-"mazowsze.pl",
-"mazury.pl",
-"mielec.pl",
-"mielno.pl",
-"mragowo.pl",
-"naklo.pl",
-"nowaruda.pl",
-"nysa.pl",
-"olawa.pl",
-"olecko.pl",
-"olkusz.pl",
-"olsztyn.pl",
-"opoczno.pl",
-"opole.pl",
-"ostroda.pl",
-"ostroleka.pl",
-"ostrowiec.pl",
-"ostrowwlkp.pl",
-"pila.pl",
-"pisz.pl",
-"podhale.pl",
-"podlasie.pl",
-"polkowice.pl",
-"pomorze.pl",
-"pomorskie.pl",
-"prochowice.pl",
-"pruszkow.pl",
-"przeworsk.pl",
-"pulawy.pl",
-"radom.pl",
-"rawa-maz.pl",
-"rybnik.pl",
-"rzeszow.pl",
-"sanok.pl",
-"sejny.pl",
-"slask.pl",
-"slupsk.pl",
-"sosnowiec.pl",
-"stalowa-wola.pl",
-"skoczow.pl",
-"starachowice.pl",
-"stargard.pl",
-"suwalki.pl",
-"swidnica.pl",
-"swiebodzin.pl",
-"swinoujscie.pl",
-"szczecin.pl",
-"szczytno.pl",
-"tarnobrzeg.pl",
-"tgory.pl",
-"turek.pl",
-"tychy.pl",
-"ustka.pl",
-"walbrzych.pl",
-"warmia.pl",
-"warszawa.pl",
-"waw.pl",
-"wegrow.pl",
-"wielun.pl",
-"wlocl.pl",
-"wloclawek.pl",
-"wodzislaw.pl",
-"wolomin.pl",
-"wroclaw.pl",
-"zachpomor.pl",
-"zagan.pl",
-"zarow.pl",
-"zgora.pl",
-"zgorzelec.pl",
-"pm",
-"pn",
-"gov.pn",
-"co.pn",
-"org.pn",
-"edu.pn",
-"net.pn",
-"post",
-"pr",
-"com.pr",
-"net.pr",
-"org.pr",
-"gov.pr",
-"edu.pr",
-"isla.pr",
-"pro.pr",
-"biz.pr",
-"info.pr",
-"name.pr",
-"est.pr",
-"prof.pr",
-"ac.pr",
-"pro",
-"aaa.pro",
-"aca.pro",
-"acct.pro",
-"avocat.pro",
-"bar.pro",
-"cpa.pro",
-"eng.pro",
-"jur.pro",
-"law.pro",
-"med.pro",
-"recht.pro",
-"ps",
-"edu.ps",
-"gov.ps",
-"sec.ps",
-"plo.ps",
-"com.ps",
-"org.ps",
-"net.ps",
-"pt",
-"net.pt",
-"gov.pt",
-"org.pt",
-"edu.pt",
-"int.pt",
-"publ.pt",
-"com.pt",
-"nome.pt",
-"pw",
-"co.pw",
-"ne.pw",
-"or.pw",
-"ed.pw",
-"go.pw",
-"belau.pw",
-"py",
-"com.py",
-"coop.py",
-"edu.py",
-"gov.py",
-"mil.py",
-"net.py",
-"org.py",
-"qa",
-"com.qa",
-"edu.qa",
-"gov.qa",
-"mil.qa",
-"name.qa",
-"net.qa",
-"org.qa",
-"sch.qa",
-"re",
-"asso.re",
-"com.re",
-"nom.re",
-"ro",
-"arts.ro",
-"com.ro",
-"firm.ro",
-"info.ro",
-"nom.ro",
-"nt.ro",
-"org.ro",
-"rec.ro",
-"store.ro",
-"tm.ro",
-"www.ro",
-"rs",
-"ac.rs",
-"co.rs",
-"edu.rs",
-"gov.rs",
-"in.rs",
-"org.rs",
-"ru",
-"rw",
-"ac.rw",
-"co.rw",
-"coop.rw",
-"gov.rw",
-"mil.rw",
-"net.rw",
-"org.rw",
-"sa",
-"com.sa",
-"net.sa",
-"org.sa",
-"gov.sa",
-"med.sa",
-"pub.sa",
-"edu.sa",
-"sch.sa",
-"sb",
-"com.sb",
-"edu.sb",
-"gov.sb",
-"net.sb",
-"org.sb",
-"sc",
-"com.sc",
-"gov.sc",
-"net.sc",
-"org.sc",
-"edu.sc",
-"sd",
-"com.sd",
-"net.sd",
-"org.sd",
-"edu.sd",
-"med.sd",
-"tv.sd",
-"gov.sd",
-"info.sd",
-"se",
-"a.se",
-"ac.se",
-"b.se",
-"bd.se",
-"brand.se",
-"c.se",
-"d.se",
-"e.se",
-"f.se",
-"fh.se",
-"fhsk.se",
-"fhv.se",
-"g.se",
-"h.se",
-"i.se",
-"k.se",
-"komforb.se",
-"kommunalforbund.se",
-"komvux.se",
-"l.se",
-"lanbib.se",
-"m.se",
-"n.se",
-"naturbruksgymn.se",
-"o.se",
-"org.se",
-"p.se",
-"parti.se",
-"pp.se",
-"press.se",
-"r.se",
-"s.se",
-"t.se",
-"tm.se",
-"u.se",
-"w.se",
-"x.se",
-"y.se",
-"z.se",
-"sg",
-"com.sg",
-"net.sg",
-"org.sg",
-"gov.sg",
-"edu.sg",
-"per.sg",
-"sh",
-"com.sh",
-"net.sh",
-"gov.sh",
-"org.sh",
-"mil.sh",
-"si",
-"sj",
-"sk",
-"sl",
-"com.sl",
-"net.sl",
-"edu.sl",
-"gov.sl",
-"org.sl",
-"sm",
-"sn",
-"art.sn",
-"com.sn",
-"edu.sn",
-"gouv.sn",
-"org.sn",
-"perso.sn",
-"univ.sn",
-"so",
-"com.so",
-"edu.so",
-"gov.so",
-"me.so",
-"net.so",
-"org.so",
-"sr",
-"ss",
-"biz.ss",
-"com.ss",
-"edu.ss",
-"gov.ss",
-"net.ss",
-"org.ss",
-"st",
-"co.st",
-"com.st",
-"consulado.st",
-"edu.st",
-"embaixada.st",
-"gov.st",
-"mil.st",
-"net.st",
-"org.st",
-"principe.st",
-"saotome.st",
-"store.st",
-"su",
-"sv",
-"com.sv",
-"edu.sv",
-"gob.sv",
-"org.sv",
-"red.sv",
-"sx",
-"gov.sx",
-"sy",
-"edu.sy",
-"gov.sy",
-"net.sy",
-"mil.sy",
-"com.sy",
-"org.sy",
-"sz",
-"co.sz",
-"ac.sz",
-"org.sz",
-"tc",
-"td",
-"tel",
-"tf",
-"tg",
-"th",
-"ac.th",
-"co.th",
-"go.th",
-"in.th",
-"mi.th",
-"net.th",
-"or.th",
-"tj",
-"ac.tj",
-"biz.tj",
-"co.tj",
-"com.tj",
-"edu.tj",
-"go.tj",
-"gov.tj",
-"int.tj",
-"mil.tj",
-"name.tj",
-"net.tj",
-"nic.tj",
-"org.tj",
-"test.tj",
-"web.tj",
-"tk",
-"tl",
-"gov.tl",
-"tm",
-"com.tm",
-"co.tm",
-"org.tm",
-"net.tm",
-"nom.tm",
-"gov.tm",
-"mil.tm",
-"edu.tm",
-"tn",
-"com.tn",
-"ens.tn",
-"fin.tn",
-"gov.tn",
-"ind.tn",
-"intl.tn",
-"nat.tn",
-"net.tn",
-"org.tn",
-"info.tn",
-"perso.tn",
-"tourism.tn",
-"edunet.tn",
-"rnrt.tn",
-"rns.tn",
-"rnu.tn",
-"mincom.tn",
-"agrinet.tn",
-"defense.tn",
-"turen.tn",
-"to",
-"com.to",
-"gov.to",
-"net.to",
-"org.to",
-"edu.to",
-"mil.to",
-"tr",
-"av.tr",
-"bbs.tr",
-"bel.tr",
-"biz.tr",
-"com.tr",
-"dr.tr",
-"edu.tr",
-"gen.tr",
-"gov.tr",
-"info.tr",
-"mil.tr",
-"k12.tr",
-"kep.tr",
-"name.tr",
-"net.tr",
-"org.tr",
-"pol.tr",
-"tel.tr",
-"tsk.tr",
-"tv.tr",
-"web.tr",
-"nc.tr",
-"gov.nc.tr",
-"tt",
-"co.tt",
-"com.tt",
-"org.tt",
-"net.tt",
-"biz.tt",
-"info.tt",
-"pro.tt",
-"int.tt",
-"coop.tt",
-"jobs.tt",
-"mobi.tt",
-"travel.tt",
-"museum.tt",
-"aero.tt",
-"name.tt",
-"gov.tt",
-"edu.tt",
-"tv",
-"tw",
-"edu.tw",
-"gov.tw",
-"mil.tw",
-"com.tw",
-"net.tw",
-"org.tw",
-"idv.tw",
-"game.tw",
-"ebiz.tw",
-"club.tw",
-"網路.tw",
-"組織.tw",
-"商業.tw",
-"tz",
-"ac.tz",
-"co.tz",
-"go.tz",
-"hotel.tz",
-"info.tz",
-"me.tz",
-"mil.tz",
-"mobi.tz",
-"ne.tz",
-"or.tz",
-"sc.tz",
-"tv.tz",
-"ua",
-"com.ua",
-"edu.ua",
-"gov.ua",
-"in.ua",
-"net.ua",
-"org.ua",
-"cherkassy.ua",
-"cherkasy.ua",
-"chernigov.ua",
-"chernihiv.ua",
-"chernivtsi.ua",
-"chernovtsy.ua",
-"ck.ua",
-"cn.ua",
-"cr.ua",
-"crimea.ua",
-"cv.ua",
-"dn.ua",
-"dnepropetrovsk.ua",
-"dnipropetrovsk.ua",
-"dominic.ua",
-"donetsk.ua",
-"dp.ua",
-"if.ua",
-"ivano-frankivsk.ua",
-"kh.ua",
-"kharkiv.ua",
-"kharkov.ua",
-"kherson.ua",
-"khmelnitskiy.ua",
-"khmelnytskyi.ua",
-"kiev.ua",
-"kirovograd.ua",
-"km.ua",
-"kr.ua",
-"krym.ua",
-"ks.ua",
-"kv.ua",
-"kyiv.ua",
-"lg.ua",
-"lt.ua",
-"lugansk.ua",
-"lutsk.ua",
-"lv.ua",
-"lviv.ua",
-"mk.ua",
-"mykolaiv.ua",
-"nikolaev.ua",
-"od.ua",
-"odesa.ua",
-"odessa.ua",
-"pl.ua",
-"poltava.ua",
-"rivne.ua",
-"rovno.ua",
-"rv.ua",
-"sb.ua",
-"sebastopol.ua",
-"sevastopol.ua",
-"sm.ua",
-"sumy.ua",
-"te.ua",
-"ternopil.ua",
-"uz.ua",
-"uzhgorod.ua",
-"vinnica.ua",
-"vinnytsia.ua",
-"vn.ua",
-"volyn.ua",
-"yalta.ua",
-"zaporizhzhe.ua",
-"zaporizhzhia.ua",
-"zhitomir.ua",
-"zhytomyr.ua",
-"zp.ua",
-"zt.ua",
-"ug",
-"co.ug",
-"or.ug",
-"ac.ug",
-"sc.ug",
-"go.ug",
-"ne.ug",
-"com.ug",
-"org.ug",
-"uk",
-"ac.uk",
-"co.uk",
-"gov.uk",
-"ltd.uk",
-"me.uk",
-"net.uk",
-"nhs.uk",
-"org.uk",
-"plc.uk",
-"police.uk",
-"*.sch.uk",
-"us",
-"dni.us",
-"fed.us",
-"isa.us",
-"kids.us",
-"nsn.us",
-"ak.us",
-"al.us",
-"ar.us",
-"as.us",
-"az.us",
-"ca.us",
-"co.us",
-"ct.us",
-"dc.us",
-"de.us",
-"fl.us",
-"ga.us",
-"gu.us",
-"hi.us",
-"ia.us",
-"id.us",
-"il.us",
-"in.us",
-"ks.us",
-"ky.us",
-"la.us",
-"ma.us",
-"md.us",
-"me.us",
-"mi.us",
-"mn.us",
-"mo.us",
-"ms.us",
-"mt.us",
-"nc.us",
-"nd.us",
-"ne.us",
-"nh.us",
-"nj.us",
-"nm.us",
-"nv.us",
-"ny.us",
-"oh.us",
-"ok.us",
-"or.us",
-"pa.us",
-"pr.us",
-"ri.us",
-"sc.us",
-"sd.us",
-"tn.us",
-"tx.us",
-"ut.us",
-"vi.us",
-"vt.us",
-"va.us",
-"wa.us",
-"wi.us",
-"wv.us",
-"wy.us",
-"k12.ak.us",
-"k12.al.us",
-"k12.ar.us",
-"k12.as.us",
-"k12.az.us",
-"k12.ca.us",
-"k12.co.us",
-"k12.ct.us",
-"k12.dc.us",
-"k12.de.us",
-"k12.fl.us",
-"k12.ga.us",
-"k12.gu.us",
-"k12.ia.us",
-"k12.id.us",
-"k12.il.us",
-"k12.in.us",
-"k12.ks.us",
-"k12.ky.us",
-"k12.la.us",
-"k12.ma.us",
-"k12.md.us",
-"k12.me.us",
-"k12.mi.us",
-"k12.mn.us",
-"k12.mo.us",
-"k12.ms.us",
-"k12.mt.us",
-"k12.nc.us",
-"k12.ne.us",
-"k12.nh.us",
-"k12.nj.us",
-"k12.nm.us",
-"k12.nv.us",
-"k12.ny.us",
-"k12.oh.us",
-"k12.ok.us",
-"k12.or.us",
-"k12.pa.us",
-"k12.pr.us",
-"k12.ri.us",
-"k12.sc.us",
-"k12.tn.us",
-"k12.tx.us",
-"k12.ut.us",
-"k12.vi.us",
-"k12.vt.us",
-"k12.va.us",
-"k12.wa.us",
-"k12.wi.us",
-"k12.wy.us",
-"cc.ak.us",
-"cc.al.us",
-"cc.ar.us",
-"cc.as.us",
-"cc.az.us",
-"cc.ca.us",
-"cc.co.us",
-"cc.ct.us",
-"cc.dc.us",
-"cc.de.us",
-"cc.fl.us",
-"cc.ga.us",
-"cc.gu.us",
-"cc.hi.us",
-"cc.ia.us",
-"cc.id.us",
-"cc.il.us",
-"cc.in.us",
-"cc.ks.us",
-"cc.ky.us",
-"cc.la.us",
-"cc.ma.us",
-"cc.md.us",
-"cc.me.us",
-"cc.mi.us",
-"cc.mn.us",
-"cc.mo.us",
-"cc.ms.us",
-"cc.mt.us",
-"cc.nc.us",
-"cc.nd.us",
-"cc.ne.us",
-"cc.nh.us",
-"cc.nj.us",
-"cc.nm.us",
-"cc.nv.us",
-"cc.ny.us",
-"cc.oh.us",
-"cc.ok.us",
-"cc.or.us",
-"cc.pa.us",
-"cc.pr.us",
-"cc.ri.us",
-"cc.sc.us",
-"cc.sd.us",
-"cc.tn.us",
-"cc.tx.us",
-"cc.ut.us",
-"cc.vi.us",
-"cc.vt.us",
-"cc.va.us",
-"cc.wa.us",
-"cc.wi.us",
-"cc.wv.us",
-"cc.wy.us",
-"lib.ak.us",
-"lib.al.us",
-"lib.ar.us",
-"lib.as.us",
-"lib.az.us",
-"lib.ca.us",
-"lib.co.us",
-"lib.ct.us",
-"lib.dc.us",
-"lib.fl.us",
-"lib.ga.us",
-"lib.gu.us",
-"lib.hi.us",
-"lib.ia.us",
-"lib.id.us",
-"lib.il.us",
-"lib.in.us",
-"lib.ks.us",
-"lib.ky.us",
-"lib.la.us",
-"lib.ma.us",
-"lib.md.us",
-"lib.me.us",
-"lib.mi.us",
-"lib.mn.us",
-"lib.mo.us",
-"lib.ms.us",
-"lib.mt.us",
-"lib.nc.us",
-"lib.nd.us",
-"lib.ne.us",
-"lib.nh.us",
-"lib.nj.us",
-"lib.nm.us",
-"lib.nv.us",
-"lib.ny.us",
-"lib.oh.us",
-"lib.ok.us",
-"lib.or.us",
-"lib.pa.us",
-"lib.pr.us",
-"lib.ri.us",
-"lib.sc.us",
-"lib.sd.us",
-"lib.tn.us",
-"lib.tx.us",
-"lib.ut.us",
-"lib.vi.us",
-"lib.vt.us",
-"lib.va.us",
-"lib.wa.us",
-"lib.wi.us",
-"lib.wy.us",
-"pvt.k12.ma.us",
-"chtr.k12.ma.us",
-"paroch.k12.ma.us",
-"ann-arbor.mi.us",
-"cog.mi.us",
-"dst.mi.us",
-"eaton.mi.us",
-"gen.mi.us",
-"mus.mi.us",
-"tec.mi.us",
-"washtenaw.mi.us",
-"uy",
-"com.uy",
-"edu.uy",
-"gub.uy",
-"mil.uy",
-"net.uy",
-"org.uy",
-"uz",
-"co.uz",
-"com.uz",
-"net.uz",
-"org.uz",
-"va",
-"vc",
-"com.vc",
-"net.vc",
-"org.vc",
-"gov.vc",
-"mil.vc",
-"edu.vc",
-"ve",
-"arts.ve",
-"co.ve",
-"com.ve",
-"e12.ve",
-"edu.ve",
-"firm.ve",
-"gob.ve",
-"gov.ve",
-"info.ve",
-"int.ve",
-"mil.ve",
-"net.ve",
-"org.ve",
-"rec.ve",
-"store.ve",
-"tec.ve",
-"web.ve",
-"vg",
-"vi",
-"co.vi",
-"com.vi",
-"k12.vi",
-"net.vi",
-"org.vi",
-"vn",
-"com.vn",
-"net.vn",
-"org.vn",
-"edu.vn",
-"gov.vn",
-"int.vn",
-"ac.vn",
-"biz.vn",
-"info.vn",
-"name.vn",
-"pro.vn",
-"health.vn",
-"vu",
-"com.vu",
-"edu.vu",
-"net.vu",
-"org.vu",
-"wf",
-"ws",
-"com.ws",
-"net.ws",
-"org.ws",
-"gov.ws",
-"edu.ws",
-"yt",
-"امارات",
-"հայ",
-"বাংলা",
-"бг",
-"бел",
-"中国",
-"中國",
-"الجزائر",
-"مصر",
-"ею",
-"ευ",
-"موريتانيا",
-"გე",
-"ελ",
-"香港",
-"公司.香港",
-"教育.香港",
-"政府.香港",
-"個人.香港",
-"網絡.香港",
-"組織.香港",
-"ಭಾರತ",
-"ଭାରତ",
-"ভাৰত",
-"भारतम्",
-"भारोत",
-"ڀارت",
-"ഭാരതം",
-"भारत",
-"بارت",
-"بھارت",
-"భారత్",
-"ભારત",
-"ਭਾਰਤ",
-"ভারত",
-"இந்தியா",
-"ایران",
-"ايران",
-"عراق",
-"الاردن",
-"한국",
-"қаз",
-"ලංකා",
-"இலங்கை",
-"المغرب",
-"мкд",
-"мон",
-"澳門",
-"澳门",
-"مليسيا",
-"عمان",
-"پاکستان",
-"پاكستان",
-"فلسطين",
-"срб",
-"пр.срб",
-"орг.срб",
-"обр.срб",
-"од.срб",
-"упр.срб",
-"ак.срб",
-"рф",
-"قطر",
-"السعودية",
-"السعودیة",
-"السعودیۃ",
-"السعوديه",
-"سودان",
-"新加坡",
-"சிங்கப்பூர்",
-"سورية",
-"سوريا",
-"ไทย",
-"ศึกษา.ไทย",
-"ธุรกิจ.ไทย",
-"รัฐบาล.ไทย",
-"ทหาร.ไทย",
-"เน็ต.ไทย",
-"องค์กร.ไทย",
-"تونس",
-"台灣",
-"台湾",
-"臺灣",
-"укр",
-"اليمن",
-"xxx",
-"*.ye",
-"ac.za",
-"agric.za",
-"alt.za",
-"co.za",
-"edu.za",
-"gov.za",
-"grondar.za",
-"law.za",
-"mil.za",
-"net.za",
-"ngo.za",
-"nic.za",
-"nis.za",
-"nom.za",
-"org.za",
-"school.za",
-"tm.za",
-"web.za",
-"zm",
-"ac.zm",
-"biz.zm",
-"co.zm",
-"com.zm",
-"edu.zm",
-"gov.zm",
-"info.zm",
-"mil.zm",
-"net.zm",
-"org.zm",
-"sch.zm",
-"zw",
-"ac.zw",
-"co.zw",
-"gov.zw",
-"mil.zw",
-"org.zw",
-"aaa",
-"aarp",
-"abarth",
-"abb",
-"abbott",
-"abbvie",
-"abc",
-"able",
-"abogado",
-"abudhabi",
-"academy",
-"accenture",
-"accountant",
-"accountants",
-"aco",
-"actor",
-"adac",
-"ads",
-"adult",
-"aeg",
-"aetna",
-"afamilycompany",
-"afl",
-"africa",
-"agakhan",
-"agency",
-"aig",
-"aigo",
-"airbus",
-"airforce",
-"airtel",
-"akdn",
-"alfaromeo",
-"alibaba",
-"alipay",
-"allfinanz",
-"allstate",
-"ally",
-"alsace",
-"alstom",
-"amazon",
-"americanexpress",
-"americanfamily",
-"amex",
-"amfam",
-"amica",
-"amsterdam",
-"analytics",
-"android",
-"anquan",
-"anz",
-"aol",
-"apartments",
-"app",
-"apple",
-"aquarelle",
-"arab",
-"aramco",
-"archi",
-"army",
-"art",
-"arte",
-"asda",
-"associates",
-"athleta",
-"attorney",
-"auction",
-"audi",
-"audible",
-"audio",
-"auspost",
-"author",
-"auto",
-"autos",
-"avianca",
-"aws",
-"axa",
-"azure",
-"baby",
-"baidu",
-"banamex",
-"bananarepublic",
-"band",
-"bank",
-"bar",
-"barcelona",
-"barclaycard",
-"barclays",
-"barefoot",
-"bargains",
-"baseball",
-"basketball",
-"bauhaus",
-"bayern",
-"bbc",
-"bbt",
-"bbva",
-"bcg",
-"bcn",
-"beats",
-"beauty",
-"beer",
-"bentley",
-"berlin",
-"best",
-"bestbuy",
-"bet",
-"bharti",
-"bible",
-"bid",
-"bike",
-"bing",
-"bingo",
-"bio",
-"black",
-"blackfriday",
-"blockbuster",
-"blog",
-"bloomberg",
-"blue",
-"bms",
-"bmw",
-"bnpparibas",
-"boats",
-"boehringer",
-"bofa",
-"bom",
-"bond",
-"boo",
-"book",
-"booking",
-"bosch",
-"bostik",
-"boston",
-"bot",
-"boutique",
-"box",
-"bradesco",
-"bridgestone",
-"broadway",
-"broker",
-"brother",
-"brussels",
-"budapest",
-"bugatti",
-"build",
-"builders",
-"business",
-"buy",
-"buzz",
-"bzh",
-"cab",
-"cafe",
-"cal",
-"call",
-"calvinklein",
-"cam",
-"camera",
-"camp",
-"cancerresearch",
-"canon",
-"capetown",
-"capital",
-"capitalone",
-"car",
-"caravan",
-"cards",
-"care",
-"career",
-"careers",
-"cars",
-"casa",
-"case",
-"caseih",
-"cash",
-"casino",
-"catering",
-"catholic",
-"cba",
-"cbn",
-"cbre",
-"cbs",
-"ceb",
-"center",
-"ceo",
-"cern",
-"cfa",
-"cfd",
-"chanel",
-"channel",
-"charity",
-"chase",
-"chat",
-"cheap",
-"chintai",
-"christmas",
-"chrome",
-"church",
-"cipriani",
-"circle",
-"cisco",
-"citadel",
-"citi",
-"citic",
-"city",
-"cityeats",
-"claims",
-"cleaning",
-"click",
-"clinic",
-"clinique",
-"clothing",
-"cloud",
-"club",
-"clubmed",
-"coach",
-"codes",
-"coffee",
-"college",
-"cologne",
-"comcast",
-"commbank",
-"community",
-"company",
-"compare",
-"computer",
-"comsec",
-"condos",
-"construction",
-"consulting",
-"contact",
-"contractors",
-"cooking",
-"cookingchannel",
-"cool",
-"corsica",
-"country",
-"coupon",
-"coupons",
-"courses",
-"cpa",
-"credit",
-"creditcard",
-"creditunion",
-"cricket",
-"crown",
-"crs",
-"cruise",
-"cruises",
-"csc",
-"cuisinella",
-"cymru",
-"cyou",
-"dabur",
-"dad",
-"dance",
-"data",
-"date",
-"dating",
-"datsun",
-"day",
-"dclk",
-"dds",
-"deal",
-"dealer",
-"deals",
-"degree",
-"delivery",
-"dell",
-"deloitte",
-"delta",
-"democrat",
-"dental",
-"dentist",
-"desi",
-"design",
-"dev",
-"dhl",
-"diamonds",
-"diet",
-"digital",
-"direct",
-"directory",
-"discount",
-"discover",
-"dish",
-"diy",
-"dnp",
-"docs",
-"doctor",
-"dog",
-"domains",
-"dot",
-"download",
-"drive",
-"dtv",
-"dubai",
-"duck",
-"dunlop",
-"dupont",
-"durban",
-"dvag",
-"dvr",
-"earth",
-"eat",
-"eco",
-"edeka",
-"education",
-"email",
-"emerck",
-"energy",
-"engineer",
-"engineering",
-"enterprises",
-"epson",
-"equipment",
-"ericsson",
-"erni",
-"esq",
-"estate",
-"esurance",
-"etisalat",
-"eurovision",
-"eus",
-"events",
-"exchange",
-"expert",
-"exposed",
-"express",
-"extraspace",
-"fage",
-"fail",
-"fairwinds",
-"faith",
-"family",
-"fan",
-"fans",
-"farm",
-"farmers",
-"fashion",
-"fast",
-"fedex",
-"feedback",
-"ferrari",
-"ferrero",
-"fiat",
-"fidelity",
-"fido",
-"film",
-"final",
-"finance",
-"financial",
-"fire",
-"firestone",
-"firmdale",
-"fish",
-"fishing",
-"fit",
-"fitness",
-"flickr",
-"flights",
-"flir",
-"florist",
-"flowers",
-"fly",
-"foo",
-"food",
-"foodnetwork",
-"football",
-"ford",
-"forex",
-"forsale",
-"forum",
-"foundation",
-"fox",
-"free",
-"fresenius",
-"frl",
-"frogans",
-"frontdoor",
-"frontier",
-"ftr",
-"fujitsu",
-"fujixerox",
-"fun",
-"fund",
-"furniture",
-"futbol",
-"fyi",
-"gal",
-"gallery",
-"gallo",
-"gallup",
-"game",
-"games",
-"gap",
-"garden",
-"gay",
-"gbiz",
-"gdn",
-"gea",
-"gent",
-"genting",
-"george",
-"ggee",
-"gift",
-"gifts",
-"gives",
-"giving",
-"glade",
-"glass",
-"gle",
-"global",
-"globo",
-"gmail",
-"gmbh",
-"gmo",
-"gmx",
-"godaddy",
-"gold",
-"goldpoint",
-"golf",
-"goo",
-"goodyear",
-"goog",
-"google",
-"gop",
-"got",
-"grainger",
-"graphics",
-"gratis",
-"green",
-"gripe",
-"grocery",
-"group",
-"guardian",
-"gucci",
-"guge",
-"guide",
-"guitars",
-"guru",
-"hair",
-"hamburg",
-"hangout",
-"haus",
-"hbo",
-"hdfc",
-"hdfcbank",
-"health",
-"healthcare",
-"help",
-"helsinki",
-"here",
-"hermes",
-"hgtv",
-"hiphop",
-"hisamitsu",
-"hitachi",
-"hiv",
-"hkt",
-"hockey",
-"holdings",
-"holiday",
-"homedepot",
-"homegoods",
-"homes",
-"homesense",
-"honda",
-"horse",
-"hospital",
-"host",
-"hosting",
-"hot",
-"hoteles",
-"hotels",
-"hotmail",
-"house",
-"how",
-"hsbc",
-"hughes",
-"hyatt",
-"hyundai",
-"ibm",
-"icbc",
-"ice",
-"icu",
-"ieee",
-"ifm",
-"ikano",
-"imamat",
-"imdb",
-"immo",
-"immobilien",
-"inc",
-"industries",
-"infiniti",
-"ing",
-"ink",
-"institute",
-"insurance",
-"insure",
-"intel",
-"international",
-"intuit",
-"investments",
-"ipiranga",
-"irish",
-"ismaili",
-"ist",
-"istanbul",
-"itau",
-"itv",
-"iveco",
-"jaguar",
-"java",
-"jcb",
-"jcp",
-"jeep",
-"jetzt",
-"jewelry",
-"jio",
-"jll",
-"jmp",
-"jnj",
-"joburg",
-"jot",
-"joy",
-"jpmorgan",
-"jprs",
-"juegos",
-"juniper",
-"kaufen",
-"kddi",
-"kerryhotels",
-"kerrylogistics",
-"kerryproperties",
-"kfh",
-"kia",
-"kim",
-"kinder",
-"kindle",
-"kitchen",
-"kiwi",
-"koeln",
-"komatsu",
-"kosher",
-"kpmg",
-"kpn",
-"krd",
-"kred",
-"kuokgroup",
-"kyoto",
-"lacaixa",
-"lamborghini",
-"lamer",
-"lancaster",
-"lancia",
-"land",
-"landrover",
-"lanxess",
-"lasalle",
-"lat",
-"latino",
-"latrobe",
-"law",
-"lawyer",
-"lds",
-"lease",
-"leclerc",
-"lefrak",
-"legal",
-"lego",
-"lexus",
-"lgbt",
-"lidl",
-"life",
-"lifeinsurance",
-"lifestyle",
-"lighting",
-"like",
-"lilly",
-"limited",
-"limo",
-"lincoln",
-"linde",
-"link",
-"lipsy",
-"live",
-"living",
-"lixil",
-"llc",
-"llp",
-"loan",
-"loans",
-"locker",
-"locus",
-"loft",
-"lol",
-"london",
-"lotte",
-"lotto",
-"love",
-"lpl",
-"lplfinancial",
-"ltd",
-"ltda",
-"lundbeck",
-"lupin",
-"luxe",
-"luxury",
-"macys",
-"madrid",
-"maif",
-"maison",
-"makeup",
-"man",
-"management",
-"mango",
-"map",
-"market",
-"marketing",
-"markets",
-"marriott",
-"marshalls",
-"maserati",
-"mattel",
-"mba",
-"mckinsey",
-"med",
-"media",
-"meet",
-"melbourne",
-"meme",
-"memorial",
-"men",
-"menu",
-"merckmsd",
-"metlife",
-"miami",
-"microsoft",
-"mini",
-"mint",
-"mit",
-"mitsubishi",
-"mlb",
-"mls",
-"mma",
-"mobile",
-"moda",
-"moe",
-"moi",
-"mom",
-"monash",
-"money",
-"monster",
-"mormon",
-"mortgage",
-"moscow",
-"moto",
-"motorcycles",
-"mov",
-"movie",
-"msd",
-"mtn",
-"mtr",
-"mutual",
-"nab",
-"nadex",
-"nagoya",
-"nationwide",
-"natura",
-"navy",
-"nba",
-"nec",
-"netbank",
-"netflix",
-"network",
-"neustar",
-"new",
-"newholland",
-"news",
-"next",
-"nextdirect",
-"nexus",
-"nfl",
-"ngo",
-"nhk",
-"nico",
-"nike",
-"nikon",
-"ninja",
-"nissan",
-"nissay",
-"nokia",
-"northwesternmutual",
-"norton",
-"now",
-"nowruz",
-"nowtv",
-"nra",
-"nrw",
-"ntt",
-"nyc",
-"obi",
-"observer",
-"off",
-"office",
-"okinawa",
-"olayan",
-"olayangroup",
-"oldnavy",
-"ollo",
-"omega",
-"one",
-"ong",
-"onl",
-"online",
-"onyourside",
-"ooo",
-"open",
-"oracle",
-"orange",
-"organic",
-"origins",
-"osaka",
-"otsuka",
-"ott",
-"ovh",
-"page",
-"panasonic",
-"paris",
-"pars",
-"partners",
-"parts",
-"party",
-"passagens",
-"pay",
-"pccw",
-"pet",
-"pfizer",
-"pharmacy",
-"phd",
-"philips",
-"phone",
-"photo",
-"photography",
-"photos",
-"physio",
-"pics",
-"pictet",
-"pictures",
-"pid",
-"pin",
-"ping",
-"pink",
-"pioneer",
-"pizza",
-"place",
-"play",
-"playstation",
-"plumbing",
-"plus",
-"pnc",
-"pohl",
-"poker",
-"politie",
-"porn",
-"pramerica",
-"praxi",
-"press",
-"prime",
-"prod",
-"productions",
-"prof",
-"progressive",
-"promo",
-"properties",
-"property",
-"protection",
-"pru",
-"prudential",
-"pub",
-"pwc",
-"qpon",
-"quebec",
-"quest",
-"qvc",
-"racing",
-"radio",
-"raid",
-"read",
-"realestate",
-"realtor",
-"realty",
-"recipes",
-"red",
-"redstone",
-"redumbrella",
-"rehab",
-"reise",
-"reisen",
-"reit",
-"reliance",
-"ren",
-"rent",
-"rentals",
-"repair",
-"report",
-"republican",
-"rest",
-"restaurant",
-"review",
-"reviews",
-"rexroth",
-"rich",
-"richardli",
-"ricoh",
-"rightathome",
-"ril",
-"rio",
-"rip",
-"rmit",
-"rocher",
-"rocks",
-"rodeo",
-"rogers",
-"room",
-"rsvp",
-"rugby",
-"ruhr",
-"run",
-"rwe",
-"ryukyu",
-"saarland",
-"safe",
-"safety",
-"sakura",
-"sale",
-"salon",
-"samsclub",
-"samsung",
-"sandvik",
-"sandvikcoromant",
-"sanofi",
-"sap",
-"sarl",
-"sas",
-"save",
-"saxo",
-"sbi",
-"sbs",
-"sca",
-"scb",
-"schaeffler",
-"schmidt",
-"scholarships",
-"school",
-"schule",
-"schwarz",
-"science",
-"scjohnson",
-"scor",
-"scot",
-"search",
-"seat",
-"secure",
-"security",
-"seek",
-"select",
-"sener",
-"services",
-"ses",
-"seven",
-"sew",
-"sex",
-"sexy",
-"sfr",
-"shangrila",
-"sharp",
-"shaw",
-"shell",
-"shia",
-"shiksha",
-"shoes",
-"shop",
-"shopping",
-"shouji",
-"show",
-"showtime",
-"shriram",
-"silk",
-"sina",
-"singles",
-"site",
-"ski",
-"skin",
-"sky",
-"skype",
-"sling",
-"smart",
-"smile",
-"sncf",
-"soccer",
-"social",
-"softbank",
-"software",
-"sohu",
-"solar",
-"solutions",
-"song",
-"sony",
-"soy",
-"spa",
-"space",
-"sport",
-"spot",
-"spreadbetting",
-"srl",
-"stada",
-"staples",
-"star",
-"statebank",
-"statefarm",
-"stc",
-"stcgroup",
-"stockholm",
-"storage",
-"store",
-"stream",
-"studio",
-"study",
-"style",
-"sucks",
-"supplies",
-"supply",
-"support",
-"surf",
-"surgery",
-"suzuki",
-"swatch",
-"swiftcover",
-"swiss",
-"sydney",
-"symantec",
-"systems",
-"tab",
-"taipei",
-"talk",
-"taobao",
-"target",
-"tatamotors",
-"tatar",
-"tattoo",
-"tax",
-"taxi",
-"tci",
-"tdk",
-"team",
-"tech",
-"technology",
-"temasek",
-"tennis",
-"teva",
-"thd",
-"theater",
-"theatre",
-"tiaa",
-"tickets",
-"tienda",
-"tiffany",
-"tips",
-"tires",
-"tirol",
-"tjmaxx",
-"tjx",
-"tkmaxx",
-"tmall",
-"today",
-"tokyo",
-"tools",
-"top",
-"toray",
-"toshiba",
-"total",
-"tours",
-"town",
-"toyota",
-"toys",
-"trade",
-"trading",
-"training",
-"travel",
-"travelchannel",
-"travelers",
-"travelersinsurance",
-"trust",
-"trv",
-"tube",
-"tui",
-"tunes",
-"tushu",
-"tvs",
-"ubank",
-"ubs",
-"unicom",
-"university",
-"uno",
-"uol",
-"ups",
-"vacations",
-"vana",
-"vanguard",
-"vegas",
-"ventures",
-"verisign",
-"versicherung",
-"vet",
-"viajes",
-"video",
-"vig",
-"viking",
-"villas",
-"vin",
-"vip",
-"virgin",
-"visa",
-"vision",
-"viva",
-"vivo",
-"vlaanderen",
-"vodka",
-"volkswagen",
-"volvo",
-"vote",
-"voting",
-"voto",
-"voyage",
-"vuelos",
-"wales",
-"walmart",
-"walter",
-"wang",
-"wanggou",
-"watch",
-"watches",
-"weather",
-"weatherchannel",
-"webcam",
-"weber",
-"website",
-"wed",
-"wedding",
-"weibo",
-"weir",
-"whoswho",
-"wien",
-"wiki",
-"williamhill",
-"win",
-"windows",
-"wine",
-"winners",
-"wme",
-"wolterskluwer",
-"woodside",
-"work",
-"works",
-"world",
-"wow",
-"wtc",
-"wtf",
-"xbox",
-"xerox",
-"xfinity",
-"xihuan",
-"xin",
-"कॉम",
-"セール",
-"佛山",
-"慈善",
-"集团",
-"在线",
-"大众汽车",
-"点看",
-"คอม",
-"八卦",
-"موقع",
-"公益",
-"公司",
-"香格里拉",
-"网站",
-"移动",
-"我爱你",
-"москва",
-"католик",
-"онлайн",
-"сайт",
-"联通",
-"קום",
-"时尚",
-"微博",
-"淡马锡",
-"ファッション",
-"орг",
-"नेट",
-"ストア",
-"アマゾン",
-"삼성",
-"商标",
-"商店",
-"商城",
-"дети",
-"ポイント",
-"新闻",
-"工行",
-"家電",
-"كوم",
-"中文网",
-"中信",
-"娱乐",
-"谷歌",
-"電訊盈科",
-"购物",
-"クラウド",
-"通販",
-"网店",
-"संगठन",
-"餐厅",
-"网络",
-"ком",
-"亚马逊",
-"诺基亚",
-"食品",
-"飞利浦",
-"手表",
-"手机",
-"ارامكو",
-"العليان",
-"اتصالات",
-"بازار",
-"ابوظبي",
-"كاثوليك",
-"همراه",
-"닷컴",
-"政府",
-"شبكة",
-"بيتك",
-"عرب",
-"机构",
-"组织机构",
-"健康",
-"招聘",
-"рус",
-"珠宝",
-"大拿",
-"みんな",
-"グーグル",
-"世界",
-"書籍",
-"网址",
-"닷넷",
-"コム",
-"天主教",
-"游戏",
-"vermögensberater",
-"vermögensberatung",
-"企业",
-"信息",
-"嘉里大酒店",
-"嘉里",
-"广东",
-"政务",
-"xyz",
-"yachts",
-"yahoo",
-"yamaxun",
-"yandex",
-"yodobashi",
-"yoga",
-"yokohama",
-"you",
-"youtube",
-"yun",
-"zappos",
-"zara",
-"zero",
-"zip",
-"zone",
-"zuerich",
-"cc.ua",
-"inf.ua",
-"ltd.ua",
-"adobeaemcloud.com",
-"adobeaemcloud.net",
-"*.dev.adobeaemcloud.com",
-"beep.pl",
-"barsy.ca",
-"*.compute.estate",
-"*.alces.network",
-"altervista.org",
-"alwaysdata.net",
-"cloudfront.net",
-"*.compute.amazonaws.com",
-"*.compute-1.amazonaws.com",
-"*.compute.amazonaws.com.cn",
-"us-east-1.amazonaws.com",
-"cn-north-1.eb.amazonaws.com.cn",
-"cn-northwest-1.eb.amazonaws.com.cn",
-"elasticbeanstalk.com",
-"ap-northeast-1.elasticbeanstalk.com",
-"ap-northeast-2.elasticbeanstalk.com",
-"ap-northeast-3.elasticbeanstalk.com",
-"ap-south-1.elasticbeanstalk.com",
-"ap-southeast-1.elasticbeanstalk.com",
-"ap-southeast-2.elasticbeanstalk.com",
-"ca-central-1.elasticbeanstalk.com",
-"eu-central-1.elasticbeanstalk.com",
-"eu-west-1.elasticbeanstalk.com",
-"eu-west-2.elasticbeanstalk.com",
-"eu-west-3.elasticbeanstalk.com",
-"sa-east-1.elasticbeanstalk.com",
-"us-east-1.elasticbeanstalk.com",
-"us-east-2.elasticbeanstalk.com",
-"us-gov-west-1.elasticbeanstalk.com",
-"us-west-1.elasticbeanstalk.com",
-"us-west-2.elasticbeanstalk.com",
-"*.elb.amazonaws.com",
-"*.elb.amazonaws.com.cn",
-"s3.amazonaws.com",
-"s3-ap-northeast-1.amazonaws.com",
-"s3-ap-northeast-2.amazonaws.com",
-"s3-ap-south-1.amazonaws.com",
-"s3-ap-southeast-1.amazonaws.com",
-"s3-ap-southeast-2.amazonaws.com",
-"s3-ca-central-1.amazonaws.com",
-"s3-eu-central-1.amazonaws.com",
-"s3-eu-west-1.amazonaws.com",
-"s3-eu-west-2.amazonaws.com",
-"s3-eu-west-3.amazonaws.com",
-"s3-external-1.amazonaws.com",
-"s3-fips-us-gov-west-1.amazonaws.com",
-"s3-sa-east-1.amazonaws.com",
-"s3-us-gov-west-1.amazonaws.com",
-"s3-us-east-2.amazonaws.com",
-"s3-us-west-1.amazonaws.com",
-"s3-us-west-2.amazonaws.com",
-"s3.ap-northeast-2.amazonaws.com",
-"s3.ap-south-1.amazonaws.com",
-"s3.cn-north-1.amazonaws.com.cn",
-"s3.ca-central-1.amazonaws.com",
-"s3.eu-central-1.amazonaws.com",
-"s3.eu-west-2.amazonaws.com",
-"s3.eu-west-3.amazonaws.com",
-"s3.us-east-2.amazonaws.com",
-"s3.dualstack.ap-northeast-1.amazonaws.com",
-"s3.dualstack.ap-northeast-2.amazonaws.com",
-"s3.dualstack.ap-south-1.amazonaws.com",
-"s3.dualstack.ap-southeast-1.amazonaws.com",
-"s3.dualstack.ap-southeast-2.amazonaws.com",
-"s3.dualstack.ca-central-1.amazonaws.com",
-"s3.dualstack.eu-central-1.amazonaws.com",
-"s3.dualstack.eu-west-1.amazonaws.com",
-"s3.dualstack.eu-west-2.amazonaws.com",
-"s3.dualstack.eu-west-3.amazonaws.com",
-"s3.dualstack.sa-east-1.amazonaws.com",
-"s3.dualstack.us-east-1.amazonaws.com",
-"s3.dualstack.us-east-2.amazonaws.com",
-"s3-website-us-east-1.amazonaws.com",
-"s3-website-us-west-1.amazonaws.com",
-"s3-website-us-west-2.amazonaws.com",
-"s3-website-ap-northeast-1.amazonaws.com",
-"s3-website-ap-southeast-1.amazonaws.com",
-"s3-website-ap-southeast-2.amazonaws.com",
-"s3-website-eu-west-1.amazonaws.com",
-"s3-website-sa-east-1.amazonaws.com",
-"s3-website.ap-northeast-2.amazonaws.com",
-"s3-website.ap-south-1.amazonaws.com",
-"s3-website.ca-central-1.amazonaws.com",
-"s3-website.eu-central-1.amazonaws.com",
-"s3-website.eu-west-2.amazonaws.com",
-"s3-website.eu-west-3.amazonaws.com",
-"s3-website.us-east-2.amazonaws.com",
-"amsw.nl",
-"t3l3p0rt.net",
-"tele.amune.org",
-"apigee.io",
-"on-aptible.com",
-"user.aseinet.ne.jp",
-"gv.vc",
-"d.gv.vc",
-"user.party.eus",
-"pimienta.org",
-"poivron.org",
-"potager.org",
-"sweetpepper.org",
-"myasustor.com",
-"myfritz.net",
-"*.awdev.ca",
-"*.advisor.ws",
-"b-data.io",
-"backplaneapp.io",
-"balena-devices.com",
-"app.banzaicloud.io",
-"betainabox.com",
-"bnr.la",
-"blackbaudcdn.net",
-"boomla.net",
-"boxfuse.io",
-"square7.ch",
-"bplaced.com",
-"bplaced.de",
-"square7.de",
-"bplaced.net",
-"square7.net",
-"browsersafetymark.io",
-"uk0.bigv.io",
-"dh.bytemark.co.uk",
-"vm.bytemark.co.uk",
-"mycd.eu",
-"carrd.co",
-"crd.co",
-"uwu.ai",
-"ae.org",
-"ar.com",
-"br.com",
-"cn.com",
-"com.de",
-"com.se",
-"de.com",
-"eu.com",
-"gb.com",
-"gb.net",
-"hu.com",
-"hu.net",
-"jp.net",
-"jpn.com",
-"kr.com",
-"mex.com",
-"no.com",
-"qc.com",
-"ru.com",
-"sa.com",
-"se.net",
-"uk.com",
-"uk.net",
-"us.com",
-"uy.com",
-"za.bz",
-"za.com",
-"africa.com",
-"gr.com",
-"in.net",
-"us.org",
-"co.com",
-"c.la",
-"certmgr.org",
-"xenapponazure.com",
-"discourse.group",
-"discourse.team",
-"virtueeldomein.nl",
-"cleverapps.io",
-"*.lcl.dev",
-"*.stg.dev",
-"c66.me",
-"cloud66.ws",
-"cloud66.zone",
-"jdevcloud.com",
-"wpdevcloud.com",
-"cloudaccess.host",
-"freesite.host",
-"cloudaccess.net",
-"cloudcontrolled.com",
-"cloudcontrolapp.com",
-"cloudera.site",
-"trycloudflare.com",
-"workers.dev",
-"wnext.app",
-"co.ca",
-"*.otap.co",
-"co.cz",
-"c.cdn77.org",
-"cdn77-ssl.net",
-"r.cdn77.net",
-"rsc.cdn77.org",
-"ssl.origin.cdn77-secure.org",
-"cloudns.asia",
-"cloudns.biz",
-"cloudns.club",
-"cloudns.cc",
-"cloudns.eu",
-"cloudns.in",
-"cloudns.info",
-"cloudns.org",
-"cloudns.pro",
-"cloudns.pw",
-"cloudns.us",
-"cloudeity.net",
-"cnpy.gdn",
-"co.nl",
-"co.no",
-"webhosting.be",
-"hosting-cluster.nl",
-"ac.ru",
-"edu.ru",
-"gov.ru",
-"int.ru",
-"mil.ru",
-"test.ru",
-"dyn.cosidns.de",
-"dynamisches-dns.de",
-"dnsupdater.de",
-"internet-dns.de",
-"l-o-g-i-n.de",
-"dynamic-dns.info",
-"feste-ip.net",
-"knx-server.net",
-"static-access.net",
-"realm.cz",
-"*.cryptonomic.net",
-"cupcake.is",
-"*.customer-oci.com",
-"*.oci.customer-oci.com",
-"*.ocp.customer-oci.com",
-"*.ocs.customer-oci.com",
-"cyon.link",
-"cyon.site",
-"daplie.me",
-"localhost.daplie.me",
-"dattolocal.com",
-"dattorelay.com",
-"dattoweb.com",
-"mydatto.com",
-"dattolocal.net",
-"mydatto.net",
-"biz.dk",
-"co.dk",
-"firm.dk",
-"reg.dk",
-"store.dk",
-"*.dapps.earth",
-"*.bzz.dapps.earth",
-"builtwithdark.com",
-"edgestack.me",
-"debian.net",
-"dedyn.io",
-"dnshome.de",
-"online.th",
-"shop.th",
-"drayddns.com",
-"dreamhosters.com",
-"mydrobo.com",
-"drud.io",
-"drud.us",
-"duckdns.org",
-"dy.fi",
-"tunk.org",
-"dyndns-at-home.com",
-"dyndns-at-work.com",
-"dyndns-blog.com",
-"dyndns-free.com",
-"dyndns-home.com",
-"dyndns-ip.com",
-"dyndns-mail.com",
-"dyndns-office.com",
-"dyndns-pics.com",
-"dyndns-remote.com",
-"dyndns-server.com",
-"dyndns-web.com",
-"dyndns-wiki.com",
-"dyndns-work.com",
-"dyndns.biz",
-"dyndns.info",
-"dyndns.org",
-"dyndns.tv",
-"at-band-camp.net",
-"ath.cx",
-"barrel-of-knowledge.info",
-"barrell-of-knowledge.info",
-"better-than.tv",
-"blogdns.com",
-"blogdns.net",
-"blogdns.org",
-"blogsite.org",
-"boldlygoingnowhere.org",
-"broke-it.net",
-"buyshouses.net",
-"cechire.com",
-"dnsalias.com",
-"dnsalias.net",
-"dnsalias.org",
-"dnsdojo.com",
-"dnsdojo.net",
-"dnsdojo.org",
-"does-it.net",
-"doesntexist.com",
-"doesntexist.org",
-"dontexist.com",
-"dontexist.net",
-"dontexist.org",
-"doomdns.com",
-"doomdns.org",
-"dvrdns.org",
-"dyn-o-saur.com",
-"dynalias.com",
-"dynalias.net",
-"dynalias.org",
-"dynathome.net",
-"dyndns.ws",
-"endofinternet.net",
-"endofinternet.org",
-"endoftheinternet.org",
-"est-a-la-maison.com",
-"est-a-la-masion.com",
-"est-le-patron.com",
-"est-mon-blogueur.com",
-"for-better.biz",
-"for-more.biz",
-"for-our.info",
-"for-some.biz",
-"for-the.biz",
-"forgot.her.name",
-"forgot.his.name",
-"from-ak.com",
-"from-al.com",
-"from-ar.com",
-"from-az.net",
-"from-ca.com",
-"from-co.net",
-"from-ct.com",
-"from-dc.com",
-"from-de.com",
-"from-fl.com",
-"from-ga.com",
-"from-hi.com",
-"from-ia.com",
-"from-id.com",
-"from-il.com",
-"from-in.com",
-"from-ks.com",
-"from-ky.com",
-"from-la.net",
-"from-ma.com",
-"from-md.com",
-"from-me.org",
-"from-mi.com",
-"from-mn.com",
-"from-mo.com",
-"from-ms.com",
-"from-mt.com",
-"from-nc.com",
-"from-nd.com",
-"from-ne.com",
-"from-nh.com",
-"from-nj.com",
-"from-nm.com",
-"from-nv.com",
-"from-ny.net",
-"from-oh.com",
-"from-ok.com",
-"from-or.com",
-"from-pa.com",
-"from-pr.com",
-"from-ri.com",
-"from-sc.com",
-"from-sd.com",
-"from-tn.com",
-"from-tx.com",
-"from-ut.com",
-"from-va.com",
-"from-vt.com",
-"from-wa.com",
-"from-wi.com",
-"from-wv.com",
-"from-wy.com",
-"ftpaccess.cc",
-"fuettertdasnetz.de",
-"game-host.org",
-"game-server.cc",
-"getmyip.com",
-"gets-it.net",
-"go.dyndns.org",
-"gotdns.com",
-"gotdns.org",
-"groks-the.info",
-"groks-this.info",
-"ham-radio-op.net",
-"here-for-more.info",
-"hobby-site.com",
-"hobby-site.org",
-"home.dyndns.org",
-"homedns.org",
-"homeftp.net",
-"homeftp.org",
-"homeip.net",
-"homelinux.com",
-"homelinux.net",
-"homelinux.org",
-"homeunix.com",
-"homeunix.net",
-"homeunix.org",
-"iamallama.com",
-"in-the-band.net",
-"is-a-anarchist.com",
-"is-a-blogger.com",
-"is-a-bookkeeper.com",
-"is-a-bruinsfan.org",
-"is-a-bulls-fan.com",
-"is-a-candidate.org",
-"is-a-caterer.com",
-"is-a-celticsfan.org",
-"is-a-chef.com",
-"is-a-chef.net",
-"is-a-chef.org",
-"is-a-conservative.com",
-"is-a-cpa.com",
-"is-a-cubicle-slave.com",
-"is-a-democrat.com",
-"is-a-designer.com",
-"is-a-doctor.com",
-"is-a-financialadvisor.com",
-"is-a-geek.com",
-"is-a-geek.net",
-"is-a-geek.org",
-"is-a-green.com",
-"is-a-guru.com",
-"is-a-hard-worker.com",
-"is-a-hunter.com",
-"is-a-knight.org",
-"is-a-landscaper.com",
-"is-a-lawyer.com",
-"is-a-liberal.com",
-"is-a-libertarian.com",
-"is-a-linux-user.org",
-"is-a-llama.com",
-"is-a-musician.com",
-"is-a-nascarfan.com",
-"is-a-nurse.com",
-"is-a-painter.com",
-"is-a-patsfan.org",
-"is-a-personaltrainer.com",
-"is-a-photographer.com",
-"is-a-player.com",
-"is-a-republican.com",
-"is-a-rockstar.com",
-"is-a-socialist.com",
-"is-a-soxfan.org",
-"is-a-student.com",
-"is-a-teacher.com",
-"is-a-techie.com",
-"is-a-therapist.com",
-"is-an-accountant.com",
-"is-an-actor.com",
-"is-an-actress.com",
-"is-an-anarchist.com",
-"is-an-artist.com",
-"is-an-engineer.com",
-"is-an-entertainer.com",
-"is-by.us",
-"is-certified.com",
-"is-found.org",
-"is-gone.com",
-"is-into-anime.com",
-"is-into-cars.com",
-"is-into-cartoons.com",
-"is-into-games.com",
-"is-leet.com",
-"is-lost.org",
-"is-not-certified.com",
-"is-saved.org",
-"is-slick.com",
-"is-uberleet.com",
-"is-very-bad.org",
-"is-very-evil.org",
-"is-very-good.org",
-"is-very-nice.org",
-"is-very-sweet.org",
-"is-with-theband.com",
-"isa-geek.com",
-"isa-geek.net",
-"isa-geek.org",
-"isa-hockeynut.com",
-"issmarterthanyou.com",
-"isteingeek.de",
-"istmein.de",
-"kicks-ass.net",
-"kicks-ass.org",
-"knowsitall.info",
-"land-4-sale.us",
-"lebtimnetz.de",
-"leitungsen.de",
-"likes-pie.com",
-"likescandy.com",
-"merseine.nu",
-"mine.nu",
-"misconfused.org",
-"mypets.ws",
-"myphotos.cc",
-"neat-url.com",
-"office-on-the.net",
-"on-the-web.tv",
-"podzone.net",
-"podzone.org",
-"readmyblog.org",
-"saves-the-whales.com",
-"scrapper-site.net",
-"scrapping.cc",
-"selfip.biz",
-"selfip.com",
-"selfip.info",
-"selfip.net",
-"selfip.org",
-"sells-for-less.com",
-"sells-for-u.com",
-"sells-it.net",
-"sellsyourhome.org",
-"servebbs.com",
-"servebbs.net",
-"servebbs.org",
-"serveftp.net",
-"serveftp.org",
-"servegame.org",
-"shacknet.nu",
-"simple-url.com",
-"space-to-rent.com",
-"stuff-4-sale.org",
-"stuff-4-sale.us",
-"teaches-yoga.com",
-"thruhere.net",
-"traeumtgerade.de",
-"webhop.biz",
-"webhop.info",
-"webhop.net",
-"webhop.org",
-"worse-than.tv",
-"writesthisblog.com",
-"ddnss.de",
-"dyn.ddnss.de",
-"dyndns.ddnss.de",
-"dyndns1.de",
-"dyn-ip24.de",
-"home-webserver.de",
-"dyn.home-webserver.de",
-"myhome-server.de",
-"ddnss.org",
-"definima.net",
-"definima.io",
-"bci.dnstrace.pro",
-"ddnsfree.com",
-"ddnsgeek.com",
-"giize.com",
-"gleeze.com",
-"kozow.com",
-"loseyourip.com",
-"ooguy.com",
-"theworkpc.com",
-"casacam.net",
-"dynu.net",
-"accesscam.org",
-"camdvr.org",
-"freeddns.org",
-"mywire.org",
-"webredirect.org",
-"myddns.rocks",
-"blogsite.xyz",
-"dynv6.net",
-"e4.cz",
-"en-root.fr",
-"mytuleap.com",
-"onred.one",
-"staging.onred.one",
-"enonic.io",
-"customer.enonic.io",
-"eu.org",
-"al.eu.org",
-"asso.eu.org",
-"at.eu.org",
-"au.eu.org",
-"be.eu.org",
-"bg.eu.org",
-"ca.eu.org",
-"cd.eu.org",
-"ch.eu.org",
-"cn.eu.org",
-"cy.eu.org",
-"cz.eu.org",
-"de.eu.org",
-"dk.eu.org",
-"edu.eu.org",
-"ee.eu.org",
-"es.eu.org",
-"fi.eu.org",
-"fr.eu.org",
-"gr.eu.org",
-"hr.eu.org",
-"hu.eu.org",
-"ie.eu.org",
-"il.eu.org",
-"in.eu.org",
-"int.eu.org",
-"is.eu.org",
-"it.eu.org",
-"jp.eu.org",
-"kr.eu.org",
-"lt.eu.org",
-"lu.eu.org",
-"lv.eu.org",
-"mc.eu.org",
-"me.eu.org",
-"mk.eu.org",
-"mt.eu.org",
-"my.eu.org",
-"net.eu.org",
-"ng.eu.org",
-"nl.eu.org",
-"no.eu.org",
-"nz.eu.org",
-"paris.eu.org",
-"pl.eu.org",
-"pt.eu.org",
-"q-a.eu.org",
-"ro.eu.org",
-"ru.eu.org",
-"se.eu.org",
-"si.eu.org",
-"sk.eu.org",
-"tr.eu.org",
-"uk.eu.org",
-"us.eu.org",
-"eu-1.evennode.com",
-"eu-2.evennode.com",
-"eu-3.evennode.com",
-"eu-4.evennode.com",
-"us-1.evennode.com",
-"us-2.evennode.com",
-"us-3.evennode.com",
-"us-4.evennode.com",
-"twmail.cc",
-"twmail.net",
-"twmail.org",
-"mymailer.com.tw",
-"url.tw",
-"apps.fbsbx.com",
-"ru.net",
-"adygeya.ru",
-"bashkiria.ru",
-"bir.ru",
-"cbg.ru",
-"com.ru",
-"dagestan.ru",
-"grozny.ru",
-"kalmykia.ru",
-"kustanai.ru",
-"marine.ru",
-"mordovia.ru",
-"msk.ru",
-"mytis.ru",
-"nalchik.ru",
-"nov.ru",
-"pyatigorsk.ru",
-"spb.ru",
-"vladikavkaz.ru",
-"vladimir.ru",
-"abkhazia.su",
-"adygeya.su",
-"aktyubinsk.su",
-"arkhangelsk.su",
-"armenia.su",
-"ashgabad.su",
-"azerbaijan.su",
-"balashov.su",
-"bashkiria.su",
-"bryansk.su",
-"bukhara.su",
-"chimkent.su",
-"dagestan.su",
-"east-kazakhstan.su",
-"exnet.su",
-"georgia.su",
-"grozny.su",
-"ivanovo.su",
-"jambyl.su",
-"kalmykia.su",
-"kaluga.su",
-"karacol.su",
-"karaganda.su",
-"karelia.su",
-"khakassia.su",
-"krasnodar.su",
-"kurgan.su",
-"kustanai.su",
-"lenug.su",
-"mangyshlak.su",
-"mordovia.su",
-"msk.su",
-"murmansk.su",
-"nalchik.su",
-"navoi.su",
-"north-kazakhstan.su",
-"nov.su",
-"obninsk.su",
-"penza.su",
-"pokrovsk.su",
-"sochi.su",
-"spb.su",
-"tashkent.su",
-"termez.su",
-"togliatti.su",
-"troitsk.su",
-"tselinograd.su",
-"tula.su",
-"tuva.su",
-"vladikavkaz.su",
-"vladimir.su",
-"vologda.su",
-"channelsdvr.net",
-"u.channelsdvr.net",
-"fastly-terrarium.com",
-"fastlylb.net",
-"map.fastlylb.net",
-"freetls.fastly.net",
-"map.fastly.net",
-"a.prod.fastly.net",
-"global.prod.fastly.net",
-"a.ssl.fastly.net",
-"b.ssl.fastly.net",
-"global.ssl.fastly.net",
-"fastpanel.direct",
-"fastvps-server.com",
-"fhapp.xyz",
-"fedorainfracloud.org",
-"fedorapeople.org",
-"cloud.fedoraproject.org",
-"app.os.fedoraproject.org",
-"app.os.stg.fedoraproject.org",
-"mydobiss.com",
-"filegear.me",
-"filegear-au.me",
-"filegear-de.me",
-"filegear-gb.me",
-"filegear-ie.me",
-"filegear-jp.me",
-"filegear-sg.me",
-"firebaseapp.com",
-"flynnhub.com",
-"flynnhosting.net",
-"0e.vc",
-"freebox-os.com",
-"freeboxos.com",
-"fbx-os.fr",
-"fbxos.fr",
-"freebox-os.fr",
-"freeboxos.fr",
-"freedesktop.org",
-"*.futurecms.at",
-"*.ex.futurecms.at",
-"*.in.futurecms.at",
-"futurehosting.at",
-"futuremailing.at",
-"*.ex.ortsinfo.at",
-"*.kunden.ortsinfo.at",
-"*.statics.cloud",
-"service.gov.uk",
-"gehirn.ne.jp",
-"usercontent.jp",
-"gentapps.com",
-"lab.ms",
-"github.io",
-"githubusercontent.com",
-"gitlab.io",
-"glitch.me",
-"lolipop.io",
-"cloudapps.digital",
-"london.cloudapps.digital",
-"homeoffice.gov.uk",
-"ro.im",
-"shop.ro",
-"goip.de",
-"run.app",
-"a.run.app",
-"web.app",
-"*.0emm.com",
-"appspot.com",
-"*.r.appspot.com",
-"blogspot.ae",
-"blogspot.al",
-"blogspot.am",
-"blogspot.ba",
-"blogspot.be",
-"blogspot.bg",
-"blogspot.bj",
-"blogspot.ca",
-"blogspot.cf",
-"blogspot.ch",
-"blogspot.cl",
-"blogspot.co.at",
-"blogspot.co.id",
-"blogspot.co.il",
-"blogspot.co.ke",
-"blogspot.co.nz",
-"blogspot.co.uk",
-"blogspot.co.za",
-"blogspot.com",
-"blogspot.com.ar",
-"blogspot.com.au",
-"blogspot.com.br",
-"blogspot.com.by",
-"blogspot.com.co",
-"blogspot.com.cy",
-"blogspot.com.ee",
-"blogspot.com.eg",
-"blogspot.com.es",
-"blogspot.com.mt",
-"blogspot.com.ng",
-"blogspot.com.tr",
-"blogspot.com.uy",
-"blogspot.cv",
-"blogspot.cz",
-"blogspot.de",
-"blogspot.dk",
-"blogspot.fi",
-"blogspot.fr",
-"blogspot.gr",
-"blogspot.hk",
-"blogspot.hr",
-"blogspot.hu",
-"blogspot.ie",
-"blogspot.in",
-"blogspot.is",
-"blogspot.it",
-"blogspot.jp",
-"blogspot.kr",
-"blogspot.li",
-"blogspot.lt",
-"blogspot.lu",
-"blogspot.md",
-"blogspot.mk",
-"blogspot.mr",
-"blogspot.mx",
-"blogspot.my",
-"blogspot.nl",
-"blogspot.no",
-"blogspot.pe",
-"blogspot.pt",
-"blogspot.qa",
-"blogspot.re",
-"blogspot.ro",
-"blogspot.rs",
-"blogspot.ru",
-"blogspot.se",
-"blogspot.sg",
-"blogspot.si",
-"blogspot.sk",
-"blogspot.sn",
-"blogspot.td",
-"blogspot.tw",
-"blogspot.ug",
-"blogspot.vn",
-"cloudfunctions.net",
-"cloud.goog",
-"codespot.com",
-"googleapis.com",
-"googlecode.com",
-"pagespeedmobilizer.com",
-"publishproxy.com",
-"withgoogle.com",
-"withyoutube.com",
-"awsmppl.com",
-"fin.ci",
-"free.hr",
-"caa.li",
-"ua.rs",
-"conf.se",
-"hs.zone",
-"hs.run",
-"hashbang.sh",
-"hasura.app",
-"hasura-app.io",
-"hepforge.org",
-"herokuapp.com",
-"herokussl.com",
-"myravendb.com",
-"ravendb.community",
-"ravendb.me",
-"development.run",
-"ravendb.run",
-"bpl.biz",
-"orx.biz",
-"ng.city",
-"biz.gl",
-"ng.ink",
-"col.ng",
-"firm.ng",
-"gen.ng",
-"ltd.ng",
-"ngo.ng",
-"ng.school",
-"sch.so",
-"häkkinen.fi",
-"*.moonscale.io",
-"moonscale.net",
-"iki.fi",
-"dyn-berlin.de",
-"in-berlin.de",
-"in-brb.de",
-"in-butter.de",
-"in-dsl.de",
-"in-dsl.net",
-"in-dsl.org",
-"in-vpn.de",
-"in-vpn.net",
-"in-vpn.org",
-"biz.at",
-"info.at",
-"info.cx",
-"ac.leg.br",
-"al.leg.br",
-"am.leg.br",
-"ap.leg.br",
-"ba.leg.br",
-"ce.leg.br",
-"df.leg.br",
-"es.leg.br",
-"go.leg.br",
-"ma.leg.br",
-"mg.leg.br",
-"ms.leg.br",
-"mt.leg.br",
-"pa.leg.br",
-"pb.leg.br",
-"pe.leg.br",
-"pi.leg.br",
-"pr.leg.br",
-"rj.leg.br",
-"rn.leg.br",
-"ro.leg.br",
-"rr.leg.br",
-"rs.leg.br",
-"sc.leg.br",
-"se.leg.br",
-"sp.leg.br",
-"to.leg.br",
-"pixolino.com",
-"ipifony.net",
-"mein-iserv.de",
-"test-iserv.de",
-"iserv.dev",
-"iobb.net",
-"myjino.ru",
-"*.hosting.myjino.ru",
-"*.landing.myjino.ru",
-"*.spectrum.myjino.ru",
-"*.vps.myjino.ru",
-"*.triton.zone",
-"*.cns.joyent.com",
-"js.org",
-"kaas.gg",
-"khplay.nl",
-"keymachine.de",
-"kinghost.net",
-"uni5.net",
-"knightpoint.systems",
-"oya.to",
-"co.krd",
-"edu.krd",
-"git-repos.de",
-"lcube-server.de",
-"svn-repos.de",
-"leadpages.co",
-"lpages.co",
-"lpusercontent.com",
-"lelux.site",
-"co.business",
-"co.education",
-"co.events",
-"co.financial",
-"co.network",
-"co.place",
-"co.technology",
-"app.lmpm.com",
-"linkitools.space",
-"linkyard.cloud",
-"linkyard-cloud.ch",
-"members.linode.com",
-"nodebalancer.linode.com",
-"we.bs",
-"loginline.app",
-"loginline.dev",
-"loginline.io",
-"loginline.services",
-"loginline.site",
-"krasnik.pl",
-"leczna.pl",
-"lubartow.pl",
-"lublin.pl",
-"poniatowa.pl",
-"swidnik.pl",
-"uklugs.org",
-"glug.org.uk",
-"lug.org.uk",
-"lugs.org.uk",
-"barsy.bg",
-"barsy.co.uk",
-"barsyonline.co.uk",
-"barsycenter.com",
-"barsyonline.com",
-"barsy.club",
-"barsy.de",
-"barsy.eu",
-"barsy.in",
-"barsy.info",
-"barsy.io",
-"barsy.me",
-"barsy.menu",
-"barsy.mobi",
-"barsy.net",
-"barsy.online",
-"barsy.org",
-"barsy.pro",
-"barsy.pub",
-"barsy.shop",
-"barsy.site",
-"barsy.support",
-"barsy.uk",
-"*.magentosite.cloud",
-"mayfirst.info",
-"mayfirst.org",
-"hb.cldmail.ru",
-"miniserver.com",
-"memset.net",
-"cloud.metacentrum.cz",
-"custom.metacentrum.cz",
-"flt.cloud.muni.cz",
-"usr.cloud.muni.cz",
-"meteorapp.com",
-"eu.meteorapp.com",
-"co.pl",
-"azurecontainer.io",
-"azurewebsites.net",
-"azure-mobile.net",
-"cloudapp.net",
-"mozilla-iot.org",
-"bmoattachments.org",
-"net.ru",
-"org.ru",
-"pp.ru",
-"ui.nabu.casa",
-"pony.club",
-"of.fashion",
-"on.fashion",
-"of.football",
-"in.london",
-"of.london",
-"for.men",
-"and.mom",
-"for.mom",
-"for.one",
-"for.sale",
-"of.work",
-"to.work",
-"nctu.me",
-"bitballoon.com",
-"netlify.com",
-"4u.com",
-"ngrok.io",
-"nh-serv.co.uk",
-"nfshost.com",
-"dnsking.ch",
-"mypi.co",
-"n4t.co",
-"001www.com",
-"ddnslive.com",
-"myiphost.com",
-"forumz.info",
-"16-b.it",
-"32-b.it",
-"64-b.it",
-"soundcast.me",
-"tcp4.me",
-"dnsup.net",
-"hicam.net",
-"now-dns.net",
-"ownip.net",
-"vpndns.net",
-"dynserv.org",
-"now-dns.org",
-"x443.pw",
-"now-dns.top",
-"ntdll.top",
-"freeddns.us",
-"crafting.xyz",
-"zapto.xyz",
-"nsupdate.info",
-"nerdpol.ovh",
-"blogsyte.com",
-"brasilia.me",
-"cable-modem.org",
-"ciscofreak.com",
-"collegefan.org",
-"couchpotatofries.org",
-"damnserver.com",
-"ddns.me",
-"ditchyourip.com",
-"dnsfor.me",
-"dnsiskinky.com",
-"dvrcam.info",
-"dynns.com",
-"eating-organic.net",
-"fantasyleague.cc",
-"geekgalaxy.com",
-"golffan.us",
-"health-carereform.com",
-"homesecuritymac.com",
-"homesecuritypc.com",
-"hopto.me",
-"ilovecollege.info",
-"loginto.me",
-"mlbfan.org",
-"mmafan.biz",
-"myactivedirectory.com",
-"mydissent.net",
-"myeffect.net",
-"mymediapc.net",
-"mypsx.net",
-"mysecuritycamera.com",
-"mysecuritycamera.net",
-"mysecuritycamera.org",
-"net-freaks.com",
-"nflfan.org",
-"nhlfan.net",
-"no-ip.ca",
-"no-ip.co.uk",
-"no-ip.net",
-"noip.us",
-"onthewifi.com",
-"pgafan.net",
-"point2this.com",
-"pointto.us",
-"privatizehealthinsurance.net",
-"quicksytes.com",
-"read-books.org",
-"securitytactics.com",
-"serveexchange.com",
-"servehumour.com",
-"servep2p.com",
-"servesarcasm.com",
-"stufftoread.com",
-"ufcfan.org",
-"unusualperson.com",
-"workisboring.com",
-"3utilities.com",
-"bounceme.net",
-"ddns.net",
-"ddnsking.com",
-"gotdns.ch",
-"hopto.org",
-"myftp.biz",
-"myftp.org",
-"myvnc.com",
-"no-ip.biz",
-"no-ip.info",
-"no-ip.org",
-"noip.me",
-"redirectme.net",
-"servebeer.com",
-"serveblog.net",
-"servecounterstrike.com",
-"serveftp.com",
-"servegame.com",
-"servehalflife.com",
-"servehttp.com",
-"serveirc.com",
-"serveminecraft.net",
-"servemp3.com",
-"servepics.com",
-"servequake.com",
-"sytes.net",
-"webhop.me",
-"zapto.org",
-"stage.nodeart.io",
-"nodum.co",
-"nodum.io",
-"pcloud.host",
-"nyc.mn",
-"nom.ae",
-"nom.af",
-"nom.ai",
-"nom.al",
-"nym.by",
-"nom.bz",
-"nym.bz",
-"nom.cl",
-"nym.ec",
-"nom.gd",
-"nom.ge",
-"nom.gl",
-"nym.gr",
-"nom.gt",
-"nym.gy",
-"nym.hk",
-"nom.hn",
-"nym.ie",
-"nom.im",
-"nom.ke",
-"nym.kz",
-"nym.la",
-"nym.lc",
-"nom.li",
-"nym.li",
-"nym.lt",
-"nym.lu",
-"nom.lv",
-"nym.me",
-"nom.mk",
-"nym.mn",
-"nym.mx",
-"nom.nu",
-"nym.nz",
-"nym.pe",
-"nym.pt",
-"nom.pw",
-"nom.qa",
-"nym.ro",
-"nom.rs",
-"nom.si",
-"nym.sk",
-"nom.st",
-"nym.su",
-"nym.sx",
-"nom.tj",
-"nym.tw",
-"nom.ug",
-"nom.uy",
-"nom.vc",
-"nom.vg",
-"static.observableusercontent.com",
-"cya.gg",
-"cloudycluster.net",
-"nid.io",
-"opencraft.hosting",
-"operaunite.com",
-"skygearapp.com",
-"outsystemscloud.com",
-"ownprovider.com",
-"own.pm",
-"ox.rs",
-"oy.lc",
-"pgfog.com",
-"pagefrontapp.com",
-"art.pl",
-"gliwice.pl",
-"krakow.pl",
-"poznan.pl",
-"wroc.pl",
-"zakopane.pl",
-"pantheonsite.io",
-"gotpantheon.com",
-"mypep.link",
-"perspecta.cloud",
-"on-web.fr",
-"*.platform.sh",
-"*.platformsh.site",
-"dyn53.io",
-"co.bn",
-"xen.prgmr.com",
-"priv.at",
-"prvcy.page",
-"*.dweb.link",
-"protonet.io",
-"chirurgiens-dentistes-en-france.fr",
-"byen.site",
-"pubtls.org",
-"qualifioapp.com",
-"qbuser.com",
-"instantcloud.cn",
-"ras.ru",
-"qa2.com",
-"qcx.io",
-"*.sys.qcx.io",
-"dev-myqnapcloud.com",
-"alpha-myqnapcloud.com",
-"myqnapcloud.com",
-"*.quipelements.com",
-"vapor.cloud",
-"vaporcloud.io",
-"rackmaze.com",
-"rackmaze.net",
-"*.on-k3s.io",
-"*.on-rancher.cloud",
-"*.on-rio.io",
-"readthedocs.io",
-"rhcloud.com",
-"app.render.com",
-"onrender.com",
-"repl.co",
-"repl.run",
-"resindevice.io",
-"devices.resinstaging.io",
-"hzc.io",
-"wellbeingzone.eu",
-"ptplus.fit",
-"wellbeingzone.co.uk",
-"git-pages.rit.edu",
-"sandcats.io",
-"logoip.de",
-"logoip.com",
-"schokokeks.net",
-"gov.scot",
-"scrysec.com",
-"firewall-gateway.com",
-"firewall-gateway.de",
-"my-gateway.de",
-"my-router.de",
-"spdns.de",
-"spdns.eu",
-"firewall-gateway.net",
-"my-firewall.org",
-"myfirewall.org",
-"spdns.org",
-"senseering.net",
-"biz.ua",
-"co.ua",
-"pp.ua",
-"shiftedit.io",
-"myshopblocks.com",
-"shopitsite.com",
-"mo-siemens.io",
-"1kapp.com",
-"appchizi.com",
-"applinzi.com",
-"sinaapp.com",
-"vipsinaapp.com",
-"siteleaf.net",
-"bounty-full.com",
-"alpha.bounty-full.com",
-"beta.bounty-full.com",
-"stackhero-network.com",
-"static.land",
-"dev.static.land",
-"sites.static.land",
-"apps.lair.io",
-"*.stolos.io",
-"spacekit.io",
-"customer.speedpartner.de",
-"api.stdlib.com",
-"storj.farm",
-"utwente.io",
-"soc.srcf.net",
-"user.srcf.net",
-"temp-dns.com",
-"applicationcloud.io",
-"scapp.io",
-"*.s5y.io",
-"*.sensiosite.cloud",
-"syncloud.it",
-"diskstation.me",
-"dscloud.biz",
-"dscloud.me",
-"dscloud.mobi",
-"dsmynas.com",
-"dsmynas.net",
-"dsmynas.org",
-"familyds.com",
-"familyds.net",
-"familyds.org",
-"i234.me",
-"myds.me",
-"synology.me",
-"vpnplus.to",
-"direct.quickconnect.to",
-"taifun-dns.de",
-"gda.pl",
-"gdansk.pl",
-"gdynia.pl",
-"med.pl",
-"sopot.pl",
-"edugit.org",
-"telebit.app",
-"telebit.io",
-"*.telebit.xyz",
-"gwiddle.co.uk",
-"thingdustdata.com",
-"cust.dev.thingdust.io",
-"cust.disrec.thingdust.io",
-"cust.prod.thingdust.io",
-"cust.testing.thingdust.io",
-"arvo.network",
-"azimuth.network",
-"bloxcms.com",
-"townnews-staging.com",
-"12hp.at",
-"2ix.at",
-"4lima.at",
-"lima-city.at",
-"12hp.ch",
-"2ix.ch",
-"4lima.ch",
-"lima-city.ch",
-"trafficplex.cloud",
-"de.cool",
-"12hp.de",
-"2ix.de",
-"4lima.de",
-"lima-city.de",
-"1337.pictures",
-"clan.rip",
-"lima-city.rocks",
-"webspace.rocks",
-"lima.zone",
-"*.transurl.be",
-"*.transurl.eu",
-"*.transurl.nl",
-"tuxfamily.org",
-"dd-dns.de",
-"diskstation.eu",
-"diskstation.org",
-"dray-dns.de",
-"draydns.de",
-"dyn-vpn.de",
-"dynvpn.de",
-"mein-vigor.de",
-"my-vigor.de",
-"my-wan.de",
-"syno-ds.de",
-"synology-diskstation.de",
-"synology-ds.de",
-"uber.space",
-"*.uberspace.de",
-"hk.com",
-"hk.org",
-"ltd.hk",
-"inc.hk",
-"virtualuser.de",
-"virtual-user.de",
-"urown.cloud",
-"dnsupdate.info",
-"lib.de.us",
-"2038.io",
-"router.management",
-"v-info.info",
-"voorloper.cloud",
-"v.ua",
-"wafflecell.com",
-"*.webhare.dev",
-"wedeploy.io",
-"wedeploy.me",
-"wedeploy.sh",
-"remotewd.com",
-"wmflabs.org",
-"myforum.community",
-"community-pro.de",
-"diskussionsbereich.de",
-"community-pro.net",
-"meinforum.net",
-"half.host",
-"xnbay.com",
-"u2.xnbay.com",
-"u2-local.xnbay.com",
-"cistron.nl",
-"demon.nl",
-"xs4all.space",
-"yandexcloud.net",
-"storage.yandexcloud.net",
-"website.yandexcloud.net",
-"official.academy",
-"yolasite.com",
-"ybo.faith",
-"yombo.me",
-"homelink.one",
-"ybo.party",
-"ybo.review",
-"ybo.science",
-"ybo.trade",
-"nohost.me",
-"noho.st",
-"za.net",
-"za.org",
-"now.sh",
-"bss.design",
-"basicserver.io",
-"virtualserver.io",
-"enterprisecloud.nu"
-]
\ No newline at end of file
diff --git a/deps/npm/node_modules/psl/dist/psl.js b/deps/npm/node_modules/psl/dist/psl.js
deleted file mode 100644
index f4b9b8925bcf3a..00000000000000
--- a/deps/npm/node_modules/psl/dist/psl.js
+++ /dev/null
@@ -1,9645 +0,0 @@
-(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.psl = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i= punySuffix.length) {
- // return memo;
- // }
- //}
- return rule;
- }, null);
-};
-
-
-//
-// Error codes and messages.
-//
-exports.errorCodes = {
- DOMAIN_TOO_SHORT: 'Domain name too short.',
- DOMAIN_TOO_LONG: 'Domain name too long. It should be no more than 255 chars.',
- LABEL_STARTS_WITH_DASH: 'Domain name label can not start with a dash.',
- LABEL_ENDS_WITH_DASH: 'Domain name label can not end with a dash.',
- LABEL_TOO_LONG: 'Domain name label should be at most 63 chars long.',
- LABEL_TOO_SHORT: 'Domain name label should be at least 1 character long.',
- LABEL_INVALID_CHARS: 'Domain name label can only contain alphanumeric characters or dashes.'
-};
-
-
-//
-// Validate domain name and throw if not valid.
-//
-// From wikipedia:
-//
-// Hostnames are composed of series of labels concatenated with dots, as are all
-// domain names. Each label must be between 1 and 63 characters long, and the
-// entire hostname (including the delimiting dots) has a maximum of 255 chars.
-//
-// Allowed chars:
-//
-// * `a-z`
-// * `0-9`
-// * `-` but not as a starting or ending character
-// * `.` as a separator for the textual portions of a domain name
-//
-// * http://en.wikipedia.org/wiki/Domain_name
-// * http://en.wikipedia.org/wiki/Hostname
-//
-internals.validate = function (input) {
-
- // Before we can validate we need to take care of IDNs with unicode chars.
- var ascii = Punycode.toASCII(input);
-
- if (ascii.length < 1) {
- return 'DOMAIN_TOO_SHORT';
- }
- if (ascii.length > 255) {
- return 'DOMAIN_TOO_LONG';
- }
-
- // Check each part's length and allowed chars.
- var labels = ascii.split('.');
- var label;
-
- for (var i = 0; i < labels.length; ++i) {
- label = labels[i];
- if (!label.length) {
- return 'LABEL_TOO_SHORT';
- }
- if (label.length > 63) {
- return 'LABEL_TOO_LONG';
- }
- if (label.charAt(0) === '-') {
- return 'LABEL_STARTS_WITH_DASH';
- }
- if (label.charAt(label.length - 1) === '-') {
- return 'LABEL_ENDS_WITH_DASH';
- }
- if (!/^[a-z0-9\-]+$/.test(label)) {
- return 'LABEL_INVALID_CHARS';
- }
- }
-};
-
-
-//
-// Public API
-//
-
-
-//
-// Parse domain.
-//
-exports.parse = function (input) {
-
- if (typeof input !== 'string') {
- throw new TypeError('Domain name must be a string.');
- }
-
- // Force domain to lowercase.
- var domain = input.slice(0).toLowerCase();
-
- // Handle FQDN.
- // TODO: Simply remove trailing dot?
- if (domain.charAt(domain.length - 1) === '.') {
- domain = domain.slice(0, domain.length - 1);
- }
-
- // Validate and sanitise input.
- var error = internals.validate(domain);
- if (error) {
- return {
- input: input,
- error: {
- message: exports.errorCodes[error],
- code: error
- }
- };
- }
-
- var parsed = {
- input: input,
- tld: null,
- sld: null,
- domain: null,
- subdomain: null,
- listed: false
- };
-
- var domainParts = domain.split('.');
-
- // Non-Internet TLD
- if (domainParts[domainParts.length - 1] === 'local') {
- return parsed;
- }
-
- var handlePunycode = function () {
-
- if (!/xn--/.test(domain)) {
- return parsed;
- }
- if (parsed.domain) {
- parsed.domain = Punycode.toASCII(parsed.domain);
- }
- if (parsed.subdomain) {
- parsed.subdomain = Punycode.toASCII(parsed.subdomain);
- }
- return parsed;
- };
-
- var rule = internals.findRule(domain);
-
- // Unlisted tld.
- if (!rule) {
- if (domainParts.length < 2) {
- return parsed;
- }
- parsed.tld = domainParts.pop();
- parsed.sld = domainParts.pop();
- parsed.domain = [parsed.sld, parsed.tld].join('.');
- if (domainParts.length) {
- parsed.subdomain = domainParts.pop();
- }
- return handlePunycode();
- }
-
- // At this point we know the public suffix is listed.
- parsed.listed = true;
-
- var tldParts = rule.suffix.split('.');
- var privateParts = domainParts.slice(0, domainParts.length - tldParts.length);
-
- if (rule.exception) {
- privateParts.push(tldParts.shift());
- }
-
- parsed.tld = tldParts.join('.');
-
- if (!privateParts.length) {
- return handlePunycode();
- }
-
- if (rule.wildcard) {
- tldParts.unshift(privateParts.pop());
- parsed.tld = tldParts.join('.');
- }
-
- if (!privateParts.length) {
- return handlePunycode();
- }
-
- parsed.sld = privateParts.pop();
- parsed.domain = [parsed.sld, parsed.tld].join('.');
-
- if (privateParts.length) {
- parsed.subdomain = privateParts.join('.');
- }
-
- return handlePunycode();
-};
-
-
-//
-// Get domain.
-//
-exports.get = function (domain) {
-
- if (!domain) {
- return null;
- }
- return exports.parse(domain).domain || null;
-};
-
-
-//
-// Check whether domain belongs to a known public suffix.
-//
-exports.isValid = function (domain) {
-
- var parsed = exports.parse(domain);
- return Boolean(parsed.domain && parsed.listed);
-};
-
-},{"./data/rules.json":1,"punycode":3}],3:[function(require,module,exports){
-(function (global){
-/*! https://mths.be/punycode v1.4.1 by @mathias */
-;(function(root) {
-
- /** Detect free variables */
- var freeExports = typeof exports == 'object' && exports &&
- !exports.nodeType && exports;
- var freeModule = typeof module == 'object' && module &&
- !module.nodeType && module;
- var freeGlobal = typeof global == 'object' && global;
- if (
- freeGlobal.global === freeGlobal ||
- freeGlobal.window === freeGlobal ||
- freeGlobal.self === freeGlobal
- ) {
- root = freeGlobal;
- }
-
- /**
- * The `punycode` object.
- * @name punycode
- * @type Object
- */
- var punycode,
-
- /** Highest positive signed 32-bit float value */
- maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1
-
- /** Bootstring parameters */
- base = 36,
- tMin = 1,
- tMax = 26,
- skew = 38,
- damp = 700,
- initialBias = 72,
- initialN = 128, // 0x80
- delimiter = '-', // '\x2D'
-
- /** Regular expressions */
- regexPunycode = /^xn--/,
- regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars
- regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators
-
- /** Error messages */
- errors = {
- 'overflow': 'Overflow: input needs wider integers to process',
- 'not-basic': 'Illegal input >= 0x80 (not a basic code point)',
- 'invalid-input': 'Invalid input'
- },
-
- /** Convenience shortcuts */
- baseMinusTMin = base - tMin,
- floor = Math.floor,
- stringFromCharCode = String.fromCharCode,
-
- /** Temporary variable */
- key;
-
- /*--------------------------------------------------------------------------*/
-
- /**
- * A generic error utility function.
- * @private
- * @param {String} type The error type.
- * @returns {Error} Throws a `RangeError` with the applicable error message.
- */
- function error(type) {
- throw new RangeError(errors[type]);
- }
-
- /**
- * A generic `Array#map` utility function.
- * @private
- * @param {Array} array The array to iterate over.
- * @param {Function} callback The function that gets called for every array
- * item.
- * @returns {Array} A new array of values returned by the callback function.
- */
- function map(array, fn) {
- var length = array.length;
- var result = [];
- while (length--) {
- result[length] = fn(array[length]);
- }
- return result;
- }
-
- /**
- * A simple `Array#map`-like wrapper to work with domain name strings or email
- * addresses.
- * @private
- * @param {String} domain The domain name or email address.
- * @param {Function} callback The function that gets called for every
- * character.
- * @returns {Array} A new string of characters returned by the callback
- * function.
- */
- function mapDomain(string, fn) {
- var parts = string.split('@');
- var result = '';
- if (parts.length > 1) {
- // In email addresses, only the domain name should be punycoded. Leave
- // the local part (i.e. everything up to `@`) intact.
- result = parts[0] + '@';
- string = parts[1];
- }
- // Avoid `split(regex)` for IE8 compatibility. See #17.
- string = string.replace(regexSeparators, '\x2E');
- var labels = string.split('.');
- var encoded = map(labels, fn).join('.');
- return result + encoded;
- }
-
- /**
- * Creates an array containing the numeric code points of each Unicode
- * character in the string. While JavaScript uses UCS-2 internally,
- * this function will convert a pair of surrogate halves (each of which
- * UCS-2 exposes as separate characters) into a single code point,
- * matching UTF-16.
- * @see `punycode.ucs2.encode`
- * @see
- * @memberOf punycode.ucs2
- * @name decode
- * @param {String} string The Unicode input string (UCS-2).
- * @returns {Array} The new array of code points.
- */
- function ucs2decode(string) {
- var output = [],
- counter = 0,
- length = string.length,
- value,
- extra;
- while (counter < length) {
- value = string.charCodeAt(counter++);
- if (value >= 0xD800 && value <= 0xDBFF && counter < length) {
- // high surrogate, and there is a next character
- extra = string.charCodeAt(counter++);
- if ((extra & 0xFC00) == 0xDC00) { // low surrogate
- output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
- } else {
- // unmatched surrogate; only append this code unit, in case the next
- // code unit is the high surrogate of a surrogate pair
- output.push(value);
- counter--;
- }
- } else {
- output.push(value);
- }
- }
- return output;
- }
-
- /**
- * Creates a string based on an array of numeric code points.
- * @see `punycode.ucs2.decode`
- * @memberOf punycode.ucs2
- * @name encode
- * @param {Array} codePoints The array of numeric code points.
- * @returns {String} The new Unicode string (UCS-2).
- */
- function ucs2encode(array) {
- return map(array, function(value) {
- var output = '';
- if (value > 0xFFFF) {
- value -= 0x10000;
- output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);
- value = 0xDC00 | value & 0x3FF;
- }
- output += stringFromCharCode(value);
- return output;
- }).join('');
- }
-
- /**
- * Converts a basic code point into a digit/integer.
- * @see `digitToBasic()`
- * @private
- * @param {Number} codePoint The basic numeric code point value.
- * @returns {Number} The numeric value of a basic code point (for use in
- * representing integers) in the range `0` to `base - 1`, or `base` if
- * the code point does not represent a value.
- */
- function basicToDigit(codePoint) {
- if (codePoint - 48 < 10) {
- return codePoint - 22;
- }
- if (codePoint - 65 < 26) {
- return codePoint - 65;
- }
- if (codePoint - 97 < 26) {
- return codePoint - 97;
- }
- return base;
- }
-
- /**
- * Converts a digit/integer into a basic code point.
- * @see `basicToDigit()`
- * @private
- * @param {Number} digit The numeric value of a basic code point.
- * @returns {Number} The basic code point whose value (when used for
- * representing integers) is `digit`, which needs to be in the range
- * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is
- * used; else, the lowercase form is used. The behavior is undefined
- * if `flag` is non-zero and `digit` has no uppercase form.
- */
- function digitToBasic(digit, flag) {
- // 0..25 map to ASCII a..z or A..Z
- // 26..35 map to ASCII 0..9
- return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);
- }
-
- /**
- * Bias adaptation function as per section 3.4 of RFC 3492.
- * https://tools.ietf.org/html/rfc3492#section-3.4
- * @private
- */
- function adapt(delta, numPoints, firstTime) {
- var k = 0;
- delta = firstTime ? floor(delta / damp) : delta >> 1;
- delta += floor(delta / numPoints);
- for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {
- delta = floor(delta / baseMinusTMin);
- }
- return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));
- }
-
- /**
- * Converts a Punycode string of ASCII-only symbols to a string of Unicode
- * symbols.
- * @memberOf punycode
- * @param {String} input The Punycode string of ASCII-only symbols.
- * @returns {String} The resulting string of Unicode symbols.
- */
- function decode(input) {
- // Don't use UCS-2
- var output = [],
- inputLength = input.length,
- out,
- i = 0,
- n = initialN,
- bias = initialBias,
- basic,
- j,
- index,
- oldi,
- w,
- k,
- digit,
- t,
- /** Cached calculation results */
- baseMinusT;
-
- // Handle the basic code points: let `basic` be the number of input code
- // points before the last delimiter, or `0` if there is none, then copy
- // the first basic code points to the output.
-
- basic = input.lastIndexOf(delimiter);
- if (basic < 0) {
- basic = 0;
- }
-
- for (j = 0; j < basic; ++j) {
- // if it's not a basic code point
- if (input.charCodeAt(j) >= 0x80) {
- error('not-basic');
- }
- output.push(input.charCodeAt(j));
- }
-
- // Main decoding loop: start just after the last delimiter if any basic code
- // points were copied; start at the beginning otherwise.
-
- for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {
-
- // `index` is the index of the next character to be consumed.
- // Decode a generalized variable-length integer into `delta`,
- // which gets added to `i`. The overflow checking is easier
- // if we increase `i` as we go, then subtract off its starting
- // value at the end to obtain `delta`.
- for (oldi = i, w = 1, k = base; /* no condition */; k += base) {
-
- if (index >= inputLength) {
- error('invalid-input');
- }
-
- digit = basicToDigit(input.charCodeAt(index++));
-
- if (digit >= base || digit > floor((maxInt - i) / w)) {
- error('overflow');
- }
-
- i += digit * w;
- t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
-
- if (digit < t) {
- break;
- }
-
- baseMinusT = base - t;
- if (w > floor(maxInt / baseMinusT)) {
- error('overflow');
- }
-
- w *= baseMinusT;
-
- }
-
- out = output.length + 1;
- bias = adapt(i - oldi, out, oldi == 0);
-
- // `i` was supposed to wrap around from `out` to `0`,
- // incrementing `n` each time, so we'll fix that now:
- if (floor(i / out) > maxInt - n) {
- error('overflow');
- }
-
- n += floor(i / out);
- i %= out;
-
- // Insert `n` at position `i` of the output
- output.splice(i++, 0, n);
-
- }
-
- return ucs2encode(output);
- }
-
- /**
- * Converts a string of Unicode symbols (e.g. a domain name label) to a
- * Punycode string of ASCII-only symbols.
- * @memberOf punycode
- * @param {String} input The string of Unicode symbols.
- * @returns {String} The resulting Punycode string of ASCII-only symbols.
- */
- function encode(input) {
- var n,
- delta,
- handledCPCount,
- basicLength,
- bias,
- j,
- m,
- q,
- k,
- t,
- currentValue,
- output = [],
- /** `inputLength` will hold the number of code points in `input`. */
- inputLength,
- /** Cached calculation results */
- handledCPCountPlusOne,
- baseMinusT,
- qMinusT;
-
- // Convert the input in UCS-2 to Unicode
- input = ucs2decode(input);
-
- // Cache the length
- inputLength = input.length;
-
- // Initialize the state
- n = initialN;
- delta = 0;
- bias = initialBias;
-
- // Handle the basic code points
- for (j = 0; j < inputLength; ++j) {
- currentValue = input[j];
- if (currentValue < 0x80) {
- output.push(stringFromCharCode(currentValue));
- }
- }
-
- handledCPCount = basicLength = output.length;
-
- // `handledCPCount` is the number of code points that have been handled;
- // `basicLength` is the number of basic code points.
-
- // Finish the basic string - if it is not empty - with a delimiter
- if (basicLength) {
- output.push(delimiter);
- }
-
- // Main encoding loop:
- while (handledCPCount < inputLength) {
-
- // All non-basic code points < n have been handled already. Find the next
- // larger one:
- for (m = maxInt, j = 0; j < inputLength; ++j) {
- currentValue = input[j];
- if (currentValue >= n && currentValue < m) {
- m = currentValue;
- }
- }
-
- // Increase `delta` enough to advance the decoder's state to ,
- // but guard against overflow
- handledCPCountPlusOne = handledCPCount + 1;
- if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {
- error('overflow');
- }
-
- delta += (m - n) * handledCPCountPlusOne;
- n = m;
-
- for (j = 0; j < inputLength; ++j) {
- currentValue = input[j];
-
- if (currentValue < n && ++delta > maxInt) {
- error('overflow');
- }
-
- if (currentValue == n) {
- // Represent delta as a generalized variable-length integer
- for (q = delta, k = base; /* no condition */; k += base) {
- t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
- if (q < t) {
- break;
- }
- qMinusT = q - t;
- baseMinusT = base - t;
- output.push(
- stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))
- );
- q = floor(qMinusT / baseMinusT);
- }
-
- output.push(stringFromCharCode(digitToBasic(q, 0)));
- bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);
- delta = 0;
- ++handledCPCount;
- }
- }
-
- ++delta;
- ++n;
-
- }
- return output.join('');
- }
-
- /**
- * Converts a Punycode string representing a domain name or an email address
- * to Unicode. Only the Punycoded parts of the input will be converted, i.e.
- * it doesn't matter if you call it on a string that has already been
- * converted to Unicode.
- * @memberOf punycode
- * @param {String} input The Punycoded domain name or email address to
- * convert to Unicode.
- * @returns {String} The Unicode representation of the given Punycode
- * string.
- */
- function toUnicode(input) {
- return mapDomain(input, function(string) {
- return regexPunycode.test(string)
- ? decode(string.slice(4).toLowerCase())
- : string;
- });
- }
-
- /**
- * Converts a Unicode string representing a domain name or an email address to
- * Punycode. Only the non-ASCII parts of the domain name will be converted,
- * i.e. it doesn't matter if you call it with a domain that's already in
- * ASCII.
- * @memberOf punycode
- * @param {String} input The domain name or email address to convert, as a
- * Unicode string.
- * @returns {String} The Punycode representation of the given domain name or
- * email address.
- */
- function toASCII(input) {
- return mapDomain(input, function(string) {
- return regexNonASCII.test(string)
- ? 'xn--' + encode(string)
- : string;
- });
- }
-
- /*--------------------------------------------------------------------------*/
-
- /** Define the public API */
- punycode = {
- /**
- * A string representing the current Punycode.js version number.
- * @memberOf punycode
- * @type String
- */
- 'version': '1.4.1',
- /**
- * An object of methods to convert from JavaScript's internal character
- * representation (UCS-2) to Unicode code points, and back.
- * @see
- * @memberOf punycode
- * @type Object
- */
- 'ucs2': {
- 'decode': ucs2decode,
- 'encode': ucs2encode
- },
- 'decode': decode,
- 'encode': encode,
- 'toASCII': toASCII,
- 'toUnicode': toUnicode
- };
-
- /** Expose `punycode` */
- // Some AMD build optimizers, like r.js, check for specific condition patterns
- // like the following:
- if (
- typeof define == 'function' &&
- typeof define.amd == 'object' &&
- define.amd
- ) {
- define('punycode', function() {
- return punycode;
- });
- } else if (freeExports && freeModule) {
- if (module.exports == freeExports) {
- // in Node.js, io.js, or RingoJS v0.8.0+
- freeModule.exports = punycode;
- } else {
- // in Narwhal or RingoJS v0.7.0-
- for (key in punycode) {
- punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);
- }
- }
- } else {
- // in Rhino or a web browser
- root.punycode = punycode;
- }
-
-}(this));
-
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{}]},{},[2])(2)
-});
diff --git a/deps/npm/node_modules/psl/dist/psl.min.js b/deps/npm/node_modules/psl/dist/psl.min.js
deleted file mode 100644
index d5c787e4862e64..00000000000000
--- a/deps/npm/node_modules/psl/dist/psl.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).psl=a()}}(function(){return function s(m,t,u){function r(o,a){if(!t[o]){if(!m[o]){var i="function"==typeof require&&require;if(!a&&i)return i(o,!0);if(p)return p(o,!0);var e=new Error("Cannot find module '"+o+"'");throw e.code="MODULE_NOT_FOUND",e}var n=t[o]={exports:{}};m[o][0].call(n.exports,function(a){return r(m[o][1][a]||a)},n,n.exports,s,m,t,u)}return t[o].exports}for(var p="function"==typeof require&&require,a=0;a= 0x80 (not a basic code point)","invalid-input":"Invalid input"},c=b-y,x=Math.floor,q=String.fromCharCode;function A(a){throw new RangeError(k[a])}function l(a,o){for(var i=a.length,e=[];i--;)e[i]=o(a[i]);return e}function g(a,o){var i=a.split("@"),e="";return 1>>10&1023|55296),a=56320|1023&a),o+=q(a)}).join("")}function L(a,o){return a+22+75*(a<26)-((0!=o)<<5)}function I(a,o,i){var e=0;for(a=i?x(a/t):a>>1,a+=x(a/o);c*f>>1x((d-g)/m))&&A("overflow"),g+=u*m,!(u<(r=t<=j?y:j+f<=t?f:t-j));t+=b)m>x(d/(p=b-r))&&A("overflow"),m*=p;j=I(g-s,o=c.length+1,0==s),x(g/o)>d-h&&A("overflow"),h+=x(g/o),g%=o,c.splice(g++,0,h)}return _(c)}function j(a){var o,i,e,n,s,m,t,u,r,p,k,c,l,g,h,j=[];for(c=(a=O(a)).length,o=w,s=v,m=i=0;mx((d-i)/(l=e+1))&&A("overflow"),i+=(t-o)*l,o=t,m=0;md&&A("overflow"),k==o){for(u=i,r=b;!(u<(p=r<=s?y:s+f<=r?f:r-s));r+=b)h=u-p,g=b-p,j.push(q(L(p+h%g,0))),u=x(h/g);j.push(q(L(u,0))),s=I(i,l,e==n),i=0,++e}++i,++o}return j.join("")}if(n={version:"1.4.1",ucs2:{decode:O,encode:_},decode:h,encode:j,toASCII:function(a){return g(a,function(a){return r.test(a)?"xn--"+j(a):a})},toUnicode:function(a){return g(a,function(a){return u.test(a)?h(a.slice(4).toLowerCase()):a})}},0,o&&i)if(T.exports==o)i.exports=n;else for(s in n)n.hasOwnProperty(s)&&(o[s]=n[s]);else a.punycode=n}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[2])(2)});
diff --git a/deps/npm/node_modules/psl/index.js b/deps/npm/node_modules/psl/index.js
deleted file mode 100644
index da7bc12136cbbe..00000000000000
--- a/deps/npm/node_modules/psl/index.js
+++ /dev/null
@@ -1,269 +0,0 @@
-/*eslint no-var:0, prefer-arrow-callback: 0, object-shorthand: 0 */
-'use strict';
-
-
-var Punycode = require('punycode');
-
-
-var internals = {};
-
-
-//
-// Read rules from file.
-//
-internals.rules = require('./data/rules.json').map(function (rule) {
-
- return {
- rule: rule,
- suffix: rule.replace(/^(\*\.|\!)/, ''),
- punySuffix: -1,
- wildcard: rule.charAt(0) === '*',
- exception: rule.charAt(0) === '!'
- };
-});
-
-
-//
-// Check is given string ends with `suffix`.
-//
-internals.endsWith = function (str, suffix) {
-
- return str.indexOf(suffix, str.length - suffix.length) !== -1;
-};
-
-
-//
-// Find rule for a given domain.
-//
-internals.findRule = function (domain) {
-
- var punyDomain = Punycode.toASCII(domain);
- return internals.rules.reduce(function (memo, rule) {
-
- if (rule.punySuffix === -1){
- rule.punySuffix = Punycode.toASCII(rule.suffix);
- }
- if (!internals.endsWith(punyDomain, '.' + rule.punySuffix) && punyDomain !== rule.punySuffix) {
- return memo;
- }
- // This has been commented out as it never seems to run. This is because
- // sub tlds always appear after their parents and we never find a shorter
- // match.
- //if (memo) {
- // var memoSuffix = Punycode.toASCII(memo.suffix);
- // if (memoSuffix.length >= punySuffix.length) {
- // return memo;
- // }
- //}
- return rule;
- }, null);
-};
-
-
-//
-// Error codes and messages.
-//
-exports.errorCodes = {
- DOMAIN_TOO_SHORT: 'Domain name too short.',
- DOMAIN_TOO_LONG: 'Domain name too long. It should be no more than 255 chars.',
- LABEL_STARTS_WITH_DASH: 'Domain name label can not start with a dash.',
- LABEL_ENDS_WITH_DASH: 'Domain name label can not end with a dash.',
- LABEL_TOO_LONG: 'Domain name label should be at most 63 chars long.',
- LABEL_TOO_SHORT: 'Domain name label should be at least 1 character long.',
- LABEL_INVALID_CHARS: 'Domain name label can only contain alphanumeric characters or dashes.'
-};
-
-
-//
-// Validate domain name and throw if not valid.
-//
-// From wikipedia:
-//
-// Hostnames are composed of series of labels concatenated with dots, as are all
-// domain names. Each label must be between 1 and 63 characters long, and the
-// entire hostname (including the delimiting dots) has a maximum of 255 chars.
-//
-// Allowed chars:
-//
-// * `a-z`
-// * `0-9`
-// * `-` but not as a starting or ending character
-// * `.` as a separator for the textual portions of a domain name
-//
-// * http://en.wikipedia.org/wiki/Domain_name
-// * http://en.wikipedia.org/wiki/Hostname
-//
-internals.validate = function (input) {
-
- // Before we can validate we need to take care of IDNs with unicode chars.
- var ascii = Punycode.toASCII(input);
-
- if (ascii.length < 1) {
- return 'DOMAIN_TOO_SHORT';
- }
- if (ascii.length > 255) {
- return 'DOMAIN_TOO_LONG';
- }
-
- // Check each part's length and allowed chars.
- var labels = ascii.split('.');
- var label;
-
- for (var i = 0; i < labels.length; ++i) {
- label = labels[i];
- if (!label.length) {
- return 'LABEL_TOO_SHORT';
- }
- if (label.length > 63) {
- return 'LABEL_TOO_LONG';
- }
- if (label.charAt(0) === '-') {
- return 'LABEL_STARTS_WITH_DASH';
- }
- if (label.charAt(label.length - 1) === '-') {
- return 'LABEL_ENDS_WITH_DASH';
- }
- if (!/^[a-z0-9\-]+$/.test(label)) {
- return 'LABEL_INVALID_CHARS';
- }
- }
-};
-
-
-//
-// Public API
-//
-
-
-//
-// Parse domain.
-//
-exports.parse = function (input) {
-
- if (typeof input !== 'string') {
- throw new TypeError('Domain name must be a string.');
- }
-
- // Force domain to lowercase.
- var domain = input.slice(0).toLowerCase();
-
- // Handle FQDN.
- // TODO: Simply remove trailing dot?
- if (domain.charAt(domain.length - 1) === '.') {
- domain = domain.slice(0, domain.length - 1);
- }
-
- // Validate and sanitise input.
- var error = internals.validate(domain);
- if (error) {
- return {
- input: input,
- error: {
- message: exports.errorCodes[error],
- code: error
- }
- };
- }
-
- var parsed = {
- input: input,
- tld: null,
- sld: null,
- domain: null,
- subdomain: null,
- listed: false
- };
-
- var domainParts = domain.split('.');
-
- // Non-Internet TLD
- if (domainParts[domainParts.length - 1] === 'local') {
- return parsed;
- }
-
- var handlePunycode = function () {
-
- if (!/xn--/.test(domain)) {
- return parsed;
- }
- if (parsed.domain) {
- parsed.domain = Punycode.toASCII(parsed.domain);
- }
- if (parsed.subdomain) {
- parsed.subdomain = Punycode.toASCII(parsed.subdomain);
- }
- return parsed;
- };
-
- var rule = internals.findRule(domain);
-
- // Unlisted tld.
- if (!rule) {
- if (domainParts.length < 2) {
- return parsed;
- }
- parsed.tld = domainParts.pop();
- parsed.sld = domainParts.pop();
- parsed.domain = [parsed.sld, parsed.tld].join('.');
- if (domainParts.length) {
- parsed.subdomain = domainParts.pop();
- }
- return handlePunycode();
- }
-
- // At this point we know the public suffix is listed.
- parsed.listed = true;
-
- var tldParts = rule.suffix.split('.');
- var privateParts = domainParts.slice(0, domainParts.length - tldParts.length);
-
- if (rule.exception) {
- privateParts.push(tldParts.shift());
- }
-
- parsed.tld = tldParts.join('.');
-
- if (!privateParts.length) {
- return handlePunycode();
- }
-
- if (rule.wildcard) {
- tldParts.unshift(privateParts.pop());
- parsed.tld = tldParts.join('.');
- }
-
- if (!privateParts.length) {
- return handlePunycode();
- }
-
- parsed.sld = privateParts.pop();
- parsed.domain = [parsed.sld, parsed.tld].join('.');
-
- if (privateParts.length) {
- parsed.subdomain = privateParts.join('.');
- }
-
- return handlePunycode();
-};
-
-
-//
-// Get domain.
-//
-exports.get = function (domain) {
-
- if (!domain) {
- return null;
- }
- return exports.parse(domain).domain || null;
-};
-
-
-//
-// Check whether domain belongs to a known public suffix.
-//
-exports.isValid = function (domain) {
-
- var parsed = exports.parse(domain);
- return Boolean(parsed.domain && parsed.listed);
-};
diff --git a/deps/npm/node_modules/psl/package.json b/deps/npm/node_modules/psl/package.json
deleted file mode 100644
index ee2da19fa2d628..00000000000000
--- a/deps/npm/node_modules/psl/package.json
+++ /dev/null
@@ -1,44 +0,0 @@
-{
- "name": "psl",
- "version": "1.8.0",
- "description": "Domain name parser based on the Public Suffix List",
- "repository": {
- "type": "git",
- "url": "git@github.com:lupomontero/psl.git"
- },
- "main": "index.js",
- "scripts": {
- "pretest": "eslint .",
- "test": "mocha test && karma start ./karma.conf.js --single-run",
- "watch": "mocha test --watch",
- "prebuild": "./scripts/update-rules.js",
- "build": "browserify ./index.js --standalone=psl > ./dist/psl.js",
- "postbuild": "cat ./dist/psl.js | uglifyjs -c -m > ./dist/psl.min.js",
- "commit-and-pr": "commit-and-pr",
- "changelog": "git log $(git describe --tags --abbrev=0)..HEAD --oneline --format=\"%h %s (%an <%ae>)\""
- },
- "keywords": [
- "publicsuffix",
- "publicsuffixlist"
- ],
- "author": "Lupo Montero (https://lupomontero.com/)",
- "license": "MIT",
- "devDependencies": {
- "JSONStream": "^1.3.5",
- "browserify": "^16.5.0",
- "commit-and-pr": "^1.0.4",
- "eslint": "^6.8.0",
- "eslint-config-hapi": "^12.0.0",
- "eslint-plugin-hapi": "^4.1.0",
- "karma": "^4.4.1",
- "karma-browserify": "^7.0.0",
- "karma-mocha": "^1.3.0",
- "karma-mocha-reporter": "^2.2.5",
- "karma-phantomjs-launcher": "^1.0.4",
- "mocha": "^7.1.1",
- "phantomjs-prebuilt": "^2.1.16",
- "request": "^2.88.2",
- "uglify-js": "^3.8.0",
- "watchify": "^3.11.1"
- }
-}
diff --git a/deps/npm/node_modules/punycode/LICENSE-MIT.txt b/deps/npm/node_modules/punycode/LICENSE-MIT.txt
deleted file mode 100644
index a41e0a7ef970ec..00000000000000
--- a/deps/npm/node_modules/punycode/LICENSE-MIT.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-Copyright Mathias Bynens
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/deps/npm/node_modules/punycode/package.json b/deps/npm/node_modules/punycode/package.json
deleted file mode 100644
index 9202ccf8c0c8f7..00000000000000
--- a/deps/npm/node_modules/punycode/package.json
+++ /dev/null
@@ -1,58 +0,0 @@
-{
- "name": "punycode",
- "version": "2.1.1",
- "description": "A robust Punycode converter that fully complies to RFC 3492 and RFC 5891, and works on nearly all JavaScript platforms.",
- "homepage": "https://mths.be/punycode",
- "main": "punycode.js",
- "jsnext:main": "punycode.es6.js",
- "module": "punycode.es6.js",
- "engines": {
- "node": ">=6"
- },
- "keywords": [
- "punycode",
- "unicode",
- "idn",
- "idna",
- "dns",
- "url",
- "domain"
- ],
- "license": "MIT",
- "author": {
- "name": "Mathias Bynens",
- "url": "https://mathiasbynens.be/"
- },
- "contributors": [
- {
- "name": "Mathias Bynens",
- "url": "https://mathiasbynens.be/"
- }
- ],
- "repository": {
- "type": "git",
- "url": "https://github.com/bestiejs/punycode.js.git"
- },
- "bugs": "https://github.com/bestiejs/punycode.js/issues",
- "files": [
- "LICENSE-MIT.txt",
- "punycode.js",
- "punycode.es6.js"
- ],
- "scripts": {
- "test": "mocha tests",
- "prepublish": "node scripts/prepublish.js"
- },
- "devDependencies": {
- "codecov": "^1.0.1",
- "istanbul": "^0.4.1",
- "mocha": "^2.5.3"
- },
- "jspm": {
- "map": {
- "./punycode.js": {
- "node": "@node/punycode"
- }
- }
- }
-}
diff --git a/deps/npm/node_modules/punycode/punycode.es6.js b/deps/npm/node_modules/punycode/punycode.es6.js
deleted file mode 100644
index 4610bc9ebf2974..00000000000000
--- a/deps/npm/node_modules/punycode/punycode.es6.js
+++ /dev/null
@@ -1,441 +0,0 @@
-'use strict';
-
-/** Highest positive signed 32-bit float value */
-const maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1
-
-/** Bootstring parameters */
-const base = 36;
-const tMin = 1;
-const tMax = 26;
-const skew = 38;
-const damp = 700;
-const initialBias = 72;
-const initialN = 128; // 0x80
-const delimiter = '-'; // '\x2D'
-
-/** Regular expressions */
-const regexPunycode = /^xn--/;
-const regexNonASCII = /[^\0-\x7E]/; // non-ASCII chars
-const regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g; // RFC 3490 separators
-
-/** Error messages */
-const errors = {
- 'overflow': 'Overflow: input needs wider integers to process',
- 'not-basic': 'Illegal input >= 0x80 (not a basic code point)',
- 'invalid-input': 'Invalid input'
-};
-
-/** Convenience shortcuts */
-const baseMinusTMin = base - tMin;
-const floor = Math.floor;
-const stringFromCharCode = String.fromCharCode;
-
-/*--------------------------------------------------------------------------*/
-
-/**
- * A generic error utility function.
- * @private
- * @param {String} type The error type.
- * @returns {Error} Throws a `RangeError` with the applicable error message.
- */
-function error(type) {
- throw new RangeError(errors[type]);
-}
-
-/**
- * A generic `Array#map` utility function.
- * @private
- * @param {Array} array The array to iterate over.
- * @param {Function} callback The function that gets called for every array
- * item.
- * @returns {Array} A new array of values returned by the callback function.
- */
-function map(array, fn) {
- const result = [];
- let length = array.length;
- while (length--) {
- result[length] = fn(array[length]);
- }
- return result;
-}
-
-/**
- * A simple `Array#map`-like wrapper to work with domain name strings or email
- * addresses.
- * @private
- * @param {String} domain The domain name or email address.
- * @param {Function} callback The function that gets called for every
- * character.
- * @returns {Array} A new string of characters returned by the callback
- * function.
- */
-function mapDomain(string, fn) {
- const parts = string.split('@');
- let result = '';
- if (parts.length > 1) {
- // In email addresses, only the domain name should be punycoded. Leave
- // the local part (i.e. everything up to `@`) intact.
- result = parts[0] + '@';
- string = parts[1];
- }
- // Avoid `split(regex)` for IE8 compatibility. See #17.
- string = string.replace(regexSeparators, '\x2E');
- const labels = string.split('.');
- const encoded = map(labels, fn).join('.');
- return result + encoded;
-}
-
-/**
- * Creates an array containing the numeric code points of each Unicode
- * character in the string. While JavaScript uses UCS-2 internally,
- * this function will convert a pair of surrogate halves (each of which
- * UCS-2 exposes as separate characters) into a single code point,
- * matching UTF-16.
- * @see `punycode.ucs2.encode`
- * @see
- * @memberOf punycode.ucs2
- * @name decode
- * @param {String} string The Unicode input string (UCS-2).
- * @returns {Array} The new array of code points.
- */
-function ucs2decode(string) {
- const output = [];
- let counter = 0;
- const length = string.length;
- while (counter < length) {
- const value = string.charCodeAt(counter++);
- if (value >= 0xD800 && value <= 0xDBFF && counter < length) {
- // It's a high surrogate, and there is a next character.
- const extra = string.charCodeAt(counter++);
- if ((extra & 0xFC00) == 0xDC00) { // Low surrogate.
- output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
- } else {
- // It's an unmatched surrogate; only append this code unit, in case the
- // next code unit is the high surrogate of a surrogate pair.
- output.push(value);
- counter--;
- }
- } else {
- output.push(value);
- }
- }
- return output;
-}
-
-/**
- * Creates a string based on an array of numeric code points.
- * @see `punycode.ucs2.decode`
- * @memberOf punycode.ucs2
- * @name encode
- * @param {Array} codePoints The array of numeric code points.
- * @returns {String} The new Unicode string (UCS-2).
- */
-const ucs2encode = array => String.fromCodePoint(...array);
-
-/**
- * Converts a basic code point into a digit/integer.
- * @see `digitToBasic()`
- * @private
- * @param {Number} codePoint The basic numeric code point value.
- * @returns {Number} The numeric value of a basic code point (for use in
- * representing integers) in the range `0` to `base - 1`, or `base` if
- * the code point does not represent a value.
- */
-const basicToDigit = function(codePoint) {
- if (codePoint - 0x30 < 0x0A) {
- return codePoint - 0x16;
- }
- if (codePoint - 0x41 < 0x1A) {
- return codePoint - 0x41;
- }
- if (codePoint - 0x61 < 0x1A) {
- return codePoint - 0x61;
- }
- return base;
-};
-
-/**
- * Converts a digit/integer into a basic code point.
- * @see `basicToDigit()`
- * @private
- * @param {Number} digit The numeric value of a basic code point.
- * @returns {Number} The basic code point whose value (when used for
- * representing integers) is `digit`, which needs to be in the range
- * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is
- * used; else, the lowercase form is used. The behavior is undefined
- * if `flag` is non-zero and `digit` has no uppercase form.
- */
-const digitToBasic = function(digit, flag) {
- // 0..25 map to ASCII a..z or A..Z
- // 26..35 map to ASCII 0..9
- return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);
-};
-
-/**
- * Bias adaptation function as per section 3.4 of RFC 3492.
- * https://tools.ietf.org/html/rfc3492#section-3.4
- * @private
- */
-const adapt = function(delta, numPoints, firstTime) {
- let k = 0;
- delta = firstTime ? floor(delta / damp) : delta >> 1;
- delta += floor(delta / numPoints);
- for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {
- delta = floor(delta / baseMinusTMin);
- }
- return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));
-};
-
-/**
- * Converts a Punycode string of ASCII-only symbols to a string of Unicode
- * symbols.
- * @memberOf punycode
- * @param {String} input The Punycode string of ASCII-only symbols.
- * @returns {String} The resulting string of Unicode symbols.
- */
-const decode = function(input) {
- // Don't use UCS-2.
- const output = [];
- const inputLength = input.length;
- let i = 0;
- let n = initialN;
- let bias = initialBias;
-
- // Handle the basic code points: let `basic` be the number of input code
- // points before the last delimiter, or `0` if there is none, then copy
- // the first basic code points to the output.
-
- let basic = input.lastIndexOf(delimiter);
- if (basic < 0) {
- basic = 0;
- }
-
- for (let j = 0; j < basic; ++j) {
- // if it's not a basic code point
- if (input.charCodeAt(j) >= 0x80) {
- error('not-basic');
- }
- output.push(input.charCodeAt(j));
- }
-
- // Main decoding loop: start just after the last delimiter if any basic code
- // points were copied; start at the beginning otherwise.
-
- for (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {
-
- // `index` is the index of the next character to be consumed.
- // Decode a generalized variable-length integer into `delta`,
- // which gets added to `i`. The overflow checking is easier
- // if we increase `i` as we go, then subtract off its starting
- // value at the end to obtain `delta`.
- let oldi = i;
- for (let w = 1, k = base; /* no condition */; k += base) {
-
- if (index >= inputLength) {
- error('invalid-input');
- }
-
- const digit = basicToDigit(input.charCodeAt(index++));
-
- if (digit >= base || digit > floor((maxInt - i) / w)) {
- error('overflow');
- }
-
- i += digit * w;
- const t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
-
- if (digit < t) {
- break;
- }
-
- const baseMinusT = base - t;
- if (w > floor(maxInt / baseMinusT)) {
- error('overflow');
- }
-
- w *= baseMinusT;
-
- }
-
- const out = output.length + 1;
- bias = adapt(i - oldi, out, oldi == 0);
-
- // `i` was supposed to wrap around from `out` to `0`,
- // incrementing `n` each time, so we'll fix that now:
- if (floor(i / out) > maxInt - n) {
- error('overflow');
- }
-
- n += floor(i / out);
- i %= out;
-
- // Insert `n` at position `i` of the output.
- output.splice(i++, 0, n);
-
- }
-
- return String.fromCodePoint(...output);
-};
-
-/**
- * Converts a string of Unicode symbols (e.g. a domain name label) to a
- * Punycode string of ASCII-only symbols.
- * @memberOf punycode
- * @param {String} input The string of Unicode symbols.
- * @returns {String} The resulting Punycode string of ASCII-only symbols.
- */
-const encode = function(input) {
- const output = [];
-
- // Convert the input in UCS-2 to an array of Unicode code points.
- input = ucs2decode(input);
-
- // Cache the length.
- let inputLength = input.length;
-
- // Initialize the state.
- let n = initialN;
- let delta = 0;
- let bias = initialBias;
-
- // Handle the basic code points.
- for (const currentValue of input) {
- if (currentValue < 0x80) {
- output.push(stringFromCharCode(currentValue));
- }
- }
-
- let basicLength = output.length;
- let handledCPCount = basicLength;
-
- // `handledCPCount` is the number of code points that have been handled;
- // `basicLength` is the number of basic code points.
-
- // Finish the basic string with a delimiter unless it's empty.
- if (basicLength) {
- output.push(delimiter);
- }
-
- // Main encoding loop:
- while (handledCPCount < inputLength) {
-
- // All non-basic code points < n have been handled already. Find the next
- // larger one:
- let m = maxInt;
- for (const currentValue of input) {
- if (currentValue >= n && currentValue < m) {
- m = currentValue;
- }
- }
-
- // Increase `delta` enough to advance the decoder's state to ,
- // but guard against overflow.
- const handledCPCountPlusOne = handledCPCount + 1;
- if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {
- error('overflow');
- }
-
- delta += (m - n) * handledCPCountPlusOne;
- n = m;
-
- for (const currentValue of input) {
- if (currentValue < n && ++delta > maxInt) {
- error('overflow');
- }
- if (currentValue == n) {
- // Represent delta as a generalized variable-length integer.
- let q = delta;
- for (let k = base; /* no condition */; k += base) {
- const t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
- if (q < t) {
- break;
- }
- const qMinusT = q - t;
- const baseMinusT = base - t;
- output.push(
- stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))
- );
- q = floor(qMinusT / baseMinusT);
- }
-
- output.push(stringFromCharCode(digitToBasic(q, 0)));
- bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);
- delta = 0;
- ++handledCPCount;
- }
- }
-
- ++delta;
- ++n;
-
- }
- return output.join('');
-};
-
-/**
- * Converts a Punycode string representing a domain name or an email address
- * to Unicode. Only the Punycoded parts of the input will be converted, i.e.
- * it doesn't matter if you call it on a string that has already been
- * converted to Unicode.
- * @memberOf punycode
- * @param {String} input The Punycoded domain name or email address to
- * convert to Unicode.
- * @returns {String} The Unicode representation of the given Punycode
- * string.
- */
-const toUnicode = function(input) {
- return mapDomain(input, function(string) {
- return regexPunycode.test(string)
- ? decode(string.slice(4).toLowerCase())
- : string;
- });
-};
-
-/**
- * Converts a Unicode string representing a domain name or an email address to
- * Punycode. Only the non-ASCII parts of the domain name will be converted,
- * i.e. it doesn't matter if you call it with a domain that's already in
- * ASCII.
- * @memberOf punycode
- * @param {String} input The domain name or email address to convert, as a
- * Unicode string.
- * @returns {String} The Punycode representation of the given domain name or
- * email address.
- */
-const toASCII = function(input) {
- return mapDomain(input, function(string) {
- return regexNonASCII.test(string)
- ? 'xn--' + encode(string)
- : string;
- });
-};
-
-/*--------------------------------------------------------------------------*/
-
-/** Define the public API */
-const punycode = {
- /**
- * A string representing the current Punycode.js version number.
- * @memberOf punycode
- * @type String
- */
- 'version': '2.1.0',
- /**
- * An object of methods to convert from JavaScript's internal character
- * representation (UCS-2) to Unicode code points, and back.
- * @see
- * @memberOf punycode
- * @type Object
- */
- 'ucs2': {
- 'decode': ucs2decode,
- 'encode': ucs2encode
- },
- 'decode': decode,
- 'encode': encode,
- 'toASCII': toASCII,
- 'toUnicode': toUnicode
-};
-
-export { ucs2decode, ucs2encode, decode, encode, toASCII, toUnicode };
-export default punycode;
diff --git a/deps/npm/node_modules/punycode/punycode.js b/deps/npm/node_modules/punycode/punycode.js
deleted file mode 100644
index ea61fd0d39a39d..00000000000000
--- a/deps/npm/node_modules/punycode/punycode.js
+++ /dev/null
@@ -1,440 +0,0 @@
-'use strict';
-
-/** Highest positive signed 32-bit float value */
-const maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1
-
-/** Bootstring parameters */
-const base = 36;
-const tMin = 1;
-const tMax = 26;
-const skew = 38;
-const damp = 700;
-const initialBias = 72;
-const initialN = 128; // 0x80
-const delimiter = '-'; // '\x2D'
-
-/** Regular expressions */
-const regexPunycode = /^xn--/;
-const regexNonASCII = /[^\0-\x7E]/; // non-ASCII chars
-const regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g; // RFC 3490 separators
-
-/** Error messages */
-const errors = {
- 'overflow': 'Overflow: input needs wider integers to process',
- 'not-basic': 'Illegal input >= 0x80 (not a basic code point)',
- 'invalid-input': 'Invalid input'
-};
-
-/** Convenience shortcuts */
-const baseMinusTMin = base - tMin;
-const floor = Math.floor;
-const stringFromCharCode = String.fromCharCode;
-
-/*--------------------------------------------------------------------------*/
-
-/**
- * A generic error utility function.
- * @private
- * @param {String} type The error type.
- * @returns {Error} Throws a `RangeError` with the applicable error message.
- */
-function error(type) {
- throw new RangeError(errors[type]);
-}
-
-/**
- * A generic `Array#map` utility function.
- * @private
- * @param {Array} array The array to iterate over.
- * @param {Function} callback The function that gets called for every array
- * item.
- * @returns {Array} A new array of values returned by the callback function.
- */
-function map(array, fn) {
- const result = [];
- let length = array.length;
- while (length--) {
- result[length] = fn(array[length]);
- }
- return result;
-}
-
-/**
- * A simple `Array#map`-like wrapper to work with domain name strings or email
- * addresses.
- * @private
- * @param {String} domain The domain name or email address.
- * @param {Function} callback The function that gets called for every
- * character.
- * @returns {Array} A new string of characters returned by the callback
- * function.
- */
-function mapDomain(string, fn) {
- const parts = string.split('@');
- let result = '';
- if (parts.length > 1) {
- // In email addresses, only the domain name should be punycoded. Leave
- // the local part (i.e. everything up to `@`) intact.
- result = parts[0] + '@';
- string = parts[1];
- }
- // Avoid `split(regex)` for IE8 compatibility. See #17.
- string = string.replace(regexSeparators, '\x2E');
- const labels = string.split('.');
- const encoded = map(labels, fn).join('.');
- return result + encoded;
-}
-
-/**
- * Creates an array containing the numeric code points of each Unicode
- * character in the string. While JavaScript uses UCS-2 internally,
- * this function will convert a pair of surrogate halves (each of which
- * UCS-2 exposes as separate characters) into a single code point,
- * matching UTF-16.
- * @see `punycode.ucs2.encode`
- * @see
- * @memberOf punycode.ucs2
- * @name decode
- * @param {String} string The Unicode input string (UCS-2).
- * @returns {Array} The new array of code points.
- */
-function ucs2decode(string) {
- const output = [];
- let counter = 0;
- const length = string.length;
- while (counter < length) {
- const value = string.charCodeAt(counter++);
- if (value >= 0xD800 && value <= 0xDBFF && counter < length) {
- // It's a high surrogate, and there is a next character.
- const extra = string.charCodeAt(counter++);
- if ((extra & 0xFC00) == 0xDC00) { // Low surrogate.
- output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
- } else {
- // It's an unmatched surrogate; only append this code unit, in case the
- // next code unit is the high surrogate of a surrogate pair.
- output.push(value);
- counter--;
- }
- } else {
- output.push(value);
- }
- }
- return output;
-}
-
-/**
- * Creates a string based on an array of numeric code points.
- * @see `punycode.ucs2.decode`
- * @memberOf punycode.ucs2
- * @name encode
- * @param {Array} codePoints The array of numeric code points.
- * @returns {String} The new Unicode string (UCS-2).
- */
-const ucs2encode = array => String.fromCodePoint(...array);
-
-/**
- * Converts a basic code point into a digit/integer.
- * @see `digitToBasic()`
- * @private
- * @param {Number} codePoint The basic numeric code point value.
- * @returns {Number} The numeric value of a basic code point (for use in
- * representing integers) in the range `0` to `base - 1`, or `base` if
- * the code point does not represent a value.
- */
-const basicToDigit = function(codePoint) {
- if (codePoint - 0x30 < 0x0A) {
- return codePoint - 0x16;
- }
- if (codePoint - 0x41 < 0x1A) {
- return codePoint - 0x41;
- }
- if (codePoint - 0x61 < 0x1A) {
- return codePoint - 0x61;
- }
- return base;
-};
-
-/**
- * Converts a digit/integer into a basic code point.
- * @see `basicToDigit()`
- * @private
- * @param {Number} digit The numeric value of a basic code point.
- * @returns {Number} The basic code point whose value (when used for
- * representing integers) is `digit`, which needs to be in the range
- * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is
- * used; else, the lowercase form is used. The behavior is undefined
- * if `flag` is non-zero and `digit` has no uppercase form.
- */
-const digitToBasic = function(digit, flag) {
- // 0..25 map to ASCII a..z or A..Z
- // 26..35 map to ASCII 0..9
- return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);
-};
-
-/**
- * Bias adaptation function as per section 3.4 of RFC 3492.
- * https://tools.ietf.org/html/rfc3492#section-3.4
- * @private
- */
-const adapt = function(delta, numPoints, firstTime) {
- let k = 0;
- delta = firstTime ? floor(delta / damp) : delta >> 1;
- delta += floor(delta / numPoints);
- for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {
- delta = floor(delta / baseMinusTMin);
- }
- return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));
-};
-
-/**
- * Converts a Punycode string of ASCII-only symbols to a string of Unicode
- * symbols.
- * @memberOf punycode
- * @param {String} input The Punycode string of ASCII-only symbols.
- * @returns {String} The resulting string of Unicode symbols.
- */
-const decode = function(input) {
- // Don't use UCS-2.
- const output = [];
- const inputLength = input.length;
- let i = 0;
- let n = initialN;
- let bias = initialBias;
-
- // Handle the basic code points: let `basic` be the number of input code
- // points before the last delimiter, or `0` if there is none, then copy
- // the first basic code points to the output.
-
- let basic = input.lastIndexOf(delimiter);
- if (basic < 0) {
- basic = 0;
- }
-
- for (let j = 0; j < basic; ++j) {
- // if it's not a basic code point
- if (input.charCodeAt(j) >= 0x80) {
- error('not-basic');
- }
- output.push(input.charCodeAt(j));
- }
-
- // Main decoding loop: start just after the last delimiter if any basic code
- // points were copied; start at the beginning otherwise.
-
- for (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {
-
- // `index` is the index of the next character to be consumed.
- // Decode a generalized variable-length integer into `delta`,
- // which gets added to `i`. The overflow checking is easier
- // if we increase `i` as we go, then subtract off its starting
- // value at the end to obtain `delta`.
- let oldi = i;
- for (let w = 1, k = base; /* no condition */; k += base) {
-
- if (index >= inputLength) {
- error('invalid-input');
- }
-
- const digit = basicToDigit(input.charCodeAt(index++));
-
- if (digit >= base || digit > floor((maxInt - i) / w)) {
- error('overflow');
- }
-
- i += digit * w;
- const t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
-
- if (digit < t) {
- break;
- }
-
- const baseMinusT = base - t;
- if (w > floor(maxInt / baseMinusT)) {
- error('overflow');
- }
-
- w *= baseMinusT;
-
- }
-
- const out = output.length + 1;
- bias = adapt(i - oldi, out, oldi == 0);
-
- // `i` was supposed to wrap around from `out` to `0`,
- // incrementing `n` each time, so we'll fix that now:
- if (floor(i / out) > maxInt - n) {
- error('overflow');
- }
-
- n += floor(i / out);
- i %= out;
-
- // Insert `n` at position `i` of the output.
- output.splice(i++, 0, n);
-
- }
-
- return String.fromCodePoint(...output);
-};
-
-/**
- * Converts a string of Unicode symbols (e.g. a domain name label) to a
- * Punycode string of ASCII-only symbols.
- * @memberOf punycode
- * @param {String} input The string of Unicode symbols.
- * @returns {String} The resulting Punycode string of ASCII-only symbols.
- */
-const encode = function(input) {
- const output = [];
-
- // Convert the input in UCS-2 to an array of Unicode code points.
- input = ucs2decode(input);
-
- // Cache the length.
- let inputLength = input.length;
-
- // Initialize the state.
- let n = initialN;
- let delta = 0;
- let bias = initialBias;
-
- // Handle the basic code points.
- for (const currentValue of input) {
- if (currentValue < 0x80) {
- output.push(stringFromCharCode(currentValue));
- }
- }
-
- let basicLength = output.length;
- let handledCPCount = basicLength;
-
- // `handledCPCount` is the number of code points that have been handled;
- // `basicLength` is the number of basic code points.
-
- // Finish the basic string with a delimiter unless it's empty.
- if (basicLength) {
- output.push(delimiter);
- }
-
- // Main encoding loop:
- while (handledCPCount < inputLength) {
-
- // All non-basic code points < n have been handled already. Find the next
- // larger one:
- let m = maxInt;
- for (const currentValue of input) {
- if (currentValue >= n && currentValue < m) {
- m = currentValue;
- }
- }
-
- // Increase `delta` enough to advance the decoder's state to ,
- // but guard against overflow.
- const handledCPCountPlusOne = handledCPCount + 1;
- if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {
- error('overflow');
- }
-
- delta += (m - n) * handledCPCountPlusOne;
- n = m;
-
- for (const currentValue of input) {
- if (currentValue < n && ++delta > maxInt) {
- error('overflow');
- }
- if (currentValue == n) {
- // Represent delta as a generalized variable-length integer.
- let q = delta;
- for (let k = base; /* no condition */; k += base) {
- const t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
- if (q < t) {
- break;
- }
- const qMinusT = q - t;
- const baseMinusT = base - t;
- output.push(
- stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))
- );
- q = floor(qMinusT / baseMinusT);
- }
-
- output.push(stringFromCharCode(digitToBasic(q, 0)));
- bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);
- delta = 0;
- ++handledCPCount;
- }
- }
-
- ++delta;
- ++n;
-
- }
- return output.join('');
-};
-
-/**
- * Converts a Punycode string representing a domain name or an email address
- * to Unicode. Only the Punycoded parts of the input will be converted, i.e.
- * it doesn't matter if you call it on a string that has already been
- * converted to Unicode.
- * @memberOf punycode
- * @param {String} input The Punycoded domain name or email address to
- * convert to Unicode.
- * @returns {String} The Unicode representation of the given Punycode
- * string.
- */
-const toUnicode = function(input) {
- return mapDomain(input, function(string) {
- return regexPunycode.test(string)
- ? decode(string.slice(4).toLowerCase())
- : string;
- });
-};
-
-/**
- * Converts a Unicode string representing a domain name or an email address to
- * Punycode. Only the non-ASCII parts of the domain name will be converted,
- * i.e. it doesn't matter if you call it with a domain that's already in
- * ASCII.
- * @memberOf punycode
- * @param {String} input The domain name or email address to convert, as a
- * Unicode string.
- * @returns {String} The Punycode representation of the given domain name or
- * email address.
- */
-const toASCII = function(input) {
- return mapDomain(input, function(string) {
- return regexNonASCII.test(string)
- ? 'xn--' + encode(string)
- : string;
- });
-};
-
-/*--------------------------------------------------------------------------*/
-
-/** Define the public API */
-const punycode = {
- /**
- * A string representing the current Punycode.js version number.
- * @memberOf punycode
- * @type String
- */
- 'version': '2.1.0',
- /**
- * An object of methods to convert from JavaScript's internal character
- * representation (UCS-2) to Unicode code points, and back.
- * @see
- * @memberOf punycode
- * @type Object
- */
- 'ucs2': {
- 'decode': ucs2decode,
- 'encode': ucs2encode
- },
- 'decode': decode,
- 'encode': encode,
- 'toASCII': toASCII,
- 'toUnicode': toUnicode
-};
-
-module.exports = punycode;
diff --git a/deps/npm/node_modules/qs/LICENSE b/deps/npm/node_modules/qs/LICENSE
deleted file mode 100644
index d4569487a094b9..00000000000000
--- a/deps/npm/node_modules/qs/LICENSE
+++ /dev/null
@@ -1,28 +0,0 @@
-Copyright (c) 2014 Nathan LaFreniere and other contributors.
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- * The names of any contributors may not be used to endorse or promote
- products derived from this software without specific prior written
- permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY
-DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
- * * *
-
-The complete list of contributors can be found at: https://github.com/hapijs/qs/graphs/contributors
diff --git a/deps/npm/node_modules/qs/dist/qs.js b/deps/npm/node_modules/qs/dist/qs.js
deleted file mode 100644
index ecf7ba44cf15be..00000000000000
--- a/deps/npm/node_modules/qs/dist/qs.js
+++ /dev/null
@@ -1,638 +0,0 @@
-(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Qs = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i= 0; --i) {
- var obj;
- var root = chain[i];
-
- if (root === '[]') {
- obj = [];
- obj = obj.concat(leaf);
- } else {
- obj = options.plainObjects ? Object.create(null) : {};
- var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root;
- var index = parseInt(cleanRoot, 10);
- if (
- !isNaN(index)
- && root !== cleanRoot
- && String(index) === cleanRoot
- && index >= 0
- && (options.parseArrays && index <= options.arrayLimit)
- ) {
- obj = [];
- obj[index] = leaf;
- } else {
- obj[cleanRoot] = leaf;
- }
- }
-
- leaf = obj;
- }
-
- return leaf;
-};
-
-var parseKeys = function parseQueryStringKeys(givenKey, val, options) {
- if (!givenKey) {
- return;
- }
-
- // Transform dot notation to bracket notation
- var key = options.allowDots ? givenKey.replace(/\.([^.[]+)/g, '[$1]') : givenKey;
-
- // The regex chunks
-
- var brackets = /(\[[^[\]]*])/;
- var child = /(\[[^[\]]*])/g;
-
- // Get the parent
-
- var segment = brackets.exec(key);
- var parent = segment ? key.slice(0, segment.index) : key;
-
- // Stash the parent if it exists
-
- var keys = [];
- if (parent) {
- // If we aren't using plain objects, optionally prefix keys
- // that would overwrite object prototype properties
- if (!options.plainObjects && has.call(Object.prototype, parent)) {
- if (!options.allowPrototypes) {
- return;
- }
- }
-
- keys.push(parent);
- }
-
- // Loop through children appending to the array until we hit depth
-
- var i = 0;
- while ((segment = child.exec(key)) !== null && i < options.depth) {
- i += 1;
- if (!options.plainObjects && has.call(Object.prototype, segment[1].slice(1, -1))) {
- if (!options.allowPrototypes) {
- return;
- }
- }
- keys.push(segment[1]);
- }
-
- // If there's a remainder, just add whatever is left
-
- if (segment) {
- keys.push('[' + key.slice(segment.index) + ']');
- }
-
- return parseObject(keys, val, options);
-};
-
-module.exports = function (str, opts) {
- var options = opts ? utils.assign({}, opts) : {};
-
- if (options.decoder !== null && options.decoder !== undefined && typeof options.decoder !== 'function') {
- throw new TypeError('Decoder has to be a function.');
- }
-
- options.ignoreQueryPrefix = options.ignoreQueryPrefix === true;
- options.delimiter = typeof options.delimiter === 'string' || utils.isRegExp(options.delimiter) ? options.delimiter : defaults.delimiter;
- options.depth = typeof options.depth === 'number' ? options.depth : defaults.depth;
- options.arrayLimit = typeof options.arrayLimit === 'number' ? options.arrayLimit : defaults.arrayLimit;
- options.parseArrays = options.parseArrays !== false;
- options.decoder = typeof options.decoder === 'function' ? options.decoder : defaults.decoder;
- options.allowDots = typeof options.allowDots === 'boolean' ? options.allowDots : defaults.allowDots;
- options.plainObjects = typeof options.plainObjects === 'boolean' ? options.plainObjects : defaults.plainObjects;
- options.allowPrototypes = typeof options.allowPrototypes === 'boolean' ? options.allowPrototypes : defaults.allowPrototypes;
- options.parameterLimit = typeof options.parameterLimit === 'number' ? options.parameterLimit : defaults.parameterLimit;
- options.strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : defaults.strictNullHandling;
-
- if (str === '' || str === null || typeof str === 'undefined') {
- return options.plainObjects ? Object.create(null) : {};
- }
-
- var tempObj = typeof str === 'string' ? parseValues(str, options) : str;
- var obj = options.plainObjects ? Object.create(null) : {};
-
- // Iterate over the keys and setup the new object
-
- var keys = Object.keys(tempObj);
- for (var i = 0; i < keys.length; ++i) {
- var key = keys[i];
- var newObj = parseKeys(key, tempObj[key], options);
- obj = utils.merge(obj, newObj, options);
- }
-
- return utils.compact(obj);
-};
-
-},{"./utils":5}],4:[function(require,module,exports){
-'use strict';
-
-var utils = require('./utils');
-var formats = require('./formats');
-
-var arrayPrefixGenerators = {
- brackets: function brackets(prefix) { // eslint-disable-line func-name-matching
- return prefix + '[]';
- },
- indices: function indices(prefix, key) { // eslint-disable-line func-name-matching
- return prefix + '[' + key + ']';
- },
- repeat: function repeat(prefix) { // eslint-disable-line func-name-matching
- return prefix;
- }
-};
-
-var toISO = Date.prototype.toISOString;
-
-var defaults = {
- delimiter: '&',
- encode: true,
- encoder: utils.encode,
- encodeValuesOnly: false,
- serializeDate: function serializeDate(date) { // eslint-disable-line func-name-matching
- return toISO.call(date);
- },
- skipNulls: false,
- strictNullHandling: false
-};
-
-var stringify = function stringify( // eslint-disable-line func-name-matching
- object,
- prefix,
- generateArrayPrefix,
- strictNullHandling,
- skipNulls,
- encoder,
- filter,
- sort,
- allowDots,
- serializeDate,
- formatter,
- encodeValuesOnly
-) {
- var obj = object;
- if (typeof filter === 'function') {
- obj = filter(prefix, obj);
- } else if (obj instanceof Date) {
- obj = serializeDate(obj);
- } else if (obj === null) {
- if (strictNullHandling) {
- return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder) : prefix;
- }
-
- obj = '';
- }
-
- if (typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean' || utils.isBuffer(obj)) {
- if (encoder) {
- var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder);
- return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder))];
- }
- return [formatter(prefix) + '=' + formatter(String(obj))];
- }
-
- var values = [];
-
- if (typeof obj === 'undefined') {
- return values;
- }
-
- var objKeys;
- if (Array.isArray(filter)) {
- objKeys = filter;
- } else {
- var keys = Object.keys(obj);
- objKeys = sort ? keys.sort(sort) : keys;
- }
-
- for (var i = 0; i < objKeys.length; ++i) {
- var key = objKeys[i];
-
- if (skipNulls && obj[key] === null) {
- continue;
- }
-
- if (Array.isArray(obj)) {
- values = values.concat(stringify(
- obj[key],
- generateArrayPrefix(prefix, key),
- generateArrayPrefix,
- strictNullHandling,
- skipNulls,
- encoder,
- filter,
- sort,
- allowDots,
- serializeDate,
- formatter,
- encodeValuesOnly
- ));
- } else {
- values = values.concat(stringify(
- obj[key],
- prefix + (allowDots ? '.' + key : '[' + key + ']'),
- generateArrayPrefix,
- strictNullHandling,
- skipNulls,
- encoder,
- filter,
- sort,
- allowDots,
- serializeDate,
- formatter,
- encodeValuesOnly
- ));
- }
- }
-
- return values;
-};
-
-module.exports = function (object, opts) {
- var obj = object;
- var options = opts ? utils.assign({}, opts) : {};
-
- if (options.encoder !== null && options.encoder !== undefined && typeof options.encoder !== 'function') {
- throw new TypeError('Encoder has to be a function.');
- }
-
- var delimiter = typeof options.delimiter === 'undefined' ? defaults.delimiter : options.delimiter;
- var strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : defaults.strictNullHandling;
- var skipNulls = typeof options.skipNulls === 'boolean' ? options.skipNulls : defaults.skipNulls;
- var encode = typeof options.encode === 'boolean' ? options.encode : defaults.encode;
- var encoder = typeof options.encoder === 'function' ? options.encoder : defaults.encoder;
- var sort = typeof options.sort === 'function' ? options.sort : null;
- var allowDots = typeof options.allowDots === 'undefined' ? false : options.allowDots;
- var serializeDate = typeof options.serializeDate === 'function' ? options.serializeDate : defaults.serializeDate;
- var encodeValuesOnly = typeof options.encodeValuesOnly === 'boolean' ? options.encodeValuesOnly : defaults.encodeValuesOnly;
- if (typeof options.format === 'undefined') {
- options.format = formats['default'];
- } else if (!Object.prototype.hasOwnProperty.call(formats.formatters, options.format)) {
- throw new TypeError('Unknown format option provided.');
- }
- var formatter = formats.formatters[options.format];
- var objKeys;
- var filter;
-
- if (typeof options.filter === 'function') {
- filter = options.filter;
- obj = filter('', obj);
- } else if (Array.isArray(options.filter)) {
- filter = options.filter;
- objKeys = filter;
- }
-
- var keys = [];
-
- if (typeof obj !== 'object' || obj === null) {
- return '';
- }
-
- var arrayFormat;
- if (options.arrayFormat in arrayPrefixGenerators) {
- arrayFormat = options.arrayFormat;
- } else if ('indices' in options) {
- arrayFormat = options.indices ? 'indices' : 'repeat';
- } else {
- arrayFormat = 'indices';
- }
-
- var generateArrayPrefix = arrayPrefixGenerators[arrayFormat];
-
- if (!objKeys) {
- objKeys = Object.keys(obj);
- }
-
- if (sort) {
- objKeys.sort(sort);
- }
-
- for (var i = 0; i < objKeys.length; ++i) {
- var key = objKeys[i];
-
- if (skipNulls && obj[key] === null) {
- continue;
- }
-
- keys = keys.concat(stringify(
- obj[key],
- key,
- generateArrayPrefix,
- strictNullHandling,
- skipNulls,
- encode ? encoder : null,
- filter,
- sort,
- allowDots,
- serializeDate,
- formatter,
- encodeValuesOnly
- ));
- }
-
- var joined = keys.join(delimiter);
- var prefix = options.addQueryPrefix === true ? '?' : '';
-
- return joined.length > 0 ? prefix + joined : '';
-};
-
-},{"./formats":1,"./utils":5}],5:[function(require,module,exports){
-'use strict';
-
-var has = Object.prototype.hasOwnProperty;
-
-var hexTable = (function () {
- var array = [];
- for (var i = 0; i < 256; ++i) {
- array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());
- }
-
- return array;
-}());
-
-var compactQueue = function compactQueue(queue) {
- var obj;
-
- while (queue.length) {
- var item = queue.pop();
- obj = item.obj[item.prop];
-
- if (Array.isArray(obj)) {
- var compacted = [];
-
- for (var j = 0; j < obj.length; ++j) {
- if (typeof obj[j] !== 'undefined') {
- compacted.push(obj[j]);
- }
- }
-
- item.obj[item.prop] = compacted;
- }
- }
-
- return obj;
-};
-
-var arrayToObject = function arrayToObject(source, options) {
- var obj = options && options.plainObjects ? Object.create(null) : {};
- for (var i = 0; i < source.length; ++i) {
- if (typeof source[i] !== 'undefined') {
- obj[i] = source[i];
- }
- }
-
- return obj;
-};
-
-var merge = function merge(target, source, options) {
- if (!source) {
- return target;
- }
-
- if (typeof source !== 'object') {
- if (Array.isArray(target)) {
- target.push(source);
- } else if (typeof target === 'object') {
- if (options.plainObjects || options.allowPrototypes || !has.call(Object.prototype, source)) {
- target[source] = true;
- }
- } else {
- return [target, source];
- }
-
- return target;
- }
-
- if (typeof target !== 'object') {
- return [target].concat(source);
- }
-
- var mergeTarget = target;
- if (Array.isArray(target) && !Array.isArray(source)) {
- mergeTarget = arrayToObject(target, options);
- }
-
- if (Array.isArray(target) && Array.isArray(source)) {
- source.forEach(function (item, i) {
- if (has.call(target, i)) {
- if (target[i] && typeof target[i] === 'object') {
- target[i] = merge(target[i], item, options);
- } else {
- target.push(item);
- }
- } else {
- target[i] = item;
- }
- });
- return target;
- }
-
- return Object.keys(source).reduce(function (acc, key) {
- var value = source[key];
-
- if (has.call(acc, key)) {
- acc[key] = merge(acc[key], value, options);
- } else {
- acc[key] = value;
- }
- return acc;
- }, mergeTarget);
-};
-
-var assign = function assignSingleSource(target, source) {
- return Object.keys(source).reduce(function (acc, key) {
- acc[key] = source[key];
- return acc;
- }, target);
-};
-
-var decode = function (str) {
- try {
- return decodeURIComponent(str.replace(/\+/g, ' '));
- } catch (e) {
- return str;
- }
-};
-
-var encode = function encode(str) {
- // This code was originally written by Brian White (mscdex) for the io.js core querystring library.
- // It has been adapted here for stricter adherence to RFC 3986
- if (str.length === 0) {
- return str;
- }
-
- var string = typeof str === 'string' ? str : String(str);
-
- var out = '';
- for (var i = 0; i < string.length; ++i) {
- var c = string.charCodeAt(i);
-
- if (
- c === 0x2D // -
- || c === 0x2E // .
- || c === 0x5F // _
- || c === 0x7E // ~
- || (c >= 0x30 && c <= 0x39) // 0-9
- || (c >= 0x41 && c <= 0x5A) // a-z
- || (c >= 0x61 && c <= 0x7A) // A-Z
- ) {
- out += string.charAt(i);
- continue;
- }
-
- if (c < 0x80) {
- out = out + hexTable[c];
- continue;
- }
-
- if (c < 0x800) {
- out = out + (hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]);
- continue;
- }
-
- if (c < 0xD800 || c >= 0xE000) {
- out = out + (hexTable[0xE0 | (c >> 12)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]);
- continue;
- }
-
- i += 1;
- c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF));
- out += hexTable[0xF0 | (c >> 18)]
- + hexTable[0x80 | ((c >> 12) & 0x3F)]
- + hexTable[0x80 | ((c >> 6) & 0x3F)]
- + hexTable[0x80 | (c & 0x3F)];
- }
-
- return out;
-};
-
-var compact = function compact(value) {
- var queue = [{ obj: { o: value }, prop: 'o' }];
- var refs = [];
-
- for (var i = 0; i < queue.length; ++i) {
- var item = queue[i];
- var obj = item.obj[item.prop];
-
- var keys = Object.keys(obj);
- for (var j = 0; j < keys.length; ++j) {
- var key = keys[j];
- var val = obj[key];
- if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {
- queue.push({ obj: obj, prop: key });
- refs.push(val);
- }
- }
- }
-
- return compactQueue(queue);
-};
-
-var isRegExp = function isRegExp(obj) {
- return Object.prototype.toString.call(obj) === '[object RegExp]';
-};
-
-var isBuffer = function isBuffer(obj) {
- if (obj === null || typeof obj === 'undefined') {
- return false;
- }
-
- return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));
-};
-
-module.exports = {
- arrayToObject: arrayToObject,
- assign: assign,
- compact: compact,
- decode: decode,
- encode: encode,
- isBuffer: isBuffer,
- isRegExp: isRegExp,
- merge: merge
-};
-
-},{}]},{},[2])(2)
-});
diff --git a/deps/npm/node_modules/qs/lib/formats.js b/deps/npm/node_modules/qs/lib/formats.js
deleted file mode 100644
index df459975291f24..00000000000000
--- a/deps/npm/node_modules/qs/lib/formats.js
+++ /dev/null
@@ -1,18 +0,0 @@
-'use strict';
-
-var replace = String.prototype.replace;
-var percentTwenties = /%20/g;
-
-module.exports = {
- 'default': 'RFC3986',
- formatters: {
- RFC1738: function (value) {
- return replace.call(value, percentTwenties, '+');
- },
- RFC3986: function (value) {
- return value;
- }
- },
- RFC1738: 'RFC1738',
- RFC3986: 'RFC3986'
-};
diff --git a/deps/npm/node_modules/qs/lib/index.js b/deps/npm/node_modules/qs/lib/index.js
deleted file mode 100644
index 0d6a97dcf09644..00000000000000
--- a/deps/npm/node_modules/qs/lib/index.js
+++ /dev/null
@@ -1,11 +0,0 @@
-'use strict';
-
-var stringify = require('./stringify');
-var parse = require('./parse');
-var formats = require('./formats');
-
-module.exports = {
- formats: formats,
- parse: parse,
- stringify: stringify
-};
diff --git a/deps/npm/node_modules/qs/lib/parse.js b/deps/npm/node_modules/qs/lib/parse.js
deleted file mode 100644
index 8c9872ecc693a0..00000000000000
--- a/deps/npm/node_modules/qs/lib/parse.js
+++ /dev/null
@@ -1,174 +0,0 @@
-'use strict';
-
-var utils = require('./utils');
-
-var has = Object.prototype.hasOwnProperty;
-
-var defaults = {
- allowDots: false,
- allowPrototypes: false,
- arrayLimit: 20,
- decoder: utils.decode,
- delimiter: '&',
- depth: 5,
- parameterLimit: 1000,
- plainObjects: false,
- strictNullHandling: false
-};
-
-var parseValues = function parseQueryStringValues(str, options) {
- var obj = {};
- var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\?/, '') : str;
- var limit = options.parameterLimit === Infinity ? undefined : options.parameterLimit;
- var parts = cleanStr.split(options.delimiter, limit);
-
- for (var i = 0; i < parts.length; ++i) {
- var part = parts[i];
-
- var bracketEqualsPos = part.indexOf(']=');
- var pos = bracketEqualsPos === -1 ? part.indexOf('=') : bracketEqualsPos + 1;
-
- var key, val;
- if (pos === -1) {
- key = options.decoder(part, defaults.decoder);
- val = options.strictNullHandling ? null : '';
- } else {
- key = options.decoder(part.slice(0, pos), defaults.decoder);
- val = options.decoder(part.slice(pos + 1), defaults.decoder);
- }
- if (has.call(obj, key)) {
- obj[key] = [].concat(obj[key]).concat(val);
- } else {
- obj[key] = val;
- }
- }
-
- return obj;
-};
-
-var parseObject = function (chain, val, options) {
- var leaf = val;
-
- for (var i = chain.length - 1; i >= 0; --i) {
- var obj;
- var root = chain[i];
-
- if (root === '[]') {
- obj = [];
- obj = obj.concat(leaf);
- } else {
- obj = options.plainObjects ? Object.create(null) : {};
- var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root;
- var index = parseInt(cleanRoot, 10);
- if (
- !isNaN(index)
- && root !== cleanRoot
- && String(index) === cleanRoot
- && index >= 0
- && (options.parseArrays && index <= options.arrayLimit)
- ) {
- obj = [];
- obj[index] = leaf;
- } else {
- obj[cleanRoot] = leaf;
- }
- }
-
- leaf = obj;
- }
-
- return leaf;
-};
-
-var parseKeys = function parseQueryStringKeys(givenKey, val, options) {
- if (!givenKey) {
- return;
- }
-
- // Transform dot notation to bracket notation
- var key = options.allowDots ? givenKey.replace(/\.([^.[]+)/g, '[$1]') : givenKey;
-
- // The regex chunks
-
- var brackets = /(\[[^[\]]*])/;
- var child = /(\[[^[\]]*])/g;
-
- // Get the parent
-
- var segment = brackets.exec(key);
- var parent = segment ? key.slice(0, segment.index) : key;
-
- // Stash the parent if it exists
-
- var keys = [];
- if (parent) {
- // If we aren't using plain objects, optionally prefix keys
- // that would overwrite object prototype properties
- if (!options.plainObjects && has.call(Object.prototype, parent)) {
- if (!options.allowPrototypes) {
- return;
- }
- }
-
- keys.push(parent);
- }
-
- // Loop through children appending to the array until we hit depth
-
- var i = 0;
- while ((segment = child.exec(key)) !== null && i < options.depth) {
- i += 1;
- if (!options.plainObjects && has.call(Object.prototype, segment[1].slice(1, -1))) {
- if (!options.allowPrototypes) {
- return;
- }
- }
- keys.push(segment[1]);
- }
-
- // If there's a remainder, just add whatever is left
-
- if (segment) {
- keys.push('[' + key.slice(segment.index) + ']');
- }
-
- return parseObject(keys, val, options);
-};
-
-module.exports = function (str, opts) {
- var options = opts ? utils.assign({}, opts) : {};
-
- if (options.decoder !== null && options.decoder !== undefined && typeof options.decoder !== 'function') {
- throw new TypeError('Decoder has to be a function.');
- }
-
- options.ignoreQueryPrefix = options.ignoreQueryPrefix === true;
- options.delimiter = typeof options.delimiter === 'string' || utils.isRegExp(options.delimiter) ? options.delimiter : defaults.delimiter;
- options.depth = typeof options.depth === 'number' ? options.depth : defaults.depth;
- options.arrayLimit = typeof options.arrayLimit === 'number' ? options.arrayLimit : defaults.arrayLimit;
- options.parseArrays = options.parseArrays !== false;
- options.decoder = typeof options.decoder === 'function' ? options.decoder : defaults.decoder;
- options.allowDots = typeof options.allowDots === 'boolean' ? options.allowDots : defaults.allowDots;
- options.plainObjects = typeof options.plainObjects === 'boolean' ? options.plainObjects : defaults.plainObjects;
- options.allowPrototypes = typeof options.allowPrototypes === 'boolean' ? options.allowPrototypes : defaults.allowPrototypes;
- options.parameterLimit = typeof options.parameterLimit === 'number' ? options.parameterLimit : defaults.parameterLimit;
- options.strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : defaults.strictNullHandling;
-
- if (str === '' || str === null || typeof str === 'undefined') {
- return options.plainObjects ? Object.create(null) : {};
- }
-
- var tempObj = typeof str === 'string' ? parseValues(str, options) : str;
- var obj = options.plainObjects ? Object.create(null) : {};
-
- // Iterate over the keys and setup the new object
-
- var keys = Object.keys(tempObj);
- for (var i = 0; i < keys.length; ++i) {
- var key = keys[i];
- var newObj = parseKeys(key, tempObj[key], options);
- obj = utils.merge(obj, newObj, options);
- }
-
- return utils.compact(obj);
-};
diff --git a/deps/npm/node_modules/qs/lib/stringify.js b/deps/npm/node_modules/qs/lib/stringify.js
deleted file mode 100644
index ab915ac46382b3..00000000000000
--- a/deps/npm/node_modules/qs/lib/stringify.js
+++ /dev/null
@@ -1,210 +0,0 @@
-'use strict';
-
-var utils = require('./utils');
-var formats = require('./formats');
-
-var arrayPrefixGenerators = {
- brackets: function brackets(prefix) { // eslint-disable-line func-name-matching
- return prefix + '[]';
- },
- indices: function indices(prefix, key) { // eslint-disable-line func-name-matching
- return prefix + '[' + key + ']';
- },
- repeat: function repeat(prefix) { // eslint-disable-line func-name-matching
- return prefix;
- }
-};
-
-var toISO = Date.prototype.toISOString;
-
-var defaults = {
- delimiter: '&',
- encode: true,
- encoder: utils.encode,
- encodeValuesOnly: false,
- serializeDate: function serializeDate(date) { // eslint-disable-line func-name-matching
- return toISO.call(date);
- },
- skipNulls: false,
- strictNullHandling: false
-};
-
-var stringify = function stringify( // eslint-disable-line func-name-matching
- object,
- prefix,
- generateArrayPrefix,
- strictNullHandling,
- skipNulls,
- encoder,
- filter,
- sort,
- allowDots,
- serializeDate,
- formatter,
- encodeValuesOnly
-) {
- var obj = object;
- if (typeof filter === 'function') {
- obj = filter(prefix, obj);
- } else if (obj instanceof Date) {
- obj = serializeDate(obj);
- } else if (obj === null) {
- if (strictNullHandling) {
- return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder) : prefix;
- }
-
- obj = '';
- }
-
- if (typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean' || utils.isBuffer(obj)) {
- if (encoder) {
- var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder);
- return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder))];
- }
- return [formatter(prefix) + '=' + formatter(String(obj))];
- }
-
- var values = [];
-
- if (typeof obj === 'undefined') {
- return values;
- }
-
- var objKeys;
- if (Array.isArray(filter)) {
- objKeys = filter;
- } else {
- var keys = Object.keys(obj);
- objKeys = sort ? keys.sort(sort) : keys;
- }
-
- for (var i = 0; i < objKeys.length; ++i) {
- var key = objKeys[i];
-
- if (skipNulls && obj[key] === null) {
- continue;
- }
-
- if (Array.isArray(obj)) {
- values = values.concat(stringify(
- obj[key],
- generateArrayPrefix(prefix, key),
- generateArrayPrefix,
- strictNullHandling,
- skipNulls,
- encoder,
- filter,
- sort,
- allowDots,
- serializeDate,
- formatter,
- encodeValuesOnly
- ));
- } else {
- values = values.concat(stringify(
- obj[key],
- prefix + (allowDots ? '.' + key : '[' + key + ']'),
- generateArrayPrefix,
- strictNullHandling,
- skipNulls,
- encoder,
- filter,
- sort,
- allowDots,
- serializeDate,
- formatter,
- encodeValuesOnly
- ));
- }
- }
-
- return values;
-};
-
-module.exports = function (object, opts) {
- var obj = object;
- var options = opts ? utils.assign({}, opts) : {};
-
- if (options.encoder !== null && options.encoder !== undefined && typeof options.encoder !== 'function') {
- throw new TypeError('Encoder has to be a function.');
- }
-
- var delimiter = typeof options.delimiter === 'undefined' ? defaults.delimiter : options.delimiter;
- var strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : defaults.strictNullHandling;
- var skipNulls = typeof options.skipNulls === 'boolean' ? options.skipNulls : defaults.skipNulls;
- var encode = typeof options.encode === 'boolean' ? options.encode : defaults.encode;
- var encoder = typeof options.encoder === 'function' ? options.encoder : defaults.encoder;
- var sort = typeof options.sort === 'function' ? options.sort : null;
- var allowDots = typeof options.allowDots === 'undefined' ? false : options.allowDots;
- var serializeDate = typeof options.serializeDate === 'function' ? options.serializeDate : defaults.serializeDate;
- var encodeValuesOnly = typeof options.encodeValuesOnly === 'boolean' ? options.encodeValuesOnly : defaults.encodeValuesOnly;
- if (typeof options.format === 'undefined') {
- options.format = formats['default'];
- } else if (!Object.prototype.hasOwnProperty.call(formats.formatters, options.format)) {
- throw new TypeError('Unknown format option provided.');
- }
- var formatter = formats.formatters[options.format];
- var objKeys;
- var filter;
-
- if (typeof options.filter === 'function') {
- filter = options.filter;
- obj = filter('', obj);
- } else if (Array.isArray(options.filter)) {
- filter = options.filter;
- objKeys = filter;
- }
-
- var keys = [];
-
- if (typeof obj !== 'object' || obj === null) {
- return '';
- }
-
- var arrayFormat;
- if (options.arrayFormat in arrayPrefixGenerators) {
- arrayFormat = options.arrayFormat;
- } else if ('indices' in options) {
- arrayFormat = options.indices ? 'indices' : 'repeat';
- } else {
- arrayFormat = 'indices';
- }
-
- var generateArrayPrefix = arrayPrefixGenerators[arrayFormat];
-
- if (!objKeys) {
- objKeys = Object.keys(obj);
- }
-
- if (sort) {
- objKeys.sort(sort);
- }
-
- for (var i = 0; i < objKeys.length; ++i) {
- var key = objKeys[i];
-
- if (skipNulls && obj[key] === null) {
- continue;
- }
-
- keys = keys.concat(stringify(
- obj[key],
- key,
- generateArrayPrefix,
- strictNullHandling,
- skipNulls,
- encode ? encoder : null,
- filter,
- sort,
- allowDots,
- serializeDate,
- formatter,
- encodeValuesOnly
- ));
- }
-
- var joined = keys.join(delimiter);
- var prefix = options.addQueryPrefix === true ? '?' : '';
-
- return joined.length > 0 ? prefix + joined : '';
-};
diff --git a/deps/npm/node_modules/qs/lib/utils.js b/deps/npm/node_modules/qs/lib/utils.js
deleted file mode 100644
index 8775a3270c77f1..00000000000000
--- a/deps/npm/node_modules/qs/lib/utils.js
+++ /dev/null
@@ -1,213 +0,0 @@
-'use strict';
-
-var has = Object.prototype.hasOwnProperty;
-
-var hexTable = (function () {
- var array = [];
- for (var i = 0; i < 256; ++i) {
- array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());
- }
-
- return array;
-}());
-
-var compactQueue = function compactQueue(queue) {
- var obj;
-
- while (queue.length) {
- var item = queue.pop();
- obj = item.obj[item.prop];
-
- if (Array.isArray(obj)) {
- var compacted = [];
-
- for (var j = 0; j < obj.length; ++j) {
- if (typeof obj[j] !== 'undefined') {
- compacted.push(obj[j]);
- }
- }
-
- item.obj[item.prop] = compacted;
- }
- }
-
- return obj;
-};
-
-var arrayToObject = function arrayToObject(source, options) {
- var obj = options && options.plainObjects ? Object.create(null) : {};
- for (var i = 0; i < source.length; ++i) {
- if (typeof source[i] !== 'undefined') {
- obj[i] = source[i];
- }
- }
-
- return obj;
-};
-
-var merge = function merge(target, source, options) {
- if (!source) {
- return target;
- }
-
- if (typeof source !== 'object') {
- if (Array.isArray(target)) {
- target.push(source);
- } else if (typeof target === 'object') {
- if (options.plainObjects || options.allowPrototypes || !has.call(Object.prototype, source)) {
- target[source] = true;
- }
- } else {
- return [target, source];
- }
-
- return target;
- }
-
- if (typeof target !== 'object') {
- return [target].concat(source);
- }
-
- var mergeTarget = target;
- if (Array.isArray(target) && !Array.isArray(source)) {
- mergeTarget = arrayToObject(target, options);
- }
-
- if (Array.isArray(target) && Array.isArray(source)) {
- source.forEach(function (item, i) {
- if (has.call(target, i)) {
- if (target[i] && typeof target[i] === 'object') {
- target[i] = merge(target[i], item, options);
- } else {
- target.push(item);
- }
- } else {
- target[i] = item;
- }
- });
- return target;
- }
-
- return Object.keys(source).reduce(function (acc, key) {
- var value = source[key];
-
- if (has.call(acc, key)) {
- acc[key] = merge(acc[key], value, options);
- } else {
- acc[key] = value;
- }
- return acc;
- }, mergeTarget);
-};
-
-var assign = function assignSingleSource(target, source) {
- return Object.keys(source).reduce(function (acc, key) {
- acc[key] = source[key];
- return acc;
- }, target);
-};
-
-var decode = function (str) {
- try {
- return decodeURIComponent(str.replace(/\+/g, ' '));
- } catch (e) {
- return str;
- }
-};
-
-var encode = function encode(str) {
- // This code was originally written by Brian White (mscdex) for the io.js core querystring library.
- // It has been adapted here for stricter adherence to RFC 3986
- if (str.length === 0) {
- return str;
- }
-
- var string = typeof str === 'string' ? str : String(str);
-
- var out = '';
- for (var i = 0; i < string.length; ++i) {
- var c = string.charCodeAt(i);
-
- if (
- c === 0x2D // -
- || c === 0x2E // .
- || c === 0x5F // _
- || c === 0x7E // ~
- || (c >= 0x30 && c <= 0x39) // 0-9
- || (c >= 0x41 && c <= 0x5A) // a-z
- || (c >= 0x61 && c <= 0x7A) // A-Z
- ) {
- out += string.charAt(i);
- continue;
- }
-
- if (c < 0x80) {
- out = out + hexTable[c];
- continue;
- }
-
- if (c < 0x800) {
- out = out + (hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]);
- continue;
- }
-
- if (c < 0xD800 || c >= 0xE000) {
- out = out + (hexTable[0xE0 | (c >> 12)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]);
- continue;
- }
-
- i += 1;
- c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF));
- out += hexTable[0xF0 | (c >> 18)]
- + hexTable[0x80 | ((c >> 12) & 0x3F)]
- + hexTable[0x80 | ((c >> 6) & 0x3F)]
- + hexTable[0x80 | (c & 0x3F)];
- }
-
- return out;
-};
-
-var compact = function compact(value) {
- var queue = [{ obj: { o: value }, prop: 'o' }];
- var refs = [];
-
- for (var i = 0; i < queue.length; ++i) {
- var item = queue[i];
- var obj = item.obj[item.prop];
-
- var keys = Object.keys(obj);
- for (var j = 0; j < keys.length; ++j) {
- var key = keys[j];
- var val = obj[key];
- if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {
- queue.push({ obj: obj, prop: key });
- refs.push(val);
- }
- }
- }
-
- return compactQueue(queue);
-};
-
-var isRegExp = function isRegExp(obj) {
- return Object.prototype.toString.call(obj) === '[object RegExp]';
-};
-
-var isBuffer = function isBuffer(obj) {
- if (obj === null || typeof obj === 'undefined') {
- return false;
- }
-
- return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));
-};
-
-module.exports = {
- arrayToObject: arrayToObject,
- assign: assign,
- compact: compact,
- decode: decode,
- encode: encode,
- isBuffer: isBuffer,
- isRegExp: isRegExp,
- merge: merge
-};
diff --git a/deps/npm/node_modules/qs/package.json b/deps/npm/node_modules/qs/package.json
deleted file mode 100644
index 2c6549003c47e2..00000000000000
--- a/deps/npm/node_modules/qs/package.json
+++ /dev/null
@@ -1,52 +0,0 @@
-{
- "name": "qs",
- "description": "A querystring parser that supports nesting and arrays, with a depth limit",
- "homepage": "https://github.com/ljharb/qs",
- "version": "6.5.2",
- "repository": {
- "type": "git",
- "url": "https://github.com/ljharb/qs.git"
- },
- "main": "lib/index.js",
- "contributors": [
- {
- "name": "Jordan Harband",
- "email": "ljharb@gmail.com",
- "url": "http://ljharb.codes"
- }
- ],
- "keywords": [
- "querystring",
- "qs"
- ],
- "engines": {
- "node": ">=0.6"
- },
- "dependencies": {},
- "devDependencies": {
- "@ljharb/eslint-config": "^12.2.1",
- "browserify": "^16.2.0",
- "covert": "^1.1.0",
- "editorconfig-tools": "^0.1.1",
- "eslint": "^4.19.1",
- "evalmd": "^0.0.17",
- "iconv-lite": "^0.4.21",
- "mkdirp": "^0.5.1",
- "qs-iconv": "^1.0.4",
- "safe-publish-latest": "^1.1.1",
- "safer-buffer": "^2.1.2",
- "tape": "^4.9.0"
- },
- "scripts": {
- "prepublish": "safe-publish-latest && npm run dist",
- "pretest": "npm run --silent readme && npm run --silent lint",
- "test": "npm run --silent coverage",
- "tests-only": "node test",
- "readme": "evalmd README.md",
- "prelint": "editorconfig-tools check * lib/* test/*",
- "lint": "eslint lib/*.js test/*.js",
- "coverage": "covert test",
- "dist": "mkdirp dist && browserify --standalone Qs lib/index.js > dist/qs.js"
- },
- "license": "BSD-3-Clause"
-}
diff --git a/deps/npm/node_modules/qs/test/index.js b/deps/npm/node_modules/qs/test/index.js
deleted file mode 100644
index 5e6bc8fbd9b461..00000000000000
--- a/deps/npm/node_modules/qs/test/index.js
+++ /dev/null
@@ -1,7 +0,0 @@
-'use strict';
-
-require('./parse');
-
-require('./stringify');
-
-require('./utils');
diff --git a/deps/npm/node_modules/qs/test/parse.js b/deps/npm/node_modules/qs/test/parse.js
deleted file mode 100644
index 0f8fe4578a0cba..00000000000000
--- a/deps/npm/node_modules/qs/test/parse.js
+++ /dev/null
@@ -1,574 +0,0 @@
-'use strict';
-
-var test = require('tape');
-var qs = require('../');
-var utils = require('../lib/utils');
-var iconv = require('iconv-lite');
-var SaferBuffer = require('safer-buffer').Buffer;
-
-test('parse()', function (t) {
- t.test('parses a simple string', function (st) {
- st.deepEqual(qs.parse('0=foo'), { 0: 'foo' });
- st.deepEqual(qs.parse('foo=c++'), { foo: 'c ' });
- st.deepEqual(qs.parse('a[>=]=23'), { a: { '>=': '23' } });
- st.deepEqual(qs.parse('a[<=>]==23'), { a: { '<=>': '=23' } });
- st.deepEqual(qs.parse('a[==]=23'), { a: { '==': '23' } });
- st.deepEqual(qs.parse('foo', { strictNullHandling: true }), { foo: null });
- st.deepEqual(qs.parse('foo'), { foo: '' });
- st.deepEqual(qs.parse('foo='), { foo: '' });
- st.deepEqual(qs.parse('foo=bar'), { foo: 'bar' });
- st.deepEqual(qs.parse(' foo = bar = baz '), { ' foo ': ' bar = baz ' });
- st.deepEqual(qs.parse('foo=bar=baz'), { foo: 'bar=baz' });
- st.deepEqual(qs.parse('foo=bar&bar=baz'), { foo: 'bar', bar: 'baz' });
- st.deepEqual(qs.parse('foo2=bar2&baz2='), { foo2: 'bar2', baz2: '' });
- st.deepEqual(qs.parse('foo=bar&baz', { strictNullHandling: true }), { foo: 'bar', baz: null });
- st.deepEqual(qs.parse('foo=bar&baz'), { foo: 'bar', baz: '' });
- st.deepEqual(qs.parse('cht=p3&chd=t:60,40&chs=250x100&chl=Hello|World'), {
- cht: 'p3',
- chd: 't:60,40',
- chs: '250x100',
- chl: 'Hello|World'
- });
- st.end();
- });
-
- t.test('allows enabling dot notation', function (st) {
- st.deepEqual(qs.parse('a.b=c'), { 'a.b': 'c' });
- st.deepEqual(qs.parse('a.b=c', { allowDots: true }), { a: { b: 'c' } });
- st.end();
- });
-
- t.deepEqual(qs.parse('a[b]=c'), { a: { b: 'c' } }, 'parses a single nested string');
- t.deepEqual(qs.parse('a[b][c]=d'), { a: { b: { c: 'd' } } }, 'parses a double nested string');
- t.deepEqual(
- qs.parse('a[b][c][d][e][f][g][h]=i'),
- { a: { b: { c: { d: { e: { f: { '[g][h]': 'i' } } } } } } },
- 'defaults to a depth of 5'
- );
-
- t.test('only parses one level when depth = 1', function (st) {
- st.deepEqual(qs.parse('a[b][c]=d', { depth: 1 }), { a: { b: { '[c]': 'd' } } });
- st.deepEqual(qs.parse('a[b][c][d]=e', { depth: 1 }), { a: { b: { '[c][d]': 'e' } } });
- st.end();
- });
-
- t.deepEqual(qs.parse('a=b&a=c'), { a: ['b', 'c'] }, 'parses a simple array');
-
- t.test('parses an explicit array', function (st) {
- st.deepEqual(qs.parse('a[]=b'), { a: ['b'] });
- st.deepEqual(qs.parse('a[]=b&a[]=c'), { a: ['b', 'c'] });
- st.deepEqual(qs.parse('a[]=b&a[]=c&a[]=d'), { a: ['b', 'c', 'd'] });
- st.end();
- });
-
- t.test('parses a mix of simple and explicit arrays', function (st) {
- st.deepEqual(qs.parse('a=b&a[]=c'), { a: ['b', 'c'] });
- st.deepEqual(qs.parse('a[]=b&a=c'), { a: ['b', 'c'] });
- st.deepEqual(qs.parse('a[0]=b&a=c'), { a: ['b', 'c'] });
- st.deepEqual(qs.parse('a=b&a[0]=c'), { a: ['b', 'c'] });
-
- st.deepEqual(qs.parse('a[1]=b&a=c', { arrayLimit: 20 }), { a: ['b', 'c'] });
- st.deepEqual(qs.parse('a[]=b&a=c', { arrayLimit: 0 }), { a: ['b', 'c'] });
- st.deepEqual(qs.parse('a[]=b&a=c'), { a: ['b', 'c'] });
-
- st.deepEqual(qs.parse('a=b&a[1]=c', { arrayLimit: 20 }), { a: ['b', 'c'] });
- st.deepEqual(qs.parse('a=b&a[]=c', { arrayLimit: 0 }), { a: ['b', 'c'] });
- st.deepEqual(qs.parse('a=b&a[]=c'), { a: ['b', 'c'] });
-
- st.end();
- });
-
- t.test('parses a nested array', function (st) {
- st.deepEqual(qs.parse('a[b][]=c&a[b][]=d'), { a: { b: ['c', 'd'] } });
- st.deepEqual(qs.parse('a[>=]=25'), { a: { '>=': '25' } });
- st.end();
- });
-
- t.test('allows to specify array indices', function (st) {
- st.deepEqual(qs.parse('a[1]=c&a[0]=b&a[2]=d'), { a: ['b', 'c', 'd'] });
- st.deepEqual(qs.parse('a[1]=c&a[0]=b'), { a: ['b', 'c'] });
- st.deepEqual(qs.parse('a[1]=c', { arrayLimit: 20 }), { a: ['c'] });
- st.deepEqual(qs.parse('a[1]=c', { arrayLimit: 0 }), { a: { 1: 'c' } });
- st.deepEqual(qs.parse('a[1]=c'), { a: ['c'] });
- st.end();
- });
-
- t.test('limits specific array indices to arrayLimit', function (st) {
- st.deepEqual(qs.parse('a[20]=a', { arrayLimit: 20 }), { a: ['a'] });
- st.deepEqual(qs.parse('a[21]=a', { arrayLimit: 20 }), { a: { 21: 'a' } });
- st.end();
- });
-
- t.deepEqual(qs.parse('a[12b]=c'), { a: { '12b': 'c' } }, 'supports keys that begin with a number');
-
- t.test('supports encoded = signs', function (st) {
- st.deepEqual(qs.parse('he%3Dllo=th%3Dere'), { 'he=llo': 'th=ere' });
- st.end();
- });
-
- t.test('is ok with url encoded strings', function (st) {
- st.deepEqual(qs.parse('a[b%20c]=d'), { a: { 'b c': 'd' } });
- st.deepEqual(qs.parse('a[b]=c%20d'), { a: { b: 'c d' } });
- st.end();
- });
-
- t.test('allows brackets in the value', function (st) {
- st.deepEqual(qs.parse('pets=["tobi"]'), { pets: '["tobi"]' });
- st.deepEqual(qs.parse('operators=[">=", "<="]'), { operators: '[">=", "<="]' });
- st.end();
- });
-
- t.test('allows empty values', function (st) {
- st.deepEqual(qs.parse(''), {});
- st.deepEqual(qs.parse(null), {});
- st.deepEqual(qs.parse(undefined), {});
- st.end();
- });
-
- t.test('transforms arrays to objects', function (st) {
- st.deepEqual(qs.parse('foo[0]=bar&foo[bad]=baz'), { foo: { 0: 'bar', bad: 'baz' } });
- st.deepEqual(qs.parse('foo[bad]=baz&foo[0]=bar'), { foo: { bad: 'baz', 0: 'bar' } });
- st.deepEqual(qs.parse('foo[bad]=baz&foo[]=bar'), { foo: { bad: 'baz', 0: 'bar' } });
- st.deepEqual(qs.parse('foo[]=bar&foo[bad]=baz'), { foo: { 0: 'bar', bad: 'baz' } });
- st.deepEqual(qs.parse('foo[bad]=baz&foo[]=bar&foo[]=foo'), { foo: { bad: 'baz', 0: 'bar', 1: 'foo' } });
- st.deepEqual(qs.parse('foo[0][a]=a&foo[0][b]=b&foo[1][a]=aa&foo[1][b]=bb'), { foo: [{ a: 'a', b: 'b' }, { a: 'aa', b: 'bb' }] });
-
- st.deepEqual(qs.parse('a[]=b&a[t]=u&a[hasOwnProperty]=c', { allowPrototypes: false }), { a: { 0: 'b', t: 'u' } });
- st.deepEqual(qs.parse('a[]=b&a[t]=u&a[hasOwnProperty]=c', { allowPrototypes: true }), { a: { 0: 'b', t: 'u', hasOwnProperty: 'c' } });
- st.deepEqual(qs.parse('a[]=b&a[hasOwnProperty]=c&a[x]=y', { allowPrototypes: false }), { a: { 0: 'b', x: 'y' } });
- st.deepEqual(qs.parse('a[]=b&a[hasOwnProperty]=c&a[x]=y', { allowPrototypes: true }), { a: { 0: 'b', hasOwnProperty: 'c', x: 'y' } });
- st.end();
- });
-
- t.test('transforms arrays to objects (dot notation)', function (st) {
- st.deepEqual(qs.parse('foo[0].baz=bar&fool.bad=baz', { allowDots: true }), { foo: [{ baz: 'bar' }], fool: { bad: 'baz' } });
- st.deepEqual(qs.parse('foo[0].baz=bar&fool.bad.boo=baz', { allowDots: true }), { foo: [{ baz: 'bar' }], fool: { bad: { boo: 'baz' } } });
- st.deepEqual(qs.parse('foo[0][0].baz=bar&fool.bad=baz', { allowDots: true }), { foo: [[{ baz: 'bar' }]], fool: { bad: 'baz' } });
- st.deepEqual(qs.parse('foo[0].baz[0]=15&foo[0].bar=2', { allowDots: true }), { foo: [{ baz: ['15'], bar: '2' }] });
- st.deepEqual(qs.parse('foo[0].baz[0]=15&foo[0].baz[1]=16&foo[0].bar=2', { allowDots: true }), { foo: [{ baz: ['15', '16'], bar: '2' }] });
- st.deepEqual(qs.parse('foo.bad=baz&foo[0]=bar', { allowDots: true }), { foo: { bad: 'baz', 0: 'bar' } });
- st.deepEqual(qs.parse('foo.bad=baz&foo[]=bar', { allowDots: true }), { foo: { bad: 'baz', 0: 'bar' } });
- st.deepEqual(qs.parse('foo[]=bar&foo.bad=baz', { allowDots: true }), { foo: { 0: 'bar', bad: 'baz' } });
- st.deepEqual(qs.parse('foo.bad=baz&foo[]=bar&foo[]=foo', { allowDots: true }), { foo: { bad: 'baz', 0: 'bar', 1: 'foo' } });
- st.deepEqual(qs.parse('foo[0].a=a&foo[0].b=b&foo[1].a=aa&foo[1].b=bb', { allowDots: true }), { foo: [{ a: 'a', b: 'b' }, { a: 'aa', b: 'bb' }] });
- st.end();
- });
-
- t.test('correctly prunes undefined values when converting an array to an object', function (st) {
- st.deepEqual(qs.parse('a[2]=b&a[99999999]=c'), { a: { 2: 'b', 99999999: 'c' } });
- st.end();
- });
-
- t.test('supports malformed uri characters', function (st) {
- st.deepEqual(qs.parse('{%:%}', { strictNullHandling: true }), { '{%:%}': null });
- st.deepEqual(qs.parse('{%:%}='), { '{%:%}': '' });
- st.deepEqual(qs.parse('foo=%:%}'), { foo: '%:%}' });
- st.end();
- });
-
- t.test('doesn\'t produce empty keys', function (st) {
- st.deepEqual(qs.parse('_r=1&'), { _r: '1' });
- st.end();
- });
-
- t.test('cannot access Object prototype', function (st) {
- qs.parse('constructor[prototype][bad]=bad');
- qs.parse('bad[constructor][prototype][bad]=bad');
- st.equal(typeof Object.prototype.bad, 'undefined');
- st.end();
- });
-
- t.test('parses arrays of objects', function (st) {
- st.deepEqual(qs.parse('a[][b]=c'), { a: [{ b: 'c' }] });
- st.deepEqual(qs.parse('a[0][b]=c'), { a: [{ b: 'c' }] });
- st.end();
- });
-
- t.test('allows for empty strings in arrays', function (st) {
- st.deepEqual(qs.parse('a[]=b&a[]=&a[]=c'), { a: ['b', '', 'c'] });
-
- st.deepEqual(
- qs.parse('a[0]=b&a[1]&a[2]=c&a[19]=', { strictNullHandling: true, arrayLimit: 20 }),
- { a: ['b', null, 'c', ''] },
- 'with arrayLimit 20 + array indices: null then empty string works'
- );
- st.deepEqual(
- qs.parse('a[]=b&a[]&a[]=c&a[]=', { strictNullHandling: true, arrayLimit: 0 }),
- { a: ['b', null, 'c', ''] },
- 'with arrayLimit 0 + array brackets: null then empty string works'
- );
-
- st.deepEqual(
- qs.parse('a[0]=b&a[1]=&a[2]=c&a[19]', { strictNullHandling: true, arrayLimit: 20 }),
- { a: ['b', '', 'c', null] },
- 'with arrayLimit 20 + array indices: empty string then null works'
- );
- st.deepEqual(
- qs.parse('a[]=b&a[]=&a[]=c&a[]', { strictNullHandling: true, arrayLimit: 0 }),
- { a: ['b', '', 'c', null] },
- 'with arrayLimit 0 + array brackets: empty string then null works'
- );
-
- st.deepEqual(
- qs.parse('a[]=&a[]=b&a[]=c'),
- { a: ['', 'b', 'c'] },
- 'array brackets: empty strings work'
- );
- st.end();
- });
-
- t.test('compacts sparse arrays', function (st) {
- st.deepEqual(qs.parse('a[10]=1&a[2]=2', { arrayLimit: 20 }), { a: ['2', '1'] });
- st.deepEqual(qs.parse('a[1][b][2][c]=1', { arrayLimit: 20 }), { a: [{ b: [{ c: '1' }] }] });
- st.deepEqual(qs.parse('a[1][2][3][c]=1', { arrayLimit: 20 }), { a: [[[{ c: '1' }]]] });
- st.deepEqual(qs.parse('a[1][2][3][c][1]=1', { arrayLimit: 20 }), { a: [[[{ c: ['1'] }]]] });
- st.end();
- });
-
- t.test('parses semi-parsed strings', function (st) {
- st.deepEqual(qs.parse({ 'a[b]': 'c' }), { a: { b: 'c' } });
- st.deepEqual(qs.parse({ 'a[b]': 'c', 'a[d]': 'e' }), { a: { b: 'c', d: 'e' } });
- st.end();
- });
-
- t.test('parses buffers correctly', function (st) {
- var b = SaferBuffer.from('test');
- st.deepEqual(qs.parse({ a: b }), { a: b });
- st.end();
- });
-
- t.test('continues parsing when no parent is found', function (st) {
- st.deepEqual(qs.parse('[]=&a=b'), { 0: '', a: 'b' });
- st.deepEqual(qs.parse('[]&a=b', { strictNullHandling: true }), { 0: null, a: 'b' });
- st.deepEqual(qs.parse('[foo]=bar'), { foo: 'bar' });
- st.end();
- });
-
- t.test('does not error when parsing a very long array', function (st) {
- var str = 'a[]=a';
- while (Buffer.byteLength(str) < 128 * 1024) {
- str = str + '&' + str;
- }
-
- st.doesNotThrow(function () {
- qs.parse(str);
- });
-
- st.end();
- });
-
- t.test('should not throw when a native prototype has an enumerable property', { parallel: false }, function (st) {
- Object.prototype.crash = '';
- Array.prototype.crash = '';
- st.doesNotThrow(qs.parse.bind(null, 'a=b'));
- st.deepEqual(qs.parse('a=b'), { a: 'b' });
- st.doesNotThrow(qs.parse.bind(null, 'a[][b]=c'));
- st.deepEqual(qs.parse('a[][b]=c'), { a: [{ b: 'c' }] });
- delete Object.prototype.crash;
- delete Array.prototype.crash;
- st.end();
- });
-
- t.test('parses a string with an alternative string delimiter', function (st) {
- st.deepEqual(qs.parse('a=b;c=d', { delimiter: ';' }), { a: 'b', c: 'd' });
- st.end();
- });
-
- t.test('parses a string with an alternative RegExp delimiter', function (st) {
- st.deepEqual(qs.parse('a=b; c=d', { delimiter: /[;,] */ }), { a: 'b', c: 'd' });
- st.end();
- });
-
- t.test('does not use non-splittable objects as delimiters', function (st) {
- st.deepEqual(qs.parse('a=b&c=d', { delimiter: true }), { a: 'b', c: 'd' });
- st.end();
- });
-
- t.test('allows overriding parameter limit', function (st) {
- st.deepEqual(qs.parse('a=b&c=d', { parameterLimit: 1 }), { a: 'b' });
- st.end();
- });
-
- t.test('allows setting the parameter limit to Infinity', function (st) {
- st.deepEqual(qs.parse('a=b&c=d', { parameterLimit: Infinity }), { a: 'b', c: 'd' });
- st.end();
- });
-
- t.test('allows overriding array limit', function (st) {
- st.deepEqual(qs.parse('a[0]=b', { arrayLimit: -1 }), { a: { 0: 'b' } });
- st.deepEqual(qs.parse('a[-1]=b', { arrayLimit: -1 }), { a: { '-1': 'b' } });
- st.deepEqual(qs.parse('a[0]=b&a[1]=c', { arrayLimit: 0 }), { a: { 0: 'b', 1: 'c' } });
- st.end();
- });
-
- t.test('allows disabling array parsing', function (st) {
- st.deepEqual(qs.parse('a[0]=b&a[1]=c', { parseArrays: false }), { a: { 0: 'b', 1: 'c' } });
- st.end();
- });
-
- t.test('allows for query string prefix', function (st) {
- st.deepEqual(qs.parse('?foo=bar', { ignoreQueryPrefix: true }), { foo: 'bar' });
- st.deepEqual(qs.parse('foo=bar', { ignoreQueryPrefix: true }), { foo: 'bar' });
- st.deepEqual(qs.parse('?foo=bar', { ignoreQueryPrefix: false }), { '?foo': 'bar' });
- st.end();
- });
-
- t.test('parses an object', function (st) {
- var input = {
- 'user[name]': { 'pop[bob]': 3 },
- 'user[email]': null
- };
-
- var expected = {
- user: {
- name: { 'pop[bob]': 3 },
- email: null
- }
- };
-
- var result = qs.parse(input);
-
- st.deepEqual(result, expected);
- st.end();
- });
-
- t.test('parses an object in dot notation', function (st) {
- var input = {
- 'user.name': { 'pop[bob]': 3 },
- 'user.email.': null
- };
-
- var expected = {
- user: {
- name: { 'pop[bob]': 3 },
- email: null
- }
- };
-
- var result = qs.parse(input, { allowDots: true });
-
- st.deepEqual(result, expected);
- st.end();
- });
-
- t.test('parses an object and not child values', function (st) {
- var input = {
- 'user[name]': { 'pop[bob]': { test: 3 } },
- 'user[email]': null
- };
-
- var expected = {
- user: {
- name: { 'pop[bob]': { test: 3 } },
- email: null
- }
- };
-
- var result = qs.parse(input);
-
- st.deepEqual(result, expected);
- st.end();
- });
-
- t.test('does not blow up when Buffer global is missing', function (st) {
- var tempBuffer = global.Buffer;
- delete global.Buffer;
- var result = qs.parse('a=b&c=d');
- global.Buffer = tempBuffer;
- st.deepEqual(result, { a: 'b', c: 'd' });
- st.end();
- });
-
- t.test('does not crash when parsing circular references', function (st) {
- var a = {};
- a.b = a;
-
- var parsed;
-
- st.doesNotThrow(function () {
- parsed = qs.parse({ 'foo[bar]': 'baz', 'foo[baz]': a });
- });
-
- st.equal('foo' in parsed, true, 'parsed has "foo" property');
- st.equal('bar' in parsed.foo, true);
- st.equal('baz' in parsed.foo, true);
- st.equal(parsed.foo.bar, 'baz');
- st.deepEqual(parsed.foo.baz, a);
- st.end();
- });
-
- t.test('does not crash when parsing deep objects', function (st) {
- var parsed;
- var str = 'foo';
-
- for (var i = 0; i < 5000; i++) {
- str += '[p]';
- }
-
- str += '=bar';
-
- st.doesNotThrow(function () {
- parsed = qs.parse(str, { depth: 5000 });
- });
-
- st.equal('foo' in parsed, true, 'parsed has "foo" property');
-
- var depth = 0;
- var ref = parsed.foo;
- while ((ref = ref.p)) {
- depth += 1;
- }
-
- st.equal(depth, 5000, 'parsed is 5000 properties deep');
-
- st.end();
- });
-
- t.test('parses null objects correctly', { skip: !Object.create }, function (st) {
- var a = Object.create(null);
- a.b = 'c';
-
- st.deepEqual(qs.parse(a), { b: 'c' });
- var result = qs.parse({ a: a });
- st.equal('a' in result, true, 'result has "a" property');
- st.deepEqual(result.a, a);
- st.end();
- });
-
- t.test('parses dates correctly', function (st) {
- var now = new Date();
- st.deepEqual(qs.parse({ a: now }), { a: now });
- st.end();
- });
-
- t.test('parses regular expressions correctly', function (st) {
- var re = /^test$/;
- st.deepEqual(qs.parse({ a: re }), { a: re });
- st.end();
- });
-
- t.test('does not allow overwriting prototype properties', function (st) {
- st.deepEqual(qs.parse('a[hasOwnProperty]=b', { allowPrototypes: false }), {});
- st.deepEqual(qs.parse('hasOwnProperty=b', { allowPrototypes: false }), {});
-
- st.deepEqual(
- qs.parse('toString', { allowPrototypes: false }),
- {},
- 'bare "toString" results in {}'
- );
-
- st.end();
- });
-
- t.test('can allow overwriting prototype properties', function (st) {
- st.deepEqual(qs.parse('a[hasOwnProperty]=b', { allowPrototypes: true }), { a: { hasOwnProperty: 'b' } });
- st.deepEqual(qs.parse('hasOwnProperty=b', { allowPrototypes: true }), { hasOwnProperty: 'b' });
-
- st.deepEqual(
- qs.parse('toString', { allowPrototypes: true }),
- { toString: '' },
- 'bare "toString" results in { toString: "" }'
- );
-
- st.end();
- });
-
- t.test('params starting with a closing bracket', function (st) {
- st.deepEqual(qs.parse(']=toString'), { ']': 'toString' });
- st.deepEqual(qs.parse(']]=toString'), { ']]': 'toString' });
- st.deepEqual(qs.parse(']hello]=toString'), { ']hello]': 'toString' });
- st.end();
- });
-
- t.test('params starting with a starting bracket', function (st) {
- st.deepEqual(qs.parse('[=toString'), { '[': 'toString' });
- st.deepEqual(qs.parse('[[=toString'), { '[[': 'toString' });
- st.deepEqual(qs.parse('[hello[=toString'), { '[hello[': 'toString' });
- st.end();
- });
-
- t.test('add keys to objects', function (st) {
- st.deepEqual(
- qs.parse('a[b]=c&a=d'),
- { a: { b: 'c', d: true } },
- 'can add keys to objects'
- );
-
- st.deepEqual(
- qs.parse('a[b]=c&a=toString'),
- { a: { b: 'c' } },
- 'can not overwrite prototype'
- );
-
- st.deepEqual(
- qs.parse('a[b]=c&a=toString', { allowPrototypes: true }),
- { a: { b: 'c', toString: true } },
- 'can overwrite prototype with allowPrototypes true'
- );
-
- st.deepEqual(
- qs.parse('a[b]=c&a=toString', { plainObjects: true }),
- { a: { b: 'c', toString: true } },
- 'can overwrite prototype with plainObjects true'
- );
-
- st.end();
- });
-
- t.test('can return null objects', { skip: !Object.create }, function (st) {
- var expected = Object.create(null);
- expected.a = Object.create(null);
- expected.a.b = 'c';
- expected.a.hasOwnProperty = 'd';
- st.deepEqual(qs.parse('a[b]=c&a[hasOwnProperty]=d', { plainObjects: true }), expected);
- st.deepEqual(qs.parse(null, { plainObjects: true }), Object.create(null));
- var expectedArray = Object.create(null);
- expectedArray.a = Object.create(null);
- expectedArray.a[0] = 'b';
- expectedArray.a.c = 'd';
- st.deepEqual(qs.parse('a[]=b&a[c]=d', { plainObjects: true }), expectedArray);
- st.end();
- });
-
- t.test('can parse with custom encoding', function (st) {
- st.deepEqual(qs.parse('%8c%a7=%91%e5%8d%e3%95%7b', {
- decoder: function (str) {
- var reg = /%([0-9A-F]{2})/ig;
- var result = [];
- var parts = reg.exec(str);
- while (parts) {
- result.push(parseInt(parts[1], 16));
- parts = reg.exec(str);
- }
- return iconv.decode(SaferBuffer.from(result), 'shift_jis').toString();
- }
- }), { 県: '大阪府' });
- st.end();
- });
-
- t.test('receives the default decoder as a second argument', function (st) {
- st.plan(1);
- qs.parse('a', {
- decoder: function (str, defaultDecoder) {
- st.equal(defaultDecoder, utils.decode);
- }
- });
- st.end();
- });
-
- t.test('throws error with wrong decoder', function (st) {
- st['throws'](function () {
- qs.parse({}, { decoder: 'string' });
- }, new TypeError('Decoder has to be a function.'));
- st.end();
- });
-
- t.test('does not mutate the options argument', function (st) {
- var options = {};
- qs.parse('a[b]=true', options);
- st.deepEqual(options, {});
- st.end();
- });
-
- t.end();
-});
diff --git a/deps/npm/node_modules/qs/test/stringify.js b/deps/npm/node_modules/qs/test/stringify.js
deleted file mode 100644
index 165ac621fe3882..00000000000000
--- a/deps/npm/node_modules/qs/test/stringify.js
+++ /dev/null
@@ -1,597 +0,0 @@
-'use strict';
-
-var test = require('tape');
-var qs = require('../');
-var utils = require('../lib/utils');
-var iconv = require('iconv-lite');
-var SaferBuffer = require('safer-buffer').Buffer;
-
-test('stringify()', function (t) {
- t.test('stringifies a querystring object', function (st) {
- st.equal(qs.stringify({ a: 'b' }), 'a=b');
- st.equal(qs.stringify({ a: 1 }), 'a=1');
- st.equal(qs.stringify({ a: 1, b: 2 }), 'a=1&b=2');
- st.equal(qs.stringify({ a: 'A_Z' }), 'a=A_Z');
- st.equal(qs.stringify({ a: '€' }), 'a=%E2%82%AC');
- st.equal(qs.stringify({ a: '' }), 'a=%EE%80%80');
- st.equal(qs.stringify({ a: 'א' }), 'a=%D7%90');
- st.equal(qs.stringify({ a: '𐐷' }), 'a=%F0%90%90%B7');
- st.end();
- });
-
- t.test('adds query prefix', function (st) {
- st.equal(qs.stringify({ a: 'b' }, { addQueryPrefix: true }), '?a=b');
- st.end();
- });
-
- t.test('with query prefix, outputs blank string given an empty object', function (st) {
- st.equal(qs.stringify({}, { addQueryPrefix: true }), '');
- st.end();
- });
-
- t.test('stringifies a nested object', function (st) {
- st.equal(qs.stringify({ a: { b: 'c' } }), 'a%5Bb%5D=c');
- st.equal(qs.stringify({ a: { b: { c: { d: 'e' } } } }), 'a%5Bb%5D%5Bc%5D%5Bd%5D=e');
- st.end();
- });
-
- t.test('stringifies a nested object with dots notation', function (st) {
- st.equal(qs.stringify({ a: { b: 'c' } }, { allowDots: true }), 'a.b=c');
- st.equal(qs.stringify({ a: { b: { c: { d: 'e' } } } }, { allowDots: true }), 'a.b.c.d=e');
- st.end();
- });
-
- t.test('stringifies an array value', function (st) {
- st.equal(
- qs.stringify({ a: ['b', 'c', 'd'] }, { arrayFormat: 'indices' }),
- 'a%5B0%5D=b&a%5B1%5D=c&a%5B2%5D=d',
- 'indices => indices'
- );
- st.equal(
- qs.stringify({ a: ['b', 'c', 'd'] }, { arrayFormat: 'brackets' }),
- 'a%5B%5D=b&a%5B%5D=c&a%5B%5D=d',
- 'brackets => brackets'
- );
- st.equal(
- qs.stringify({ a: ['b', 'c', 'd'] }),
- 'a%5B0%5D=b&a%5B1%5D=c&a%5B2%5D=d',
- 'default => indices'
- );
- st.end();
- });
-
- t.test('omits nulls when asked', function (st) {
- st.equal(qs.stringify({ a: 'b', c: null }, { skipNulls: true }), 'a=b');
- st.end();
- });
-
- t.test('omits nested nulls when asked', function (st) {
- st.equal(qs.stringify({ a: { b: 'c', d: null } }, { skipNulls: true }), 'a%5Bb%5D=c');
- st.end();
- });
-
- t.test('omits array indices when asked', function (st) {
- st.equal(qs.stringify({ a: ['b', 'c', 'd'] }, { indices: false }), 'a=b&a=c&a=d');
- st.end();
- });
-
- t.test('stringifies a nested array value', function (st) {
- st.equal(qs.stringify({ a: { b: ['c', 'd'] } }, { arrayFormat: 'indices' }), 'a%5Bb%5D%5B0%5D=c&a%5Bb%5D%5B1%5D=d');
- st.equal(qs.stringify({ a: { b: ['c', 'd'] } }, { arrayFormat: 'brackets' }), 'a%5Bb%5D%5B%5D=c&a%5Bb%5D%5B%5D=d');
- st.equal(qs.stringify({ a: { b: ['c', 'd'] } }), 'a%5Bb%5D%5B0%5D=c&a%5Bb%5D%5B1%5D=d');
- st.end();
- });
-
- t.test('stringifies a nested array value with dots notation', function (st) {
- st.equal(
- qs.stringify(
- { a: { b: ['c', 'd'] } },
- { allowDots: true, encode: false, arrayFormat: 'indices' }
- ),
- 'a.b[0]=c&a.b[1]=d',
- 'indices: stringifies with dots + indices'
- );
- st.equal(
- qs.stringify(
- { a: { b: ['c', 'd'] } },
- { allowDots: true, encode: false, arrayFormat: 'brackets' }
- ),
- 'a.b[]=c&a.b[]=d',
- 'brackets: stringifies with dots + brackets'
- );
- st.equal(
- qs.stringify(
- { a: { b: ['c', 'd'] } },
- { allowDots: true, encode: false }
- ),
- 'a.b[0]=c&a.b[1]=d',
- 'default: stringifies with dots + indices'
- );
- st.end();
- });
-
- t.test('stringifies an object inside an array', function (st) {
- st.equal(
- qs.stringify({ a: [{ b: 'c' }] }, { arrayFormat: 'indices' }),
- 'a%5B0%5D%5Bb%5D=c',
- 'indices => brackets'
- );
- st.equal(
- qs.stringify({ a: [{ b: 'c' }] }, { arrayFormat: 'brackets' }),
- 'a%5B%5D%5Bb%5D=c',
- 'brackets => brackets'
- );
- st.equal(
- qs.stringify({ a: [{ b: 'c' }] }),
- 'a%5B0%5D%5Bb%5D=c',
- 'default => indices'
- );
-
- st.equal(
- qs.stringify({ a: [{ b: { c: [1] } }] }, { arrayFormat: 'indices' }),
- 'a%5B0%5D%5Bb%5D%5Bc%5D%5B0%5D=1',
- 'indices => indices'
- );
-
- st.equal(
- qs.stringify({ a: [{ b: { c: [1] } }] }, { arrayFormat: 'brackets' }),
- 'a%5B%5D%5Bb%5D%5Bc%5D%5B%5D=1',
- 'brackets => brackets'
- );
-
- st.equal(
- qs.stringify({ a: [{ b: { c: [1] } }] }),
- 'a%5B0%5D%5Bb%5D%5Bc%5D%5B0%5D=1',
- 'default => indices'
- );
-
- st.end();
- });
-
- t.test('stringifies an array with mixed objects and primitives', function (st) {
- st.equal(
- qs.stringify({ a: [{ b: 1 }, 2, 3] }, { encode: false, arrayFormat: 'indices' }),
- 'a[0][b]=1&a[1]=2&a[2]=3',
- 'indices => indices'
- );
- st.equal(
- qs.stringify({ a: [{ b: 1 }, 2, 3] }, { encode: false, arrayFormat: 'brackets' }),
- 'a[][b]=1&a[]=2&a[]=3',
- 'brackets => brackets'
- );
- st.equal(
- qs.stringify({ a: [{ b: 1 }, 2, 3] }, { encode: false }),
- 'a[0][b]=1&a[1]=2&a[2]=3',
- 'default => indices'
- );
-
- st.end();
- });
-
- t.test('stringifies an object inside an array with dots notation', function (st) {
- st.equal(
- qs.stringify(
- { a: [{ b: 'c' }] },
- { allowDots: true, encode: false, arrayFormat: 'indices' }
- ),
- 'a[0].b=c',
- 'indices => indices'
- );
- st.equal(
- qs.stringify(
- { a: [{ b: 'c' }] },
- { allowDots: true, encode: false, arrayFormat: 'brackets' }
- ),
- 'a[].b=c',
- 'brackets => brackets'
- );
- st.equal(
- qs.stringify(
- { a: [{ b: 'c' }] },
- { allowDots: true, encode: false }
- ),
- 'a[0].b=c',
- 'default => indices'
- );
-
- st.equal(
- qs.stringify(
- { a: [{ b: { c: [1] } }] },
- { allowDots: true, encode: false, arrayFormat: 'indices' }
- ),
- 'a[0].b.c[0]=1',
- 'indices => indices'
- );
- st.equal(
- qs.stringify(
- { a: [{ b: { c: [1] } }] },
- { allowDots: true, encode: false, arrayFormat: 'brackets' }
- ),
- 'a[].b.c[]=1',
- 'brackets => brackets'
- );
- st.equal(
- qs.stringify(
- { a: [{ b: { c: [1] } }] },
- { allowDots: true, encode: false }
- ),
- 'a[0].b.c[0]=1',
- 'default => indices'
- );
-
- st.end();
- });
-
- t.test('does not omit object keys when indices = false', function (st) {
- st.equal(qs.stringify({ a: [{ b: 'c' }] }, { indices: false }), 'a%5Bb%5D=c');
- st.end();
- });
-
- t.test('uses indices notation for arrays when indices=true', function (st) {
- st.equal(qs.stringify({ a: ['b', 'c'] }, { indices: true }), 'a%5B0%5D=b&a%5B1%5D=c');
- st.end();
- });
-
- t.test('uses indices notation for arrays when no arrayFormat is specified', function (st) {
- st.equal(qs.stringify({ a: ['b', 'c'] }), 'a%5B0%5D=b&a%5B1%5D=c');
- st.end();
- });
-
- t.test('uses indices notation for arrays when no arrayFormat=indices', function (st) {
- st.equal(qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'indices' }), 'a%5B0%5D=b&a%5B1%5D=c');
- st.end();
- });
-
- t.test('uses repeat notation for arrays when no arrayFormat=repeat', function (st) {
- st.equal(qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'repeat' }), 'a=b&a=c');
- st.end();
- });
-
- t.test('uses brackets notation for arrays when no arrayFormat=brackets', function (st) {
- st.equal(qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'brackets' }), 'a%5B%5D=b&a%5B%5D=c');
- st.end();
- });
-
- t.test('stringifies a complicated object', function (st) {
- st.equal(qs.stringify({ a: { b: 'c', d: 'e' } }), 'a%5Bb%5D=c&a%5Bd%5D=e');
- st.end();
- });
-
- t.test('stringifies an empty value', function (st) {
- st.equal(qs.stringify({ a: '' }), 'a=');
- st.equal(qs.stringify({ a: null }, { strictNullHandling: true }), 'a');
-
- st.equal(qs.stringify({ a: '', b: '' }), 'a=&b=');
- st.equal(qs.stringify({ a: null, b: '' }, { strictNullHandling: true }), 'a&b=');
-
- st.equal(qs.stringify({ a: { b: '' } }), 'a%5Bb%5D=');
- st.equal(qs.stringify({ a: { b: null } }, { strictNullHandling: true }), 'a%5Bb%5D');
- st.equal(qs.stringify({ a: { b: null } }, { strictNullHandling: false }), 'a%5Bb%5D=');
-
- st.end();
- });
-
- t.test('stringifies a null object', { skip: !Object.create }, function (st) {
- var obj = Object.create(null);
- obj.a = 'b';
- st.equal(qs.stringify(obj), 'a=b');
- st.end();
- });
-
- t.test('returns an empty string for invalid input', function (st) {
- st.equal(qs.stringify(undefined), '');
- st.equal(qs.stringify(false), '');
- st.equal(qs.stringify(null), '');
- st.equal(qs.stringify(''), '');
- st.end();
- });
-
- t.test('stringifies an object with a null object as a child', { skip: !Object.create }, function (st) {
- var obj = { a: Object.create(null) };
-
- obj.a.b = 'c';
- st.equal(qs.stringify(obj), 'a%5Bb%5D=c');
- st.end();
- });
-
- t.test('drops keys with a value of undefined', function (st) {
- st.equal(qs.stringify({ a: undefined }), '');
-
- st.equal(qs.stringify({ a: { b: undefined, c: null } }, { strictNullHandling: true }), 'a%5Bc%5D');
- st.equal(qs.stringify({ a: { b: undefined, c: null } }, { strictNullHandling: false }), 'a%5Bc%5D=');
- st.equal(qs.stringify({ a: { b: undefined, c: '' } }), 'a%5Bc%5D=');
- st.end();
- });
-
- t.test('url encodes values', function (st) {
- st.equal(qs.stringify({ a: 'b c' }), 'a=b%20c');
- st.end();
- });
-
- t.test('stringifies a date', function (st) {
- var now = new Date();
- var str = 'a=' + encodeURIComponent(now.toISOString());
- st.equal(qs.stringify({ a: now }), str);
- st.end();
- });
-
- t.test('stringifies the weird object from qs', function (st) {
- st.equal(qs.stringify({ 'my weird field': '~q1!2"\'w$5&7/z8)?' }), 'my%20weird%20field=~q1%212%22%27w%245%267%2Fz8%29%3F');
- st.end();
- });
-
- t.test('skips properties that are part of the object prototype', function (st) {
- Object.prototype.crash = 'test';
- st.equal(qs.stringify({ a: 'b' }), 'a=b');
- st.equal(qs.stringify({ a: { b: 'c' } }), 'a%5Bb%5D=c');
- delete Object.prototype.crash;
- st.end();
- });
-
- t.test('stringifies boolean values', function (st) {
- st.equal(qs.stringify({ a: true }), 'a=true');
- st.equal(qs.stringify({ a: { b: true } }), 'a%5Bb%5D=true');
- st.equal(qs.stringify({ b: false }), 'b=false');
- st.equal(qs.stringify({ b: { c: false } }), 'b%5Bc%5D=false');
- st.end();
- });
-
- t.test('stringifies buffer values', function (st) {
- st.equal(qs.stringify({ a: SaferBuffer.from('test') }), 'a=test');
- st.equal(qs.stringify({ a: { b: SaferBuffer.from('test') } }), 'a%5Bb%5D=test');
- st.end();
- });
-
- t.test('stringifies an object using an alternative delimiter', function (st) {
- st.equal(qs.stringify({ a: 'b', c: 'd' }, { delimiter: ';' }), 'a=b;c=d');
- st.end();
- });
-
- t.test('doesn\'t blow up when Buffer global is missing', function (st) {
- var tempBuffer = global.Buffer;
- delete global.Buffer;
- var result = qs.stringify({ a: 'b', c: 'd' });
- global.Buffer = tempBuffer;
- st.equal(result, 'a=b&c=d');
- st.end();
- });
-
- t.test('selects properties when filter=array', function (st) {
- st.equal(qs.stringify({ a: 'b' }, { filter: ['a'] }), 'a=b');
- st.equal(qs.stringify({ a: 1 }, { filter: [] }), '');
-
- st.equal(
- qs.stringify(
- { a: { b: [1, 2, 3, 4], c: 'd' }, c: 'f' },
- { filter: ['a', 'b', 0, 2], arrayFormat: 'indices' }
- ),
- 'a%5Bb%5D%5B0%5D=1&a%5Bb%5D%5B2%5D=3',
- 'indices => indices'
- );
- st.equal(
- qs.stringify(
- { a: { b: [1, 2, 3, 4], c: 'd' }, c: 'f' },
- { filter: ['a', 'b', 0, 2], arrayFormat: 'brackets' }
- ),
- 'a%5Bb%5D%5B%5D=1&a%5Bb%5D%5B%5D=3',
- 'brackets => brackets'
- );
- st.equal(
- qs.stringify(
- { a: { b: [1, 2, 3, 4], c: 'd' }, c: 'f' },
- { filter: ['a', 'b', 0, 2] }
- ),
- 'a%5Bb%5D%5B0%5D=1&a%5Bb%5D%5B2%5D=3',
- 'default => indices'
- );
-
- st.end();
- });
-
- t.test('supports custom representations when filter=function', function (st) {
- var calls = 0;
- var obj = { a: 'b', c: 'd', e: { f: new Date(1257894000000) } };
- var filterFunc = function (prefix, value) {
- calls += 1;
- if (calls === 1) {
- st.equal(prefix, '', 'prefix is empty');
- st.equal(value, obj);
- } else if (prefix === 'c') {
- return void 0;
- } else if (value instanceof Date) {
- st.equal(prefix, 'e[f]');
- return value.getTime();
- }
- return value;
- };
-
- st.equal(qs.stringify(obj, { filter: filterFunc }), 'a=b&e%5Bf%5D=1257894000000');
- st.equal(calls, 5);
- st.end();
- });
-
- t.test('can disable uri encoding', function (st) {
- st.equal(qs.stringify({ a: 'b' }, { encode: false }), 'a=b');
- st.equal(qs.stringify({ a: { b: 'c' } }, { encode: false }), 'a[b]=c');
- st.equal(qs.stringify({ a: 'b', c: null }, { strictNullHandling: true, encode: false }), 'a=b&c');
- st.end();
- });
-
- t.test('can sort the keys', function (st) {
- var sort = function (a, b) {
- return a.localeCompare(b);
- };
- st.equal(qs.stringify({ a: 'c', z: 'y', b: 'f' }, { sort: sort }), 'a=c&b=f&z=y');
- st.equal(qs.stringify({ a: 'c', z: { j: 'a', i: 'b' }, b: 'f' }, { sort: sort }), 'a=c&b=f&z%5Bi%5D=b&z%5Bj%5D=a');
- st.end();
- });
-
- t.test('can sort the keys at depth 3 or more too', function (st) {
- var sort = function (a, b) {
- return a.localeCompare(b);
- };
- st.equal(
- qs.stringify(
- { a: 'a', z: { zj: { zjb: 'zjb', zja: 'zja' }, zi: { zib: 'zib', zia: 'zia' } }, b: 'b' },
- { sort: sort, encode: false }
- ),
- 'a=a&b=b&z[zi][zia]=zia&z[zi][zib]=zib&z[zj][zja]=zja&z[zj][zjb]=zjb'
- );
- st.equal(
- qs.stringify(
- { a: 'a', z: { zj: { zjb: 'zjb', zja: 'zja' }, zi: { zib: 'zib', zia: 'zia' } }, b: 'b' },
- { sort: null, encode: false }
- ),
- 'a=a&z[zj][zjb]=zjb&z[zj][zja]=zja&z[zi][zib]=zib&z[zi][zia]=zia&b=b'
- );
- st.end();
- });
-
- t.test('can stringify with custom encoding', function (st) {
- st.equal(qs.stringify({ 県: '大阪府', '': '' }, {
- encoder: function (str) {
- if (str.length === 0) {
- return '';
- }
- var buf = iconv.encode(str, 'shiftjis');
- var result = [];
- for (var i = 0; i < buf.length; ++i) {
- result.push(buf.readUInt8(i).toString(16));
- }
- return '%' + result.join('%');
- }
- }), '%8c%a7=%91%e5%8d%e3%95%7b&=');
- st.end();
- });
-
- t.test('receives the default encoder as a second argument', function (st) {
- st.plan(2);
- qs.stringify({ a: 1 }, {
- encoder: function (str, defaultEncoder) {
- st.equal(defaultEncoder, utils.encode);
- }
- });
- st.end();
- });
-
- t.test('throws error with wrong encoder', function (st) {
- st['throws'](function () {
- qs.stringify({}, { encoder: 'string' });
- }, new TypeError('Encoder has to be a function.'));
- st.end();
- });
-
- t.test('can use custom encoder for a buffer object', { skip: typeof Buffer === 'undefined' }, function (st) {
- st.equal(qs.stringify({ a: SaferBuffer.from([1]) }, {
- encoder: function (buffer) {
- if (typeof buffer === 'string') {
- return buffer;
- }
- return String.fromCharCode(buffer.readUInt8(0) + 97);
- }
- }), 'a=b');
- st.end();
- });
-
- t.test('serializeDate option', function (st) {
- var date = new Date();
- st.equal(
- qs.stringify({ a: date }),
- 'a=' + date.toISOString().replace(/:/g, '%3A'),
- 'default is toISOString'
- );
-
- var mutatedDate = new Date();
- mutatedDate.toISOString = function () {
- throw new SyntaxError();
- };
- st['throws'](function () {
- mutatedDate.toISOString();
- }, SyntaxError);
- st.equal(
- qs.stringify({ a: mutatedDate }),
- 'a=' + Date.prototype.toISOString.call(mutatedDate).replace(/:/g, '%3A'),
- 'toISOString works even when method is not locally present'
- );
-
- var specificDate = new Date(6);
- st.equal(
- qs.stringify(
- { a: specificDate },
- { serializeDate: function (d) { return d.getTime() * 7; } }
- ),
- 'a=42',
- 'custom serializeDate function called'
- );
-
- st.end();
- });
-
- t.test('RFC 1738 spaces serialization', function (st) {
- st.equal(qs.stringify({ a: 'b c' }, { format: qs.formats.RFC1738 }), 'a=b+c');
- st.equal(qs.stringify({ 'a b': 'c d' }, { format: qs.formats.RFC1738 }), 'a+b=c+d');
- st.end();
- });
-
- t.test('RFC 3986 spaces serialization', function (st) {
- st.equal(qs.stringify({ a: 'b c' }, { format: qs.formats.RFC3986 }), 'a=b%20c');
- st.equal(qs.stringify({ 'a b': 'c d' }, { format: qs.formats.RFC3986 }), 'a%20b=c%20d');
- st.end();
- });
-
- t.test('Backward compatibility to RFC 3986', function (st) {
- st.equal(qs.stringify({ a: 'b c' }), 'a=b%20c');
- st.end();
- });
-
- t.test('Edge cases and unknown formats', function (st) {
- ['UFO1234', false, 1234, null, {}, []].forEach(
- function (format) {
- st['throws'](
- function () {
- qs.stringify({ a: 'b c' }, { format: format });
- },
- new TypeError('Unknown format option provided.')
- );
- }
- );
- st.end();
- });
-
- t.test('encodeValuesOnly', function (st) {
- st.equal(
- qs.stringify(
- { a: 'b', c: ['d', 'e=f'], f: [['g'], ['h']] },
- { encodeValuesOnly: true }
- ),
- 'a=b&c[0]=d&c[1]=e%3Df&f[0][0]=g&f[1][0]=h'
- );
- st.equal(
- qs.stringify(
- { a: 'b', c: ['d', 'e'], f: [['g'], ['h']] }
- ),
- 'a=b&c%5B0%5D=d&c%5B1%5D=e&f%5B0%5D%5B0%5D=g&f%5B1%5D%5B0%5D=h'
- );
- st.end();
- });
-
- t.test('encodeValuesOnly - strictNullHandling', function (st) {
- st.equal(
- qs.stringify(
- { a: { b: null } },
- { encodeValuesOnly: true, strictNullHandling: true }
- ),
- 'a[b]'
- );
- st.end();
- });
-
- t.test('does not mutate the options argument', function (st) {
- var options = {};
- qs.stringify({}, options);
- st.deepEqual(options, {});
- st.end();
- });
-
- t.end();
-});
diff --git a/deps/npm/node_modules/qs/test/utils.js b/deps/npm/node_modules/qs/test/utils.js
deleted file mode 100644
index eff4011a401c3d..00000000000000
--- a/deps/npm/node_modules/qs/test/utils.js
+++ /dev/null
@@ -1,34 +0,0 @@
-'use strict';
-
-var test = require('tape');
-var utils = require('../lib/utils');
-
-test('merge()', function (t) {
- t.deepEqual(utils.merge({ a: 'b' }, { a: 'c' }), { a: ['b', 'c'] }, 'merges two objects with the same key');
-
- var oneMerged = utils.merge({ foo: 'bar' }, { foo: { first: '123' } });
- t.deepEqual(oneMerged, { foo: ['bar', { first: '123' }] }, 'merges a standalone and an object into an array');
-
- var twoMerged = utils.merge({ foo: ['bar', { first: '123' }] }, { foo: { second: '456' } });
- t.deepEqual(twoMerged, { foo: { 0: 'bar', 1: { first: '123' }, second: '456' } }, 'merges a standalone and two objects into an array');
-
- var sandwiched = utils.merge({ foo: ['bar', { first: '123', second: '456' }] }, { foo: 'baz' });
- t.deepEqual(sandwiched, { foo: ['bar', { first: '123', second: '456' }, 'baz'] }, 'merges an object sandwiched by two standalones into an array');
-
- var nestedArrays = utils.merge({ foo: ['baz'] }, { foo: ['bar', 'xyzzy'] });
- t.deepEqual(nestedArrays, { foo: ['baz', 'bar', 'xyzzy'] });
-
- t.end();
-});
-
-test('assign()', function (t) {
- var target = { a: 1, b: 2 };
- var source = { b: 3, c: 4 };
- var result = utils.assign(target, source);
-
- t.equal(result, target, 'returns the target');
- t.deepEqual(target, { a: 1, b: 3, c: 4 }, 'target and source are merged');
- t.deepEqual(source, { b: 3, c: 4 }, 'source is untouched');
-
- t.end();
-});
diff --git a/deps/npm/node_modules/request/LICENSE b/deps/npm/node_modules/request/LICENSE
deleted file mode 100644
index a4a9aee0c2fa14..00000000000000
--- a/deps/npm/node_modules/request/LICENSE
+++ /dev/null
@@ -1,55 +0,0 @@
-Apache License
-
-Version 2.0, January 2004
-
-http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
-
-"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
-
-"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
-
-"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
-
-"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
-
-"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
-
-"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
-
-"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
-
-"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
-
-"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
-
-You must give any other recipients of the Work or Derivative Works a copy of this License; and
-
-You must cause any modified files to carry prominent notices stating that You changed the files; and
-
-You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
-
-If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
\ No newline at end of file
diff --git a/deps/npm/node_modules/request/index.js b/deps/npm/node_modules/request/index.js
deleted file mode 100755
index d50f9917b5f014..00000000000000
--- a/deps/npm/node_modules/request/index.js
+++ /dev/null
@@ -1,155 +0,0 @@
-// Copyright 2010-2012 Mikeal Rogers
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-'use strict'
-
-var extend = require('extend')
-var cookies = require('./lib/cookies')
-var helpers = require('./lib/helpers')
-
-var paramsHaveRequestBody = helpers.paramsHaveRequestBody
-
-// organize params for patch, post, put, head, del
-function initParams (uri, options, callback) {
- if (typeof options === 'function') {
- callback = options
- }
-
- var params = {}
- if (options !== null && typeof options === 'object') {
- extend(params, options, {uri: uri})
- } else if (typeof uri === 'string') {
- extend(params, {uri: uri})
- } else {
- extend(params, uri)
- }
-
- params.callback = callback || params.callback
- return params
-}
-
-function request (uri, options, callback) {
- if (typeof uri === 'undefined') {
- throw new Error('undefined is not a valid uri or options object.')
- }
-
- var params = initParams(uri, options, callback)
-
- if (params.method === 'HEAD' && paramsHaveRequestBody(params)) {
- throw new Error('HTTP HEAD requests MUST NOT include a request body.')
- }
-
- return new request.Request(params)
-}
-
-function verbFunc (verb) {
- var method = verb.toUpperCase()
- return function (uri, options, callback) {
- var params = initParams(uri, options, callback)
- params.method = method
- return request(params, params.callback)
- }
-}
-
-// define like this to please codeintel/intellisense IDEs
-request.get = verbFunc('get')
-request.head = verbFunc('head')
-request.options = verbFunc('options')
-request.post = verbFunc('post')
-request.put = verbFunc('put')
-request.patch = verbFunc('patch')
-request.del = verbFunc('delete')
-request['delete'] = verbFunc('delete')
-
-request.jar = function (store) {
- return cookies.jar(store)
-}
-
-request.cookie = function (str) {
- return cookies.parse(str)
-}
-
-function wrapRequestMethod (method, options, requester, verb) {
- return function (uri, opts, callback) {
- var params = initParams(uri, opts, callback)
-
- var target = {}
- extend(true, target, options, params)
-
- target.pool = params.pool || options.pool
-
- if (verb) {
- target.method = verb.toUpperCase()
- }
-
- if (typeof requester === 'function') {
- method = requester
- }
-
- return method(target, target.callback)
- }
-}
-
-request.defaults = function (options, requester) {
- var self = this
-
- options = options || {}
-
- if (typeof options === 'function') {
- requester = options
- options = {}
- }
-
- var defaults = wrapRequestMethod(self, options, requester)
-
- var verbs = ['get', 'head', 'post', 'put', 'patch', 'del', 'delete']
- verbs.forEach(function (verb) {
- defaults[verb] = wrapRequestMethod(self[verb], options, requester, verb)
- })
-
- defaults.cookie = wrapRequestMethod(self.cookie, options, requester)
- defaults.jar = self.jar
- defaults.defaults = self.defaults
- return defaults
-}
-
-request.forever = function (agentOptions, optionsArg) {
- var options = {}
- if (optionsArg) {
- extend(options, optionsArg)
- }
- if (agentOptions) {
- options.agentOptions = agentOptions
- }
-
- options.forever = true
- return request.defaults(options)
-}
-
-// Exports
-
-module.exports = request
-request.Request = require('./request')
-request.initParams = initParams
-
-// Backwards compatibility for request.debug
-Object.defineProperty(request, 'debug', {
- enumerable: true,
- get: function () {
- return request.Request.debug
- },
- set: function (debug) {
- request.Request.debug = debug
- }
-})
diff --git a/deps/npm/node_modules/request/lib/auth.js b/deps/npm/node_modules/request/lib/auth.js
deleted file mode 100644
index 02f203869324c3..00000000000000
--- a/deps/npm/node_modules/request/lib/auth.js
+++ /dev/null
@@ -1,167 +0,0 @@
-'use strict'
-
-var caseless = require('caseless')
-var uuid = require('uuid/v4')
-var helpers = require('./helpers')
-
-var md5 = helpers.md5
-var toBase64 = helpers.toBase64
-
-function Auth (request) {
- // define all public properties here
- this.request = request
- this.hasAuth = false
- this.sentAuth = false
- this.bearerToken = null
- this.user = null
- this.pass = null
-}
-
-Auth.prototype.basic = function (user, pass, sendImmediately) {
- var self = this
- if (typeof user !== 'string' || (pass !== undefined && typeof pass !== 'string')) {
- self.request.emit('error', new Error('auth() received invalid user or password'))
- }
- self.user = user
- self.pass = pass
- self.hasAuth = true
- var header = user + ':' + (pass || '')
- if (sendImmediately || typeof sendImmediately === 'undefined') {
- var authHeader = 'Basic ' + toBase64(header)
- self.sentAuth = true
- return authHeader
- }
-}
-
-Auth.prototype.bearer = function (bearer, sendImmediately) {
- var self = this
- self.bearerToken = bearer
- self.hasAuth = true
- if (sendImmediately || typeof sendImmediately === 'undefined') {
- if (typeof bearer === 'function') {
- bearer = bearer()
- }
- var authHeader = 'Bearer ' + (bearer || '')
- self.sentAuth = true
- return authHeader
- }
-}
-
-Auth.prototype.digest = function (method, path, authHeader) {
- // TODO: More complete implementation of RFC 2617.
- // - handle challenge.domain
- // - support qop="auth-int" only
- // - handle Authentication-Info (not necessarily?)
- // - check challenge.stale (not necessarily?)
- // - increase nc (not necessarily?)
- // For reference:
- // http://tools.ietf.org/html/rfc2617#section-3
- // https://github.com/bagder/curl/blob/master/lib/http_digest.c
-
- var self = this
-
- var challenge = {}
- var re = /([a-z0-9_-]+)=(?:"([^"]+)"|([a-z0-9_-]+))/gi
- while (true) {
- var match = re.exec(authHeader)
- if (!match) {
- break
- }
- challenge[match[1]] = match[2] || match[3]
- }
-
- /**
- * RFC 2617: handle both MD5 and MD5-sess algorithms.
- *
- * If the algorithm directive's value is "MD5" or unspecified, then HA1 is
- * HA1=MD5(username:realm:password)
- * If the algorithm directive's value is "MD5-sess", then HA1 is
- * HA1=MD5(MD5(username:realm:password):nonce:cnonce)
- */
- var ha1Compute = function (algorithm, user, realm, pass, nonce, cnonce) {
- var ha1 = md5(user + ':' + realm + ':' + pass)
- if (algorithm && algorithm.toLowerCase() === 'md5-sess') {
- return md5(ha1 + ':' + nonce + ':' + cnonce)
- } else {
- return ha1
- }
- }
-
- var qop = /(^|,)\s*auth\s*($|,)/.test(challenge.qop) && 'auth'
- var nc = qop && '00000001'
- var cnonce = qop && uuid().replace(/-/g, '')
- var ha1 = ha1Compute(challenge.algorithm, self.user, challenge.realm, self.pass, challenge.nonce, cnonce)
- var ha2 = md5(method + ':' + path)
- var digestResponse = qop
- ? md5(ha1 + ':' + challenge.nonce + ':' + nc + ':' + cnonce + ':' + qop + ':' + ha2)
- : md5(ha1 + ':' + challenge.nonce + ':' + ha2)
- var authValues = {
- username: self.user,
- realm: challenge.realm,
- nonce: challenge.nonce,
- uri: path,
- qop: qop,
- response: digestResponse,
- nc: nc,
- cnonce: cnonce,
- algorithm: challenge.algorithm,
- opaque: challenge.opaque
- }
-
- authHeader = []
- for (var k in authValues) {
- if (authValues[k]) {
- if (k === 'qop' || k === 'nc' || k === 'algorithm') {
- authHeader.push(k + '=' + authValues[k])
- } else {
- authHeader.push(k + '="' + authValues[k] + '"')
- }
- }
- }
- authHeader = 'Digest ' + authHeader.join(', ')
- self.sentAuth = true
- return authHeader
-}
-
-Auth.prototype.onRequest = function (user, pass, sendImmediately, bearer) {
- var self = this
- var request = self.request
-
- var authHeader
- if (bearer === undefined && user === undefined) {
- self.request.emit('error', new Error('no auth mechanism defined'))
- } else if (bearer !== undefined) {
- authHeader = self.bearer(bearer, sendImmediately)
- } else {
- authHeader = self.basic(user, pass, sendImmediately)
- }
- if (authHeader) {
- request.setHeader('authorization', authHeader)
- }
-}
-
-Auth.prototype.onResponse = function (response) {
- var self = this
- var request = self.request
-
- if (!self.hasAuth || self.sentAuth) { return null }
-
- var c = caseless(response.headers)
-
- var authHeader = c.get('www-authenticate')
- var authVerb = authHeader && authHeader.split(' ')[0].toLowerCase()
- request.debug('reauth', authVerb)
-
- switch (authVerb) {
- case 'basic':
- return self.basic(self.user, self.pass, true)
-
- case 'bearer':
- return self.bearer(self.bearerToken, true)
-
- case 'digest':
- return self.digest(request.method, request.path, authHeader)
- }
-}
-
-exports.Auth = Auth
diff --git a/deps/npm/node_modules/request/lib/cookies.js b/deps/npm/node_modules/request/lib/cookies.js
deleted file mode 100644
index bd5d46bead94b1..00000000000000
--- a/deps/npm/node_modules/request/lib/cookies.js
+++ /dev/null
@@ -1,38 +0,0 @@
-'use strict'
-
-var tough = require('tough-cookie')
-
-var Cookie = tough.Cookie
-var CookieJar = tough.CookieJar
-
-exports.parse = function (str) {
- if (str && str.uri) {
- str = str.uri
- }
- if (typeof str !== 'string') {
- throw new Error('The cookie function only accepts STRING as param')
- }
- return Cookie.parse(str, {loose: true})
-}
-
-// Adapt the sometimes-Async api of tough.CookieJar to our requirements
-function RequestJar (store) {
- var self = this
- self._jar = new CookieJar(store, {looseMode: true})
-}
-RequestJar.prototype.setCookie = function (cookieOrStr, uri, options) {
- var self = this
- return self._jar.setCookieSync(cookieOrStr, uri, options || {})
-}
-RequestJar.prototype.getCookieString = function (uri) {
- var self = this
- return self._jar.getCookieStringSync(uri)
-}
-RequestJar.prototype.getCookies = function (uri) {
- var self = this
- return self._jar.getCookiesSync(uri)
-}
-
-exports.jar = function (store) {
- return new RequestJar(store)
-}
diff --git a/deps/npm/node_modules/request/lib/getProxyFromURI.js b/deps/npm/node_modules/request/lib/getProxyFromURI.js
deleted file mode 100644
index 0b9b18e5acfe13..00000000000000
--- a/deps/npm/node_modules/request/lib/getProxyFromURI.js
+++ /dev/null
@@ -1,79 +0,0 @@
-'use strict'
-
-function formatHostname (hostname) {
- // canonicalize the hostname, so that 'oogle.com' won't match 'google.com'
- return hostname.replace(/^\.*/, '.').toLowerCase()
-}
-
-function parseNoProxyZone (zone) {
- zone = zone.trim().toLowerCase()
-
- var zoneParts = zone.split(':', 2)
- var zoneHost = formatHostname(zoneParts[0])
- var zonePort = zoneParts[1]
- var hasPort = zone.indexOf(':') > -1
-
- return {hostname: zoneHost, port: zonePort, hasPort: hasPort}
-}
-
-function uriInNoProxy (uri, noProxy) {
- var port = uri.port || (uri.protocol === 'https:' ? '443' : '80')
- var hostname = formatHostname(uri.hostname)
- var noProxyList = noProxy.split(',')
-
- // iterate through the noProxyList until it finds a match.
- return noProxyList.map(parseNoProxyZone).some(function (noProxyZone) {
- var isMatchedAt = hostname.indexOf(noProxyZone.hostname)
- var hostnameMatched = (
- isMatchedAt > -1 &&
- (isMatchedAt === hostname.length - noProxyZone.hostname.length)
- )
-
- if (noProxyZone.hasPort) {
- return (port === noProxyZone.port) && hostnameMatched
- }
-
- return hostnameMatched
- })
-}
-
-function getProxyFromURI (uri) {
- // Decide the proper request proxy to use based on the request URI object and the
- // environmental variables (NO_PROXY, HTTP_PROXY, etc.)
- // respect NO_PROXY environment variables (see: https://lynx.invisible-island.net/lynx2.8.7/breakout/lynx_help/keystrokes/environments.html)
-
- var noProxy = process.env.NO_PROXY || process.env.no_proxy || ''
-
- // if the noProxy is a wildcard then return null
-
- if (noProxy === '*') {
- return null
- }
-
- // if the noProxy is not empty and the uri is found return null
-
- if (noProxy !== '' && uriInNoProxy(uri, noProxy)) {
- return null
- }
-
- // Check for HTTP or HTTPS Proxy in environment Else default to null
-
- if (uri.protocol === 'http:') {
- return process.env.HTTP_PROXY ||
- process.env.http_proxy || null
- }
-
- if (uri.protocol === 'https:') {
- return process.env.HTTPS_PROXY ||
- process.env.https_proxy ||
- process.env.HTTP_PROXY ||
- process.env.http_proxy || null
- }
-
- // if none of that works, return null
- // (What uri protocol are you using then?)
-
- return null
-}
-
-module.exports = getProxyFromURI
diff --git a/deps/npm/node_modules/request/lib/har.js b/deps/npm/node_modules/request/lib/har.js
deleted file mode 100644
index 0dedee44475e93..00000000000000
--- a/deps/npm/node_modules/request/lib/har.js
+++ /dev/null
@@ -1,205 +0,0 @@
-'use strict'
-
-var fs = require('fs')
-var qs = require('querystring')
-var validate = require('har-validator')
-var extend = require('extend')
-
-function Har (request) {
- this.request = request
-}
-
-Har.prototype.reducer = function (obj, pair) {
- // new property ?
- if (obj[pair.name] === undefined) {
- obj[pair.name] = pair.value
- return obj
- }
-
- // existing? convert to array
- var arr = [
- obj[pair.name],
- pair.value
- ]
-
- obj[pair.name] = arr
-
- return obj
-}
-
-Har.prototype.prep = function (data) {
- // construct utility properties
- data.queryObj = {}
- data.headersObj = {}
- data.postData.jsonObj = false
- data.postData.paramsObj = false
-
- // construct query objects
- if (data.queryString && data.queryString.length) {
- data.queryObj = data.queryString.reduce(this.reducer, {})
- }
-
- // construct headers objects
- if (data.headers && data.headers.length) {
- // loweCase header keys
- data.headersObj = data.headers.reduceRight(function (headers, header) {
- headers[header.name] = header.value
- return headers
- }, {})
- }
-
- // construct Cookie header
- if (data.cookies && data.cookies.length) {
- var cookies = data.cookies.map(function (cookie) {
- return cookie.name + '=' + cookie.value
- })
-
- if (cookies.length) {
- data.headersObj.cookie = cookies.join('; ')
- }
- }
-
- // prep body
- function some (arr) {
- return arr.some(function (type) {
- return data.postData.mimeType.indexOf(type) === 0
- })
- }
-
- if (some([
- 'multipart/mixed',
- 'multipart/related',
- 'multipart/form-data',
- 'multipart/alternative'])) {
- // reset values
- data.postData.mimeType = 'multipart/form-data'
- } else if (some([
- 'application/x-www-form-urlencoded'])) {
- if (!data.postData.params) {
- data.postData.text = ''
- } else {
- data.postData.paramsObj = data.postData.params.reduce(this.reducer, {})
-
- // always overwrite
- data.postData.text = qs.stringify(data.postData.paramsObj)
- }
- } else if (some([
- 'text/json',
- 'text/x-json',
- 'application/json',
- 'application/x-json'])) {
- data.postData.mimeType = 'application/json'
-
- if (data.postData.text) {
- try {
- data.postData.jsonObj = JSON.parse(data.postData.text)
- } catch (e) {
- this.request.debug(e)
-
- // force back to text/plain
- data.postData.mimeType = 'text/plain'
- }
- }
- }
-
- return data
-}
-
-Har.prototype.options = function (options) {
- // skip if no har property defined
- if (!options.har) {
- return options
- }
-
- var har = {}
- extend(har, options.har)
-
- // only process the first entry
- if (har.log && har.log.entries) {
- har = har.log.entries[0]
- }
-
- // add optional properties to make validation successful
- har.url = har.url || options.url || options.uri || options.baseUrl || '/'
- har.httpVersion = har.httpVersion || 'HTTP/1.1'
- har.queryString = har.queryString || []
- har.headers = har.headers || []
- har.cookies = har.cookies || []
- har.postData = har.postData || {}
- har.postData.mimeType = har.postData.mimeType || 'application/octet-stream'
-
- har.bodySize = 0
- har.headersSize = 0
- har.postData.size = 0
-
- if (!validate.request(har)) {
- return options
- }
-
- // clean up and get some utility properties
- var req = this.prep(har)
-
- // construct new options
- if (req.url) {
- options.url = req.url
- }
-
- if (req.method) {
- options.method = req.method
- }
-
- if (Object.keys(req.queryObj).length) {
- options.qs = req.queryObj
- }
-
- if (Object.keys(req.headersObj).length) {
- options.headers = req.headersObj
- }
-
- function test (type) {
- return req.postData.mimeType.indexOf(type) === 0
- }
- if (test('application/x-www-form-urlencoded')) {
- options.form = req.postData.paramsObj
- } else if (test('application/json')) {
- if (req.postData.jsonObj) {
- options.body = req.postData.jsonObj
- options.json = true
- }
- } else if (test('multipart/form-data')) {
- options.formData = {}
-
- req.postData.params.forEach(function (param) {
- var attachment = {}
-
- if (!param.fileName && !param.contentType) {
- options.formData[param.name] = param.value
- return
- }
-
- // attempt to read from disk!
- if (param.fileName && !param.value) {
- attachment.value = fs.createReadStream(param.fileName)
- } else if (param.value) {
- attachment.value = param.value
- }
-
- if (param.fileName) {
- attachment.options = {
- filename: param.fileName,
- contentType: param.contentType ? param.contentType : null
- }
- }
-
- options.formData[param.name] = attachment
- })
- } else {
- if (req.postData.text) {
- options.body = req.postData.text
- }
- }
-
- return options
-}
-
-exports.Har = Har
diff --git a/deps/npm/node_modules/request/lib/hawk.js b/deps/npm/node_modules/request/lib/hawk.js
deleted file mode 100644
index de48a98519c77a..00000000000000
--- a/deps/npm/node_modules/request/lib/hawk.js
+++ /dev/null
@@ -1,89 +0,0 @@
-'use strict'
-
-var crypto = require('crypto')
-
-function randomString (size) {
- var bits = (size + 1) * 6
- var buffer = crypto.randomBytes(Math.ceil(bits / 8))
- var string = buffer.toString('base64').replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '')
- return string.slice(0, size)
-}
-
-function calculatePayloadHash (payload, algorithm, contentType) {
- var hash = crypto.createHash(algorithm)
- hash.update('hawk.1.payload\n')
- hash.update((contentType ? contentType.split(';')[0].trim().toLowerCase() : '') + '\n')
- hash.update(payload || '')
- hash.update('\n')
- return hash.digest('base64')
-}
-
-exports.calculateMac = function (credentials, opts) {
- var normalized = 'hawk.1.header\n' +
- opts.ts + '\n' +
- opts.nonce + '\n' +
- (opts.method || '').toUpperCase() + '\n' +
- opts.resource + '\n' +
- opts.host.toLowerCase() + '\n' +
- opts.port + '\n' +
- (opts.hash || '') + '\n'
-
- if (opts.ext) {
- normalized = normalized + opts.ext.replace('\\', '\\\\').replace('\n', '\\n')
- }
-
- normalized = normalized + '\n'
-
- if (opts.app) {
- normalized = normalized + opts.app + '\n' + (opts.dlg || '') + '\n'
- }
-
- var hmac = crypto.createHmac(credentials.algorithm, credentials.key).update(normalized)
- var digest = hmac.digest('base64')
- return digest
-}
-
-exports.header = function (uri, method, opts) {
- var timestamp = opts.timestamp || Math.floor((Date.now() + (opts.localtimeOffsetMsec || 0)) / 1000)
- var credentials = opts.credentials
- if (!credentials || !credentials.id || !credentials.key || !credentials.algorithm) {
- return ''
- }
-
- if (['sha1', 'sha256'].indexOf(credentials.algorithm) === -1) {
- return ''
- }
-
- var artifacts = {
- ts: timestamp,
- nonce: opts.nonce || randomString(6),
- method: method,
- resource: uri.pathname + (uri.search || ''),
- host: uri.hostname,
- port: uri.port || (uri.protocol === 'http:' ? 80 : 443),
- hash: opts.hash,
- ext: opts.ext,
- app: opts.app,
- dlg: opts.dlg
- }
-
- if (!artifacts.hash && (opts.payload || opts.payload === '')) {
- artifacts.hash = calculatePayloadHash(opts.payload, credentials.algorithm, opts.contentType)
- }
-
- var mac = exports.calculateMac(credentials, artifacts)
-
- var hasExt = artifacts.ext !== null && artifacts.ext !== undefined && artifacts.ext !== ''
- var header = 'Hawk id="' + credentials.id +
- '", ts="' + artifacts.ts +
- '", nonce="' + artifacts.nonce +
- (artifacts.hash ? '", hash="' + artifacts.hash : '') +
- (hasExt ? '", ext="' + artifacts.ext.replace(/\\/g, '\\\\').replace(/"/g, '\\"') : '') +
- '", mac="' + mac + '"'
-
- if (artifacts.app) {
- header = header + ', app="' + artifacts.app + (artifacts.dlg ? '", dlg="' + artifacts.dlg : '') + '"'
- }
-
- return header
-}
diff --git a/deps/npm/node_modules/request/lib/helpers.js b/deps/npm/node_modules/request/lib/helpers.js
deleted file mode 100644
index 8b2a7e6ebf3d14..00000000000000
--- a/deps/npm/node_modules/request/lib/helpers.js
+++ /dev/null
@@ -1,66 +0,0 @@
-'use strict'
-
-var jsonSafeStringify = require('json-stringify-safe')
-var crypto = require('crypto')
-var Buffer = require('safe-buffer').Buffer
-
-var defer = typeof setImmediate === 'undefined'
- ? process.nextTick
- : setImmediate
-
-function paramsHaveRequestBody (params) {
- return (
- params.body ||
- params.requestBodyStream ||
- (params.json && typeof params.json !== 'boolean') ||
- params.multipart
- )
-}
-
-function safeStringify (obj, replacer) {
- var ret
- try {
- ret = JSON.stringify(obj, replacer)
- } catch (e) {
- ret = jsonSafeStringify(obj, replacer)
- }
- return ret
-}
-
-function md5 (str) {
- return crypto.createHash('md5').update(str).digest('hex')
-}
-
-function isReadStream (rs) {
- return rs.readable && rs.path && rs.mode
-}
-
-function toBase64 (str) {
- return Buffer.from(str || '', 'utf8').toString('base64')
-}
-
-function copy (obj) {
- var o = {}
- Object.keys(obj).forEach(function (i) {
- o[i] = obj[i]
- })
- return o
-}
-
-function version () {
- var numbers = process.version.replace('v', '').split('.')
- return {
- major: parseInt(numbers[0], 10),
- minor: parseInt(numbers[1], 10),
- patch: parseInt(numbers[2], 10)
- }
-}
-
-exports.paramsHaveRequestBody = paramsHaveRequestBody
-exports.safeStringify = safeStringify
-exports.md5 = md5
-exports.isReadStream = isReadStream
-exports.toBase64 = toBase64
-exports.copy = copy
-exports.version = version
-exports.defer = defer
diff --git a/deps/npm/node_modules/request/lib/multipart.js b/deps/npm/node_modules/request/lib/multipart.js
deleted file mode 100644
index 6a009bc1301855..00000000000000
--- a/deps/npm/node_modules/request/lib/multipart.js
+++ /dev/null
@@ -1,112 +0,0 @@
-'use strict'
-
-var uuid = require('uuid/v4')
-var CombinedStream = require('combined-stream')
-var isstream = require('isstream')
-var Buffer = require('safe-buffer').Buffer
-
-function Multipart (request) {
- this.request = request
- this.boundary = uuid()
- this.chunked = false
- this.body = null
-}
-
-Multipart.prototype.isChunked = function (options) {
- var self = this
- var chunked = false
- var parts = options.data || options
-
- if (!parts.forEach) {
- self.request.emit('error', new Error('Argument error, options.multipart.'))
- }
-
- if (options.chunked !== undefined) {
- chunked = options.chunked
- }
-
- if (self.request.getHeader('transfer-encoding') === 'chunked') {
- chunked = true
- }
-
- if (!chunked) {
- parts.forEach(function (part) {
- if (typeof part.body === 'undefined') {
- self.request.emit('error', new Error('Body attribute missing in multipart.'))
- }
- if (isstream(part.body)) {
- chunked = true
- }
- })
- }
-
- return chunked
-}
-
-Multipart.prototype.setHeaders = function (chunked) {
- var self = this
-
- if (chunked && !self.request.hasHeader('transfer-encoding')) {
- self.request.setHeader('transfer-encoding', 'chunked')
- }
-
- var header = self.request.getHeader('content-type')
-
- if (!header || header.indexOf('multipart') === -1) {
- self.request.setHeader('content-type', 'multipart/related; boundary=' + self.boundary)
- } else {
- if (header.indexOf('boundary') !== -1) {
- self.boundary = header.replace(/.*boundary=([^\s;]+).*/, '$1')
- } else {
- self.request.setHeader('content-type', header + '; boundary=' + self.boundary)
- }
- }
-}
-
-Multipart.prototype.build = function (parts, chunked) {
- var self = this
- var body = chunked ? new CombinedStream() : []
-
- function add (part) {
- if (typeof part === 'number') {
- part = part.toString()
- }
- return chunked ? body.append(part) : body.push(Buffer.from(part))
- }
-
- if (self.request.preambleCRLF) {
- add('\r\n')
- }
-
- parts.forEach(function (part) {
- var preamble = '--' + self.boundary + '\r\n'
- Object.keys(part).forEach(function (key) {
- if (key === 'body') { return }
- preamble += key + ': ' + part[key] + '\r\n'
- })
- preamble += '\r\n'
- add(preamble)
- add(part.body)
- add('\r\n')
- })
- add('--' + self.boundary + '--')
-
- if (self.request.postambleCRLF) {
- add('\r\n')
- }
-
- return body
-}
-
-Multipart.prototype.onRequest = function (options) {
- var self = this
-
- var chunked = self.isChunked(options)
- var parts = options.data || options
-
- self.setHeaders(chunked)
- self.chunked = chunked
- self.body = self.build(parts, chunked)
-}
-
-exports.Multipart = Multipart
diff --git a/deps/npm/node_modules/request/lib/oauth.js b/deps/npm/node_modules/request/lib/oauth.js
deleted file mode 100644
index 96de72b8e5f69c..00000000000000
--- a/deps/npm/node_modules/request/lib/oauth.js
+++ /dev/null
@@ -1,148 +0,0 @@
-'use strict'
-
-var url = require('url')
-var qs = require('qs')
-var caseless = require('caseless')
-var uuid = require('uuid/v4')
-var oauth = require('oauth-sign')
-var crypto = require('crypto')
-var Buffer = require('safe-buffer').Buffer
-
-function OAuth (request) {
- this.request = request
- this.params = null
-}
-
-OAuth.prototype.buildParams = function (_oauth, uri, method, query, form, qsLib) {
- var oa = {}
- for (var i in _oauth) {
- oa['oauth_' + i] = _oauth[i]
- }
- if (!oa.oauth_version) {
- oa.oauth_version = '1.0'
- }
- if (!oa.oauth_timestamp) {
- oa.oauth_timestamp = Math.floor(Date.now() / 1000).toString()
- }
- if (!oa.oauth_nonce) {
- oa.oauth_nonce = uuid().replace(/-/g, '')
- }
- if (!oa.oauth_signature_method) {
- oa.oauth_signature_method = 'HMAC-SHA1'
- }
-
- var consumer_secret_or_private_key = oa.oauth_consumer_secret || oa.oauth_private_key // eslint-disable-line camelcase
- delete oa.oauth_consumer_secret
- delete oa.oauth_private_key
-
- var token_secret = oa.oauth_token_secret // eslint-disable-line camelcase
- delete oa.oauth_token_secret
-
- var realm = oa.oauth_realm
- delete oa.oauth_realm
- delete oa.oauth_transport_method
-
- var baseurl = uri.protocol + '//' + uri.host + uri.pathname
- var params = qsLib.parse([].concat(query, form, qsLib.stringify(oa)).join('&'))
-
- oa.oauth_signature = oauth.sign(
- oa.oauth_signature_method,
- method,
- baseurl,
- params,
- consumer_secret_or_private_key, // eslint-disable-line camelcase
- token_secret // eslint-disable-line camelcase
- )
-
- if (realm) {
- oa.realm = realm
- }
-
- return oa
-}
-
-OAuth.prototype.buildBodyHash = function (_oauth, body) {
- if (['HMAC-SHA1', 'RSA-SHA1'].indexOf(_oauth.signature_method || 'HMAC-SHA1') < 0) {
- this.request.emit('error', new Error('oauth: ' + _oauth.signature_method +
- ' signature_method not supported with body_hash signing.'))
- }
-
- var shasum = crypto.createHash('sha1')
- shasum.update(body || '')
- var sha1 = shasum.digest('hex')
-
- return Buffer.from(sha1, 'hex').toString('base64')
-}
-
-OAuth.prototype.concatParams = function (oa, sep, wrap) {
- wrap = wrap || ''
-
- var params = Object.keys(oa).filter(function (i) {
- return i !== 'realm' && i !== 'oauth_signature'
- }).sort()
-
- if (oa.realm) {
- params.splice(0, 0, 'realm')
- }
- params.push('oauth_signature')
-
- return params.map(function (i) {
- return i + '=' + wrap + oauth.rfc3986(oa[i]) + wrap
- }).join(sep)
-}
-
-OAuth.prototype.onRequest = function (_oauth) {
- var self = this
- self.params = _oauth
-
- var uri = self.request.uri || {}
- var method = self.request.method || ''
- var headers = caseless(self.request.headers)
- var body = self.request.body || ''
- var qsLib = self.request.qsLib || qs
-
- var form
- var query
- var contentType = headers.get('content-type') || ''
- var formContentType = 'application/x-www-form-urlencoded'
- var transport = _oauth.transport_method || 'header'
-
- if (contentType.slice(0, formContentType.length) === formContentType) {
- contentType = formContentType
- form = body
- }
- if (uri.query) {
- query = uri.query
- }
- if (transport === 'body' && (method !== 'POST' || contentType !== formContentType)) {
- self.request.emit('error', new Error('oauth: transport_method of body requires POST ' +
- 'and content-type ' + formContentType))
- }
-
- if (!form && typeof _oauth.body_hash === 'boolean') {
- _oauth.body_hash = self.buildBodyHash(_oauth, self.request.body.toString())
- }
-
- var oa = self.buildParams(_oauth, uri, method, query, form, qsLib)
-
- switch (transport) {
- case 'header':
- self.request.setHeader('Authorization', 'OAuth ' + self.concatParams(oa, ',', '"'))
- break
-
- case 'query':
- var href = self.request.uri.href += (query ? '&' : '?') + self.concatParams(oa, '&')
- self.request.uri = url.parse(href)
- self.request.path = self.request.uri.path
- break
-
- case 'body':
- self.request.body = (form ? form + '&' : '') + self.concatParams(oa, '&')
- break
-
- default:
- self.request.emit('error', new Error('oauth: transport_method invalid'))
- }
-}
-
-exports.OAuth = OAuth
diff --git a/deps/npm/node_modules/request/lib/querystring.js b/deps/npm/node_modules/request/lib/querystring.js
deleted file mode 100644
index 4a32cd1491a8cb..00000000000000
--- a/deps/npm/node_modules/request/lib/querystring.js
+++ /dev/null
@@ -1,50 +0,0 @@
-'use strict'
-
-var qs = require('qs')
-var querystring = require('querystring')
-
-function Querystring (request) {
- this.request = request
- this.lib = null
- this.useQuerystring = null
- this.parseOptions = null
- this.stringifyOptions = null
-}
-
-Querystring.prototype.init = function (options) {
- if (this.lib) { return }
-
- this.useQuerystring = options.useQuerystring
- this.lib = (this.useQuerystring ? querystring : qs)
-
- this.parseOptions = options.qsParseOptions || {}
- this.stringifyOptions = options.qsStringifyOptions || {}
-}
-
-Querystring.prototype.stringify = function (obj) {
- return (this.useQuerystring)
- ? this.rfc3986(this.lib.stringify(obj,
- this.stringifyOptions.sep || null,
- this.stringifyOptions.eq || null,
- this.stringifyOptions))
- : this.lib.stringify(obj, this.stringifyOptions)
-}
-
-Querystring.prototype.parse = function (str) {
- return (this.useQuerystring)
- ? this.lib.parse(str,
- this.parseOptions.sep || null,
- this.parseOptions.eq || null,
- this.parseOptions)
- : this.lib.parse(str, this.parseOptions)
-}
-
-Querystring.prototype.rfc3986 = function (str) {
- return str.replace(/[!'()*]/g, function (c) {
- return '%' + c.charCodeAt(0).toString(16).toUpperCase()
- })
-}
-
-Querystring.prototype.unescape = querystring.unescape
-
-exports.Querystring = Querystring
diff --git a/deps/npm/node_modules/request/lib/redirect.js b/deps/npm/node_modules/request/lib/redirect.js
deleted file mode 100644
index b9150e77c73d63..00000000000000
--- a/deps/npm/node_modules/request/lib/redirect.js
+++ /dev/null
@@ -1,154 +0,0 @@
-'use strict'
-
-var url = require('url')
-var isUrl = /^https?:/
-
-function Redirect (request) {
- this.request = request
- this.followRedirect = true
- this.followRedirects = true
- this.followAllRedirects = false
- this.followOriginalHttpMethod = false
- this.allowRedirect = function () { return true }
- this.maxRedirects = 10
- this.redirects = []
- this.redirectsFollowed = 0
- this.removeRefererHeader = false
-}
-
-Redirect.prototype.onRequest = function (options) {
- var self = this
-
- if (options.maxRedirects !== undefined) {
- self.maxRedirects = options.maxRedirects
- }
- if (typeof options.followRedirect === 'function') {
- self.allowRedirect = options.followRedirect
- }
- if (options.followRedirect !== undefined) {
- self.followRedirects = !!options.followRedirect
- }
- if (options.followAllRedirects !== undefined) {
- self.followAllRedirects = options.followAllRedirects
- }
- if (self.followRedirects || self.followAllRedirects) {
- self.redirects = self.redirects || []
- }
- if (options.removeRefererHeader !== undefined) {
- self.removeRefererHeader = options.removeRefererHeader
- }
- if (options.followOriginalHttpMethod !== undefined) {
- self.followOriginalHttpMethod = options.followOriginalHttpMethod
- }
-}
-
-Redirect.prototype.redirectTo = function (response) {
- var self = this
- var request = self.request
-
- var redirectTo = null
- if (response.statusCode >= 300 && response.statusCode < 400 && response.caseless.has('location')) {
- var location = response.caseless.get('location')
- request.debug('redirect', location)
-
- if (self.followAllRedirects) {
- redirectTo = location
- } else if (self.followRedirects) {
- switch (request.method) {
- case 'PATCH':
- case 'PUT':
- case 'POST':
- case 'DELETE':
- // Do not follow redirects
- break
- default:
- redirectTo = location
- break
- }
- }
- } else if (response.statusCode === 401) {
- var authHeader = request._auth.onResponse(response)
- if (authHeader) {
- request.setHeader('authorization', authHeader)
- redirectTo = request.uri
- }
- }
- return redirectTo
-}
-
-Redirect.prototype.onResponse = function (response) {
- var self = this
- var request = self.request
-
- var redirectTo = self.redirectTo(response)
- if (!redirectTo || !self.allowRedirect.call(request, response)) {
- return false
- }
-
- request.debug('redirect to', redirectTo)
-
- // ignore any potential response body. it cannot possibly be useful
- // to us at this point.
- // response.resume should be defined, but check anyway before calling. Workaround for browserify.
- if (response.resume) {
- response.resume()
- }
-
- if (self.redirectsFollowed >= self.maxRedirects) {
- request.emit('error', new Error('Exceeded maxRedirects. Probably stuck in a redirect loop ' + request.uri.href))
- return false
- }
- self.redirectsFollowed += 1
-
- if (!isUrl.test(redirectTo)) {
- redirectTo = url.resolve(request.uri.href, redirectTo)
- }
-
- var uriPrev = request.uri
- request.uri = url.parse(redirectTo)
-
- // handle the case where we change protocol from https to http or vice versa
- if (request.uri.protocol !== uriPrev.protocol) {
- delete request.agent
- }
-
- self.redirects.push({ statusCode: response.statusCode, redirectUri: redirectTo })
-
- if (self.followAllRedirects && request.method !== 'HEAD' &&
- response.statusCode !== 401 && response.statusCode !== 307) {
- request.method = self.followOriginalHttpMethod ? request.method : 'GET'
- }
- // request.method = 'GET' // Force all redirects to use GET || commented out fixes #215
- delete request.src
- delete request.req
- delete request._started
- if (response.statusCode !== 401 && response.statusCode !== 307) {
- // Remove parameters from the previous response, unless this is the second request
- // for a server that requires digest authentication.
- delete request.body
- delete request._form
- if (request.headers) {
- request.removeHeader('host')
- request.removeHeader('content-type')
- request.removeHeader('content-length')
- if (request.uri.hostname !== request.originalHost.split(':')[0]) {
- // Remove authorization if changing hostnames (but not if just
- // changing ports or protocols). This matches the behavior of curl:
- // https://github.com/bagder/curl/blob/6beb0eee/lib/http.c#L710
- request.removeHeader('authorization')
- }
- }
- }
-
- if (!self.removeRefererHeader) {
- request.setHeader('referer', uriPrev.href)
- }
-
- request.emit('redirect')
-
- request.init()
-
- return true
-}
-
-exports.Redirect = Redirect
diff --git a/deps/npm/node_modules/request/lib/tunnel.js b/deps/npm/node_modules/request/lib/tunnel.js
deleted file mode 100644
index 4479003f694234..00000000000000
--- a/deps/npm/node_modules/request/lib/tunnel.js
+++ /dev/null
@@ -1,175 +0,0 @@
-'use strict'
-
-var url = require('url')
-var tunnel = require('tunnel-agent')
-
-var defaultProxyHeaderWhiteList = [
- 'accept',
- 'accept-charset',
- 'accept-encoding',
- 'accept-language',
- 'accept-ranges',
- 'cache-control',
- 'content-encoding',
- 'content-language',
- 'content-location',
- 'content-md5',
- 'content-range',
- 'content-type',
- 'connection',
- 'date',
- 'expect',
- 'max-forwards',
- 'pragma',
- 'referer',
- 'te',
- 'user-agent',
- 'via'
-]
-
-var defaultProxyHeaderExclusiveList = [
- 'proxy-authorization'
-]
-
-function constructProxyHost (uriObject) {
- var port = uriObject.port
- var protocol = uriObject.protocol
- var proxyHost = uriObject.hostname + ':'
-
- if (port) {
- proxyHost += port
- } else if (protocol === 'https:') {
- proxyHost += '443'
- } else {
- proxyHost += '80'
- }
-
- return proxyHost
-}
-
-function constructProxyHeaderWhiteList (headers, proxyHeaderWhiteList) {
- var whiteList = proxyHeaderWhiteList
- .reduce(function (set, header) {
- set[header.toLowerCase()] = true
- return set
- }, {})
-
- return Object.keys(headers)
- .filter(function (header) {
- return whiteList[header.toLowerCase()]
- })
- .reduce(function (set, header) {
- set[header] = headers[header]
- return set
- }, {})
-}
-
-function constructTunnelOptions (request, proxyHeaders) {
- var proxy = request.proxy
-
- var tunnelOptions = {
- proxy: {
- host: proxy.hostname,
- port: +proxy.port,
- proxyAuth: proxy.auth,
- headers: proxyHeaders
- },
- headers: request.headers,
- ca: request.ca,
- cert: request.cert,
- key: request.key,
- passphrase: request.passphrase,
- pfx: request.pfx,
- ciphers: request.ciphers,
- rejectUnauthorized: request.rejectUnauthorized,
- secureOptions: request.secureOptions,
- secureProtocol: request.secureProtocol
- }
-
- return tunnelOptions
-}
-
-function constructTunnelFnName (uri, proxy) {
- var uriProtocol = (uri.protocol === 'https:' ? 'https' : 'http')
- var proxyProtocol = (proxy.protocol === 'https:' ? 'Https' : 'Http')
- return [uriProtocol, proxyProtocol].join('Over')
-}
-
-function getTunnelFn (request) {
- var uri = request.uri
- var proxy = request.proxy
- var tunnelFnName = constructTunnelFnName(uri, proxy)
- return tunnel[tunnelFnName]
-}
-
-function Tunnel (request) {
- this.request = request
- this.proxyHeaderWhiteList = defaultProxyHeaderWhiteList
- this.proxyHeaderExclusiveList = []
- if (typeof request.tunnel !== 'undefined') {
- this.tunnelOverride = request.tunnel
- }
-}
-
-Tunnel.prototype.isEnabled = function () {
- var self = this
- var request = self.request
- // Tunnel HTTPS by default. Allow the user to override this setting.
-
- // If self.tunnelOverride is set (the user specified a value), use it.
- if (typeof self.tunnelOverride !== 'undefined') {
- return self.tunnelOverride
- }
-
- // If the destination is HTTPS, tunnel.
- if (request.uri.protocol === 'https:') {
- return true
- }
-
- // Otherwise, do not use tunnel.
- return false
-}
-
-Tunnel.prototype.setup = function (options) {
- var self = this
- var request = self.request
-
- options = options || {}
-
- if (typeof request.proxy === 'string') {
- request.proxy = url.parse(request.proxy)
- }
-
- if (!request.proxy || !request.tunnel) {
- return false
- }
-
- // Setup Proxy Header Exclusive List and White List
- if (options.proxyHeaderWhiteList) {
- self.proxyHeaderWhiteList = options.proxyHeaderWhiteList
- }
- if (options.proxyHeaderExclusiveList) {
- self.proxyHeaderExclusiveList = options.proxyHeaderExclusiveList
- }
-
- var proxyHeaderExclusiveList = self.proxyHeaderExclusiveList.concat(defaultProxyHeaderExclusiveList)
- var proxyHeaderWhiteList = self.proxyHeaderWhiteList.concat(proxyHeaderExclusiveList)
-
- // Setup Proxy Headers and Proxy Headers Host
- // Only send the Proxy White Listed Header names
- var proxyHeaders = constructProxyHeaderWhiteList(request.headers, proxyHeaderWhiteList)
- proxyHeaders.host = constructProxyHost(request.uri)
-
- proxyHeaderExclusiveList.forEach(request.removeHeader, request)
-
- // Set Agent from Tunnel Data
- var tunnelFn = getTunnelFn(request)
- var tunnelOptions = constructTunnelOptions(request, proxyHeaders)
- request.agent = tunnelFn(tunnelOptions)
-
- return true
-}
-
-Tunnel.defaultProxyHeaderWhiteList = defaultProxyHeaderWhiteList
-Tunnel.defaultProxyHeaderExclusiveList = defaultProxyHeaderExclusiveList
-exports.Tunnel = Tunnel
diff --git a/deps/npm/node_modules/request/node_modules/form-data/License b/deps/npm/node_modules/request/node_modules/form-data/License
deleted file mode 100644
index c7ff12a2f8af2e..00000000000000
--- a/deps/npm/node_modules/request/node_modules/form-data/License
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (c) 2012 Felix Geisendörfer (felix@debuggable.com) and contributors
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- THE SOFTWARE.
diff --git a/deps/npm/node_modules/request/node_modules/form-data/lib/browser.js b/deps/npm/node_modules/request/node_modules/form-data/lib/browser.js
deleted file mode 100644
index 09e7c70e6e9d78..00000000000000
--- a/deps/npm/node_modules/request/node_modules/form-data/lib/browser.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* eslint-env browser */
-module.exports = typeof self == 'object' ? self.FormData : window.FormData;
diff --git a/deps/npm/node_modules/request/node_modules/form-data/lib/form_data.js b/deps/npm/node_modules/request/node_modules/form-data/lib/form_data.js
deleted file mode 100644
index 3a1bb82b11453c..00000000000000
--- a/deps/npm/node_modules/request/node_modules/form-data/lib/form_data.js
+++ /dev/null
@@ -1,457 +0,0 @@
-var CombinedStream = require('combined-stream');
-var util = require('util');
-var path = require('path');
-var http = require('http');
-var https = require('https');
-var parseUrl = require('url').parse;
-var fs = require('fs');
-var mime = require('mime-types');
-var asynckit = require('asynckit');
-var populate = require('./populate.js');
-
-// Public API
-module.exports = FormData;
-
-// make it a Stream
-util.inherits(FormData, CombinedStream);
-
-/**
- * Create readable "multipart/form-data" streams.
- * Can be used to submit forms
- * and file uploads to other web applications.
- *
- * @constructor
- * @param {Object} options - Properties to be added/overriden for FormData and CombinedStream
- */
-function FormData(options) {
- if (!(this instanceof FormData)) {
- return new FormData();
- }
-
- this._overheadLength = 0;
- this._valueLength = 0;
- this._valuesToMeasure = [];
-
- CombinedStream.call(this);
-
- options = options || {};
- for (var option in options) {
- this[option] = options[option];
- }
-}
-
-FormData.LINE_BREAK = '\r\n';
-FormData.DEFAULT_CONTENT_TYPE = 'application/octet-stream';
-
-FormData.prototype.append = function(field, value, options) {
-
- options = options || {};
-
- // allow filename as single option
- if (typeof options == 'string') {
- options = {filename: options};
- }
-
- var append = CombinedStream.prototype.append.bind(this);
-
- // all that streamy business can't handle numbers
- if (typeof value == 'number') {
- value = '' + value;
- }
-
- // https://github.com/felixge/node-form-data/issues/38
- if (util.isArray(value)) {
- // Please convert your array into string
- // the way web server expects it
- this._error(new Error('Arrays are not supported.'));
- return;
- }
-
- var header = this._multiPartHeader(field, value, options);
- var footer = this._multiPartFooter();
-
- append(header);
- append(value);
- append(footer);
-
- // pass along options.knownLength
- this._trackLength(header, value, options);
-};
-
-FormData.prototype._trackLength = function(header, value, options) {
- var valueLength = 0;
-
- // used w/ getLengthSync(), when length is known.
- // e.g. for streaming directly from a remote server,
- // w/ a known file a size, and not wanting to wait for
- // incoming file to finish to get its size.
- if (options.knownLength != null) {
- valueLength += +options.knownLength;
- } else if (Buffer.isBuffer(value)) {
- valueLength = value.length;
- } else if (typeof value === 'string') {
- valueLength = Buffer.byteLength(value);
- }
-
- this._valueLength += valueLength;
-
- // @check why add CRLF? does this account for custom/multiple CRLFs?
- this._overheadLength +=
- Buffer.byteLength(header) +
- FormData.LINE_BREAK.length;
-
- // empty or either doesn't have path or not an http response
- if (!value || ( !value.path && !(value.readable && value.hasOwnProperty('httpVersion')) )) {
- return;
- }
-
- // no need to bother with the length
- if (!options.knownLength) {
- this._valuesToMeasure.push(value);
- }
-};
-
-FormData.prototype._lengthRetriever = function(value, callback) {
-
- if (value.hasOwnProperty('fd')) {
-
- // take read range into a account
- // `end` = Infinity –> read file till the end
- //
- // TODO: Looks like there is bug in Node fs.createReadStream
- // it doesn't respect `end` options without `start` options
- // Fix it when node fixes it.
- // https://github.com/joyent/node/issues/7819
- if (value.end != undefined && value.end != Infinity && value.start != undefined) {
-
- // when end specified
- // no need to calculate range
- // inclusive, starts with 0
- callback(null, value.end + 1 - (value.start ? value.start : 0));
-
- // not that fast snoopy
- } else {
- // still need to fetch file size from fs
- fs.stat(value.path, function(err, stat) {
-
- var fileSize;
-
- if (err) {
- callback(err);
- return;
- }
-
- // update final size based on the range options
- fileSize = stat.size - (value.start ? value.start : 0);
- callback(null, fileSize);
- });
- }
-
- // or http response
- } else if (value.hasOwnProperty('httpVersion')) {
- callback(null, +value.headers['content-length']);
-
- // or request stream http://github.com/mikeal/request
- } else if (value.hasOwnProperty('httpModule')) {
- // wait till response come back
- value.on('response', function(response) {
- value.pause();
- callback(null, +response.headers['content-length']);
- });
- value.resume();
-
- // something else
- } else {
- callback('Unknown stream');
- }
-};
-
-FormData.prototype._multiPartHeader = function(field, value, options) {
- // custom header specified (as string)?
- // it becomes responsible for boundary
- // (e.g. to handle extra CRLFs on .NET servers)
- if (typeof options.header == 'string') {
- return options.header;
- }
-
- var contentDisposition = this._getContentDisposition(value, options);
- var contentType = this._getContentType(value, options);
-
- var contents = '';
- var headers = {
- // add custom disposition as third element or keep it two elements if not
- 'Content-Disposition': ['form-data', 'name="' + field + '"'].concat(contentDisposition || []),
- // if no content type. allow it to be empty array
- 'Content-Type': [].concat(contentType || [])
- };
-
- // allow custom headers.
- if (typeof options.header == 'object') {
- populate(headers, options.header);
- }
-
- var header;
- for (var prop in headers) {
- if (!headers.hasOwnProperty(prop)) continue;
- header = headers[prop];
-
- // skip nullish headers.
- if (header == null) {
- continue;
- }
-
- // convert all headers to arrays.
- if (!Array.isArray(header)) {
- header = [header];
- }
-
- // add non-empty headers.
- if (header.length) {
- contents += prop + ': ' + header.join('; ') + FormData.LINE_BREAK;
- }
- }
-
- return '--' + this.getBoundary() + FormData.LINE_BREAK + contents + FormData.LINE_BREAK;
-};
-
-FormData.prototype._getContentDisposition = function(value, options) {
-
- var filename
- , contentDisposition
- ;
-
- if (typeof options.filepath === 'string') {
- // custom filepath for relative paths
- filename = path.normalize(options.filepath).replace(/\\/g, '/');
- } else if (options.filename || value.name || value.path) {
- // custom filename take precedence
- // formidable and the browser add a name property
- // fs- and request- streams have path property
- filename = path.basename(options.filename || value.name || value.path);
- } else if (value.readable && value.hasOwnProperty('httpVersion')) {
- // or try http response
- filename = path.basename(value.client._httpMessage.path);
- }
-
- if (filename) {
- contentDisposition = 'filename="' + filename + '"';
- }
-
- return contentDisposition;
-};
-
-FormData.prototype._getContentType = function(value, options) {
-
- // use custom content-type above all
- var contentType = options.contentType;
-
- // or try `name` from formidable, browser
- if (!contentType && value.name) {
- contentType = mime.lookup(value.name);
- }
-
- // or try `path` from fs-, request- streams
- if (!contentType && value.path) {
- contentType = mime.lookup(value.path);
- }
-
- // or if it's http-reponse
- if (!contentType && value.readable && value.hasOwnProperty('httpVersion')) {
- contentType = value.headers['content-type'];
- }
-
- // or guess it from the filepath or filename
- if (!contentType && (options.filepath || options.filename)) {
- contentType = mime.lookup(options.filepath || options.filename);
- }
-
- // fallback to the default content type if `value` is not simple value
- if (!contentType && typeof value == 'object') {
- contentType = FormData.DEFAULT_CONTENT_TYPE;
- }
-
- return contentType;
-};
-
-FormData.prototype._multiPartFooter = function() {
- return function(next) {
- var footer = FormData.LINE_BREAK;
-
- var lastPart = (this._streams.length === 0);
- if (lastPart) {
- footer += this._lastBoundary();
- }
-
- next(footer);
- }.bind(this);
-};
-
-FormData.prototype._lastBoundary = function() {
- return '--' + this.getBoundary() + '--' + FormData.LINE_BREAK;
-};
-
-FormData.prototype.getHeaders = function(userHeaders) {
- var header;
- var formHeaders = {
- 'content-type': 'multipart/form-data; boundary=' + this.getBoundary()
- };
-
- for (header in userHeaders) {
- if (userHeaders.hasOwnProperty(header)) {
- formHeaders[header.toLowerCase()] = userHeaders[header];
- }
- }
-
- return formHeaders;
-};
-
-FormData.prototype.getBoundary = function() {
- if (!this._boundary) {
- this._generateBoundary();
- }
-
- return this._boundary;
-};
-
-FormData.prototype._generateBoundary = function() {
- // This generates a 50 character boundary similar to those used by Firefox.
- // They are optimized for boyer-moore parsing.
- var boundary = '--------------------------';
- for (var i = 0; i < 24; i++) {
- boundary += Math.floor(Math.random() * 10).toString(16);
- }
-
- this._boundary = boundary;
-};
-
-// Note: getLengthSync DOESN'T calculate streams length
-// As workaround one can calculate file size manually
-// and add it as knownLength option
-FormData.prototype.getLengthSync = function() {
- var knownLength = this._overheadLength + this._valueLength;
-
- // Don't get confused, there are 3 "internal" streams for each keyval pair
- // so it basically checks if there is any value added to the form
- if (this._streams.length) {
- knownLength += this._lastBoundary().length;
- }
-
- // https://github.com/form-data/form-data/issues/40
- if (!this.hasKnownLength()) {
- // Some async length retrievers are present
- // therefore synchronous length calculation is false.
- // Please use getLength(callback) to get proper length
- this._error(new Error('Cannot calculate proper length in synchronous way.'));
- }
-
- return knownLength;
-};
-
-// Public API to check if length of added values is known
-// https://github.com/form-data/form-data/issues/196
-// https://github.com/form-data/form-data/issues/262
-FormData.prototype.hasKnownLength = function() {
- var hasKnownLength = true;
-
- if (this._valuesToMeasure.length) {
- hasKnownLength = false;
- }
-
- return hasKnownLength;
-};
-
-FormData.prototype.getLength = function(cb) {
- var knownLength = this._overheadLength + this._valueLength;
-
- if (this._streams.length) {
- knownLength += this._lastBoundary().length;
- }
-
- if (!this._valuesToMeasure.length) {
- process.nextTick(cb.bind(this, null, knownLength));
- return;
- }
-
- asynckit.parallel(this._valuesToMeasure, this._lengthRetriever, function(err, values) {
- if (err) {
- cb(err);
- return;
- }
-
- values.forEach(function(length) {
- knownLength += length;
- });
-
- cb(null, knownLength);
- });
-};
-
-FormData.prototype.submit = function(params, cb) {
- var request
- , options
- , defaults = {method: 'post'}
- ;
-
- // parse provided url if it's string
- // or treat it as options object
- if (typeof params == 'string') {
-
- params = parseUrl(params);
- options = populate({
- port: params.port,
- path: params.pathname,
- host: params.hostname,
- protocol: params.protocol
- }, defaults);
-
- // use custom params
- } else {
-
- options = populate(params, defaults);
- // if no port provided use default one
- if (!options.port) {
- options.port = options.protocol == 'https:' ? 443 : 80;
- }
- }
-
- // put that good code in getHeaders to some use
- options.headers = this.getHeaders(params.headers);
-
- // https if specified, fallback to http in any other case
- if (options.protocol == 'https:') {
- request = https.request(options);
- } else {
- request = http.request(options);
- }
-
- // get content length and fire away
- this.getLength(function(err, length) {
- if (err) {
- this._error(err);
- return;
- }
-
- // add content length
- request.setHeader('Content-Length', length);
-
- this.pipe(request);
- if (cb) {
- request.on('error', cb);
- request.on('response', cb.bind(this, null));
- }
- }.bind(this));
-
- return request;
-};
-
-FormData.prototype._error = function(err) {
- if (!this.error) {
- this.error = err;
- this.pause();
- this.emit('error', err);
- }
-};
-
-FormData.prototype.toString = function () {
- return '[object FormData]';
-};
diff --git a/deps/npm/node_modules/request/node_modules/form-data/lib/populate.js b/deps/npm/node_modules/request/node_modules/form-data/lib/populate.js
deleted file mode 100644
index 4d35738dd502a7..00000000000000
--- a/deps/npm/node_modules/request/node_modules/form-data/lib/populate.js
+++ /dev/null
@@ -1,10 +0,0 @@
-// populates missing values
-module.exports = function(dst, src) {
-
- Object.keys(src).forEach(function(prop)
- {
- dst[prop] = dst[prop] || src[prop];
- });
-
- return dst;
-};
diff --git a/deps/npm/node_modules/request/node_modules/form-data/package.json b/deps/npm/node_modules/request/node_modules/form-data/package.json
deleted file mode 100644
index adacbae78f2531..00000000000000
--- a/deps/npm/node_modules/request/node_modules/form-data/package.json
+++ /dev/null
@@ -1,65 +0,0 @@
-{
- "author": "Felix Geisendörfer (http://debuggable.com/)",
- "name": "form-data",
- "description": "A library to create readable \"multipart/form-data\" streams. Can be used to submit forms and file uploads to other web applications.",
- "version": "2.3.3",
- "repository": {
- "type": "git",
- "url": "git://github.com/form-data/form-data.git"
- },
- "main": "./lib/form_data",
- "browser": "./lib/browser",
- "scripts": {
- "pretest": "rimraf coverage test/tmp",
- "test": "istanbul cover test/run.js",
- "posttest": "istanbul report lcov text",
- "lint": "eslint lib/*.js test/*.js test/integration/*.js",
- "report": "istanbul report lcov text",
- "ci-lint": "is-node-modern 6 && npm run lint || is-node-not-modern 6",
- "ci-test": "npm run test && npm run browser && npm run report",
- "predebug": "rimraf coverage test/tmp",
- "debug": "verbose=1 ./test/run.js",
- "browser": "browserify -t browserify-istanbul test/run-browser.js | obake --coverage",
- "check": "istanbul check-coverage coverage/coverage*.json",
- "files": "pkgfiles --sort=name",
- "get-version": "node -e \"console.log(require('./package.json').version)\"",
- "update-readme": "sed -i.bak 's/\\/master\\.svg/\\/v'$(npm --silent run get-version)'.svg/g' README.md",
- "restore-readme": "mv README.md.bak README.md",
- "prepublish": "in-publish && npm run update-readme || not-in-publish",
- "postpublish": "npm run restore-readme"
- },
- "pre-commit": [
- "lint",
- "ci-test",
- "check"
- ],
- "engines": {
- "node": ">= 0.12"
- },
- "dependencies": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.6",
- "mime-types": "^2.1.12"
- },
- "devDependencies": {
- "browserify": "^13.1.1",
- "browserify-istanbul": "^2.0.0",
- "coveralls": "^2.11.14",
- "cross-spawn": "^4.0.2",
- "eslint": "^3.9.1",
- "fake": "^0.2.2",
- "far": "^0.0.7",
- "formidable": "^1.0.17",
- "in-publish": "^2.0.0",
- "is-node-modern": "^1.0.0",
- "istanbul": "^0.4.5",
- "obake": "^0.1.2",
- "phantomjs-prebuilt": "^2.1.13",
- "pkgfiles": "^2.3.0",
- "pre-commit": "^1.1.3",
- "request": "2.76.0",
- "rimraf": "^2.5.4",
- "tape": "^4.6.2"
- },
- "license": "MIT"
-}
diff --git a/deps/npm/node_modules/request/node_modules/form-data/yarn.lock b/deps/npm/node_modules/request/node_modules/form-data/yarn.lock
deleted file mode 100644
index ab55059c10eb8c..00000000000000
--- a/deps/npm/node_modules/request/node_modules/form-data/yarn.lock
+++ /dev/null
@@ -1,2662 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
-JSONStream@^1.0.3:
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.2.tgz#c102371b6ec3a7cf3b847ca00c20bb0fce4c6dea"
- dependencies:
- jsonparse "^1.2.0"
- through ">=2.2.7 <3"
-
-abbrev@1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
-
-abbrev@1.0.x:
- version "1.0.9"
- resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135"
-
-acorn-jsx@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b"
- dependencies:
- acorn "^3.0.4"
-
-acorn-node@^1.2.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.3.0.tgz#5f86d73346743810ef1269b901dbcbded020861b"
- dependencies:
- acorn "^5.4.1"
- xtend "^4.0.1"
-
-acorn@^3.0.4:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
-
-acorn@^4.0.3:
- version "4.0.13"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787"
-
-acorn@^5.2.1, acorn@^5.4.0, acorn@^5.4.1:
- version "5.4.1"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.4.1.tgz#fdc58d9d17f4a4e98d102ded826a9b9759125102"
-
-ajv-keywords@^1.0.0:
- version "1.5.1"
- resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c"
-
-ajv@^4.7.0:
- version "4.11.8"
- resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536"
- dependencies:
- co "^4.6.0"
- json-stable-stringify "^1.0.1"
-
-ajv@^5.1.0:
- version "5.5.2"
- resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965"
- dependencies:
- co "^4.6.0"
- fast-deep-equal "^1.0.0"
- fast-json-stable-stringify "^2.0.0"
- json-schema-traverse "^0.3.0"
-
-align-text@^0.1.1, align-text@^0.1.3:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
- dependencies:
- kind-of "^3.0.2"
- longest "^1.0.1"
- repeat-string "^1.5.2"
-
-amdefine@>=0.0.4:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
-
-ansi-escapes@^1.1.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e"
-
-ansi-regex@^2.0.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
-
-ansi-regex@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
-
-ansi-styles@^2.2.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
-
-argparse@^1.0.7:
- version "1.0.9"
- resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86"
- dependencies:
- sprintf-js "~1.0.2"
-
-array-filter@~0.0.0:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec"
-
-array-map@~0.0.0:
- version "0.0.0"
- resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662"
-
-array-reduce@~0.0.0:
- version "0.0.0"
- resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b"
-
-array-union@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
- dependencies:
- array-uniq "^1.0.1"
-
-array-uniq@^1.0.1:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
-
-arrify@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
-
-asn1.js@^4.0.0:
- version "4.9.2"
- resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.9.2.tgz#8117ef4f7ed87cd8f89044b5bff97ac243a16c9a"
- dependencies:
- bn.js "^4.0.0"
- inherits "^2.0.1"
- minimalistic-assert "^1.0.0"
-
-asn1@~0.2.3:
- version "0.2.3"
- resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86"
-
-assert-plus@1.0.0, assert-plus@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
-
-assert-plus@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234"
-
-assert@^1.4.0:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91"
- dependencies:
- util "0.10.3"
-
-astw@^2.0.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/astw/-/astw-2.2.0.tgz#7bd41784d32493987aeb239b6b4e1c57a873b917"
- dependencies:
- acorn "^4.0.3"
-
-async@1.x, async@^1.4.0:
- version "1.5.2"
- resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
-
-async@~0.1.22:
- version "0.1.22"
- resolved "https://registry.yarnpkg.com/async/-/async-0.1.22.tgz#0fc1aaa088a0e3ef0ebe2d8831bab0dcf8845061"
-
-asynckit@^0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
-
-aws-sign2@~0.6.0:
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
-
-aws-sign2@~0.7.0:
- version "0.7.0"
- resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
-
-aws4@^1.2.1, aws4@^1.6.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e"
-
-babel-code-frame@^6.16.0:
- version "6.26.0"
- resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
- dependencies:
- chalk "^1.1.3"
- esutils "^2.0.2"
- js-tokens "^3.0.2"
-
-balanced-match@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
-
-base64-js@^1.0.2:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.1.tgz#a91947da1f4a516ea38e5b4ec0ec3773675e0886"
-
-bcrypt-pbkdf@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d"
- dependencies:
- tweetnacl "^0.14.3"
-
-bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
- version "4.11.8"
- resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f"
-
-boom@2.x.x:
- version "2.10.1"
- resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f"
- dependencies:
- hoek "2.x.x"
-
-boom@4.x.x:
- version "4.3.1"
- resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31"
- dependencies:
- hoek "4.x.x"
-
-boom@5.x.x:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02"
- dependencies:
- hoek "4.x.x"
-
-brace-expansion@^1.1.7:
- version "1.1.11"
- resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
- dependencies:
- balanced-match "^1.0.0"
- concat-map "0.0.1"
-
-brorand@^1.0.1:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
-
-browser-pack@^6.0.1:
- version "6.0.4"
- resolved "https://registry.yarnpkg.com/browser-pack/-/browser-pack-6.0.4.tgz#9a73beb3b48f9e36868be007b64400102c04a99f"
- dependencies:
- JSONStream "^1.0.3"
- combine-source-map "~0.8.0"
- defined "^1.0.0"
- safe-buffer "^5.1.1"
- through2 "^2.0.0"
- umd "^3.0.0"
-
-browser-resolve@^1.11.0, browser-resolve@^1.7.0:
- version "1.11.2"
- resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce"
- dependencies:
- resolve "1.1.7"
-
-browserify-aes@^1.0.0, browserify-aes@^1.0.4:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.1.1.tgz#38b7ab55edb806ff2dcda1a7f1620773a477c49f"
- dependencies:
- buffer-xor "^1.0.3"
- cipher-base "^1.0.0"
- create-hash "^1.1.0"
- evp_bytestokey "^1.0.3"
- inherits "^2.0.1"
- safe-buffer "^5.0.1"
-
-browserify-cipher@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.0.tgz#9988244874bf5ed4e28da95666dcd66ac8fc363a"
- dependencies:
- browserify-aes "^1.0.4"
- browserify-des "^1.0.0"
- evp_bytestokey "^1.0.0"
-
-browserify-des@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.0.tgz#daa277717470922ed2fe18594118a175439721dd"
- dependencies:
- cipher-base "^1.0.1"
- des.js "^1.0.0"
- inherits "^2.0.1"
-
-browserify-istanbul@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/browserify-istanbul/-/browserify-istanbul-2.0.0.tgz#85a4b425da1f7c09e02ba32a3b44f6535d38c257"
- dependencies:
- minimatch "^3.0.0"
- through "^2.3.8"
-
-browserify-rsa@^4.0.0:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524"
- dependencies:
- bn.js "^4.1.0"
- randombytes "^2.0.1"
-
-browserify-sign@^4.0.0:
- version "4.0.4"
- resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298"
- dependencies:
- bn.js "^4.1.1"
- browserify-rsa "^4.0.0"
- create-hash "^1.1.0"
- create-hmac "^1.1.2"
- elliptic "^6.0.0"
- inherits "^2.0.1"
- parse-asn1 "^5.0.0"
-
-browserify-zlib@~0.1.2:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d"
- dependencies:
- pako "~0.2.0"
-
-browserify@^13.1.1:
- version "13.3.0"
- resolved "https://registry.yarnpkg.com/browserify/-/browserify-13.3.0.tgz#b5a9c9020243f0c70e4675bec8223bc627e415ce"
- dependencies:
- JSONStream "^1.0.3"
- assert "^1.4.0"
- browser-pack "^6.0.1"
- browser-resolve "^1.11.0"
- browserify-zlib "~0.1.2"
- buffer "^4.1.0"
- cached-path-relative "^1.0.0"
- concat-stream "~1.5.1"
- console-browserify "^1.1.0"
- constants-browserify "~1.0.0"
- crypto-browserify "^3.0.0"
- defined "^1.0.0"
- deps-sort "^2.0.0"
- domain-browser "~1.1.0"
- duplexer2 "~0.1.2"
- events "~1.1.0"
- glob "^7.1.0"
- has "^1.0.0"
- htmlescape "^1.1.0"
- https-browserify "~0.0.0"
- inherits "~2.0.1"
- insert-module-globals "^7.0.0"
- labeled-stream-splicer "^2.0.0"
- module-deps "^4.0.8"
- os-browserify "~0.1.1"
- parents "^1.0.1"
- path-browserify "~0.0.0"
- process "~0.11.0"
- punycode "^1.3.2"
- querystring-es3 "~0.2.0"
- read-only-stream "^2.0.0"
- readable-stream "^2.0.2"
- resolve "^1.1.4"
- shasum "^1.0.0"
- shell-quote "^1.6.1"
- stream-browserify "^2.0.0"
- stream-http "^2.0.0"
- string_decoder "~0.10.0"
- subarg "^1.0.0"
- syntax-error "^1.1.1"
- through2 "^2.0.0"
- timers-browserify "^1.0.1"
- tty-browserify "~0.0.0"
- url "~0.11.0"
- util "~0.10.1"
- vm-browserify "~0.0.1"
- xtend "^4.0.0"
-
-buffer-xor@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
-
-buffer@^4.1.0:
- version "4.9.1"
- resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298"
- dependencies:
- base64-js "^1.0.2"
- ieee754 "^1.1.4"
- isarray "^1.0.0"
-
-builtin-status-codes@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
-
-cached-path-relative@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/cached-path-relative/-/cached-path-relative-1.0.1.tgz#d09c4b52800aa4c078e2dd81a869aac90d2e54e7"
-
-caller-path@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f"
- dependencies:
- callsites "^0.2.0"
-
-callsites@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca"
-
-camelcase@^1.0.2:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
-
-caseless@~0.11.0:
- version "0.11.0"
- resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7"
-
-caseless@~0.12.0:
- version "0.12.0"
- resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
-
-center-align@^0.1.1:
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
- dependencies:
- align-text "^0.1.3"
- lazy-cache "^1.0.3"
-
-chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
- dependencies:
- ansi-styles "^2.2.1"
- escape-string-regexp "^1.0.2"
- has-ansi "^2.0.0"
- strip-ansi "^3.0.0"
- supports-color "^2.0.0"
-
-cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
- dependencies:
- inherits "^2.0.1"
- safe-buffer "^5.0.1"
-
-circular-json@^0.3.1:
- version "0.3.3"
- resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66"
-
-cli-cursor@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987"
- dependencies:
- restore-cursor "^1.0.1"
-
-cli-width@^2.0.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
-
-cliui@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
- dependencies:
- center-align "^0.1.1"
- right-align "^0.1.1"
- wordwrap "0.0.2"
-
-clone@^1.0.2:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.3.tgz#298d7e2231660f40c003c2ed3140decf3f53085f"
-
-co@^4.6.0:
- version "4.6.0"
- resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
-
-code-point-at@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
-
-columnify@^1.5.4:
- version "1.5.4"
- resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb"
- dependencies:
- strip-ansi "^3.0.0"
- wcwidth "^1.0.0"
-
-combine-source-map@~0.7.1:
- version "0.7.2"
- resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.7.2.tgz#0870312856b307a87cc4ac486f3a9a62aeccc09e"
- dependencies:
- convert-source-map "~1.1.0"
- inline-source-map "~0.6.0"
- lodash.memoize "~3.0.3"
- source-map "~0.5.3"
-
-combine-source-map@~0.8.0:
- version "0.8.0"
- resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.8.0.tgz#a58d0df042c186fcf822a8e8015f5450d2d79a8b"
- dependencies:
- convert-source-map "~1.1.0"
- inline-source-map "~0.6.0"
- lodash.memoize "~3.0.3"
- source-map "~0.5.3"
-
-combined-stream@1.0.6:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818"
- dependencies:
- delayed-stream "~1.0.0"
-
-combined-stream@^1.0.5, combined-stream@~1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009"
- dependencies:
- delayed-stream "~1.0.0"
-
-commander@^2.9.0:
- version "2.14.1"
- resolved "https://registry.yarnpkg.com/commander/-/commander-2.14.1.tgz#2235123e37af8ca3c65df45b026dbd357b01b9aa"
-
-concat-map@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
-
-concat-stream@1.6.0, concat-stream@^1.4.7, concat-stream@^1.4.8, concat-stream@^1.5.2:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7"
- dependencies:
- inherits "^2.0.3"
- readable-stream "^2.2.2"
- typedarray "^0.0.6"
-
-concat-stream@~1.5.0, concat-stream@~1.5.1:
- version "1.5.2"
- resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.5.2.tgz#708978624d856af41a5a741defdd261da752c266"
- dependencies:
- inherits "~2.0.1"
- readable-stream "~2.0.0"
- typedarray "~0.0.5"
-
-console-browserify@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10"
- dependencies:
- date-now "^0.1.4"
-
-constants-browserify@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
-
-convert-source-map@^1.0.0:
- version "1.5.1"
- resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5"
-
-convert-source-map@~1.1.0:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.1.3.tgz#4829c877e9fe49b3161f3bf3673888e204699860"
-
-core-util-is@1.0.2, core-util-is@~1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
-
-coveralls@^2.11.14:
- version "2.13.3"
- resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-2.13.3.tgz#9ad7c2ae527417f361e8b626483f48ee92dd2bc7"
- dependencies:
- js-yaml "3.6.1"
- lcov-parse "0.0.10"
- log-driver "1.2.5"
- minimist "1.2.0"
- request "2.79.0"
-
-create-ecdh@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d"
- dependencies:
- bn.js "^4.1.0"
- elliptic "^6.0.0"
-
-create-hash@^1.1.0, create-hash@^1.1.2:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.3.tgz#606042ac8b9262750f483caddab0f5819172d8fd"
- dependencies:
- cipher-base "^1.0.1"
- inherits "^2.0.1"
- ripemd160 "^2.0.0"
- sha.js "^2.4.0"
-
-create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
- version "1.1.6"
- resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.6.tgz#acb9e221a4e17bdb076e90657c42b93e3726cf06"
- dependencies:
- cipher-base "^1.0.3"
- create-hash "^1.1.0"
- inherits "^2.0.1"
- ripemd160 "^2.0.0"
- safe-buffer "^5.0.1"
- sha.js "^2.4.8"
-
-cross-spawn@^4.0.2:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41"
- dependencies:
- lru-cache "^4.0.1"
- which "^1.2.9"
-
-cross-spawn@^5.0.1:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
- dependencies:
- lru-cache "^4.0.1"
- shebang-command "^1.2.0"
- which "^1.2.9"
-
-cryptiles@2.x.x:
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
- dependencies:
- boom "2.x.x"
-
-cryptiles@3.x.x:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe"
- dependencies:
- boom "5.x.x"
-
-crypto-browserify@^3.0.0:
- version "3.12.0"
- resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"
- dependencies:
- browserify-cipher "^1.0.0"
- browserify-sign "^4.0.0"
- create-ecdh "^4.0.0"
- create-hash "^1.1.0"
- create-hmac "^1.1.0"
- diffie-hellman "^5.0.0"
- inherits "^2.0.1"
- pbkdf2 "^3.0.3"
- public-encrypt "^4.0.0"
- randombytes "^2.0.0"
- randomfill "^1.0.3"
-
-d@1:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f"
- dependencies:
- es5-ext "^0.10.9"
-
-dashdash@^1.12.0:
- version "1.14.1"
- resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
- dependencies:
- assert-plus "^1.0.0"
-
-date-now@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
-
-debug@2.6.9, debug@^2.1.1:
- version "2.6.9"
- resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
- dependencies:
- ms "2.0.0"
-
-decamelize@^1.0.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
-
-deep-equal@~1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"
-
-deep-is@~0.1.3:
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
-
-deeply@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/deeply/-/deeply-1.0.0.tgz#ed573160b5c91ff5138917bf701e5453b19f574b"
-
-defaults@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d"
- dependencies:
- clone "^1.0.2"
-
-define-properties@^1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94"
- dependencies:
- foreach "^2.0.5"
- object-keys "^1.0.8"
-
-defined@^1.0.0, defined@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
-
-del@^2.0.2:
- version "2.2.2"
- resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8"
- dependencies:
- globby "^5.0.0"
- is-path-cwd "^1.0.0"
- is-path-in-cwd "^1.0.0"
- object-assign "^4.0.1"
- pify "^2.0.0"
- pinkie-promise "^2.0.0"
- rimraf "^2.2.8"
-
-delayed-stream@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
-
-deps-sort@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/deps-sort/-/deps-sort-2.0.0.tgz#091724902e84658260eb910748cccd1af6e21fb5"
- dependencies:
- JSONStream "^1.0.3"
- shasum "^1.0.0"
- subarg "^1.0.0"
- through2 "^2.0.0"
-
-des.js@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc"
- dependencies:
- inherits "^2.0.1"
- minimalistic-assert "^1.0.0"
-
-detective@^4.0.0:
- version "4.7.1"
- resolved "https://registry.yarnpkg.com/detective/-/detective-4.7.1.tgz#0eca7314338442febb6d65da54c10bb1c82b246e"
- dependencies:
- acorn "^5.2.1"
- defined "^1.0.0"
-
-diffie-hellman@^5.0.0:
- version "5.0.2"
- resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e"
- dependencies:
- bn.js "^4.1.0"
- miller-rabin "^4.0.0"
- randombytes "^2.0.0"
-
-doctrine@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
- dependencies:
- esutils "^2.0.2"
-
-domain-browser@~1.1.0:
- version "1.1.7"
- resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc"
-
-du@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/du/-/du-0.1.0.tgz#f26e340a09c7bc5b6fd69af6dbadea60fa8c6f4d"
- dependencies:
- async "~0.1.22"
-
-duplexer2@^0.1.2, duplexer2@~0.1.0, duplexer2@~0.1.2:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1"
- dependencies:
- readable-stream "^2.0.2"
-
-ecc-jsbn@~0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
- dependencies:
- jsbn "~0.1.0"
-
-elliptic@^6.0.0:
- version "6.4.0"
- resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df"
- dependencies:
- bn.js "^4.4.0"
- brorand "^1.0.1"
- hash.js "^1.0.0"
- hmac-drbg "^1.0.0"
- inherits "^2.0.1"
- minimalistic-assert "^1.0.0"
- minimalistic-crypto-utils "^1.0.0"
-
-envar@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/envar/-/envar-2.0.0.tgz#44f7cdafbf976b732b73ad1acb2e8808ecf8876e"
- dependencies:
- deeply "^1.0.0"
- minimist "^1.2.0"
-
-es-abstract@^1.5.0:
- version "1.10.0"
- resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.10.0.tgz#1ecb36c197842a00d8ee4c2dfd8646bb97d60864"
- dependencies:
- es-to-primitive "^1.1.1"
- function-bind "^1.1.1"
- has "^1.0.1"
- is-callable "^1.1.3"
- is-regex "^1.0.4"
-
-es-to-primitive@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d"
- dependencies:
- is-callable "^1.1.1"
- is-date-object "^1.0.1"
- is-symbol "^1.0.1"
-
-es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14:
- version "0.10.38"
- resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.38.tgz#fa7d40d65bbc9bb8a67e1d3f9cc656a00530eed3"
- dependencies:
- es6-iterator "~2.0.3"
- es6-symbol "~3.1.1"
-
-es6-iterator@^2.0.1, es6-iterator@~2.0.1, es6-iterator@~2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7"
- dependencies:
- d "1"
- es5-ext "^0.10.35"
- es6-symbol "^3.1.1"
-
-es6-map@^0.1.3:
- version "0.1.5"
- resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0"
- dependencies:
- d "1"
- es5-ext "~0.10.14"
- es6-iterator "~2.0.1"
- es6-set "~0.1.5"
- es6-symbol "~3.1.1"
- event-emitter "~0.3.5"
-
-es6-promise@^4.0.3:
- version "4.2.4"
- resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.4.tgz#dc4221c2b16518760bd8c39a52d8f356fc00ed29"
-
-es6-set@~0.1.5:
- version "0.1.5"
- resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1"
- dependencies:
- d "1"
- es5-ext "~0.10.14"
- es6-iterator "~2.0.1"
- es6-symbol "3.1.1"
- event-emitter "~0.3.5"
-
-es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77"
- dependencies:
- d "1"
- es5-ext "~0.10.14"
-
-es6-weak-map@^2.0.1:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f"
- dependencies:
- d "1"
- es5-ext "^0.10.14"
- es6-iterator "^2.0.1"
- es6-symbol "^3.1.1"
-
-escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
-
-escodegen@1.8.x:
- version "1.8.1"
- resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018"
- dependencies:
- esprima "^2.7.1"
- estraverse "^1.9.1"
- esutils "^2.0.2"
- optionator "^0.8.1"
- optionalDependencies:
- source-map "~0.2.0"
-
-escope@^3.6.0:
- version "3.6.0"
- resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3"
- dependencies:
- es6-map "^0.1.3"
- es6-weak-map "^2.0.1"
- esrecurse "^4.1.0"
- estraverse "^4.1.1"
-
-eslint@^3.9.1:
- version "3.19.0"
- resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.19.0.tgz#c8fc6201c7f40dd08941b87c085767386a679acc"
- dependencies:
- babel-code-frame "^6.16.0"
- chalk "^1.1.3"
- concat-stream "^1.5.2"
- debug "^2.1.1"
- doctrine "^2.0.0"
- escope "^3.6.0"
- espree "^3.4.0"
- esquery "^1.0.0"
- estraverse "^4.2.0"
- esutils "^2.0.2"
- file-entry-cache "^2.0.0"
- glob "^7.0.3"
- globals "^9.14.0"
- ignore "^3.2.0"
- imurmurhash "^0.1.4"
- inquirer "^0.12.0"
- is-my-json-valid "^2.10.0"
- is-resolvable "^1.0.0"
- js-yaml "^3.5.1"
- json-stable-stringify "^1.0.0"
- levn "^0.3.0"
- lodash "^4.0.0"
- mkdirp "^0.5.0"
- natural-compare "^1.4.0"
- optionator "^0.8.2"
- path-is-inside "^1.0.1"
- pluralize "^1.2.1"
- progress "^1.1.8"
- require-uncached "^1.0.2"
- shelljs "^0.7.5"
- strip-bom "^3.0.0"
- strip-json-comments "~2.0.1"
- table "^3.7.8"
- text-table "~0.2.0"
- user-home "^2.0.0"
-
-espree@^3.4.0:
- version "3.5.3"
- resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.3.tgz#931e0af64e7fbbed26b050a29daad1fc64799fa6"
- dependencies:
- acorn "^5.4.0"
- acorn-jsx "^3.0.0"
-
-esprima@2.7.x, esprima@^2.6.0, esprima@^2.7.1:
- version "2.7.3"
- resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
-
-esprima@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804"
-
-esquery@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa"
- dependencies:
- estraverse "^4.0.0"
-
-esrecurse@^4.1.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163"
- dependencies:
- estraverse "^4.1.0"
- object-assign "^4.0.1"
-
-estraverse@^1.9.1:
- version "1.9.3"
- resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44"
-
-estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
-
-esutils@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
-
-event-emitter@~0.3.5:
- version "0.3.5"
- resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39"
- dependencies:
- d "1"
- es5-ext "~0.10.14"
-
-events@~1.1.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924"
-
-evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02"
- dependencies:
- md5.js "^1.3.4"
- safe-buffer "^5.1.1"
-
-exit-hook@^1.0.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8"
-
-extend@~3.0.0, extend@~3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444"
-
-extract-zip@^1.6.5:
- version "1.6.6"
- resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.6.tgz#1290ede8d20d0872b429fd3f351ca128ec5ef85c"
- dependencies:
- concat-stream "1.6.0"
- debug "2.6.9"
- mkdirp "0.5.0"
- yauzl "2.4.1"
-
-extsprintf@1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
-
-extsprintf@^1.2.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
-
-fake@^0.2.2:
- version "0.2.2"
- resolved "https://registry.yarnpkg.com/fake/-/fake-0.2.2.tgz#68fe672725ff0f5c89ba92c539b31111f122d1f3"
-
-far@^0.0.7:
- version "0.0.7"
- resolved "https://registry.yarnpkg.com/far/-/far-0.0.7.tgz#01c1fd362bcd26ce9cf161af3938aa34619f79a7"
- dependencies:
- oop "0.0.3"
-
-fast-deep-equal@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff"
-
-fast-json-stable-stringify@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
-
-fast-levenshtein@~2.0.4:
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
-
-fd-slicer@~1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65"
- dependencies:
- pend "~1.2.0"
-
-figures@^1.3.5:
- version "1.7.0"
- resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e"
- dependencies:
- escape-string-regexp "^1.0.5"
- object-assign "^4.1.0"
-
-file-entry-cache@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361"
- dependencies:
- flat-cache "^1.2.1"
- object-assign "^4.0.1"
-
-flat-cache@^1.2.1:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481"
- dependencies:
- circular-json "^0.3.1"
- del "^2.0.2"
- graceful-fs "^4.1.2"
- write "^0.2.1"
-
-for-each@~0.3.2:
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.2.tgz#2c40450b9348e97f281322593ba96704b9abd4d4"
- dependencies:
- is-function "~1.0.0"
-
-foreach@^2.0.5:
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99"
-
-forever-agent@~0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
-
-form-data@~2.1.1:
- version "2.1.4"
- resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1"
- dependencies:
- asynckit "^0.4.0"
- combined-stream "^1.0.5"
- mime-types "^2.1.12"
-
-form-data@~2.3.1:
- version "2.3.1"
- resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.1.tgz#6fb94fbd71885306d73d15cc497fe4cc4ecd44bf"
- dependencies:
- asynckit "^0.4.0"
- combined-stream "^1.0.5"
- mime-types "^2.1.12"
-
-formidable@^1.0.17:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.1.1.tgz#96b8886f7c3c3508b932d6bd70c4d3a88f35f1a9"
-
-fs-extra@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950"
- dependencies:
- graceful-fs "^4.1.2"
- jsonfile "^2.1.0"
- klaw "^1.0.0"
-
-fs.realpath@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
-
-fstream-ignore@^1.0.0:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105"
- dependencies:
- fstream "^1.0.0"
- inherits "2"
- minimatch "^3.0.0"
-
-fstream-npm@^1.2.0:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/fstream-npm/-/fstream-npm-1.2.1.tgz#08c4a452f789dcbac4c89a4563c902b2c862fd5b"
- dependencies:
- fstream-ignore "^1.0.0"
- inherits "2"
-
-fstream@^1.0.0:
- version "1.0.11"
- resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171"
- dependencies:
- graceful-fs "^4.1.2"
- inherits "~2.0.0"
- mkdirp ">=0.5 0"
- rimraf "2"
-
-function-bind@^1.0.2, function-bind@^1.1.1, function-bind@~1.1.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
-
-generate-function@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74"
-
-generate-object-property@^1.1.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0"
- dependencies:
- is-property "^1.0.0"
-
-getpass@^0.1.1:
- version "0.1.7"
- resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
- dependencies:
- assert-plus "^1.0.0"
-
-ghostface@^1.5.0:
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/ghostface/-/ghostface-1.5.0.tgz#b93e7ab6560ec93b4509032fdd43a4bec93044fd"
- dependencies:
- chalk "^1.0.0"
- concat-stream "^1.4.8"
- convert-source-map "^1.0.0"
- minimist "^1.1.1"
- semver "^4.3.3"
- source-map "^0.4.2"
- which "^1.0.9"
-
-glob@^5.0.15:
- version "5.0.15"
- resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1"
- dependencies:
- inflight "^1.0.4"
- inherits "2"
- minimatch "2 || 3"
- once "^1.3.0"
- path-is-absolute "^1.0.0"
-
-glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.0, glob@~7.1.2:
- version "7.1.2"
- resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
- dependencies:
- fs.realpath "^1.0.0"
- inflight "^1.0.4"
- inherits "2"
- minimatch "^3.0.4"
- once "^1.3.0"
- path-is-absolute "^1.0.0"
-
-globals@^9.14.0:
- version "9.18.0"
- resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
-
-globby@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d"
- dependencies:
- array-union "^1.0.1"
- arrify "^1.0.0"
- glob "^7.0.3"
- object-assign "^4.0.1"
- pify "^2.0.0"
- pinkie-promise "^2.0.0"
-
-graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9:
- version "4.1.11"
- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
-
-handlebars@^4.0.1:
- version "4.0.11"
- resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc"
- dependencies:
- async "^1.4.0"
- optimist "^0.6.1"
- source-map "^0.4.4"
- optionalDependencies:
- uglify-js "^2.6"
-
-har-schema@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
-
-har-validator@~2.0.6:
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d"
- dependencies:
- chalk "^1.1.1"
- commander "^2.9.0"
- is-my-json-valid "^2.12.4"
- pinkie-promise "^2.0.0"
-
-har-validator@~5.0.3:
- version "5.0.3"
- resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd"
- dependencies:
- ajv "^5.1.0"
- har-schema "^2.0.0"
-
-has-ansi@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
- dependencies:
- ansi-regex "^2.0.0"
-
-has-flag@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
-
-has@^1.0.0, has@^1.0.1, has@~1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28"
- dependencies:
- function-bind "^1.0.2"
-
-hash-base@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1"
- dependencies:
- inherits "^2.0.1"
-
-hash-base@^3.0.0:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918"
- dependencies:
- inherits "^2.0.1"
- safe-buffer "^5.0.1"
-
-hash.js@^1.0.0, hash.js@^1.0.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846"
- dependencies:
- inherits "^2.0.3"
- minimalistic-assert "^1.0.0"
-
-hasha@^2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/hasha/-/hasha-2.2.0.tgz#78d7cbfc1e6d66303fe79837365984517b2f6ee1"
- dependencies:
- is-stream "^1.0.1"
- pinkie-promise "^2.0.0"
-
-hawk@~3.1.3:
- version "3.1.3"
- resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4"
- dependencies:
- boom "2.x.x"
- cryptiles "2.x.x"
- hoek "2.x.x"
- sntp "1.x.x"
-
-hawk@~6.0.2:
- version "6.0.2"
- resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038"
- dependencies:
- boom "4.x.x"
- cryptiles "3.x.x"
- hoek "4.x.x"
- sntp "2.x.x"
-
-hmac-drbg@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
- dependencies:
- hash.js "^1.0.3"
- minimalistic-assert "^1.0.0"
- minimalistic-crypto-utils "^1.0.1"
-
-hoek@2.x.x:
- version "2.16.3"
- resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
-
-hoek@4.x.x:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d"
-
-htmlescape@^1.1.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/htmlescape/-/htmlescape-1.1.1.tgz#3a03edc2214bca3b66424a3e7959349509cb0351"
-
-http-signature@~1.1.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf"
- dependencies:
- assert-plus "^0.2.0"
- jsprim "^1.2.2"
- sshpk "^1.7.0"
-
-http-signature@~1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
- dependencies:
- assert-plus "^1.0.0"
- jsprim "^1.2.2"
- sshpk "^1.7.0"
-
-https-browserify@~0.0.0:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82"
-
-ieee754@^1.1.4:
- version "1.1.8"
- resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4"
-
-ignore@^3.2.0:
- version "3.3.7"
- resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021"
-
-imurmurhash@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
-
-in-publish@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz#e20ff5e3a2afc2690320b6dc552682a9c7fadf51"
-
-indexof@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
-
-inflight@^1.0.4:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
- dependencies:
- once "^1.3.0"
- wrappy "1"
-
-inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
-
-inherits@2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
-
-inline-source-map@~0.6.0:
- version "0.6.2"
- resolved "https://registry.yarnpkg.com/inline-source-map/-/inline-source-map-0.6.2.tgz#f9393471c18a79d1724f863fa38b586370ade2a5"
- dependencies:
- source-map "~0.5.3"
-
-inquirer@^0.12.0:
- version "0.12.0"
- resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e"
- dependencies:
- ansi-escapes "^1.1.0"
- ansi-regex "^2.0.0"
- chalk "^1.0.0"
- cli-cursor "^1.0.1"
- cli-width "^2.0.0"
- figures "^1.3.5"
- lodash "^4.3.0"
- readline2 "^1.0.1"
- run-async "^0.1.0"
- rx-lite "^3.1.2"
- string-width "^1.0.1"
- strip-ansi "^3.0.0"
- through "^2.3.6"
-
-insert-module-globals@^7.0.0:
- version "7.0.1"
- resolved "https://registry.yarnpkg.com/insert-module-globals/-/insert-module-globals-7.0.1.tgz#c03bf4e01cb086d5b5e5ace8ad0afe7889d638c3"
- dependencies:
- JSONStream "^1.0.3"
- combine-source-map "~0.7.1"
- concat-stream "~1.5.1"
- is-buffer "^1.1.0"
- lexical-scope "^1.2.0"
- process "~0.11.0"
- through2 "^2.0.0"
- xtend "^4.0.0"
-
-interpret@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614"
-
-is-buffer@^1.1.0, is-buffer@^1.1.5:
- version "1.1.6"
- resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
-
-is-callable@^1.1.1, is-callable@^1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2"
-
-is-date-object@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"
-
-is-fullwidth-code-point@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
- dependencies:
- number-is-nan "^1.0.0"
-
-is-fullwidth-code-point@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
-
-is-function@~1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5"
-
-is-my-json-valid@^2.10.0, is-my-json-valid@^2.12.4:
- version "2.17.1"
- resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.17.1.tgz#3da98914a70a22f0a8563ef1511a246c6fc55471"
- dependencies:
- generate-function "^2.0.0"
- generate-object-property "^1.1.0"
- jsonpointer "^4.0.0"
- xtend "^4.0.0"
-
-is-node-modern@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-node-modern/-/is-node-modern-1.0.0.tgz#cfe2607be7403b05b28a566f66cbf8a583d4fc63"
-
-is-path-cwd@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d"
-
-is-path-in-cwd@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc"
- dependencies:
- is-path-inside "^1.0.0"
-
-is-path-inside@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036"
- dependencies:
- path-is-inside "^1.0.1"
-
-is-property@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
-
-is-regex@^1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491"
- dependencies:
- has "^1.0.1"
-
-is-resolvable@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88"
-
-is-stream@^1.0.1:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
-
-is-symbol@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572"
-
-is-typedarray@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
-
-isarray@^1.0.0, isarray@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
-
-isarray@~0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
-
-isexe@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
-
-isstream@~0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
-
-istanbul@^0.4.5:
- version "0.4.5"
- resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b"
- dependencies:
- abbrev "1.0.x"
- async "1.x"
- escodegen "1.8.x"
- esprima "2.7.x"
- glob "^5.0.15"
- handlebars "^4.0.1"
- js-yaml "3.x"
- mkdirp "0.5.x"
- nopt "3.x"
- once "1.x"
- resolve "1.1.x"
- supports-color "^3.1.0"
- which "^1.1.1"
- wordwrap "^1.0.0"
-
-js-tokens@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
-
-js-yaml@3.6.1:
- version "3.6.1"
- resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.6.1.tgz#6e5fe67d8b205ce4d22fad05b7781e8dadcc4b30"
- dependencies:
- argparse "^1.0.7"
- esprima "^2.6.0"
-
-js-yaml@3.x, js-yaml@^3.5.1:
- version "3.10.0"
- resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc"
- dependencies:
- argparse "^1.0.7"
- esprima "^4.0.0"
-
-jsbn@~0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
-
-json-schema-traverse@^0.3.0:
- version "0.3.1"
- resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340"
-
-json-schema@0.2.3:
- version "0.2.3"
- resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
-
-json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
- dependencies:
- jsonify "~0.0.0"
-
-json-stable-stringify@~0.0.0:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz#611c23e814db375527df851193db59dd2af27f45"
- dependencies:
- jsonify "~0.0.0"
-
-json-stringify-safe@~5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
-
-jsonfile@^2.1.0:
- version "2.4.0"
- resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8"
- optionalDependencies:
- graceful-fs "^4.1.6"
-
-jsonify@~0.0.0:
- version "0.0.0"
- resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
-
-jsonparse@^1.2.0:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280"
-
-jsonpointer@^4.0.0:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9"
-
-jsprim@^1.2.2:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
- dependencies:
- assert-plus "1.0.0"
- extsprintf "1.3.0"
- json-schema "0.2.3"
- verror "1.10.0"
-
-kew@^0.7.0:
- version "0.7.0"
- resolved "https://registry.yarnpkg.com/kew/-/kew-0.7.0.tgz#79d93d2d33363d6fdd2970b335d9141ad591d79b"
-
-kind-of@^3.0.2:
- version "3.2.2"
- resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
- dependencies:
- is-buffer "^1.1.5"
-
-klaw@^1.0.0:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439"
- optionalDependencies:
- graceful-fs "^4.1.9"
-
-labeled-stream-splicer@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/labeled-stream-splicer/-/labeled-stream-splicer-2.0.0.tgz#a52e1d138024c00b86b1c0c91f677918b8ae0a59"
- dependencies:
- inherits "^2.0.1"
- isarray "~0.0.1"
- stream-splicer "^2.0.0"
-
-lazy-cache@^1.0.3:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
-
-lcov-parse@0.0.10:
- version "0.0.10"
- resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-0.0.10.tgz#1b0b8ff9ac9c7889250582b70b71315d9da6d9a3"
-
-levn@^0.3.0, levn@~0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
- dependencies:
- prelude-ls "~1.1.2"
- type-check "~0.3.2"
-
-lexical-scope@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/lexical-scope/-/lexical-scope-1.2.0.tgz#fcea5edc704a4b3a8796cdca419c3a0afaf22df4"
- dependencies:
- astw "^2.0.0"
-
-lodash.memoize@~3.0.3:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f"
-
-lodash@^4.0.0, lodash@^4.3.0:
- version "4.17.5"
- resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511"
-
-log-driver@1.2.5:
- version "1.2.5"
- resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.5.tgz#7ae4ec257302fd790d557cb10c97100d857b0056"
-
-longest@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
-
-lru-cache@^4.0.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55"
- dependencies:
- pseudomap "^1.0.2"
- yallist "^2.1.2"
-
-map-limit@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/map-limit/-/map-limit-0.0.1.tgz#eb7961031c0f0e8d001bf2d56fab685d58822f38"
- dependencies:
- once "~1.3.0"
-
-md5.js@^1.3.4:
- version "1.3.4"
- resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d"
- dependencies:
- hash-base "^3.0.0"
- inherits "^2.0.1"
-
-miller-rabin@^4.0.0:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d"
- dependencies:
- bn.js "^4.0.0"
- brorand "^1.0.1"
-
-mime-db@~1.30.0:
- version "1.30.0"
- resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01"
-
-mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.7:
- version "2.1.17"
- resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a"
- dependencies:
- mime-db "~1.30.0"
-
-minimalistic-assert@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3"
-
-minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
-
-"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.4:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
- dependencies:
- brace-expansion "^1.1.7"
-
-minimist@0.0.8:
- version "0.0.8"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
-
-minimist@1.2.0, minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0, minimist@~1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
-
-minimist@~0.0.1:
- version "0.0.10"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
-
-mkdirp@0.5.0:
- version "0.5.0"
- resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.0.tgz#1d73076a6df986cd9344e15e71fcc05a4c9abf12"
- dependencies:
- minimist "0.0.8"
-
-mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1:
- version "0.5.1"
- resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
- dependencies:
- minimist "0.0.8"
-
-module-deps@^4.0.8:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/module-deps/-/module-deps-4.1.1.tgz#23215833f1da13fd606ccb8087b44852dcb821fd"
- dependencies:
- JSONStream "^1.0.3"
- browser-resolve "^1.7.0"
- cached-path-relative "^1.0.0"
- concat-stream "~1.5.0"
- defined "^1.0.0"
- detective "^4.0.0"
- duplexer2 "^0.1.2"
- inherits "^2.0.1"
- parents "^1.0.0"
- readable-stream "^2.0.2"
- resolve "^1.1.3"
- stream-combiner2 "^1.1.1"
- subarg "^1.0.0"
- through2 "^2.0.0"
- xtend "^4.0.0"
-
-ms@2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
-
-mute-stream@0.0.5:
- version "0.0.5"
- resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0"
-
-natural-compare@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
-
-node-uuid@~1.4.7:
- version "1.4.8"
- resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.8.tgz#b040eb0923968afabf8d32fb1f17f1167fdab907"
-
-nopt@3.x:
- version "3.0.6"
- resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
- dependencies:
- abbrev "1"
-
-number-is-nan@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
-
-oauth-sign@~0.8.1, oauth-sign@~0.8.2:
- version "0.8.2"
- resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
-
-obake@^0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/obake/-/obake-0.1.2.tgz#64a477c9ddfbbccc18cff3a750924974d22c29d3"
- dependencies:
- envar "^2.0.0"
- ghostface "^1.5.0"
-
-object-assign@^4.0.1, object-assign@^4.1.0:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
-
-object-inspect@~1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.3.0.tgz#5b1eb8e6742e2ee83342a637034d844928ba2f6d"
-
-object-keys@^1.0.8:
- version "1.0.11"
- resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d"
-
-once@1.x, once@^1.3.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
- dependencies:
- wrappy "1"
-
-once@~1.3.0:
- version "1.3.3"
- resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20"
- dependencies:
- wrappy "1"
-
-onetime@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789"
-
-oop@0.0.3:
- version "0.0.3"
- resolved "https://registry.yarnpkg.com/oop/-/oop-0.0.3.tgz#70fa405a5650891a194fdc82ca68dad6dabf4401"
-
-optimist@^0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
- dependencies:
- minimist "~0.0.1"
- wordwrap "~0.0.2"
-
-optionator@^0.8.1, optionator@^0.8.2:
- version "0.8.2"
- resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
- dependencies:
- deep-is "~0.1.3"
- fast-levenshtein "~2.0.4"
- levn "~0.3.0"
- prelude-ls "~1.1.2"
- type-check "~0.3.2"
- wordwrap "~1.0.0"
-
-os-browserify@~0.1.1:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.1.2.tgz#49ca0293e0b19590a5f5de10c7f265a617d8fe54"
-
-os-homedir@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
-
-os-shim@^0.1.2:
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/os-shim/-/os-shim-0.1.3.tgz#6b62c3791cf7909ea35ed46e17658bb417cb3917"
-
-pako@~0.2.0:
- version "0.2.9"
- resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75"
-
-parents@^1.0.0, parents@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/parents/-/parents-1.0.1.tgz#fedd4d2bf193a77745fe71e371d73c3307d9c751"
- dependencies:
- path-platform "~0.11.15"
-
-parse-asn1@^5.0.0:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.0.tgz#37c4f9b7ed3ab65c74817b5f2480937fbf97c712"
- dependencies:
- asn1.js "^4.0.0"
- browserify-aes "^1.0.0"
- create-hash "^1.1.0"
- evp_bytestokey "^1.0.0"
- pbkdf2 "^3.0.3"
-
-path-browserify@~0.0.0:
- version "0.0.0"
- resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a"
-
-path-is-absolute@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
-
-path-is-inside@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
-
-path-parse@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1"
-
-path-platform@~0.11.15:
- version "0.11.15"
- resolved "https://registry.yarnpkg.com/path-platform/-/path-platform-0.11.15.tgz#e864217f74c36850f0852b78dc7bf7d4a5721bf2"
-
-pbkdf2@^3.0.3:
- version "3.0.14"
- resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.14.tgz#a35e13c64799b06ce15320f459c230e68e73bade"
- dependencies:
- create-hash "^1.1.2"
- create-hmac "^1.1.4"
- ripemd160 "^2.0.1"
- safe-buffer "^5.0.1"
- sha.js "^2.4.8"
-
-pend@~1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
-
-performance-now@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
-
-phantomjs-prebuilt@^2.1.13:
- version "2.1.16"
- resolved "https://registry.yarnpkg.com/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.16.tgz#efd212a4a3966d3647684ea8ba788549be2aefef"
- dependencies:
- es6-promise "^4.0.3"
- extract-zip "^1.6.5"
- fs-extra "^1.0.0"
- hasha "^2.2.0"
- kew "^0.7.0"
- progress "^1.1.8"
- request "^2.81.0"
- request-progress "^2.0.1"
- which "^1.2.10"
-
-pify@^2.0.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
-
-pinkie-promise@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
- dependencies:
- pinkie "^2.0.0"
-
-pinkie@^2.0.0:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
-
-pkgfiles@^2.3.0:
- version "2.3.2"
- resolved "https://registry.yarnpkg.com/pkgfiles/-/pkgfiles-2.3.2.tgz#1b54a7a8dbe32caa84b0955f44917e1500d33d05"
- dependencies:
- columnify "^1.5.4"
- du "^0.1.0"
- fstream-npm "^1.2.0"
- map-limit "0.0.1"
- minimist "^1.2.0"
- pkgresolve "^1.1.4"
- pretty-bytes "^4.0.2"
-
-pkgresolve@^1.1.4:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/pkgresolve/-/pkgresolve-1.1.4.tgz#0fa499ca366888c31e97357446c6053025ae47b6"
- dependencies:
- minimist "~1.2.0"
-
-pluralize@^1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45"
-
-pre-commit@^1.1.3:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/pre-commit/-/pre-commit-1.2.2.tgz#dbcee0ee9de7235e57f79c56d7ce94641a69eec6"
- dependencies:
- cross-spawn "^5.0.1"
- spawn-sync "^1.0.15"
- which "1.2.x"
-
-prelude-ls@~1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
-
-pretty-bytes@^4.0.2:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9"
-
-process-nextick-args@~1.0.6:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
-
-process-nextick-args@~2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
-
-process@~0.11.0:
- version "0.11.10"
- resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
-
-progress@^1.1.8:
- version "1.1.8"
- resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be"
-
-pseudomap@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
-
-public-encrypt@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.0.tgz#39f699f3a46560dd5ebacbca693caf7c65c18cc6"
- dependencies:
- bn.js "^4.1.0"
- browserify-rsa "^4.0.0"
- create-hash "^1.1.0"
- parse-asn1 "^5.0.0"
- randombytes "^2.0.1"
-
-punycode@1.3.2:
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
-
-punycode@^1.3.2, punycode@^1.4.1:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
-
-qs@~6.3.0:
- version "6.3.2"
- resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.2.tgz#e75bd5f6e268122a2a0e0bda630b2550c166502c"
-
-qs@~6.5.1:
- version "6.5.1"
- resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8"
-
-querystring-es3@~0.2.0:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
-
-querystring@0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
-
-randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5:
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz#d302c522948588848a8d300c932b44c24231da80"
- dependencies:
- safe-buffer "^5.1.0"
-
-randomfill@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.3.tgz#b96b7df587f01dd91726c418f30553b1418e3d62"
- dependencies:
- randombytes "^2.0.5"
- safe-buffer "^5.1.0"
-
-read-only-stream@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/read-only-stream/-/read-only-stream-2.0.0.tgz#2724fd6a8113d73764ac288d4386270c1dbf17f0"
- dependencies:
- readable-stream "^2.0.2"
-
-readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3:
- version "2.3.4"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.4.tgz#c946c3f47fa7d8eabc0b6150f4a12f69a4574071"
- dependencies:
- core-util-is "~1.0.0"
- inherits "~2.0.3"
- isarray "~1.0.0"
- process-nextick-args "~2.0.0"
- safe-buffer "~5.1.1"
- string_decoder "~1.0.3"
- util-deprecate "~1.0.1"
-
-readable-stream@~2.0.0:
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e"
- dependencies:
- core-util-is "~1.0.0"
- inherits "~2.0.1"
- isarray "~1.0.0"
- process-nextick-args "~1.0.6"
- string_decoder "~0.10.x"
- util-deprecate "~1.0.1"
-
-readline2@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35"
- dependencies:
- code-point-at "^1.0.0"
- is-fullwidth-code-point "^1.0.0"
- mute-stream "0.0.5"
-
-rechoir@^0.6.2:
- version "0.6.2"
- resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
- dependencies:
- resolve "^1.1.6"
-
-repeat-string@^1.5.2:
- version "1.6.1"
- resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
-
-request-progress@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-2.0.1.tgz#5d36bb57961c673aa5b788dbc8141fdf23b44e08"
- dependencies:
- throttleit "^1.0.0"
-
-request@2.76.0:
- version "2.76.0"
- resolved "https://registry.yarnpkg.com/request/-/request-2.76.0.tgz#be44505afef70360a0436955106be3945d95560e"
- dependencies:
- aws-sign2 "~0.6.0"
- aws4 "^1.2.1"
- caseless "~0.11.0"
- combined-stream "~1.0.5"
- extend "~3.0.0"
- forever-agent "~0.6.1"
- form-data "~2.1.1"
- har-validator "~2.0.6"
- hawk "~3.1.3"
- http-signature "~1.1.0"
- is-typedarray "~1.0.0"
- isstream "~0.1.2"
- json-stringify-safe "~5.0.1"
- mime-types "~2.1.7"
- node-uuid "~1.4.7"
- oauth-sign "~0.8.1"
- qs "~6.3.0"
- stringstream "~0.0.4"
- tough-cookie "~2.3.0"
- tunnel-agent "~0.4.1"
-
-request@2.79.0:
- version "2.79.0"
- resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de"
- dependencies:
- aws-sign2 "~0.6.0"
- aws4 "^1.2.1"
- caseless "~0.11.0"
- combined-stream "~1.0.5"
- extend "~3.0.0"
- forever-agent "~0.6.1"
- form-data "~2.1.1"
- har-validator "~2.0.6"
- hawk "~3.1.3"
- http-signature "~1.1.0"
- is-typedarray "~1.0.0"
- isstream "~0.1.2"
- json-stringify-safe "~5.0.1"
- mime-types "~2.1.7"
- oauth-sign "~0.8.1"
- qs "~6.3.0"
- stringstream "~0.0.4"
- tough-cookie "~2.3.0"
- tunnel-agent "~0.4.1"
- uuid "^3.0.0"
-
-request@^2.81.0:
- version "2.83.0"
- resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356"
- dependencies:
- aws-sign2 "~0.7.0"
- aws4 "^1.6.0"
- caseless "~0.12.0"
- combined-stream "~1.0.5"
- extend "~3.0.1"
- forever-agent "~0.6.1"
- form-data "~2.3.1"
- har-validator "~5.0.3"
- hawk "~6.0.2"
- http-signature "~1.2.0"
- is-typedarray "~1.0.0"
- isstream "~0.1.2"
- json-stringify-safe "~5.0.1"
- mime-types "~2.1.17"
- oauth-sign "~0.8.2"
- performance-now "^2.1.0"
- qs "~6.5.1"
- safe-buffer "^5.1.1"
- stringstream "~0.0.5"
- tough-cookie "~2.3.3"
- tunnel-agent "^0.6.0"
- uuid "^3.1.0"
-
-require-uncached@^1.0.2:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3"
- dependencies:
- caller-path "^0.1.0"
- resolve-from "^1.0.0"
-
-resolve-from@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226"
-
-resolve@1.1.7, resolve@1.1.x:
- version "1.1.7"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
-
-resolve@^1.1.3, resolve@^1.1.4, resolve@^1.1.6:
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36"
- dependencies:
- path-parse "^1.0.5"
-
-resolve@~1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.4.0.tgz#a75be01c53da25d934a98ebd0e4c4a7312f92a86"
- dependencies:
- path-parse "^1.0.5"
-
-restore-cursor@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541"
- dependencies:
- exit-hook "^1.0.0"
- onetime "^1.0.0"
-
-resumer@~0.0.0:
- version "0.0.0"
- resolved "https://registry.yarnpkg.com/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759"
- dependencies:
- through "~2.3.4"
-
-right-align@^0.1.1:
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
- dependencies:
- align-text "^0.1.1"
-
-rimraf@2, rimraf@^2.2.8, rimraf@^2.5.4:
- version "2.6.2"
- resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
- dependencies:
- glob "^7.0.5"
-
-ripemd160@^2.0.0, ripemd160@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7"
- dependencies:
- hash-base "^2.0.0"
- inherits "^2.0.1"
-
-run-async@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389"
- dependencies:
- once "^1.3.0"
-
-rx-lite@^3.1.2:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102"
-
-safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
-
-semver@^4.3.3:
- version "4.3.6"
- resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da"
-
-sha.js@^2.4.0, sha.js@^2.4.8, sha.js@~2.4.4:
- version "2.4.10"
- resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.10.tgz#b1fde5cd7d11a5626638a07c604ab909cfa31f9b"
- dependencies:
- inherits "^2.0.1"
- safe-buffer "^5.0.1"
-
-shasum@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/shasum/-/shasum-1.0.2.tgz#e7012310d8f417f4deb5712150e5678b87ae565f"
- dependencies:
- json-stable-stringify "~0.0.0"
- sha.js "~2.4.4"
-
-shebang-command@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
- dependencies:
- shebang-regex "^1.0.0"
-
-shebang-regex@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
-
-shell-quote@^1.6.1:
- version "1.6.1"
- resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767"
- dependencies:
- array-filter "~0.0.0"
- array-map "~0.0.0"
- array-reduce "~0.0.0"
- jsonify "~0.0.0"
-
-shelljs@^0.7.5:
- version "0.7.8"
- resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.8.tgz#decbcf874b0d1e5fb72e14b164a9683048e9acb3"
- dependencies:
- glob "^7.0.0"
- interpret "^1.0.0"
- rechoir "^0.6.2"
-
-slice-ansi@0.0.4:
- version "0.0.4"
- resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35"
-
-sntp@1.x.x:
- version "1.0.9"
- resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
- dependencies:
- hoek "2.x.x"
-
-sntp@2.x.x:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8"
- dependencies:
- hoek "4.x.x"
-
-source-map@^0.4.2, source-map@^0.4.4:
- version "0.4.4"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b"
- dependencies:
- amdefine ">=0.0.4"
-
-source-map@~0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d"
- dependencies:
- amdefine ">=0.0.4"
-
-source-map@~0.5.1, source-map@~0.5.3:
- version "0.5.7"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
-
-spawn-sync@^1.0.15:
- version "1.0.15"
- resolved "https://registry.yarnpkg.com/spawn-sync/-/spawn-sync-1.0.15.tgz#b00799557eb7fb0c8376c29d44e8a1ea67e57476"
- dependencies:
- concat-stream "^1.4.7"
- os-shim "^0.1.2"
-
-sprintf-js@~1.0.2:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
-
-sshpk@^1.7.0:
- version "1.13.1"
- resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3"
- dependencies:
- asn1 "~0.2.3"
- assert-plus "^1.0.0"
- dashdash "^1.12.0"
- getpass "^0.1.1"
- optionalDependencies:
- bcrypt-pbkdf "^1.0.0"
- ecc-jsbn "~0.1.1"
- jsbn "~0.1.0"
- tweetnacl "~0.14.0"
-
-stream-browserify@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db"
- dependencies:
- inherits "~2.0.1"
- readable-stream "^2.0.2"
-
-stream-combiner2@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe"
- dependencies:
- duplexer2 "~0.1.0"
- readable-stream "^2.0.2"
-
-stream-http@^2.0.0:
- version "2.8.0"
- resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.0.tgz#fd86546dac9b1c91aff8fc5d287b98fafb41bc10"
- dependencies:
- builtin-status-codes "^3.0.0"
- inherits "^2.0.1"
- readable-stream "^2.3.3"
- to-arraybuffer "^1.0.0"
- xtend "^4.0.0"
-
-stream-splicer@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/stream-splicer/-/stream-splicer-2.0.0.tgz#1b63be438a133e4b671cc1935197600175910d83"
- dependencies:
- inherits "^2.0.1"
- readable-stream "^2.0.2"
-
-string-width@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
- dependencies:
- code-point-at "^1.0.0"
- is-fullwidth-code-point "^1.0.0"
- strip-ansi "^3.0.0"
-
-string-width@^2.0.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
- dependencies:
- is-fullwidth-code-point "^2.0.0"
- strip-ansi "^4.0.0"
-
-string.prototype.trim@~1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz#d04de2c89e137f4d7d206f086b5ed2fae6be8cea"
- dependencies:
- define-properties "^1.1.2"
- es-abstract "^1.5.0"
- function-bind "^1.0.2"
-
-string_decoder@~0.10.0, string_decoder@~0.10.x:
- version "0.10.31"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
-
-string_decoder@~1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab"
- dependencies:
- safe-buffer "~5.1.0"
-
-stringstream@~0.0.4, stringstream@~0.0.5:
- version "0.0.5"
- resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
-
-strip-ansi@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
- dependencies:
- ansi-regex "^2.0.0"
-
-strip-ansi@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
- dependencies:
- ansi-regex "^3.0.0"
-
-strip-bom@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
-
-strip-json-comments@~2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
-
-subarg@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2"
- dependencies:
- minimist "^1.1.0"
-
-supports-color@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
-
-supports-color@^3.1.0:
- version "3.2.3"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6"
- dependencies:
- has-flag "^1.0.0"
-
-syntax-error@^1.1.1:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/syntax-error/-/syntax-error-1.4.0.tgz#2d9d4ff5c064acb711594a3e3b95054ad51d907c"
- dependencies:
- acorn-node "^1.2.0"
-
-table@^3.7.8:
- version "3.8.3"
- resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f"
- dependencies:
- ajv "^4.7.0"
- ajv-keywords "^1.0.0"
- chalk "^1.1.1"
- lodash "^4.0.0"
- slice-ansi "0.0.4"
- string-width "^2.0.0"
-
-tape@^4.6.2:
- version "4.8.0"
- resolved "https://registry.yarnpkg.com/tape/-/tape-4.8.0.tgz#f6a9fec41cc50a1de50fa33603ab580991f6068e"
- dependencies:
- deep-equal "~1.0.1"
- defined "~1.0.0"
- for-each "~0.3.2"
- function-bind "~1.1.0"
- glob "~7.1.2"
- has "~1.0.1"
- inherits "~2.0.3"
- minimist "~1.2.0"
- object-inspect "~1.3.0"
- resolve "~1.4.0"
- resumer "~0.0.0"
- string.prototype.trim "~1.1.2"
- through "~2.3.8"
-
-text-table@~0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
-
-throttleit@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c"
-
-through2@^2.0.0:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be"
- dependencies:
- readable-stream "^2.1.5"
- xtend "~4.0.1"
-
-"through@>=2.2.7 <3", through@^2.3.6, through@^2.3.8, through@~2.3.4, through@~2.3.8:
- version "2.3.8"
- resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
-
-timers-browserify@^1.0.1:
- version "1.4.2"
- resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.4.2.tgz#c9c58b575be8407375cb5e2462dacee74359f41d"
- dependencies:
- process "~0.11.0"
-
-to-arraybuffer@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
-
-tough-cookie@~2.3.0, tough-cookie@~2.3.3:
- version "2.3.3"
- resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561"
- dependencies:
- punycode "^1.4.1"
-
-tty-browserify@~0.0.0:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.1.tgz#3f05251ee17904dfd0677546670db9651682b811"
-
-tunnel-agent@^0.6.0:
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
- dependencies:
- safe-buffer "^5.0.1"
-
-tunnel-agent@~0.4.1:
- version "0.4.3"
- resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb"
-
-tweetnacl@^0.14.3, tweetnacl@~0.14.0:
- version "0.14.5"
- resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
-
-type-check@~0.3.2:
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
- dependencies:
- prelude-ls "~1.1.2"
-
-typedarray@^0.0.6, typedarray@~0.0.5:
- version "0.0.6"
- resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
-
-uglify-js@^2.6:
- version "2.8.29"
- resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd"
- dependencies:
- source-map "~0.5.1"
- yargs "~3.10.0"
- optionalDependencies:
- uglify-to-browserify "~1.0.0"
-
-uglify-to-browserify@~1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
-
-umd@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/umd/-/umd-3.0.1.tgz#8ae556e11011f63c2596708a8837259f01b3d60e"
-
-url@~0.11.0:
- version "0.11.0"
- resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
- dependencies:
- punycode "1.3.2"
- querystring "0.2.0"
-
-user-home@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f"
- dependencies:
- os-homedir "^1.0.0"
-
-util-deprecate@~1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
-
-util@0.10.3, util@~0.10.1:
- version "0.10.3"
- resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
- dependencies:
- inherits "2.0.1"
-
-uuid@^3.0.0, uuid@^3.1.0:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14"
-
-verror@1.10.0:
- version "1.10.0"
- resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
- dependencies:
- assert-plus "^1.0.0"
- core-util-is "1.0.2"
- extsprintf "^1.2.0"
-
-vm-browserify@~0.0.1:
- version "0.0.4"
- resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73"
- dependencies:
- indexof "0.0.1"
-
-wcwidth@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"
- dependencies:
- defaults "^1.0.3"
-
-which@1.2.x:
- version "1.2.14"
- resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5"
- dependencies:
- isexe "^2.0.0"
-
-which@^1.0.9, which@^1.1.1, which@^1.2.10, which@^1.2.9:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a"
- dependencies:
- isexe "^2.0.0"
-
-window-size@0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
-
-wordwrap@0.0.2:
- version "0.0.2"
- resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
-
-wordwrap@^1.0.0, wordwrap@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
-
-wordwrap@~0.0.2:
- version "0.0.3"
- resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
-
-wrappy@1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
-
-write@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757"
- dependencies:
- mkdirp "^0.5.1"
-
-xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
-
-yallist@^2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
-
-yargs@~3.10.0:
- version "3.10.0"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"
- dependencies:
- camelcase "^1.0.2"
- cliui "^2.1.0"
- decamelize "^1.0.0"
- window-size "0.1.0"
-
-yauzl@2.4.1:
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005"
- dependencies:
- fd-slicer "~1.0.1"
diff --git a/deps/npm/node_modules/request/node_modules/tough-cookie/LICENSE b/deps/npm/node_modules/request/node_modules/tough-cookie/LICENSE
deleted file mode 100644
index 22204e87583216..00000000000000
--- a/deps/npm/node_modules/request/node_modules/tough-cookie/LICENSE
+++ /dev/null
@@ -1,12 +0,0 @@
-Copyright (c) 2015, Salesforce.com, Inc.
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
-
-3. Neither the name of Salesforce.com nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/deps/npm/node_modules/request/node_modules/tough-cookie/lib/cookie.js b/deps/npm/node_modules/request/node_modules/tough-cookie/lib/cookie.js
deleted file mode 100644
index 32dc0f8dc7eed3..00000000000000
--- a/deps/npm/node_modules/request/node_modules/tough-cookie/lib/cookie.js
+++ /dev/null
@@ -1,1482 +0,0 @@
-/*!
- * Copyright (c) 2015, Salesforce.com, Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- *
- * 3. Neither the name of Salesforce.com nor the names of its contributors may
- * be used to endorse or promote products derived from this software without
- * specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-'use strict';
-var net = require('net');
-var urlParse = require('url').parse;
-var util = require('util');
-var pubsuffix = require('./pubsuffix-psl');
-var Store = require('./store').Store;
-var MemoryCookieStore = require('./memstore').MemoryCookieStore;
-var pathMatch = require('./pathMatch').pathMatch;
-var VERSION = require('./version');
-
-var punycode;
-try {
- punycode = require('punycode');
-} catch(e) {
- console.warn("tough-cookie: can't load punycode; won't use punycode for domain normalization");
-}
-
-// From RFC6265 S4.1.1
-// note that it excludes \x3B ";"
-var COOKIE_OCTETS = /^[\x21\x23-\x2B\x2D-\x3A\x3C-\x5B\x5D-\x7E]+$/;
-
-var CONTROL_CHARS = /[\x00-\x1F]/;
-
-// From Chromium // '\r', '\n' and '\0' should be treated as a terminator in
-// the "relaxed" mode, see:
-// https://github.com/ChromiumWebApps/chromium/blob/b3d3b4da8bb94c1b2e061600df106d590fda3620/net/cookies/parsed_cookie.cc#L60
-var TERMINATORS = ['\n', '\r', '\0'];
-
-// RFC6265 S4.1.1 defines path value as 'any CHAR except CTLs or ";"'
-// Note ';' is \x3B
-var PATH_VALUE = /[\x20-\x3A\x3C-\x7E]+/;
-
-// date-time parsing constants (RFC6265 S5.1.1)
-
-var DATE_DELIM = /[\x09\x20-\x2F\x3B-\x40\x5B-\x60\x7B-\x7E]/;
-
-var MONTH_TO_NUM = {
- jan:0, feb:1, mar:2, apr:3, may:4, jun:5,
- jul:6, aug:7, sep:8, oct:9, nov:10, dec:11
-};
-var NUM_TO_MONTH = [
- 'Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'
-];
-var NUM_TO_DAY = [
- 'Sun','Mon','Tue','Wed','Thu','Fri','Sat'
-];
-
-var MAX_TIME = 2147483647000; // 31-bit max
-var MIN_TIME = 0; // 31-bit min
-
-/*
- * Parses a Natural number (i.e., non-negative integer) with either the
- * *DIGIT ( non-digit *OCTET )
- * or
- * *DIGIT
- * grammar (RFC6265 S5.1.1).
- *
- * The "trailingOK" boolean controls if the grammar accepts a
- * "( non-digit *OCTET )" trailer.
- */
-function parseDigits(token, minDigits, maxDigits, trailingOK) {
- var count = 0;
- while (count < token.length) {
- var c = token.charCodeAt(count);
- // "non-digit = %x00-2F / %x3A-FF"
- if (c <= 0x2F || c >= 0x3A) {
- break;
- }
- count++;
- }
-
- // constrain to a minimum and maximum number of digits.
- if (count < minDigits || count > maxDigits) {
- return null;
- }
-
- if (!trailingOK && count != token.length) {
- return null;
- }
-
- return parseInt(token.substr(0,count), 10);
-}
-
-function parseTime(token) {
- var parts = token.split(':');
- var result = [0,0,0];
-
- /* RF6256 S5.1.1:
- * time = hms-time ( non-digit *OCTET )
- * hms-time = time-field ":" time-field ":" time-field
- * time-field = 1*2DIGIT
- */
-
- if (parts.length !== 3) {
- return null;
- }
-
- for (var i = 0; i < 3; i++) {
- // "time-field" must be strictly "1*2DIGIT", HOWEVER, "hms-time" can be
- // followed by "( non-digit *OCTET )" so therefore the last time-field can
- // have a trailer
- var trailingOK = (i == 2);
- var num = parseDigits(parts[i], 1, 2, trailingOK);
- if (num === null) {
- return null;
- }
- result[i] = num;
- }
-
- return result;
-}
-
-function parseMonth(token) {
- token = String(token).substr(0,3).toLowerCase();
- var num = MONTH_TO_NUM[token];
- return num >= 0 ? num : null;
-}
-
-/*
- * RFC6265 S5.1.1 date parser (see RFC for full grammar)
- */
-function parseDate(str) {
- if (!str) {
- return;
- }
-
- /* RFC6265 S5.1.1:
- * 2. Process each date-token sequentially in the order the date-tokens
- * appear in the cookie-date
- */
- var tokens = str.split(DATE_DELIM);
- if (!tokens) {
- return;
- }
-
- var hour = null;
- var minute = null;
- var second = null;
- var dayOfMonth = null;
- var month = null;
- var year = null;
-
- for (var i=0; i= 70 && year <= 99) {
- year += 1900;
- } else if (year >= 0 && year <= 69) {
- year += 2000;
- }
- }
- }
- }
-
- /* RFC 6265 S5.1.1
- * "5. Abort these steps and fail to parse the cookie-date if:
- * * at least one of the found-day-of-month, found-month, found-
- * year, or found-time flags is not set,
- * * the day-of-month-value is less than 1 or greater than 31,
- * * the year-value is less than 1601,
- * * the hour-value is greater than 23,
- * * the minute-value is greater than 59, or
- * * the second-value is greater than 59.
- * (Note that leap seconds cannot be represented in this syntax.)"
- *
- * So, in order as above:
- */
- if (
- dayOfMonth === null || month === null || year === null || second === null ||
- dayOfMonth < 1 || dayOfMonth > 31 ||
- year < 1601 ||
- hour > 23 ||
- minute > 59 ||
- second > 59
- ) {
- return;
- }
-
- return new Date(Date.UTC(year, month, dayOfMonth, hour, minute, second));
-}
-
-function formatDate(date) {
- var d = date.getUTCDate(); d = d >= 10 ? d : '0'+d;
- var h = date.getUTCHours(); h = h >= 10 ? h : '0'+h;
- var m = date.getUTCMinutes(); m = m >= 10 ? m : '0'+m;
- var s = date.getUTCSeconds(); s = s >= 10 ? s : '0'+s;
- return NUM_TO_DAY[date.getUTCDay()] + ', ' +
- d+' '+ NUM_TO_MONTH[date.getUTCMonth()] +' '+ date.getUTCFullYear() +' '+
- h+':'+m+':'+s+' GMT';
-}
-
-// S5.1.2 Canonicalized Host Names
-function canonicalDomain(str) {
- if (str == null) {
- return null;
- }
- str = str.trim().replace(/^\./,''); // S4.1.2.3 & S5.2.3: ignore leading .
-
- // convert to IDN if any non-ASCII characters
- if (punycode && /[^\u0001-\u007f]/.test(str)) {
- str = punycode.toASCII(str);
- }
-
- return str.toLowerCase();
-}
-
-// S5.1.3 Domain Matching
-function domainMatch(str, domStr, canonicalize) {
- if (str == null || domStr == null) {
- return null;
- }
- if (canonicalize !== false) {
- str = canonicalDomain(str);
- domStr = canonicalDomain(domStr);
- }
-
- /*
- * "The domain string and the string are identical. (Note that both the
- * domain string and the string will have been canonicalized to lower case at
- * this point)"
- */
- if (str == domStr) {
- return true;
- }
-
- /* "All of the following [three] conditions hold:" (order adjusted from the RFC) */
-
- /* "* The string is a host name (i.e., not an IP address)." */
- if (net.isIP(str)) {
- return false;
- }
-
- /* "* The domain string is a suffix of the string" */
- var idx = str.indexOf(domStr);
- if (idx <= 0) {
- return false; // it's a non-match (-1) or prefix (0)
- }
-
- // e.g "a.b.c".indexOf("b.c") === 2
- // 5 === 3+2
- if (str.length !== domStr.length + idx) { // it's not a suffix
- return false;
- }
-
- /* "* The last character of the string that is not included in the domain
- * string is a %x2E (".") character." */
- if (str.substr(idx-1,1) !== '.') {
- return false;
- }
-
- return true;
-}
-
-
-// RFC6265 S5.1.4 Paths and Path-Match
-
-/*
- * "The user agent MUST use an algorithm equivalent to the following algorithm
- * to compute the default-path of a cookie:"
- *
- * Assumption: the path (and not query part or absolute uri) is passed in.
- */
-function defaultPath(path) {
- // "2. If the uri-path is empty or if the first character of the uri-path is not
- // a %x2F ("/") character, output %x2F ("/") and skip the remaining steps.
- if (!path || path.substr(0,1) !== "/") {
- return "/";
- }
-
- // "3. If the uri-path contains no more than one %x2F ("/") character, output
- // %x2F ("/") and skip the remaining step."
- if (path === "/") {
- return path;
- }
-
- var rightSlash = path.lastIndexOf("/");
- if (rightSlash === 0) {
- return "/";
- }
-
- // "4. Output the characters of the uri-path from the first character up to,
- // but not including, the right-most %x2F ("/")."
- return path.slice(0, rightSlash);
-}
-
-function trimTerminator(str) {
- for (var t = 0; t < TERMINATORS.length; t++) {
- var terminatorIdx = str.indexOf(TERMINATORS[t]);
- if (terminatorIdx !== -1) {
- str = str.substr(0,terminatorIdx);
- }
- }
-
- return str;
-}
-
-function parseCookiePair(cookiePair, looseMode) {
- cookiePair = trimTerminator(cookiePair);
-
- var firstEq = cookiePair.indexOf('=');
- if (looseMode) {
- if (firstEq === 0) { // '=' is immediately at start
- cookiePair = cookiePair.substr(1);
- firstEq = cookiePair.indexOf('='); // might still need to split on '='
- }
- } else { // non-loose mode
- if (firstEq <= 0) { // no '=' or is at start
- return; // needs to have non-empty "cookie-name"
- }
- }
-
- var cookieName, cookieValue;
- if (firstEq <= 0) {
- cookieName = "";
- cookieValue = cookiePair.trim();
- } else {
- cookieName = cookiePair.substr(0, firstEq).trim();
- cookieValue = cookiePair.substr(firstEq+1).trim();
- }
-
- if (CONTROL_CHARS.test(cookieName) || CONTROL_CHARS.test(cookieValue)) {
- return;
- }
-
- var c = new Cookie();
- c.key = cookieName;
- c.value = cookieValue;
- return c;
-}
-
-function parse(str, options) {
- if (!options || typeof options !== 'object') {
- options = {};
- }
- str = str.trim();
-
- // We use a regex to parse the "name-value-pair" part of S5.2
- var firstSemi = str.indexOf(';'); // S5.2 step 1
- var cookiePair = (firstSemi === -1) ? str : str.substr(0, firstSemi);
- var c = parseCookiePair(cookiePair, !!options.loose);
- if (!c) {
- return;
- }
-
- if (firstSemi === -1) {
- return c;
- }
-
- // S5.2.3 "unparsed-attributes consist of the remainder of the set-cookie-string
- // (including the %x3B (";") in question)." plus later on in the same section
- // "discard the first ";" and trim".
- var unparsed = str.slice(firstSemi + 1).trim();
-
- // "If the unparsed-attributes string is empty, skip the rest of these
- // steps."
- if (unparsed.length === 0) {
- return c;
- }
-
- /*
- * S5.2 says that when looping over the items "[p]rocess the attribute-name
- * and attribute-value according to the requirements in the following
- * subsections" for every item. Plus, for many of the individual attributes
- * in S5.3 it says to use the "attribute-value of the last attribute in the
- * cookie-attribute-list". Therefore, in this implementation, we overwrite
- * the previous value.
- */
- var cookie_avs = unparsed.split(';');
- while (cookie_avs.length) {
- var av = cookie_avs.shift().trim();
- if (av.length === 0) { // happens if ";;" appears
- continue;
- }
- var av_sep = av.indexOf('=');
- var av_key, av_value;
-
- if (av_sep === -1) {
- av_key = av;
- av_value = null;
- } else {
- av_key = av.substr(0,av_sep);
- av_value = av.substr(av_sep+1);
- }
-
- av_key = av_key.trim().toLowerCase();
-
- if (av_value) {
- av_value = av_value.trim();
- }
-
- switch(av_key) {
- case 'expires': // S5.2.1
- if (av_value) {
- var exp = parseDate(av_value);
- // "If the attribute-value failed to parse as a cookie date, ignore the
- // cookie-av."
- if (exp) {
- // over and underflow not realistically a concern: V8's getTime() seems to
- // store something larger than a 32-bit time_t (even with 32-bit node)
- c.expires = exp;
- }
- }
- break;
-
- case 'max-age': // S5.2.2
- if (av_value) {
- // "If the first character of the attribute-value is not a DIGIT or a "-"
- // character ...[or]... If the remainder of attribute-value contains a
- // non-DIGIT character, ignore the cookie-av."
- if (/^-?[0-9]+$/.test(av_value)) {
- var delta = parseInt(av_value, 10);
- // "If delta-seconds is less than or equal to zero (0), let expiry-time
- // be the earliest representable date and time."
- c.setMaxAge(delta);
- }
- }
- break;
-
- case 'domain': // S5.2.3
- // "If the attribute-value is empty, the behavior is undefined. However,
- // the user agent SHOULD ignore the cookie-av entirely."
- if (av_value) {
- // S5.2.3 "Let cookie-domain be the attribute-value without the leading %x2E
- // (".") character."
- var domain = av_value.trim().replace(/^\./, '');
- if (domain) {
- // "Convert the cookie-domain to lower case."
- c.domain = domain.toLowerCase();
- }
- }
- break;
-
- case 'path': // S5.2.4
- /*
- * "If the attribute-value is empty or if the first character of the
- * attribute-value is not %x2F ("/"):
- * Let cookie-path be the default-path.
- * Otherwise:
- * Let cookie-path be the attribute-value."
- *
- * We'll represent the default-path as null since it depends on the
- * context of the parsing.
- */
- c.path = av_value && av_value[0] === "/" ? av_value : null;
- break;
-
- case 'secure': // S5.2.5
- /*
- * "If the attribute-name case-insensitively matches the string "Secure",
- * the user agent MUST append an attribute to the cookie-attribute-list
- * with an attribute-name of Secure and an empty attribute-value."
- */
- c.secure = true;
- break;
-
- case 'httponly': // S5.2.6 -- effectively the same as 'secure'
- c.httpOnly = true;
- break;
-
- default:
- c.extensions = c.extensions || [];
- c.extensions.push(av);
- break;
- }
- }
-
- return c;
-}
-
-// avoid the V8 deoptimization monster!
-function jsonParse(str) {
- var obj;
- try {
- obj = JSON.parse(str);
- } catch (e) {
- return e;
- }
- return obj;
-}
-
-function fromJSON(str) {
- if (!str) {
- return null;
- }
-
- var obj;
- if (typeof str === 'string') {
- obj = jsonParse(str);
- if (obj instanceof Error) {
- return null;
- }
- } else {
- // assume it's an Object
- obj = str;
- }
-
- var c = new Cookie();
- for (var i=0; i 1) {
- var lindex = path.lastIndexOf('/');
- if (lindex === 0) {
- break;
- }
- path = path.substr(0,lindex);
- permutations.push(path);
- }
- permutations.push('/');
- return permutations;
-}
-
-function getCookieContext(url) {
- if (url instanceof Object) {
- return url;
- }
- // NOTE: decodeURI will throw on malformed URIs (see GH-32).
- // Therefore, we will just skip decoding for such URIs.
- try {
- url = decodeURI(url);
- }
- catch(err) {
- // Silently swallow error
- }
-
- return urlParse(url);
-}
-
-function Cookie(options) {
- options = options || {};
-
- Object.keys(options).forEach(function(prop) {
- if (Cookie.prototype.hasOwnProperty(prop) &&
- Cookie.prototype[prop] !== options[prop] &&
- prop.substr(0,1) !== '_')
- {
- this[prop] = options[prop];
- }
- }, this);
-
- this.creation = this.creation || new Date();
-
- // used to break creation ties in cookieCompare():
- Object.defineProperty(this, 'creationIndex', {
- configurable: false,
- enumerable: false, // important for assert.deepEqual checks
- writable: true,
- value: ++Cookie.cookiesCreated
- });
-}
-
-Cookie.cookiesCreated = 0; // incremented each time a cookie is created
-
-Cookie.parse = parse;
-Cookie.fromJSON = fromJSON;
-
-Cookie.prototype.key = "";
-Cookie.prototype.value = "";
-
-// the order in which the RFC has them:
-Cookie.prototype.expires = "Infinity"; // coerces to literal Infinity
-Cookie.prototype.maxAge = null; // takes precedence over expires for TTL
-Cookie.prototype.domain = null;
-Cookie.prototype.path = null;
-Cookie.prototype.secure = false;
-Cookie.prototype.httpOnly = false;
-Cookie.prototype.extensions = null;
-
-// set by the CookieJar:
-Cookie.prototype.hostOnly = null; // boolean when set
-Cookie.prototype.pathIsDefault = null; // boolean when set
-Cookie.prototype.creation = null; // Date when set; defaulted by Cookie.parse
-Cookie.prototype.lastAccessed = null; // Date when set
-Object.defineProperty(Cookie.prototype, 'creationIndex', {
- configurable: true,
- enumerable: false,
- writable: true,
- value: 0
-});
-
-Cookie.serializableProperties = Object.keys(Cookie.prototype)
- .filter(function(prop) {
- return !(
- Cookie.prototype[prop] instanceof Function ||
- prop === 'creationIndex' ||
- prop.substr(0,1) === '_'
- );
- });
-
-Cookie.prototype.inspect = function inspect() {
- var now = Date.now();
- return 'Cookie="'+this.toString() +
- '; hostOnly='+(this.hostOnly != null ? this.hostOnly : '?') +
- '; aAge='+(this.lastAccessed ? (now-this.lastAccessed.getTime())+'ms' : '?') +
- '; cAge='+(this.creation ? (now-this.creation.getTime())+'ms' : '?') +
- '"';
-};
-
-// Use the new custom inspection symbol to add the custom inspect function if
-// available.
-if (util.inspect.custom) {
- Cookie.prototype[util.inspect.custom] = Cookie.prototype.inspect;
-}
-
-Cookie.prototype.toJSON = function() {
- var obj = {};
-
- var props = Cookie.serializableProperties;
- for (var i=0; i=0.8"
- },
- "devDependencies": {
- "async": "^1.4.2",
- "genversion": "^2.1.0",
- "nyc": "^11.6.0",
- "string.prototype.repeat": "^0.2.0",
- "vows": "^0.8.2"
- },
- "dependencies": {
- "psl": "^1.1.28",
- "punycode": "^2.1.1"
- }
-}
diff --git a/deps/npm/node_modules/request/package.json b/deps/npm/node_modules/request/package.json
deleted file mode 100644
index cbb2f2ede0f67e..00000000000000
--- a/deps/npm/node_modules/request/package.json
+++ /dev/null
@@ -1,86 +0,0 @@
-{
- "name": "request",
- "description": "Simplified HTTP request client.",
- "keywords": [
- "http",
- "simple",
- "util",
- "utility"
- ],
- "version": "2.88.2",
- "author": "Mikeal Rogers ",
- "repository": {
- "type": "git",
- "url": "https://github.com/request/request.git"
- },
- "bugs": {
- "url": "http://github.com/request/request/issues"
- },
- "license": "Apache-2.0",
- "engines": {
- "node": ">= 6"
- },
- "main": "index.js",
- "files": [
- "lib/",
- "index.js",
- "request.js"
- ],
- "dependencies": {
- "aws-sign2": "~0.7.0",
- "aws4": "^1.8.0",
- "caseless": "~0.12.0",
- "combined-stream": "~1.0.6",
- "extend": "~3.0.2",
- "forever-agent": "~0.6.1",
- "form-data": "~2.3.2",
- "har-validator": "~5.1.3",
- "http-signature": "~1.2.0",
- "is-typedarray": "~1.0.0",
- "isstream": "~0.1.2",
- "json-stringify-safe": "~5.0.1",
- "mime-types": "~2.1.19",
- "oauth-sign": "~0.9.0",
- "performance-now": "^2.1.0",
- "qs": "~6.5.2",
- "safe-buffer": "^5.1.2",
- "tough-cookie": "~2.5.0",
- "tunnel-agent": "^0.6.0",
- "uuid": "^3.3.2"
- },
- "scripts": {
- "test": "npm run lint && npm run test-ci && npm run test-browser",
- "test-ci": "taper tests/test-*.js",
- "test-cov": "nyc --reporter=lcov tape tests/test-*.js",
- "test-browser": "node tests/browser/start.js",
- "lint": "standard"
- },
- "devDependencies": {
- "bluebird": "^3.2.1",
- "browserify": "^13.0.1",
- "browserify-istanbul": "^2.0.0",
- "buffer-equal": "^1.0.0",
- "codecov": "^3.0.4",
- "coveralls": "^3.0.2",
- "function-bind": "^1.0.2",
- "karma": "^3.0.0",
- "karma-browserify": "^5.0.1",
- "karma-cli": "^1.0.0",
- "karma-coverage": "^1.0.0",
- "karma-phantomjs-launcher": "^1.0.0",
- "karma-tap": "^3.0.1",
- "nyc": "^14.1.1",
- "phantomjs-prebuilt": "^2.1.3",
- "rimraf": "^2.2.8",
- "server-destroy": "^1.0.1",
- "standard": "^9.0.0",
- "tape": "^4.6.0",
- "taper": "^0.5.0"
- },
- "greenkeeper": {
- "ignore": [
- "hawk",
- "har-validator"
- ]
- }
-}
diff --git a/deps/npm/node_modules/request/request.js b/deps/npm/node_modules/request/request.js
deleted file mode 100644
index 198b76093c799c..00000000000000
--- a/deps/npm/node_modules/request/request.js
+++ /dev/null
@@ -1,1553 +0,0 @@
-'use strict'
-
-var http = require('http')
-var https = require('https')
-var url = require('url')
-var util = require('util')
-var stream = require('stream')
-var zlib = require('zlib')
-var aws2 = require('aws-sign2')
-var aws4 = require('aws4')
-var httpSignature = require('http-signature')
-var mime = require('mime-types')
-var caseless = require('caseless')
-var ForeverAgent = require('forever-agent')
-var FormData = require('form-data')
-var extend = require('extend')
-var isstream = require('isstream')
-var isTypedArray = require('is-typedarray').strict
-var helpers = require('./lib/helpers')
-var cookies = require('./lib/cookies')
-var getProxyFromURI = require('./lib/getProxyFromURI')
-var Querystring = require('./lib/querystring').Querystring
-var Har = require('./lib/har').Har
-var Auth = require('./lib/auth').Auth
-var OAuth = require('./lib/oauth').OAuth
-var hawk = require('./lib/hawk')
-var Multipart = require('./lib/multipart').Multipart
-var Redirect = require('./lib/redirect').Redirect
-var Tunnel = require('./lib/tunnel').Tunnel
-var now = require('performance-now')
-var Buffer = require('safe-buffer').Buffer
-
-var safeStringify = helpers.safeStringify
-var isReadStream = helpers.isReadStream
-var toBase64 = helpers.toBase64
-var defer = helpers.defer
-var copy = helpers.copy
-var version = helpers.version
-var globalCookieJar = cookies.jar()
-
-var globalPool = {}
-
-function filterForNonReserved (reserved, options) {
- // Filter out properties that are not reserved.
- // Reserved values are passed in at call site.
-
- var object = {}
- for (var i in options) {
- var notReserved = (reserved.indexOf(i) === -1)
- if (notReserved) {
- object[i] = options[i]
- }
- }
- return object
-}
-
-function filterOutReservedFunctions (reserved, options) {
- // Filter out properties that are functions and are reserved.
- // Reserved values are passed in at call site.
-
- var object = {}
- for (var i in options) {
- var isReserved = !(reserved.indexOf(i) === -1)
- var isFunction = (typeof options[i] === 'function')
- if (!(isReserved && isFunction)) {
- object[i] = options[i]
- }
- }
- return object
-}
-
-// Return a simpler request object to allow serialization
-function requestToJSON () {
- var self = this
- return {
- uri: self.uri,
- method: self.method,
- headers: self.headers
- }
-}
-
-// Return a simpler response object to allow serialization
-function responseToJSON () {
- var self = this
- return {
- statusCode: self.statusCode,
- body: self.body,
- headers: self.headers,
- request: requestToJSON.call(self.request)
- }
-}
-
-function Request (options) {
- // if given the method property in options, set property explicitMethod to true
-
- // extend the Request instance with any non-reserved properties
- // remove any reserved functions from the options object
- // set Request instance to be readable and writable
- // call init
-
- var self = this
-
- // start with HAR, then override with additional options
- if (options.har) {
- self._har = new Har(self)
- options = self._har.options(options)
- }
-
- stream.Stream.call(self)
- var reserved = Object.keys(Request.prototype)
- var nonReserved = filterForNonReserved(reserved, options)
-
- extend(self, nonReserved)
- options = filterOutReservedFunctions(reserved, options)
-
- self.readable = true
- self.writable = true
- if (options.method) {
- self.explicitMethod = true
- }
- self._qs = new Querystring(self)
- self._auth = new Auth(self)
- self._oauth = new OAuth(self)
- self._multipart = new Multipart(self)
- self._redirect = new Redirect(self)
- self._tunnel = new Tunnel(self)
- self.init(options)
-}
-
-util.inherits(Request, stream.Stream)
-
-// Debugging
-Request.debug = process.env.NODE_DEBUG && /\brequest\b/.test(process.env.NODE_DEBUG)
-function debug () {
- if (Request.debug) {
- console.error('REQUEST %s', util.format.apply(util, arguments))
- }
-}
-Request.prototype.debug = debug
-
-Request.prototype.init = function (options) {
- // init() contains all the code to setup the request object.
- // the actual outgoing request is not started until start() is called
- // this function is called from both the constructor and on redirect.
- var self = this
- if (!options) {
- options = {}
- }
- self.headers = self.headers ? copy(self.headers) : {}
-
- // Delete headers with value undefined since they break
- // ClientRequest.OutgoingMessage.setHeader in node 0.12
- for (var headerName in self.headers) {
- if (typeof self.headers[headerName] === 'undefined') {
- delete self.headers[headerName]
- }
- }
-
- caseless.httpify(self, self.headers)
-
- if (!self.method) {
- self.method = options.method || 'GET'
- }
- if (!self.localAddress) {
- self.localAddress = options.localAddress
- }
-
- self._qs.init(options)
-
- debug(options)
- if (!self.pool && self.pool !== false) {
- self.pool = globalPool
- }
- self.dests = self.dests || []
- self.__isRequestRequest = true
-
- // Protect against double callback
- if (!self._callback && self.callback) {
- self._callback = self.callback
- self.callback = function () {
- if (self._callbackCalled) {
- return // Print a warning maybe?
- }
- self._callbackCalled = true
- self._callback.apply(self, arguments)
- }
- self.on('error', self.callback.bind())
- self.on('complete', self.callback.bind(self, null))
- }
-
- // People use this property instead all the time, so support it
- if (!self.uri && self.url) {
- self.uri = self.url
- delete self.url
- }
-
- // If there's a baseUrl, then use it as the base URL (i.e. uri must be
- // specified as a relative path and is appended to baseUrl).
- if (self.baseUrl) {
- if (typeof self.baseUrl !== 'string') {
- return self.emit('error', new Error('options.baseUrl must be a string'))
- }
-
- if (typeof self.uri !== 'string') {
- return self.emit('error', new Error('options.uri must be a string when using options.baseUrl'))
- }
-
- if (self.uri.indexOf('//') === 0 || self.uri.indexOf('://') !== -1) {
- return self.emit('error', new Error('options.uri must be a path when using options.baseUrl'))
- }
-
- // Handle all cases to make sure that there's only one slash between
- // baseUrl and uri.
- var baseUrlEndsWithSlash = self.baseUrl.lastIndexOf('/') === self.baseUrl.length - 1
- var uriStartsWithSlash = self.uri.indexOf('/') === 0
-
- if (baseUrlEndsWithSlash && uriStartsWithSlash) {
- self.uri = self.baseUrl + self.uri.slice(1)
- } else if (baseUrlEndsWithSlash || uriStartsWithSlash) {
- self.uri = self.baseUrl + self.uri
- } else if (self.uri === '') {
- self.uri = self.baseUrl
- } else {
- self.uri = self.baseUrl + '/' + self.uri
- }
- delete self.baseUrl
- }
-
- // A URI is needed by this point, emit error if we haven't been able to get one
- if (!self.uri) {
- return self.emit('error', new Error('options.uri is a required argument'))
- }
-
- // If a string URI/URL was given, parse it into a URL object
- if (typeof self.uri === 'string') {
- self.uri = url.parse(self.uri)
- }
-
- // Some URL objects are not from a URL parsed string and need href added
- if (!self.uri.href) {
- self.uri.href = url.format(self.uri)
- }
-
- // DEPRECATED: Warning for users of the old Unix Sockets URL Scheme
- if (self.uri.protocol === 'unix:') {
- return self.emit('error', new Error('`unix://` URL scheme is no longer supported. Please use the format `http://unix:SOCKET:PATH`'))
- }
-
- // Support Unix Sockets
- if (self.uri.host === 'unix') {
- self.enableUnixSocket()
- }
-
- if (self.strictSSL === false) {
- self.rejectUnauthorized = false
- }
-
- if (!self.uri.pathname) { self.uri.pathname = '/' }
-
- if (!(self.uri.host || (self.uri.hostname && self.uri.port)) && !self.uri.isUnix) {
- // Invalid URI: it may generate lot of bad errors, like 'TypeError: Cannot call method `indexOf` of undefined' in CookieJar
- // Detect and reject it as soon as possible
- var faultyUri = url.format(self.uri)
- var message = 'Invalid URI "' + faultyUri + '"'
- if (Object.keys(options).length === 0) {
- // No option ? This can be the sign of a redirect
- // As this is a case where the user cannot do anything (they didn't call request directly with this URL)
- // they should be warned that it can be caused by a redirection (can save some hair)
- message += '. This can be caused by a crappy redirection.'
- }
- // This error was fatal
- self.abort()
- return self.emit('error', new Error(message))
- }
-
- if (!self.hasOwnProperty('proxy')) {
- self.proxy = getProxyFromURI(self.uri)
- }
-
- self.tunnel = self._tunnel.isEnabled()
- if (self.proxy) {
- self._tunnel.setup(options)
- }
-
- self._redirect.onRequest(options)
-
- self.setHost = false
- if (!self.hasHeader('host')) {
- var hostHeaderName = self.originalHostHeaderName || 'host'
- self.setHeader(hostHeaderName, self.uri.host)
- // Drop :port suffix from Host header if known protocol.
- if (self.uri.port) {
- if ((self.uri.port === '80' && self.uri.protocol === 'http:') ||
- (self.uri.port === '443' && self.uri.protocol === 'https:')) {
- self.setHeader(hostHeaderName, self.uri.hostname)
- }
- }
- self.setHost = true
- }
-
- self.jar(self._jar || options.jar)
-
- if (!self.uri.port) {
- if (self.uri.protocol === 'http:') { self.uri.port = 80 } else if (self.uri.protocol === 'https:') { self.uri.port = 443 }
- }
-
- if (self.proxy && !self.tunnel) {
- self.port = self.proxy.port
- self.host = self.proxy.hostname
- } else {
- self.port = self.uri.port
- self.host = self.uri.hostname
- }
-
- if (options.form) {
- self.form(options.form)
- }
-
- if (options.formData) {
- var formData = options.formData
- var requestForm = self.form()
- var appendFormValue = function (key, value) {
- if (value && value.hasOwnProperty('value') && value.hasOwnProperty('options')) {
- requestForm.append(key, value.value, value.options)
- } else {
- requestForm.append(key, value)
- }
- }
- for (var formKey in formData) {
- if (formData.hasOwnProperty(formKey)) {
- var formValue = formData[formKey]
- if (formValue instanceof Array) {
- for (var j = 0; j < formValue.length; j++) {
- appendFormValue(formKey, formValue[j])
- }
- } else {
- appendFormValue(formKey, formValue)
- }
- }
- }
- }
-
- if (options.qs) {
- self.qs(options.qs)
- }
-
- if (self.uri.path) {
- self.path = self.uri.path
- } else {
- self.path = self.uri.pathname + (self.uri.search || '')
- }
-
- if (self.path.length === 0) {
- self.path = '/'
- }
-
- // Auth must happen last in case signing is dependent on other headers
- if (options.aws) {
- self.aws(options.aws)
- }
-
- if (options.hawk) {
- self.hawk(options.hawk)
- }
-
- if (options.httpSignature) {
- self.httpSignature(options.httpSignature)
- }
-
- if (options.auth) {
- if (Object.prototype.hasOwnProperty.call(options.auth, 'username')) {
- options.auth.user = options.auth.username
- }
- if (Object.prototype.hasOwnProperty.call(options.auth, 'password')) {
- options.auth.pass = options.auth.password
- }
-
- self.auth(
- options.auth.user,
- options.auth.pass,
- options.auth.sendImmediately,
- options.auth.bearer
- )
- }
-
- if (self.gzip && !self.hasHeader('accept-encoding')) {
- self.setHeader('accept-encoding', 'gzip, deflate')
- }
-
- if (self.uri.auth && !self.hasHeader('authorization')) {
- var uriAuthPieces = self.uri.auth.split(':').map(function (item) { return self._qs.unescape(item) })
- self.auth(uriAuthPieces[0], uriAuthPieces.slice(1).join(':'), true)
- }
-
- if (!self.tunnel && self.proxy && self.proxy.auth && !self.hasHeader('proxy-authorization')) {
- var proxyAuthPieces = self.proxy.auth.split(':').map(function (item) { return self._qs.unescape(item) })
- var authHeader = 'Basic ' + toBase64(proxyAuthPieces.join(':'))
- self.setHeader('proxy-authorization', authHeader)
- }
-
- if (self.proxy && !self.tunnel) {
- self.path = (self.uri.protocol + '//' + self.uri.host + self.path)
- }
-
- if (options.json) {
- self.json(options.json)
- }
- if (options.multipart) {
- self.multipart(options.multipart)
- }
-
- if (options.time) {
- self.timing = true
-
- // NOTE: elapsedTime is deprecated in favor of .timings
- self.elapsedTime = self.elapsedTime || 0
- }
-
- function setContentLength () {
- if (isTypedArray(self.body)) {
- self.body = Buffer.from(self.body)
- }
-
- if (!self.hasHeader('content-length')) {
- var length
- if (typeof self.body === 'string') {
- length = Buffer.byteLength(self.body)
- } else if (Array.isArray(self.body)) {
- length = self.body.reduce(function (a, b) { return a + b.length }, 0)
- } else {
- length = self.body.length
- }
-
- if (length) {
- self.setHeader('content-length', length)
- } else {
- self.emit('error', new Error('Argument error, options.body.'))
- }
- }
- }
- if (self.body && !isstream(self.body)) {
- setContentLength()
- }
-
- if (options.oauth) {
- self.oauth(options.oauth)
- } else if (self._oauth.params && self.hasHeader('authorization')) {
- self.oauth(self._oauth.params)
- }
-
- var protocol = self.proxy && !self.tunnel ? self.proxy.protocol : self.uri.protocol
- var defaultModules = {'http:': http, 'https:': https}
- var httpModules = self.httpModules || {}
-
- self.httpModule = httpModules[protocol] || defaultModules[protocol]
-
- if (!self.httpModule) {
- return self.emit('error', new Error('Invalid protocol: ' + protocol))
- }
-
- if (options.ca) {
- self.ca = options.ca
- }
-
- if (!self.agent) {
- if (options.agentOptions) {
- self.agentOptions = options.agentOptions
- }
-
- if (options.agentClass) {
- self.agentClass = options.agentClass
- } else if (options.forever) {
- var v = version()
- // use ForeverAgent in node 0.10- only
- if (v.major === 0 && v.minor <= 10) {
- self.agentClass = protocol === 'http:' ? ForeverAgent : ForeverAgent.SSL
- } else {
- self.agentClass = self.httpModule.Agent
- self.agentOptions = self.agentOptions || {}
- self.agentOptions.keepAlive = true
- }
- } else {
- self.agentClass = self.httpModule.Agent
- }
- }
-
- if (self.pool === false) {
- self.agent = false
- } else {
- self.agent = self.agent || self.getNewAgent()
- }
-
- self.on('pipe', function (src) {
- if (self.ntick && self._started) {
- self.emit('error', new Error('You cannot pipe to this stream after the outbound request has started.'))
- }
- self.src = src
- if (isReadStream(src)) {
- if (!self.hasHeader('content-type')) {
- self.setHeader('content-type', mime.lookup(src.path))
- }
- } else {
- if (src.headers) {
- for (var i in src.headers) {
- if (!self.hasHeader(i)) {
- self.setHeader(i, src.headers[i])
- }
- }
- }
- if (self._json && !self.hasHeader('content-type')) {
- self.setHeader('content-type', 'application/json')
- }
- if (src.method && !self.explicitMethod) {
- self.method = src.method
- }
- }
-
- // self.on('pipe', function () {
- // console.error('You have already piped to this stream. Pipeing twice is likely to break the request.')
- // })
- })
-
- defer(function () {
- if (self._aborted) {
- return
- }
-
- var end = function () {
- if (self._form) {
- if (!self._auth.hasAuth) {
- self._form.pipe(self)
- } else if (self._auth.hasAuth && self._auth.sentAuth) {
- self._form.pipe(self)
- }
- }
- if (self._multipart && self._multipart.chunked) {
- self._multipart.body.pipe(self)
- }
- if (self.body) {
- if (isstream(self.body)) {
- self.body.pipe(self)
- } else {
- setContentLength()
- if (Array.isArray(self.body)) {
- self.body.forEach(function (part) {
- self.write(part)
- })
- } else {
- self.write(self.body)
- }
- self.end()
- }
- } else if (self.requestBodyStream) {
- console.warn('options.requestBodyStream is deprecated, please pass the request object to stream.pipe.')
- self.requestBodyStream.pipe(self)
- } else if (!self.src) {
- if (self._auth.hasAuth && !self._auth.sentAuth) {
- self.end()
- return
- }
- if (self.method !== 'GET' && typeof self.method !== 'undefined') {
- self.setHeader('content-length', 0)
- }
- self.end()
- }
- }
-
- if (self._form && !self.hasHeader('content-length')) {
- // Before ending the request, we had to compute the length of the whole form, asyncly
- self.setHeader(self._form.getHeaders(), true)
- self._form.getLength(function (err, length) {
- if (!err && !isNaN(length)) {
- self.setHeader('content-length', length)
- }
- end()
- })
- } else {
- end()
- }
-
- self.ntick = true
- })
-}
-
-Request.prototype.getNewAgent = function () {
- var self = this
- var Agent = self.agentClass
- var options = {}
- if (self.agentOptions) {
- for (var i in self.agentOptions) {
- options[i] = self.agentOptions[i]
- }
- }
- if (self.ca) {
- options.ca = self.ca
- }
- if (self.ciphers) {
- options.ciphers = self.ciphers
- }
- if (self.secureProtocol) {
- options.secureProtocol = self.secureProtocol
- }
- if (self.secureOptions) {
- options.secureOptions = self.secureOptions
- }
- if (typeof self.rejectUnauthorized !== 'undefined') {
- options.rejectUnauthorized = self.rejectUnauthorized
- }
-
- if (self.cert && self.key) {
- options.key = self.key
- options.cert = self.cert
- }
-
- if (self.pfx) {
- options.pfx = self.pfx
- }
-
- if (self.passphrase) {
- options.passphrase = self.passphrase
- }
-
- var poolKey = ''
-
- // different types of agents are in different pools
- if (Agent !== self.httpModule.Agent) {
- poolKey += Agent.name
- }
-
- // ca option is only relevant if proxy or destination are https
- var proxy = self.proxy
- if (typeof proxy === 'string') {
- proxy = url.parse(proxy)
- }
- var isHttps = (proxy && proxy.protocol === 'https:') || this.uri.protocol === 'https:'
-
- if (isHttps) {
- if (options.ca) {
- if (poolKey) {
- poolKey += ':'
- }
- poolKey += options.ca
- }
-
- if (typeof options.rejectUnauthorized !== 'undefined') {
- if (poolKey) {
- poolKey += ':'
- }
- poolKey += options.rejectUnauthorized
- }
-
- if (options.cert) {
- if (poolKey) {
- poolKey += ':'
- }
- poolKey += options.cert.toString('ascii') + options.key.toString('ascii')
- }
-
- if (options.pfx) {
- if (poolKey) {
- poolKey += ':'
- }
- poolKey += options.pfx.toString('ascii')
- }
-
- if (options.ciphers) {
- if (poolKey) {
- poolKey += ':'
- }
- poolKey += options.ciphers
- }
-
- if (options.secureProtocol) {
- if (poolKey) {
- poolKey += ':'
- }
- poolKey += options.secureProtocol
- }
-
- if (options.secureOptions) {
- if (poolKey) {
- poolKey += ':'
- }
- poolKey += options.secureOptions
- }
- }
-
- if (self.pool === globalPool && !poolKey && Object.keys(options).length === 0 && self.httpModule.globalAgent) {
- // not doing anything special. Use the globalAgent
- return self.httpModule.globalAgent
- }
-
- // we're using a stored agent. Make sure it's protocol-specific
- poolKey = self.uri.protocol + poolKey
-
- // generate a new agent for this setting if none yet exists
- if (!self.pool[poolKey]) {
- self.pool[poolKey] = new Agent(options)
- // properly set maxSockets on new agents
- if (self.pool.maxSockets) {
- self.pool[poolKey].maxSockets = self.pool.maxSockets
- }
- }
-
- return self.pool[poolKey]
-}
-
-Request.prototype.start = function () {
- // start() is called once we are ready to send the outgoing HTTP request.
- // this is usually called on the first write(), end() or on nextTick()
- var self = this
-
- if (self.timing) {
- // All timings will be relative to this request's startTime. In order to do this,
- // we need to capture the wall-clock start time (via Date), immediately followed
- // by the high-resolution timer (via now()). While these two won't be set
- // at the _exact_ same time, they should be close enough to be able to calculate
- // high-resolution, monotonically non-decreasing timestamps relative to startTime.
- var startTime = new Date().getTime()
- var startTimeNow = now()
- }
-
- if (self._aborted) {
- return
- }
-
- self._started = true
- self.method = self.method || 'GET'
- self.href = self.uri.href
-
- if (self.src && self.src.stat && self.src.stat.size && !self.hasHeader('content-length')) {
- self.setHeader('content-length', self.src.stat.size)
- }
- if (self._aws) {
- self.aws(self._aws, true)
- }
-
- // We have a method named auth, which is completely different from the http.request
- // auth option. If we don't remove it, we're gonna have a bad time.
- var reqOptions = copy(self)
- delete reqOptions.auth
-
- debug('make request', self.uri.href)
-
- // node v6.8.0 now supports a `timeout` value in `http.request()`, but we
- // should delete it for now since we handle timeouts manually for better
- // consistency with node versions before v6.8.0
- delete reqOptions.timeout
-
- try {
- self.req = self.httpModule.request(reqOptions)
- } catch (err) {
- self.emit('error', err)
- return
- }
-
- if (self.timing) {
- self.startTime = startTime
- self.startTimeNow = startTimeNow
-
- // Timing values will all be relative to startTime (by comparing to startTimeNow
- // so we have an accurate clock)
- self.timings = {}
- }
-
- var timeout
- if (self.timeout && !self.timeoutTimer) {
- if (self.timeout < 0) {
- timeout = 0
- } else if (typeof self.timeout === 'number' && isFinite(self.timeout)) {
- timeout = self.timeout
- }
- }
-
- self.req.on('response', self.onRequestResponse.bind(self))
- self.req.on('error', self.onRequestError.bind(self))
- self.req.on('drain', function () {
- self.emit('drain')
- })
-
- self.req.on('socket', function (socket) {
- // `._connecting` was the old property which was made public in node v6.1.0
- var isConnecting = socket._connecting || socket.connecting
- if (self.timing) {
- self.timings.socket = now() - self.startTimeNow
-
- if (isConnecting) {
- var onLookupTiming = function () {
- self.timings.lookup = now() - self.startTimeNow
- }
-
- var onConnectTiming = function () {
- self.timings.connect = now() - self.startTimeNow
- }
-
- socket.once('lookup', onLookupTiming)
- socket.once('connect', onConnectTiming)
-
- // clean up timing event listeners if needed on error
- self.req.once('error', function () {
- socket.removeListener('lookup', onLookupTiming)
- socket.removeListener('connect', onConnectTiming)
- })
- }
- }
-
- var setReqTimeout = function () {
- // This timeout sets the amount of time to wait *between* bytes sent
- // from the server once connected.
- //
- // In particular, it's useful for erroring if the server fails to send
- // data halfway through streaming a response.
- self.req.setTimeout(timeout, function () {
- if (self.req) {
- self.abort()
- var e = new Error('ESOCKETTIMEDOUT')
- e.code = 'ESOCKETTIMEDOUT'
- e.connect = false
- self.emit('error', e)
- }
- })
- }
- if (timeout !== undefined) {
- // Only start the connection timer if we're actually connecting a new
- // socket, otherwise if we're already connected (because this is a
- // keep-alive connection) do not bother. This is important since we won't
- // get a 'connect' event for an already connected socket.
- if (isConnecting) {
- var onReqSockConnect = function () {
- socket.removeListener('connect', onReqSockConnect)
- self.clearTimeout()
- setReqTimeout()
- }
-
- socket.on('connect', onReqSockConnect)
-
- self.req.on('error', function (err) { // eslint-disable-line handle-callback-err
- socket.removeListener('connect', onReqSockConnect)
- })
-
- // Set a timeout in memory - this block will throw if the server takes more
- // than `timeout` to write the HTTP status and headers (corresponding to
- // the on('response') event on the client). NB: this measures wall-clock
- // time, not the time between bytes sent by the server.
- self.timeoutTimer = setTimeout(function () {
- socket.removeListener('connect', onReqSockConnect)
- self.abort()
- var e = new Error('ETIMEDOUT')
- e.code = 'ETIMEDOUT'
- e.connect = true
- self.emit('error', e)
- }, timeout)
- } else {
- // We're already connected
- setReqTimeout()
- }
- }
- self.emit('socket', socket)
- })
-
- self.emit('request', self.req)
-}
-
-Request.prototype.onRequestError = function (error) {
- var self = this
- if (self._aborted) {
- return
- }
- if (self.req && self.req._reusedSocket && error.code === 'ECONNRESET' &&
- self.agent.addRequestNoreuse) {
- self.agent = { addRequest: self.agent.addRequestNoreuse.bind(self.agent) }
- self.start()
- self.req.end()
- return
- }
- self.clearTimeout()
- self.emit('error', error)
-}
-
-Request.prototype.onRequestResponse = function (response) {
- var self = this
-
- if (self.timing) {
- self.timings.response = now() - self.startTimeNow
- }
-
- debug('onRequestResponse', self.uri.href, response.statusCode, response.headers)
- response.on('end', function () {
- if (self.timing) {
- self.timings.end = now() - self.startTimeNow
- response.timingStart = self.startTime
-
- // fill in the blanks for any periods that didn't trigger, such as
- // no lookup or connect due to keep alive
- if (!self.timings.socket) {
- self.timings.socket = 0
- }
- if (!self.timings.lookup) {
- self.timings.lookup = self.timings.socket
- }
- if (!self.timings.connect) {
- self.timings.connect = self.timings.lookup
- }
- if (!self.timings.response) {
- self.timings.response = self.timings.connect
- }
-
- debug('elapsed time', self.timings.end)
-
- // elapsedTime includes all redirects
- self.elapsedTime += Math.round(self.timings.end)
-
- // NOTE: elapsedTime is deprecated in favor of .timings
- response.elapsedTime = self.elapsedTime
-
- // timings is just for the final fetch
- response.timings = self.timings
-
- // pre-calculate phase timings as well
- response.timingPhases = {
- wait: self.timings.socket,
- dns: self.timings.lookup - self.timings.socket,
- tcp: self.timings.connect - self.timings.lookup,
- firstByte: self.timings.response - self.timings.connect,
- download: self.timings.end - self.timings.response,
- total: self.timings.end
- }
- }
- debug('response end', self.uri.href, response.statusCode, response.headers)
- })
-
- if (self._aborted) {
- debug('aborted', self.uri.href)
- response.resume()
- return
- }
-
- self.response = response
- response.request = self
- response.toJSON = responseToJSON
-
- // XXX This is different on 0.10, because SSL is strict by default
- if (self.httpModule === https &&
- self.strictSSL && (!response.hasOwnProperty('socket') ||
- !response.socket.authorized)) {
- debug('strict ssl error', self.uri.href)
- var sslErr = response.hasOwnProperty('socket') ? response.socket.authorizationError : self.uri.href + ' does not support SSL'
- self.emit('error', new Error('SSL Error: ' + sslErr))
- return
- }
-
- // Save the original host before any redirect (if it changes, we need to
- // remove any authorization headers). Also remember the case of the header
- // name because lots of broken servers expect Host instead of host and we
- // want the caller to be able to specify this.
- self.originalHost = self.getHeader('host')
- if (!self.originalHostHeaderName) {
- self.originalHostHeaderName = self.hasHeader('host')
- }
- if (self.setHost) {
- self.removeHeader('host')
- }
- self.clearTimeout()
-
- var targetCookieJar = (self._jar && self._jar.setCookie) ? self._jar : globalCookieJar
- var addCookie = function (cookie) {
- // set the cookie if it's domain in the href's domain.
- try {
- targetCookieJar.setCookie(cookie, self.uri.href, {ignoreError: true})
- } catch (e) {
- self.emit('error', e)
- }
- }
-
- response.caseless = caseless(response.headers)
-
- if (response.caseless.has('set-cookie') && (!self._disableCookies)) {
- var headerName = response.caseless.has('set-cookie')
- if (Array.isArray(response.headers[headerName])) {
- response.headers[headerName].forEach(addCookie)
- } else {
- addCookie(response.headers[headerName])
- }
- }
-
- if (self._redirect.onResponse(response)) {
- return // Ignore the rest of the response
- } else {
- // Be a good stream and emit end when the response is finished.
- // Hack to emit end on close because of a core bug that never fires end
- response.on('close', function () {
- if (!self._ended) {
- self.response.emit('end')
- }
- })
-
- response.once('end', function () {
- self._ended = true
- })
-
- var noBody = function (code) {
- return (
- self.method === 'HEAD' ||
- // Informational
- (code >= 100 && code < 200) ||
- // No Content
- code === 204 ||
- // Not Modified
- code === 304
- )
- }
-
- var responseContent
- if (self.gzip && !noBody(response.statusCode)) {
- var contentEncoding = response.headers['content-encoding'] || 'identity'
- contentEncoding = contentEncoding.trim().toLowerCase()
-
- // Be more lenient with decoding compressed responses, since (very rarely)
- // servers send slightly invalid gzip responses that are still accepted
- // by common browsers.
- // Always using Z_SYNC_FLUSH is what cURL does.
- var zlibOptions = {
- flush: zlib.Z_SYNC_FLUSH,
- finishFlush: zlib.Z_SYNC_FLUSH
- }
-
- if (contentEncoding === 'gzip') {
- responseContent = zlib.createGunzip(zlibOptions)
- response.pipe(responseContent)
- } else if (contentEncoding === 'deflate') {
- responseContent = zlib.createInflate(zlibOptions)
- response.pipe(responseContent)
- } else {
- // Since previous versions didn't check for Content-Encoding header,
- // ignore any invalid values to preserve backwards-compatibility
- if (contentEncoding !== 'identity') {
- debug('ignoring unrecognized Content-Encoding ' + contentEncoding)
- }
- responseContent = response
- }
- } else {
- responseContent = response
- }
-
- if (self.encoding) {
- if (self.dests.length !== 0) {
- console.error('Ignoring encoding parameter as this stream is being piped to another stream which makes the encoding option invalid.')
- } else {
- responseContent.setEncoding(self.encoding)
- }
- }
-
- if (self._paused) {
- responseContent.pause()
- }
-
- self.responseContent = responseContent
-
- self.emit('response', response)
-
- self.dests.forEach(function (dest) {
- self.pipeDest(dest)
- })
-
- responseContent.on('data', function (chunk) {
- if (self.timing && !self.responseStarted) {
- self.responseStartTime = (new Date()).getTime()
-
- // NOTE: responseStartTime is deprecated in favor of .timings
- response.responseStartTime = self.responseStartTime
- }
- self._destdata = true
- self.emit('data', chunk)
- })
- responseContent.once('end', function (chunk) {
- self.emit('end', chunk)
- })
- responseContent.on('error', function (error) {
- self.emit('error', error)
- })
- responseContent.on('close', function () { self.emit('close') })
-
- if (self.callback) {
- self.readResponseBody(response)
- } else { // if no callback
- self.on('end', function () {
- if (self._aborted) {
- debug('aborted', self.uri.href)
- return
- }
- self.emit('complete', response)
- })
- }
- }
- debug('finish init function', self.uri.href)
-}
-
-Request.prototype.readResponseBody = function (response) {
- var self = this
- debug("reading response's body")
- var buffers = []
- var bufferLength = 0
- var strings = []
-
- self.on('data', function (chunk) {
- if (!Buffer.isBuffer(chunk)) {
- strings.push(chunk)
- } else if (chunk.length) {
- bufferLength += chunk.length
- buffers.push(chunk)
- }
- })
- self.on('end', function () {
- debug('end event', self.uri.href)
- if (self._aborted) {
- debug('aborted', self.uri.href)
- // `buffer` is defined in the parent scope and used in a closure it exists for the life of the request.
- // This can lead to leaky behavior if the user retains a reference to the request object.
- buffers = []
- bufferLength = 0
- return
- }
-
- if (bufferLength) {
- debug('has body', self.uri.href, bufferLength)
- response.body = Buffer.concat(buffers, bufferLength)
- if (self.encoding !== null) {
- response.body = response.body.toString(self.encoding)
- }
- // `buffer` is defined in the parent scope and used in a closure it exists for the life of the Request.
- // This can lead to leaky behavior if the user retains a reference to the request object.
- buffers = []
- bufferLength = 0
- } else if (strings.length) {
- // The UTF8 BOM [0xEF,0xBB,0xBF] is converted to [0xFE,0xFF] in the JS UTC16/UCS2 representation.
- // Strip this value out when the encoding is set to 'utf8', as upstream consumers won't expect it and it breaks JSON.parse().
- if (self.encoding === 'utf8' && strings[0].length > 0 && strings[0][0] === '\uFEFF') {
- strings[0] = strings[0].substring(1)
- }
- response.body = strings.join('')
- }
-
- if (self._json) {
- try {
- response.body = JSON.parse(response.body, self._jsonReviver)
- } catch (e) {
- debug('invalid JSON received', self.uri.href)
- }
- }
- debug('emitting complete', self.uri.href)
- if (typeof response.body === 'undefined' && !self._json) {
- response.body = self.encoding === null ? Buffer.alloc(0) : ''
- }
- self.emit('complete', response, response.body)
- })
-}
-
-Request.prototype.abort = function () {
- var self = this
- self._aborted = true
-
- if (self.req) {
- self.req.abort()
- } else if (self.response) {
- self.response.destroy()
- }
-
- self.clearTimeout()
- self.emit('abort')
-}
-
-Request.prototype.pipeDest = function (dest) {
- var self = this
- var response = self.response
- // Called after the response is received
- if (dest.headers && !dest.headersSent) {
- if (response.caseless.has('content-type')) {
- var ctname = response.caseless.has('content-type')
- if (dest.setHeader) {
- dest.setHeader(ctname, response.headers[ctname])
- } else {
- dest.headers[ctname] = response.headers[ctname]
- }
- }
-
- if (response.caseless.has('content-length')) {
- var clname = response.caseless.has('content-length')
- if (dest.setHeader) {
- dest.setHeader(clname, response.headers[clname])
- } else {
- dest.headers[clname] = response.headers[clname]
- }
- }
- }
- if (dest.setHeader && !dest.headersSent) {
- for (var i in response.headers) {
- // If the response content is being decoded, the Content-Encoding header
- // of the response doesn't represent the piped content, so don't pass it.
- if (!self.gzip || i !== 'content-encoding') {
- dest.setHeader(i, response.headers[i])
- }
- }
- dest.statusCode = response.statusCode
- }
- if (self.pipefilter) {
- self.pipefilter(response, dest)
- }
-}
-
-Request.prototype.qs = function (q, clobber) {
- var self = this
- var base
- if (!clobber && self.uri.query) {
- base = self._qs.parse(self.uri.query)
- } else {
- base = {}
- }
-
- for (var i in q) {
- base[i] = q[i]
- }
-
- var qs = self._qs.stringify(base)
-
- if (qs === '') {
- return self
- }
-
- self.uri = url.parse(self.uri.href.split('?')[0] + '?' + qs)
- self.url = self.uri
- self.path = self.uri.path
-
- if (self.uri.host === 'unix') {
- self.enableUnixSocket()
- }
-
- return self
-}
-Request.prototype.form = function (form) {
- var self = this
- if (form) {
- if (!/^application\/x-www-form-urlencoded\b/.test(self.getHeader('content-type'))) {
- self.setHeader('content-type', 'application/x-www-form-urlencoded')
- }
- self.body = (typeof form === 'string')
- ? self._qs.rfc3986(form.toString('utf8'))
- : self._qs.stringify(form).toString('utf8')
- return self
- }
- // create form-data object
- self._form = new FormData()
- self._form.on('error', function (err) {
- err.message = 'form-data: ' + err.message
- self.emit('error', err)
- self.abort()
- })
- return self._form
-}
-Request.prototype.multipart = function (multipart) {
- var self = this
-
- self._multipart.onRequest(multipart)
-
- if (!self._multipart.chunked) {
- self.body = self._multipart.body
- }
-
- return self
-}
-Request.prototype.json = function (val) {
- var self = this
-
- if (!self.hasHeader('accept')) {
- self.setHeader('accept', 'application/json')
- }
-
- if (typeof self.jsonReplacer === 'function') {
- self._jsonReplacer = self.jsonReplacer
- }
-
- self._json = true
- if (typeof val === 'boolean') {
- if (self.body !== undefined) {
- if (!/^application\/x-www-form-urlencoded\b/.test(self.getHeader('content-type'))) {
- self.body = safeStringify(self.body, self._jsonReplacer)
- } else {
- self.body = self._qs.rfc3986(self.body)
- }
- if (!self.hasHeader('content-type')) {
- self.setHeader('content-type', 'application/json')
- }
- }
- } else {
- self.body = safeStringify(val, self._jsonReplacer)
- if (!self.hasHeader('content-type')) {
- self.setHeader('content-type', 'application/json')
- }
- }
-
- if (typeof self.jsonReviver === 'function') {
- self._jsonReviver = self.jsonReviver
- }
-
- return self
-}
-Request.prototype.getHeader = function (name, headers) {
- var self = this
- var result, re, match
- if (!headers) {
- headers = self.headers
- }
- Object.keys(headers).forEach(function (key) {
- if (key.length !== name.length) {
- return
- }
- re = new RegExp(name, 'i')
- match = key.match(re)
- if (match) {
- result = headers[key]
- }
- })
- return result
-}
-Request.prototype.enableUnixSocket = function () {
- // Get the socket & request paths from the URL
- var unixParts = this.uri.path.split(':')
- var host = unixParts[0]
- var path = unixParts[1]
- // Apply unix properties to request
- this.socketPath = host
- this.uri.pathname = path
- this.uri.path = path
- this.uri.host = host
- this.uri.hostname = host
- this.uri.isUnix = true
-}
-
-Request.prototype.auth = function (user, pass, sendImmediately, bearer) {
- var self = this
-
- self._auth.onRequest(user, pass, sendImmediately, bearer)
-
- return self
-}
-Request.prototype.aws = function (opts, now) {
- var self = this
-
- if (!now) {
- self._aws = opts
- return self
- }
-
- if (opts.sign_version === 4 || opts.sign_version === '4') {
- // use aws4
- var options = {
- host: self.uri.host,
- path: self.uri.path,
- method: self.method,
- headers: self.headers,
- body: self.body
- }
- if (opts.service) {
- options.service = opts.service
- }
- var signRes = aws4.sign(options, {
- accessKeyId: opts.key,
- secretAccessKey: opts.secret,
- sessionToken: opts.session
- })
- self.setHeader('authorization', signRes.headers.Authorization)
- self.setHeader('x-amz-date', signRes.headers['X-Amz-Date'])
- if (signRes.headers['X-Amz-Security-Token']) {
- self.setHeader('x-amz-security-token', signRes.headers['X-Amz-Security-Token'])
- }
- } else {
- // default: use aws-sign2
- var date = new Date()
- self.setHeader('date', date.toUTCString())
- var auth = {
- key: opts.key,
- secret: opts.secret,
- verb: self.method.toUpperCase(),
- date: date,
- contentType: self.getHeader('content-type') || '',
- md5: self.getHeader('content-md5') || '',
- amazonHeaders: aws2.canonicalizeHeaders(self.headers)
- }
- var path = self.uri.path
- if (opts.bucket && path) {
- auth.resource = '/' + opts.bucket + path
- } else if (opts.bucket && !path) {
- auth.resource = '/' + opts.bucket
- } else if (!opts.bucket && path) {
- auth.resource = path
- } else if (!opts.bucket && !path) {
- auth.resource = '/'
- }
- auth.resource = aws2.canonicalizeResource(auth.resource)
- self.setHeader('authorization', aws2.authorization(auth))
- }
-
- return self
-}
-Request.prototype.httpSignature = function (opts) {
- var self = this
- httpSignature.signRequest({
- getHeader: function (header) {
- return self.getHeader(header, self.headers)
- },
- setHeader: function (header, value) {
- self.setHeader(header, value)
- },
- method: self.method,
- path: self.path
- }, opts)
- debug('httpSignature authorization', self.getHeader('authorization'))
-
- return self
-}
-Request.prototype.hawk = function (opts) {
- var self = this
- self.setHeader('Authorization', hawk.header(self.uri, self.method, opts))
-}
-Request.prototype.oauth = function (_oauth) {
- var self = this
-
- self._oauth.onRequest(_oauth)
-
- return self
-}
-
-Request.prototype.jar = function (jar) {
- var self = this
- var cookies
-
- if (self._redirect.redirectsFollowed === 0) {
- self.originalCookieHeader = self.getHeader('cookie')
- }
-
- if (!jar) {
- // disable cookies
- cookies = false
- self._disableCookies = true
- } else {
- var targetCookieJar = jar.getCookieString ? jar : globalCookieJar
- var urihref = self.uri.href
- // fetch cookie in the Specified host
- if (targetCookieJar) {
- cookies = targetCookieJar.getCookieString(urihref)
- }
- }
-
- // if need cookie and cookie is not empty
- if (cookies && cookies.length) {
- if (self.originalCookieHeader) {
- // Don't overwrite existing Cookie header
- self.setHeader('cookie', self.originalCookieHeader + '; ' + cookies)
- } else {
- self.setHeader('cookie', cookies)
- }
- }
- self._jar = jar
- return self
-}
-
-// Stream API
-Request.prototype.pipe = function (dest, opts) {
- var self = this
-
- if (self.response) {
- if (self._destdata) {
- self.emit('error', new Error('You cannot pipe after data has been emitted from the response.'))
- } else if (self._ended) {
- self.emit('error', new Error('You cannot pipe after the response has been ended.'))
- } else {
- stream.Stream.prototype.pipe.call(self, dest, opts)
- self.pipeDest(dest)
- return dest
- }
- } else {
- self.dests.push(dest)
- stream.Stream.prototype.pipe.call(self, dest, opts)
- return dest
- }
-}
-Request.prototype.write = function () {
- var self = this
- if (self._aborted) { return }
-
- if (!self._started) {
- self.start()
- }
- if (self.req) {
- return self.req.write.apply(self.req, arguments)
- }
-}
-Request.prototype.end = function (chunk) {
- var self = this
- if (self._aborted) { return }
-
- if (chunk) {
- self.write(chunk)
- }
- if (!self._started) {
- self.start()
- }
- if (self.req) {
- self.req.end()
- }
-}
-Request.prototype.pause = function () {
- var self = this
- if (!self.responseContent) {
- self._paused = true
- } else {
- self.responseContent.pause.apply(self.responseContent, arguments)
- }
-}
-Request.prototype.resume = function () {
- var self = this
- if (!self.responseContent) {
- self._paused = false
- } else {
- self.responseContent.resume.apply(self.responseContent, arguments)
- }
-}
-Request.prototype.destroy = function () {
- var self = this
- this.clearTimeout()
- if (!self._ended) {
- self.end()
- } else if (self.response) {
- self.response.destroy()
- }
-}
-
-Request.prototype.clearTimeout = function () {
- if (this.timeoutTimer) {
- clearTimeout(this.timeoutTimer)
- this.timeoutTimer = null
- }
-}
-
-Request.defaultProxyHeaderWhiteList =
- Tunnel.defaultProxyHeaderWhiteList.slice()
-
-Request.defaultProxyHeaderExclusiveList =
- Tunnel.defaultProxyHeaderExclusiveList.slice()
-
-// Exports
-
-Request.prototype.toJSON = requestToJSON
-module.exports = Request
diff --git a/deps/npm/node_modules/socks-proxy-agent/dist/agent.d.ts b/deps/npm/node_modules/socks-proxy-agent/dist/agent.d.ts
index 52341a1b55d90b..96f44af75984cb 100644
--- a/deps/npm/node_modules/socks-proxy-agent/dist/agent.d.ts
+++ b/deps/npm/node_modules/socks-proxy-agent/dist/agent.d.ts
@@ -10,6 +10,7 @@ import { SocksProxyAgentOptions } from '.';
export default class SocksProxyAgent extends Agent {
private lookup;
private proxy;
+ private tlsConnectionOptions;
constructor(_opts: string | SocksProxyAgentOptions);
/**
* Initiates a SOCKS connection to the specified SOCKS proxy server,
diff --git a/deps/npm/node_modules/socks-proxy-agent/dist/agent.js b/deps/npm/node_modules/socks-proxy-agent/dist/agent.js
index acdde177ecb92b..1e4c529f7746f4 100644
--- a/deps/npm/node_modules/socks-proxy-agent/dist/agent.js
+++ b/deps/npm/node_modules/socks-proxy-agent/dist/agent.js
@@ -127,6 +127,7 @@ class SocksProxyAgent extends agent_base_1.Agent {
const parsedProxy = parseSocksProxy(opts);
this.lookup = parsedProxy.lookup;
this.proxy = parsedProxy.proxy;
+ this.tlsConnectionOptions = opts.tls || {};
}
/**
* Initiates a SOCKS connection to the specified SOCKS proxy server,
@@ -159,8 +160,8 @@ class SocksProxyAgent extends agent_base_1.Agent {
// this socket connection to a TLS connection.
debug('Upgrading socket connection to TLS');
const servername = opts.servername || opts.host;
- return tls_1.default.connect(Object.assign(Object.assign({}, omit(opts, 'host', 'hostname', 'path', 'port')), { socket,
- servername }));
+ return tls_1.default.connect(Object.assign(Object.assign(Object.assign({}, omit(opts, 'host', 'hostname', 'path', 'port')), { socket,
+ servername }), this.tlsConnectionOptions));
}
return socket;
});
diff --git a/deps/npm/node_modules/socks-proxy-agent/dist/agent.js.map b/deps/npm/node_modules/socks-proxy-agent/dist/agent.js.map
index 63da267a036d98..4efc16887a93b9 100644
--- a/deps/npm/node_modules/socks-proxy-agent/dist/agent.js.map
+++ b/deps/npm/node_modules/socks-proxy-agent/dist/agent.js.map
@@ -1 +1 @@
-{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,8CAAsB;AAEtB,8CAAsB;AACtB,8CAAsB;AACtB,kDAAgC;AAChC,2CAAkE;AAClE,iCAAoE;AAGpE,MAAM,KAAK,GAAG,eAAW,CAAC,mBAAmB,CAAC,CAAC;AAE/C,SAAS,SAAS,CAAC,IAAY;IAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACtC,aAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YAC7B,IAAI,GAAG,EAAE;gBACR,MAAM,CAAC,GAAG,CAAC,CAAC;aACZ;iBAAM;gBACN,OAAO,CAAC,GAAG,CAAC,CAAC;aACb;QACF,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CACvB,IAA4B;IAE5B,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,IAAI,GAAuB,CAAC,CAAC;IAEjC,0DAA0D;IAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC;IACxC,IAAI,CAAC,IAAI,EAAE;QACV,MAAM,IAAI,SAAS,CAAC,WAAW,CAAC,CAAC;KACjC;IAED,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;QAClC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;KACjB;SAAM,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;QACzC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;KAC/B;IAED,0EAA0E;IAC1E,iEAAiE;IACjE,IAAI,CAAC,IAAI,EAAE;QACV,IAAI,GAAG,IAAI,CAAC;KACZ;IAED,sEAAsE;IACtE,iBAAiB;IACjB,IAAI,IAAI,CAAC,QAAQ,EAAE;QAClB,QAAQ,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE;YACvC,KAAK,QAAQ;gBACZ,MAAM,GAAG,IAAI,CAAC;YACf,eAAe;YACf,KAAK,SAAS;gBACb,IAAI,GAAG,CAAC,CAAC;gBACT,MAAM;YACP,KAAK,QAAQ;gBACZ,MAAM,GAAG,IAAI,CAAC;YACf,eAAe;YACf,KAAK,OAAO,CAAC,CAAC,sCAAsC;YACpD,KAAK,SAAS;gBACb,IAAI,GAAG,CAAC,CAAC;gBACT,MAAM;YACP;gBACC,MAAM,IAAI,SAAS,CAClB,8CAA8C,IAAI,CAAC,QAAQ,EAAE,CAC7D,CAAC;SACH;KACD;IAED,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE;QACrC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE;YACvC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;SACjB;aAAM;YACN,MAAM,IAAI,SAAS,CAAC,+BAA+B,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;SAChE;KACD;IAED,MAAM,KAAK,GAAe;QACzB,IAAI;QACJ,IAAI;QACJ,IAAI;KACJ,CAAC;IAEF,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC;IAC1C,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC7B,IAAI,IAAI,CAAC,IAAI,EAAE;QACd,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;KACnB;IACD,IAAI,MAAM,EAAE;QACX,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE;YACtC,KAAK,EAAE,MAAM;YACb,UAAU,EAAE,KAAK;SACjB,CAAC,CAAC;KACH;IACD,IAAI,QAAQ,EAAE;QACb,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE;YACxC,KAAK,EAAE,QAAQ;YACf,UAAU,EAAE,KAAK;SACjB,CAAC,CAAC;KACH;IAED,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAC1B,CAAC;AAED;;;;GAIG;AACH,MAAqB,eAAgB,SAAQ,kBAAK;IAIjD,YAAY,KAAsC;QACjD,IAAI,IAA4B,CAAC;QACjC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC9B,IAAI,GAAG,aAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;SACxB;aAAM;YACN,IAAI,GAAG,KAAK,CAAC;SACb;QACD,IAAI,CAAC,IAAI,EAAE;YACV,MAAM,IAAI,SAAS,CAClB,2DAA2D,CAC3D,CAAC;SACF;QACD,KAAK,CAAC,IAAI,CAAC,CAAC;QAEZ,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;QACjC,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;IAChC,CAAC;IAED;;;;;OAKG;IACG,QAAQ,CACb,GAAkB,EAClB,IAAoB;;YAEpB,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;YAC/B,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;YAEnC,IAAI,CAAC,IAAI,EAAE;gBACV,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;aACtC;YAED,IAAI,MAAM,EAAE;gBACX,mEAAmE;gBACnE,IAAI,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;aAC7B;YAED,MAAM,SAAS,GAAuB;gBACrC,KAAK;gBACL,WAAW,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;gBAC3B,OAAO,EAAE,SAAS;gBAClB,OAAO;aACP,CAAC;YACF,KAAK,CAAC,qCAAqC,EAAE,SAAS,CAAC,CAAC;YACxD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,mBAAW,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;YACjE,KAAK,CAAC,6CAA6C,CAAC,CAAC;YAErD,IAAI,IAAI,CAAC,cAAc,EAAE;gBACxB,sDAAsD;gBACtD,8CAA8C;gBAC9C,KAAK,CAAC,oCAAoC,CAAC,CAAC;gBAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC;gBAChD,OAAO,aAAG,CAAC,OAAO,iCACd,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,KACjD,MAAM;oBACN,UAAU,IACT,CAAC;aACH;YAED,OAAO,MAAM,CAAC;QACf,CAAC;KAAA;CACD;AArED,kCAqEC;AAED,SAAS,IAAI,CACZ,GAAM,EACN,GAAG,IAAO;IAIV,MAAM,GAAG,GAAG,EAEX,CAAC;IACF,IAAI,GAAqB,CAAC;IAC1B,KAAK,GAAG,IAAI,GAAG,EAAE;QAChB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACxB,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;SACpB;KACD;IACD,OAAO,GAAG,CAAC;AACZ,CAAC"}
\ No newline at end of file
+{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,8CAAsB;AAEtB,8CAAsB;AACtB,8CAAsB;AACtB,kDAAgC;AAChC,2CAAkE;AAClE,iCAAoE;AAGpE,MAAM,KAAK,GAAG,eAAW,CAAC,mBAAmB,CAAC,CAAC;AAE/C,SAAS,SAAS,CAAC,IAAY;IAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACtC,aAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YAC7B,IAAI,GAAG,EAAE;gBACR,MAAM,CAAC,GAAG,CAAC,CAAC;aACZ;iBAAM;gBACN,OAAO,CAAC,GAAG,CAAC,CAAC;aACb;QACF,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CACvB,IAA4B;IAE5B,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,IAAI,GAAuB,CAAC,CAAC;IAEjC,0DAA0D;IAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC;IACxC,IAAI,CAAC,IAAI,EAAE;QACV,MAAM,IAAI,SAAS,CAAC,WAAW,CAAC,CAAC;KACjC;IAED,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;QAClC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;KACjB;SAAM,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;QACzC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;KAC/B;IAED,0EAA0E;IAC1E,iEAAiE;IACjE,IAAI,CAAC,IAAI,EAAE;QACV,IAAI,GAAG,IAAI,CAAC;KACZ;IAED,sEAAsE;IACtE,iBAAiB;IACjB,IAAI,IAAI,CAAC,QAAQ,EAAE;QAClB,QAAQ,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE;YACvC,KAAK,QAAQ;gBACZ,MAAM,GAAG,IAAI,CAAC;YACf,eAAe;YACf,KAAK,SAAS;gBACb,IAAI,GAAG,CAAC,CAAC;gBACT,MAAM;YACP,KAAK,QAAQ;gBACZ,MAAM,GAAG,IAAI,CAAC;YACf,eAAe;YACf,KAAK,OAAO,CAAC,CAAC,sCAAsC;YACpD,KAAK,SAAS;gBACb,IAAI,GAAG,CAAC,CAAC;gBACT,MAAM;YACP;gBACC,MAAM,IAAI,SAAS,CAClB,8CAA8C,IAAI,CAAC,QAAQ,EAAE,CAC7D,CAAC;SACH;KACD;IAED,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE;QACrC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE;YACvC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;SACjB;aAAM;YACN,MAAM,IAAI,SAAS,CAAC,+BAA+B,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;SAChE;KACD;IAED,MAAM,KAAK,GAAe;QACzB,IAAI;QACJ,IAAI;QACJ,IAAI;KACJ,CAAC;IAEF,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC;IAC1C,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC7B,IAAI,IAAI,CAAC,IAAI,EAAE;QACd,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;KACnB;IACD,IAAI,MAAM,EAAE;QACX,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE;YACtC,KAAK,EAAE,MAAM;YACb,UAAU,EAAE,KAAK;SACjB,CAAC,CAAC;KACH;IACD,IAAI,QAAQ,EAAE;QACb,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE;YACxC,KAAK,EAAE,QAAQ;YACf,UAAU,EAAE,KAAK;SACjB,CAAC,CAAC;KACH;IAED,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAC1B,CAAC;AAED;;;;GAIG;AACH,MAAqB,eAAgB,SAAQ,kBAAK;IAKjD,YAAY,KAAsC;QACjD,IAAI,IAA4B,CAAC;QACjC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC9B,IAAI,GAAG,aAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;SACxB;aAAM;YACN,IAAI,GAAG,KAAK,CAAC;SACb;QACD,IAAI,CAAC,IAAI,EAAE;YACV,MAAM,IAAI,SAAS,CAClB,2DAA2D,CAC3D,CAAC;SACF;QACD,KAAK,CAAC,IAAI,CAAC,CAAC;QAEZ,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;QACjC,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;QAC/B,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC;IAC5C,CAAC;IAED;;;;;OAKG;IACG,QAAQ,CACb,GAAkB,EAClB,IAAoB;;YAEpB,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;YAC/B,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;YAEnC,IAAI,CAAC,IAAI,EAAE;gBACV,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;aACtC;YAED,IAAI,MAAM,EAAE;gBACX,mEAAmE;gBACnE,IAAI,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;aAC7B;YAED,MAAM,SAAS,GAAuB;gBACrC,KAAK;gBACL,WAAW,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;gBAC3B,OAAO,EAAE,SAAS;gBAClB,OAAO;aACP,CAAC;YACF,KAAK,CAAC,qCAAqC,EAAE,SAAS,CAAC,CAAC;YACxD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,mBAAW,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;YACjE,KAAK,CAAC,6CAA6C,CAAC,CAAC;YAErD,IAAI,IAAI,CAAC,cAAc,EAAE;gBACxB,sDAAsD;gBACtD,8CAA8C;gBAC9C,KAAK,CAAC,oCAAoC,CAAC,CAAC;gBAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC;gBAChD,OAAO,aAAG,CAAC,OAAO,+CACd,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,KACjD,MAAM;oBACN,UAAU,KACP,IAAI,CAAC,oBAAoB,EAC3B,CAAC;aACH;YAED,OAAO,MAAM,CAAC;QACf,CAAC;KAAA;CACD;AAxED,kCAwEC;AAED,SAAS,IAAI,CACZ,GAAM,EACN,GAAG,IAAO;IAIV,MAAM,GAAG,GAAG,EAEX,CAAC;IACF,IAAI,GAAqB,CAAC;IAC1B,KAAK,GAAG,IAAI,GAAG,EAAE;QAChB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACxB,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;SACpB;KACD;IACD,OAAO,GAAG,CAAC;AACZ,CAAC"}
\ No newline at end of file
diff --git a/deps/npm/node_modules/socks-proxy-agent/dist/index.d.ts b/deps/npm/node_modules/socks-proxy-agent/dist/index.d.ts
index 8fe0e58884a9d7..d031b95ddf593f 100644
--- a/deps/npm/node_modules/socks-proxy-agent/dist/index.d.ts
+++ b/deps/npm/node_modules/socks-proxy-agent/dist/index.d.ts
@@ -1,6 +1,7 @@
///
import { Url } from 'url';
import { SocksProxy } from 'socks';
+import tls from 'tls';
import { AgentOptions } from 'agent-base';
import _SocksProxyAgent from './agent';
declare function createSocksProxyAgent(opts: string | createSocksProxyAgent.SocksProxyAgentOptions): _SocksProxyAgent;
@@ -9,6 +10,7 @@ declare namespace createSocksProxyAgent {
host?: string | null;
port?: string | number | null;
username?: string | null;
+ tls?: tls.ConnectionOptions | null;
}
export interface SocksProxyAgentOptions extends AgentOptions, BaseSocksProxyAgentOptions, Partial> {
}
diff --git a/deps/npm/node_modules/socks-proxy-agent/dist/index.js.map b/deps/npm/node_modules/socks-proxy-agent/dist/index.js.map
index 56fa84868a165d..23f3d1ce592b6c 100644
--- a/deps/npm/node_modules/socks-proxy-agent/dist/index.js.map
+++ b/deps/npm/node_modules/socks-proxy-agent/dist/index.js.map
@@ -1 +1 @@
-{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;AAGA,oDAAuC;AAEvC,SAAS,qBAAqB,CAC7B,IAA2D;IAE3D,OAAO,IAAI,eAAgB,CAAC,IAAI,CAAC,CAAC;AACnC,CAAC;AAED,WAAU,qBAAqB;IAajB,qCAAe,GAAG,eAAgB,CAAC;IAEhD,qBAAqB,CAAC,SAAS,GAAG,eAAgB,CAAC,SAAS,CAAC;AAC9D,CAAC,EAhBS,qBAAqB,KAArB,qBAAqB,QAgB9B;AAED,iBAAS,qBAAqB,CAAC"}
\ No newline at end of file
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;AAIA,oDAAuC;AAEvC,SAAS,qBAAqB,CAC7B,IAA2D;IAE3D,OAAO,IAAI,eAAgB,CAAC,IAAI,CAAC,CAAC;AACnC,CAAC;AAED,WAAU,qBAAqB;IAcjB,qCAAe,GAAG,eAAgB,CAAC;IAEhD,qBAAqB,CAAC,SAAS,GAAG,eAAgB,CAAC,SAAS,CAAC;AAC9D,CAAC,EAjBS,qBAAqB,KAArB,qBAAqB,QAiB9B;AAED,iBAAS,qBAAqB,CAAC"}
\ No newline at end of file
diff --git a/deps/npm/node_modules/socks-proxy-agent/package.json b/deps/npm/node_modules/socks-proxy-agent/package.json
index b0a7445136be75..a6b7efa89bc7ef 100644
--- a/deps/npm/node_modules/socks-proxy-agent/package.json
+++ b/deps/npm/node_modules/socks-proxy-agent/package.json
@@ -1,6 +1,6 @@
{
"name": "socks-proxy-agent",
- "version": "6.0.0",
+ "version": "6.1.0",
"description": "A SOCKS proxy `http.Agent` implementation for HTTP and HTTPS",
"main": "dist/index",
"typings": "dist/index",
diff --git a/deps/npm/node_modules/sshpk/LICENSE b/deps/npm/node_modules/sshpk/LICENSE
deleted file mode 100644
index f6d947d2f61c41..00000000000000
--- a/deps/npm/node_modules/sshpk/LICENSE
+++ /dev/null
@@ -1,18 +0,0 @@
-Copyright Joyent, Inc. All rights reserved.
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to
-deal in the Software without restriction, including without limitation the
-rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-sell copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-IN THE SOFTWARE.
diff --git a/deps/npm/node_modules/sshpk/bin/sshpk-conv b/deps/npm/node_modules/sshpk/bin/sshpk-conv
deleted file mode 100755
index e839ede5b0c42f..00000000000000
--- a/deps/npm/node_modules/sshpk/bin/sshpk-conv
+++ /dev/null
@@ -1,243 +0,0 @@
-#!/usr/bin/env node
-// -*- mode: js -*-
-// vim: set filetype=javascript :
-// Copyright 2018 Joyent, Inc. All rights reserved.
-
-var dashdash = require('dashdash');
-var sshpk = require('../lib/index');
-var fs = require('fs');
-var path = require('path');
-var tty = require('tty');
-var readline = require('readline');
-var getPassword = require('getpass').getPass;
-
-var options = [
- {
- names: ['outformat', 't'],
- type: 'string',
- help: 'Output format'
- },
- {
- names: ['informat', 'T'],
- type: 'string',
- help: 'Input format'
- },
- {
- names: ['file', 'f'],
- type: 'string',
- help: 'Input file name (default stdin)'
- },
- {
- names: ['out', 'o'],
- type: 'string',
- help: 'Output file name (default stdout)'
- },
- {
- names: ['private', 'p'],
- type: 'bool',
- help: 'Produce a private key as output'
- },
- {
- names: ['derive', 'd'],
- type: 'string',
- help: 'Output a new key derived from this one, with given algo'
- },
- {
- names: ['identify', 'i'],
- type: 'bool',
- help: 'Print key metadata instead of converting'
- },
- {
- names: ['fingerprint', 'F'],
- type: 'bool',
- help: 'Output key fingerprint'
- },
- {
- names: ['hash', 'H'],
- type: 'string',
- help: 'Hash function to use for key fingeprint with -F'
- },
- {
- names: ['spki', 's'],
- type: 'bool',
- help: 'With -F, generates an SPKI fingerprint instead of SSH'
- },
- {
- names: ['comment', 'c'],
- type: 'string',
- help: 'Set key comment, if output format supports'
- },
- {
- names: ['help', 'h'],
- type: 'bool',
- help: 'Shows this help text'
- }
-];
-
-if (require.main === module) {
- var parser = dashdash.createParser({
- options: options
- });
-
- try {
- var opts = parser.parse(process.argv);
- } catch (e) {
- console.error('sshpk-conv: error: %s', e.message);
- process.exit(1);
- }
-
- if (opts.help || opts._args.length > 1) {
- var help = parser.help({}).trimRight();
- console.error('sshpk-conv: converts between SSH key formats\n');
- console.error(help);
- console.error('\navailable key formats:');
- console.error(' - pem, pkcs1 eg id_rsa');
- console.error(' - ssh eg id_rsa.pub');
- console.error(' - pkcs8 format you want for openssl');
- console.error(' - openssh like output of ssh-keygen -o');
- console.error(' - rfc4253 raw OpenSSH wire format');
- console.error(' - dnssec dnssec-keygen format');
- console.error(' - putty PuTTY ppk format');
- console.error('\navailable fingerprint formats:');
- console.error(' - hex colon-separated hex for SSH');
- console.error(' straight hex for SPKI');
- console.error(' - base64 SHA256:* format from OpenSSH');
- process.exit(1);
- }
-
- /*
- * Key derivation can only be done on private keys, so use of the -d
- * option necessarily implies -p.
- */
- if (opts.derive)
- opts.private = true;
-
- var inFile = process.stdin;
- var inFileName = 'stdin';
-
- var inFilePath;
- if (opts.file) {
- inFilePath = opts.file;
- } else if (opts._args.length === 1) {
- inFilePath = opts._args[0];
- }
-
- if (inFilePath)
- inFileName = path.basename(inFilePath);
-
- try {
- if (inFilePath) {
- fs.accessSync(inFilePath, fs.R_OK);
- inFile = fs.createReadStream(inFilePath);
- }
- } catch (e) {
- ifError(e, 'error opening input file');
- }
-
- var outFile = process.stdout;
-
- try {
- if (opts.out && !opts.identify) {
- fs.accessSync(path.dirname(opts.out), fs.W_OK);
- outFile = fs.createWriteStream(opts.out);
- }
- } catch (e) {
- ifError(e, 'error opening output file');
- }
-
- var bufs = [];
- inFile.on('readable', function () {
- var data;
- while ((data = inFile.read()))
- bufs.push(data);
- });
- var parseOpts = {};
- parseOpts.filename = inFileName;
- inFile.on('end', function processKey() {
- var buf = Buffer.concat(bufs);
- var fmt = 'auto';
- if (opts.informat)
- fmt = opts.informat;
- var f = sshpk.parseKey;
- if (opts.private)
- f = sshpk.parsePrivateKey;
- try {
- var key = f(buf, fmt, parseOpts);
- } catch (e) {
- if (e.name === 'KeyEncryptedError') {
- getPassword(function (err, pw) {
- if (err)
- ifError(err);
- parseOpts.passphrase = pw;
- processKey();
- });
- return;
- }
- ifError(e);
- }
-
- if (opts.derive)
- key = key.derive(opts.derive);
-
- if (opts.comment)
- key.comment = opts.comment;
-
- if (opts.identify) {
- var kind = 'public';
- if (sshpk.PrivateKey.isPrivateKey(key))
- kind = 'private';
- console.log('%s: a %d bit %s %s key', inFileName,
- key.size, key.type.toUpperCase(), kind);
- if (key.type === 'ecdsa')
- console.log('ECDSA curve: %s', key.curve);
- if (key.comment)
- console.log('Comment: %s', key.comment);
- console.log('SHA256 fingerprint: ' +
- key.fingerprint('sha256').toString());
- console.log('MD5 fingerprint: ' +
- key.fingerprint('md5').toString());
- console.log('SPKI-SHA256 fingerprint: ' +
- key.fingerprint('sha256', 'spki').toString());
- process.exit(0);
- return;
- }
-
- if (opts.fingerprint) {
- var hash = opts.hash;
- var type = opts.spki ? 'spki' : 'ssh';
- var format = opts.outformat;
- var fp = key.fingerprint(hash, type).toString(format);
- outFile.write(fp);
- outFile.write('\n');
- outFile.once('drain', function () {
- process.exit(0);
- });
- return;
- }
-
- fmt = undefined;
- if (opts.outformat)
- fmt = opts.outformat;
- outFile.write(key.toBuffer(fmt));
- if (fmt === 'ssh' ||
- (!opts.private && fmt === undefined))
- outFile.write('\n');
- outFile.once('drain', function () {
- process.exit(0);
- });
- });
-}
-
-function ifError(e, txt) {
- if (txt)
- txt = txt + ': ';
- else
- txt = '';
- console.error('sshpk-conv: ' + txt + e.name + ': ' + e.message);
- if (process.env['DEBUG'] || process.env['V']) {
- console.error(e.stack);
- if (e.innerErr)
- console.error(e.innerErr.stack);
- }
- process.exit(1);
-}
diff --git a/deps/npm/node_modules/sshpk/bin/sshpk-sign b/deps/npm/node_modules/sshpk/bin/sshpk-sign
deleted file mode 100755
index 673fc9864214db..00000000000000
--- a/deps/npm/node_modules/sshpk/bin/sshpk-sign
+++ /dev/null
@@ -1,191 +0,0 @@
-#!/usr/bin/env node
-// -*- mode: js -*-
-// vim: set filetype=javascript :
-// Copyright 2015 Joyent, Inc. All rights reserved.
-
-var dashdash = require('dashdash');
-var sshpk = require('../lib/index');
-var fs = require('fs');
-var path = require('path');
-var getPassword = require('getpass').getPass;
-
-var options = [
- {
- names: ['hash', 'H'],
- type: 'string',
- help: 'Hash algorithm (sha1, sha256, sha384, sha512)'
- },
- {
- names: ['verbose', 'v'],
- type: 'bool',
- help: 'Display verbose info about key and hash used'
- },
- {
- names: ['identity', 'i'],
- type: 'string',
- help: 'Path to key to use'
- },
- {
- names: ['file', 'f'],
- type: 'string',
- help: 'Input filename'
- },
- {
- names: ['out', 'o'],
- type: 'string',
- help: 'Output filename'
- },
- {
- names: ['format', 't'],
- type: 'string',
- help: 'Signature format (asn1, ssh, raw)'
- },
- {
- names: ['binary', 'b'],
- type: 'bool',
- help: 'Output raw binary instead of base64'
- },
- {
- names: ['help', 'h'],
- type: 'bool',
- help: 'Shows this help text'
- }
-];
-
-var parseOpts = {};
-
-if (require.main === module) {
- var parser = dashdash.createParser({
- options: options
- });
-
- try {
- var opts = parser.parse(process.argv);
- } catch (e) {
- console.error('sshpk-sign: error: %s', e.message);
- process.exit(1);
- }
-
- if (opts.help || opts._args.length > 1) {
- var help = parser.help({}).trimRight();
- console.error('sshpk-sign: sign data using an SSH key\n');
- console.error(help);
- process.exit(1);
- }
-
- if (!opts.identity) {
- var help = parser.help({}).trimRight();
- console.error('sshpk-sign: the -i or --identity option ' +
- 'is required\n');
- console.error(help);
- process.exit(1);
- }
-
- var keyData = fs.readFileSync(opts.identity);
- parseOpts.filename = opts.identity;
-
- run();
-}
-
-function run() {
- var key;
- try {
- key = sshpk.parsePrivateKey(keyData, 'auto', parseOpts);
- } catch (e) {
- if (e.name === 'KeyEncryptedError') {
- getPassword(function (err, pw) {
- parseOpts.passphrase = pw;
- run();
- });
- return;
- }
- console.error('sshpk-sign: error loading private key "' +
- opts.identity + '": ' + e.name + ': ' + e.message);
- process.exit(1);
- }
-
- var hash = opts.hash || key.defaultHashAlgorithm();
-
- var signer;
- try {
- signer = key.createSign(hash);
- } catch (e) {
- console.error('sshpk-sign: error creating signer: ' +
- e.name + ': ' + e.message);
- process.exit(1);
- }
-
- if (opts.verbose) {
- console.error('sshpk-sign: using %s-%s with a %d bit key',
- key.type, hash, key.size);
- }
-
- var inFile = process.stdin;
- var inFileName = 'stdin';
-
- var inFilePath;
- if (opts.file) {
- inFilePath = opts.file;
- } else if (opts._args.length === 1) {
- inFilePath = opts._args[0];
- }
-
- if (inFilePath)
- inFileName = path.basename(inFilePath);
-
- try {
- if (inFilePath) {
- fs.accessSync(inFilePath, fs.R_OK);
- inFile = fs.createReadStream(inFilePath);
- }
- } catch (e) {
- console.error('sshpk-sign: error opening input file' +
- ': ' + e.name + ': ' + e.message);
- process.exit(1);
- }
-
- var outFile = process.stdout;
-
- try {
- if (opts.out && !opts.identify) {
- fs.accessSync(path.dirname(opts.out), fs.W_OK);
- outFile = fs.createWriteStream(opts.out);
- }
- } catch (e) {
- console.error('sshpk-sign: error opening output file' +
- ': ' + e.name + ': ' + e.message);
- process.exit(1);
- }
-
- inFile.pipe(signer);
- inFile.on('end', function () {
- var sig;
- try {
- sig = signer.sign();
- } catch (e) {
- console.error('sshpk-sign: error signing data: ' +
- e.name + ': ' + e.message);
- process.exit(1);
- }
-
- var fmt = opts.format || 'asn1';
- var output;
- try {
- output = sig.toBuffer(fmt);
- if (!opts.binary)
- output = output.toString('base64');
- } catch (e) {
- console.error('sshpk-sign: error converting signature' +
- ' to ' + fmt + ' format: ' + e.name + ': ' +
- e.message);
- process.exit(1);
- }
-
- outFile.write(output);
- if (!opts.binary)
- outFile.write('\n');
- outFile.once('drain', function () {
- process.exit(0);
- });
- });
-}
diff --git a/deps/npm/node_modules/sshpk/bin/sshpk-verify b/deps/npm/node_modules/sshpk/bin/sshpk-verify
deleted file mode 100755
index fc71a82c81e813..00000000000000
--- a/deps/npm/node_modules/sshpk/bin/sshpk-verify
+++ /dev/null
@@ -1,167 +0,0 @@
-#!/usr/bin/env node
-// -*- mode: js -*-
-// vim: set filetype=javascript :
-// Copyright 2015 Joyent, Inc. All rights reserved.
-
-var dashdash = require('dashdash');
-var sshpk = require('../lib/index');
-var fs = require('fs');
-var path = require('path');
-var Buffer = require('safer-buffer').Buffer;
-
-var options = [
- {
- names: ['hash', 'H'],
- type: 'string',
- help: 'Hash algorithm (sha1, sha256, sha384, sha512)'
- },
- {
- names: ['verbose', 'v'],
- type: 'bool',
- help: 'Display verbose info about key and hash used'
- },
- {
- names: ['identity', 'i'],
- type: 'string',
- help: 'Path to (public) key to use'
- },
- {
- names: ['file', 'f'],
- type: 'string',
- help: 'Input filename'
- },
- {
- names: ['format', 't'],
- type: 'string',
- help: 'Signature format (asn1, ssh, raw)'
- },
- {
- names: ['signature', 's'],
- type: 'string',
- help: 'base64-encoded signature data'
- },
- {
- names: ['help', 'h'],
- type: 'bool',
- help: 'Shows this help text'
- }
-];
-
-if (require.main === module) {
- var parser = dashdash.createParser({
- options: options
- });
-
- try {
- var opts = parser.parse(process.argv);
- } catch (e) {
- console.error('sshpk-verify: error: %s', e.message);
- process.exit(3);
- }
-
- if (opts.help || opts._args.length > 1) {
- var help = parser.help({}).trimRight();
- console.error('sshpk-verify: sign data using an SSH key\n');
- console.error(help);
- process.exit(3);
- }
-
- if (!opts.identity) {
- var help = parser.help({}).trimRight();
- console.error('sshpk-verify: the -i or --identity option ' +
- 'is required\n');
- console.error(help);
- process.exit(3);
- }
-
- if (!opts.signature) {
- var help = parser.help({}).trimRight();
- console.error('sshpk-verify: the -s or --signature option ' +
- 'is required\n');
- console.error(help);
- process.exit(3);
- }
-
- var keyData = fs.readFileSync(opts.identity);
-
- var key;
- try {
- key = sshpk.parseKey(keyData);
- } catch (e) {
- console.error('sshpk-verify: error loading key "' +
- opts.identity + '": ' + e.name + ': ' + e.message);
- process.exit(2);
- }
-
- var fmt = opts.format || 'asn1';
- var sigData = Buffer.from(opts.signature, 'base64');
-
- var sig;
- try {
- sig = sshpk.parseSignature(sigData, key.type, fmt);
- } catch (e) {
- console.error('sshpk-verify: error parsing signature: ' +
- e.name + ': ' + e.message);
- process.exit(2);
- }
-
- var hash = opts.hash || key.defaultHashAlgorithm();
-
- var verifier;
- try {
- verifier = key.createVerify(hash);
- } catch (e) {
- console.error('sshpk-verify: error creating verifier: ' +
- e.name + ': ' + e.message);
- process.exit(2);
- }
-
- if (opts.verbose) {
- console.error('sshpk-verify: using %s-%s with a %d bit key',
- key.type, hash, key.size);
- }
-
- var inFile = process.stdin;
- var inFileName = 'stdin';
-
- var inFilePath;
- if (opts.file) {
- inFilePath = opts.file;
- } else if (opts._args.length === 1) {
- inFilePath = opts._args[0];
- }
-
- if (inFilePath)
- inFileName = path.basename(inFilePath);
-
- try {
- if (inFilePath) {
- fs.accessSync(inFilePath, fs.R_OK);
- inFile = fs.createReadStream(inFilePath);
- }
- } catch (e) {
- console.error('sshpk-verify: error opening input file' +
- ': ' + e.name + ': ' + e.message);
- process.exit(2);
- }
-
- inFile.pipe(verifier);
- inFile.on('end', function () {
- var ret;
- try {
- ret = verifier.verify(sig);
- } catch (e) {
- console.error('sshpk-verify: error verifying data: ' +
- e.name + ': ' + e.message);
- process.exit(1);
- }
-
- if (ret) {
- console.error('OK');
- process.exit(0);
- }
-
- console.error('NOT OK');
- process.exit(1);
- });
-}
diff --git a/deps/npm/node_modules/sshpk/lib/algs.js b/deps/npm/node_modules/sshpk/lib/algs.js
deleted file mode 100644
index 3b01e7d1d383f9..00000000000000
--- a/deps/npm/node_modules/sshpk/lib/algs.js
+++ /dev/null
@@ -1,168 +0,0 @@
-// Copyright 2015 Joyent, Inc.
-
-var Buffer = require('safer-buffer').Buffer;
-
-var algInfo = {
- 'dsa': {
- parts: ['p', 'q', 'g', 'y'],
- sizePart: 'p'
- },
- 'rsa': {
- parts: ['e', 'n'],
- sizePart: 'n'
- },
- 'ecdsa': {
- parts: ['curve', 'Q'],
- sizePart: 'Q'
- },
- 'ed25519': {
- parts: ['A'],
- sizePart: 'A'
- }
-};
-algInfo['curve25519'] = algInfo['ed25519'];
-
-var algPrivInfo = {
- 'dsa': {
- parts: ['p', 'q', 'g', 'y', 'x']
- },
- 'rsa': {
- parts: ['n', 'e', 'd', 'iqmp', 'p', 'q']
- },
- 'ecdsa': {
- parts: ['curve', 'Q', 'd']
- },
- 'ed25519': {
- parts: ['A', 'k']
- }
-};
-algPrivInfo['curve25519'] = algPrivInfo['ed25519'];
-
-var hashAlgs = {
- 'md5': true,
- 'sha1': true,
- 'sha256': true,
- 'sha384': true,
- 'sha512': true
-};
-
-/*
- * Taken from
- * http://csrc.nist.gov/groups/ST/toolkit/documents/dss/NISTReCur.pdf
- */
-var curves = {
- 'nistp256': {
- size: 256,
- pkcs8oid: '1.2.840.10045.3.1.7',
- p: Buffer.from(('00' +
- 'ffffffff 00000001 00000000 00000000' +
- '00000000 ffffffff ffffffff ffffffff').
- replace(/ /g, ''), 'hex'),
- a: Buffer.from(('00' +
- 'FFFFFFFF 00000001 00000000 00000000' +
- '00000000 FFFFFFFF FFFFFFFF FFFFFFFC').
- replace(/ /g, ''), 'hex'),
- b: Buffer.from((
- '5ac635d8 aa3a93e7 b3ebbd55 769886bc' +
- '651d06b0 cc53b0f6 3bce3c3e 27d2604b').
- replace(/ /g, ''), 'hex'),
- s: Buffer.from(('00' +
- 'c49d3608 86e70493 6a6678e1 139d26b7' +
- '819f7e90').
- replace(/ /g, ''), 'hex'),
- n: Buffer.from(('00' +
- 'ffffffff 00000000 ffffffff ffffffff' +
- 'bce6faad a7179e84 f3b9cac2 fc632551').
- replace(/ /g, ''), 'hex'),
- G: Buffer.from(('04' +
- '6b17d1f2 e12c4247 f8bce6e5 63a440f2' +
- '77037d81 2deb33a0 f4a13945 d898c296' +
- '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16' +
- '2bce3357 6b315ece cbb64068 37bf51f5').
- replace(/ /g, ''), 'hex')
- },
- 'nistp384': {
- size: 384,
- pkcs8oid: '1.3.132.0.34',
- p: Buffer.from(('00' +
- 'ffffffff ffffffff ffffffff ffffffff' +
- 'ffffffff ffffffff ffffffff fffffffe' +
- 'ffffffff 00000000 00000000 ffffffff').
- replace(/ /g, ''), 'hex'),
- a: Buffer.from(('00' +
- 'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF' +
- 'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE' +
- 'FFFFFFFF 00000000 00000000 FFFFFFFC').
- replace(/ /g, ''), 'hex'),
- b: Buffer.from((
- 'b3312fa7 e23ee7e4 988e056b e3f82d19' +
- '181d9c6e fe814112 0314088f 5013875a' +
- 'c656398d 8a2ed19d 2a85c8ed d3ec2aef').
- replace(/ /g, ''), 'hex'),
- s: Buffer.from(('00' +
- 'a335926a a319a27a 1d00896a 6773a482' +
- '7acdac73').
- replace(/ /g, ''), 'hex'),
- n: Buffer.from(('00' +
- 'ffffffff ffffffff ffffffff ffffffff' +
- 'ffffffff ffffffff c7634d81 f4372ddf' +
- '581a0db2 48b0a77a ecec196a ccc52973').
- replace(/ /g, ''), 'hex'),
- G: Buffer.from(('04' +
- 'aa87ca22 be8b0537 8eb1c71e f320ad74' +
- '6e1d3b62 8ba79b98 59f741e0 82542a38' +
- '5502f25d bf55296c 3a545e38 72760ab7' +
- '3617de4a 96262c6f 5d9e98bf 9292dc29' +
- 'f8f41dbd 289a147c e9da3113 b5f0b8c0' +
- '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f').
- replace(/ /g, ''), 'hex')
- },
- 'nistp521': {
- size: 521,
- pkcs8oid: '1.3.132.0.35',
- p: Buffer.from((
- '01ffffff ffffffff ffffffff ffffffff' +
- 'ffffffff ffffffff ffffffff ffffffff' +
- 'ffffffff ffffffff ffffffff ffffffff' +
- 'ffffffff ffffffff ffffffff ffffffff' +
- 'ffff').replace(/ /g, ''), 'hex'),
- a: Buffer.from(('01FF' +
- 'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF' +
- 'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF' +
- 'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF' +
- 'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFC').
- replace(/ /g, ''), 'hex'),
- b: Buffer.from(('51' +
- '953eb961 8e1c9a1f 929a21a0 b68540ee' +
- 'a2da725b 99b315f3 b8b48991 8ef109e1' +
- '56193951 ec7e937b 1652c0bd 3bb1bf07' +
- '3573df88 3d2c34f1 ef451fd4 6b503f00').
- replace(/ /g, ''), 'hex'),
- s: Buffer.from(('00' +
- 'd09e8800 291cb853 96cc6717 393284aa' +
- 'a0da64ba').replace(/ /g, ''), 'hex'),
- n: Buffer.from(('01ff' +
- 'ffffffff ffffffff ffffffff ffffffff' +
- 'ffffffff ffffffff ffffffff fffffffa' +
- '51868783 bf2f966b 7fcc0148 f709a5d0' +
- '3bb5c9b8 899c47ae bb6fb71e 91386409').
- replace(/ /g, ''), 'hex'),
- G: Buffer.from(('04' +
- '00c6 858e06b7 0404e9cd 9e3ecb66 2395b442' +
- '9c648139 053fb521 f828af60 6b4d3dba' +
- 'a14b5e77 efe75928 fe1dc127 a2ffa8de' +
- '3348b3c1 856a429b f97e7e31 c2e5bd66' +
- '0118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9' +
- '98f54449 579b4468 17afbd17 273e662c' +
- '97ee7299 5ef42640 c550b901 3fad0761' +
- '353c7086 a272c240 88be9476 9fd16650').
- replace(/ /g, ''), 'hex')
- }
-};
-
-module.exports = {
- info: algInfo,
- privInfo: algPrivInfo,
- hashAlgs: hashAlgs,
- curves: curves
-};
diff --git a/deps/npm/node_modules/sshpk/lib/certificate.js b/deps/npm/node_modules/sshpk/lib/certificate.js
deleted file mode 100644
index 69323570731a99..00000000000000
--- a/deps/npm/node_modules/sshpk/lib/certificate.js
+++ /dev/null
@@ -1,410 +0,0 @@
-// Copyright 2016 Joyent, Inc.
-
-module.exports = Certificate;
-
-var assert = require('assert-plus');
-var Buffer = require('safer-buffer').Buffer;
-var algs = require('./algs');
-var crypto = require('crypto');
-var Fingerprint = require('./fingerprint');
-var Signature = require('./signature');
-var errs = require('./errors');
-var util = require('util');
-var utils = require('./utils');
-var Key = require('./key');
-var PrivateKey = require('./private-key');
-var Identity = require('./identity');
-
-var formats = {};
-formats['openssh'] = require('./formats/openssh-cert');
-formats['x509'] = require('./formats/x509');
-formats['pem'] = require('./formats/x509-pem');
-
-var CertificateParseError = errs.CertificateParseError;
-var InvalidAlgorithmError = errs.InvalidAlgorithmError;
-
-function Certificate(opts) {
- assert.object(opts, 'options');
- assert.arrayOfObject(opts.subjects, 'options.subjects');
- utils.assertCompatible(opts.subjects[0], Identity, [1, 0],
- 'options.subjects');
- utils.assertCompatible(opts.subjectKey, Key, [1, 0],
- 'options.subjectKey');
- utils.assertCompatible(opts.issuer, Identity, [1, 0], 'options.issuer');
- if (opts.issuerKey !== undefined) {
- utils.assertCompatible(opts.issuerKey, Key, [1, 0],
- 'options.issuerKey');
- }
- assert.object(opts.signatures, 'options.signatures');
- assert.buffer(opts.serial, 'options.serial');
- assert.date(opts.validFrom, 'options.validFrom');
- assert.date(opts.validUntil, 'optons.validUntil');
-
- assert.optionalArrayOfString(opts.purposes, 'options.purposes');
-
- this._hashCache = {};
-
- this.subjects = opts.subjects;
- this.issuer = opts.issuer;
- this.subjectKey = opts.subjectKey;
- this.issuerKey = opts.issuerKey;
- this.signatures = opts.signatures;
- this.serial = opts.serial;
- this.validFrom = opts.validFrom;
- this.validUntil = opts.validUntil;
- this.purposes = opts.purposes;
-}
-
-Certificate.formats = formats;
-
-Certificate.prototype.toBuffer = function (format, options) {
- if (format === undefined)
- format = 'x509';
- assert.string(format, 'format');
- assert.object(formats[format], 'formats[format]');
- assert.optionalObject(options, 'options');
-
- return (formats[format].write(this, options));
-};
-
-Certificate.prototype.toString = function (format, options) {
- if (format === undefined)
- format = 'pem';
- return (this.toBuffer(format, options).toString());
-};
-
-Certificate.prototype.fingerprint = function (algo) {
- if (algo === undefined)
- algo = 'sha256';
- assert.string(algo, 'algorithm');
- var opts = {
- type: 'certificate',
- hash: this.hash(algo),
- algorithm: algo
- };
- return (new Fingerprint(opts));
-};
-
-Certificate.prototype.hash = function (algo) {
- assert.string(algo, 'algorithm');
- algo = algo.toLowerCase();
- if (algs.hashAlgs[algo] === undefined)
- throw (new InvalidAlgorithmError(algo));
-
- if (this._hashCache[algo])
- return (this._hashCache[algo]);
-
- var hash = crypto.createHash(algo).
- update(this.toBuffer('x509')).digest();
- this._hashCache[algo] = hash;
- return (hash);
-};
-
-Certificate.prototype.isExpired = function (when) {
- if (when === undefined)
- when = new Date();
- return (!((when.getTime() >= this.validFrom.getTime()) &&
- (when.getTime() < this.validUntil.getTime())));
-};
-
-Certificate.prototype.isSignedBy = function (issuerCert) {
- utils.assertCompatible(issuerCert, Certificate, [1, 0], 'issuer');
-
- if (!this.issuer.equals(issuerCert.subjects[0]))
- return (false);
- if (this.issuer.purposes && this.issuer.purposes.length > 0 &&
- this.issuer.purposes.indexOf('ca') === -1) {
- return (false);
- }
-
- return (this.isSignedByKey(issuerCert.subjectKey));
-};
-
-Certificate.prototype.getExtension = function (keyOrOid) {
- assert.string(keyOrOid, 'keyOrOid');
- var ext = this.getExtensions().filter(function (maybeExt) {
- if (maybeExt.format === 'x509')
- return (maybeExt.oid === keyOrOid);
- if (maybeExt.format === 'openssh')
- return (maybeExt.name === keyOrOid);
- return (false);
- })[0];
- return (ext);
-};
-
-Certificate.prototype.getExtensions = function () {
- var exts = [];
- var x509 = this.signatures.x509;
- if (x509 && x509.extras && x509.extras.exts) {
- x509.extras.exts.forEach(function (ext) {
- ext.format = 'x509';
- exts.push(ext);
- });
- }
- var openssh = this.signatures.openssh;
- if (openssh && openssh.exts) {
- openssh.exts.forEach(function (ext) {
- ext.format = 'openssh';
- exts.push(ext);
- });
- }
- return (exts);
-};
-
-Certificate.prototype.isSignedByKey = function (issuerKey) {
- utils.assertCompatible(issuerKey, Key, [1, 2], 'issuerKey');
-
- if (this.issuerKey !== undefined) {
- return (this.issuerKey.
- fingerprint('sha512').matches(issuerKey));
- }
-
- var fmt = Object.keys(this.signatures)[0];
- var valid = formats[fmt].verify(this, issuerKey);
- if (valid)
- this.issuerKey = issuerKey;
- return (valid);
-};
-
-Certificate.prototype.signWith = function (key) {
- utils.assertCompatible(key, PrivateKey, [1, 2], 'key');
- var fmts = Object.keys(formats);
- var didOne = false;
- for (var i = 0; i < fmts.length; ++i) {
- if (fmts[i] !== 'pem') {
- var ret = formats[fmts[i]].sign(this, key);
- if (ret === true)
- didOne = true;
- }
- }
- if (!didOne) {
- throw (new Error('Failed to sign the certificate for any ' +
- 'available certificate formats'));
- }
-};
-
-Certificate.createSelfSigned = function (subjectOrSubjects, key, options) {
- var subjects;
- if (Array.isArray(subjectOrSubjects))
- subjects = subjectOrSubjects;
- else
- subjects = [subjectOrSubjects];
-
- assert.arrayOfObject(subjects);
- subjects.forEach(function (subject) {
- utils.assertCompatible(subject, Identity, [1, 0], 'subject');
- });
-
- utils.assertCompatible(key, PrivateKey, [1, 2], 'private key');
-
- assert.optionalObject(options, 'options');
- if (options === undefined)
- options = {};
- assert.optionalObject(options.validFrom, 'options.validFrom');
- assert.optionalObject(options.validUntil, 'options.validUntil');
- var validFrom = options.validFrom;
- var validUntil = options.validUntil;
- if (validFrom === undefined)
- validFrom = new Date();
- if (validUntil === undefined) {
- assert.optionalNumber(options.lifetime, 'options.lifetime');
- var lifetime = options.lifetime;
- if (lifetime === undefined)
- lifetime = 10*365*24*3600;
- validUntil = new Date();
- validUntil.setTime(validUntil.getTime() + lifetime*1000);
- }
- assert.optionalBuffer(options.serial, 'options.serial');
- var serial = options.serial;
- if (serial === undefined)
- serial = Buffer.from('0000000000000001', 'hex');
-
- var purposes = options.purposes;
- if (purposes === undefined)
- purposes = [];
-
- if (purposes.indexOf('signature') === -1)
- purposes.push('signature');
-
- /* Self-signed certs are always CAs. */
- if (purposes.indexOf('ca') === -1)
- purposes.push('ca');
- if (purposes.indexOf('crl') === -1)
- purposes.push('crl');
-
- /*
- * If we weren't explicitly given any other purposes, do the sensible
- * thing and add some basic ones depending on the subject type.
- */
- if (purposes.length <= 3) {
- var hostSubjects = subjects.filter(function (subject) {
- return (subject.type === 'host');
- });
- var userSubjects = subjects.filter(function (subject) {
- return (subject.type === 'user');
- });
- if (hostSubjects.length > 0) {
- if (purposes.indexOf('serverAuth') === -1)
- purposes.push('serverAuth');
- }
- if (userSubjects.length > 0) {
- if (purposes.indexOf('clientAuth') === -1)
- purposes.push('clientAuth');
- }
- if (userSubjects.length > 0 || hostSubjects.length > 0) {
- if (purposes.indexOf('keyAgreement') === -1)
- purposes.push('keyAgreement');
- if (key.type === 'rsa' &&
- purposes.indexOf('encryption') === -1)
- purposes.push('encryption');
- }
- }
-
- var cert = new Certificate({
- subjects: subjects,
- issuer: subjects[0],
- subjectKey: key.toPublic(),
- issuerKey: key.toPublic(),
- signatures: {},
- serial: serial,
- validFrom: validFrom,
- validUntil: validUntil,
- purposes: purposes
- });
- cert.signWith(key);
-
- return (cert);
-};
-
-Certificate.create =
- function (subjectOrSubjects, key, issuer, issuerKey, options) {
- var subjects;
- if (Array.isArray(subjectOrSubjects))
- subjects = subjectOrSubjects;
- else
- subjects = [subjectOrSubjects];
-
- assert.arrayOfObject(subjects);
- subjects.forEach(function (subject) {
- utils.assertCompatible(subject, Identity, [1, 0], 'subject');
- });
-
- utils.assertCompatible(key, Key, [1, 0], 'key');
- if (PrivateKey.isPrivateKey(key))
- key = key.toPublic();
- utils.assertCompatible(issuer, Identity, [1, 0], 'issuer');
- utils.assertCompatible(issuerKey, PrivateKey, [1, 2], 'issuer key');
-
- assert.optionalObject(options, 'options');
- if (options === undefined)
- options = {};
- assert.optionalObject(options.validFrom, 'options.validFrom');
- assert.optionalObject(options.validUntil, 'options.validUntil');
- var validFrom = options.validFrom;
- var validUntil = options.validUntil;
- if (validFrom === undefined)
- validFrom = new Date();
- if (validUntil === undefined) {
- assert.optionalNumber(options.lifetime, 'options.lifetime');
- var lifetime = options.lifetime;
- if (lifetime === undefined)
- lifetime = 10*365*24*3600;
- validUntil = new Date();
- validUntil.setTime(validUntil.getTime() + lifetime*1000);
- }
- assert.optionalBuffer(options.serial, 'options.serial');
- var serial = options.serial;
- if (serial === undefined)
- serial = Buffer.from('0000000000000001', 'hex');
-
- var purposes = options.purposes;
- if (purposes === undefined)
- purposes = [];
-
- if (purposes.indexOf('signature') === -1)
- purposes.push('signature');
-
- if (options.ca === true) {
- if (purposes.indexOf('ca') === -1)
- purposes.push('ca');
- if (purposes.indexOf('crl') === -1)
- purposes.push('crl');
- }
-
- var hostSubjects = subjects.filter(function (subject) {
- return (subject.type === 'host');
- });
- var userSubjects = subjects.filter(function (subject) {
- return (subject.type === 'user');
- });
- if (hostSubjects.length > 0) {
- if (purposes.indexOf('serverAuth') === -1)
- purposes.push('serverAuth');
- }
- if (userSubjects.length > 0) {
- if (purposes.indexOf('clientAuth') === -1)
- purposes.push('clientAuth');
- }
- if (userSubjects.length > 0 || hostSubjects.length > 0) {
- if (purposes.indexOf('keyAgreement') === -1)
- purposes.push('keyAgreement');
- if (key.type === 'rsa' &&
- purposes.indexOf('encryption') === -1)
- purposes.push('encryption');
- }
-
- var cert = new Certificate({
- subjects: subjects,
- issuer: issuer,
- subjectKey: key,
- issuerKey: issuerKey.toPublic(),
- signatures: {},
- serial: serial,
- validFrom: validFrom,
- validUntil: validUntil,
- purposes: purposes
- });
- cert.signWith(issuerKey);
-
- return (cert);
-};
-
-Certificate.parse = function (data, format, options) {
- if (typeof (data) !== 'string')
- assert.buffer(data, 'data');
- if (format === undefined)
- format = 'auto';
- assert.string(format, 'format');
- if (typeof (options) === 'string')
- options = { filename: options };
- assert.optionalObject(options, 'options');
- if (options === undefined)
- options = {};
- assert.optionalString(options.filename, 'options.filename');
- if (options.filename === undefined)
- options.filename = '(unnamed)';
-
- assert.object(formats[format], 'formats[format]');
-
- try {
- var k = formats[format].read(data, options);
- return (k);
- } catch (e) {
- throw (new CertificateParseError(options.filename, format, e));
- }
-};
-
-Certificate.isCertificate = function (obj, ver) {
- return (utils.isCompatible(obj, Certificate, ver));
-};
-
-/*
- * API versions for Certificate:
- * [1,0] -- initial ver
- * [1,1] -- openssh format now unpacks extensions
- */
-Certificate.prototype._sshpkApiVersion = [1, 1];
-
-Certificate._oldVersionDetect = function (obj) {
- return ([1, 0]);
-};
diff --git a/deps/npm/node_modules/sshpk/lib/dhe.js b/deps/npm/node_modules/sshpk/lib/dhe.js
deleted file mode 100644
index a3c8032cf13b1d..00000000000000
--- a/deps/npm/node_modules/sshpk/lib/dhe.js
+++ /dev/null
@@ -1,397 +0,0 @@
-// Copyright 2017 Joyent, Inc.
-
-module.exports = {
- DiffieHellman: DiffieHellman,
- generateECDSA: generateECDSA,
- generateED25519: generateED25519
-};
-
-var assert = require('assert-plus');
-var crypto = require('crypto');
-var Buffer = require('safer-buffer').Buffer;
-var algs = require('./algs');
-var utils = require('./utils');
-var nacl = require('tweetnacl');
-
-var Key = require('./key');
-var PrivateKey = require('./private-key');
-
-var CRYPTO_HAVE_ECDH = (crypto.createECDH !== undefined);
-
-var ecdh = require('ecc-jsbn');
-var ec = require('ecc-jsbn/lib/ec');
-var jsbn = require('jsbn').BigInteger;
-
-function DiffieHellman(key) {
- utils.assertCompatible(key, Key, [1, 4], 'key');
- this._isPriv = PrivateKey.isPrivateKey(key, [1, 3]);
- this._algo = key.type;
- this._curve = key.curve;
- this._key = key;
- if (key.type === 'dsa') {
- if (!CRYPTO_HAVE_ECDH) {
- throw (new Error('Due to bugs in the node 0.10 ' +
- 'crypto API, node 0.12.x or later is required ' +
- 'to use DH'));
- }
- this._dh = crypto.createDiffieHellman(
- key.part.p.data, undefined,
- key.part.g.data, undefined);
- this._p = key.part.p;
- this._g = key.part.g;
- if (this._isPriv)
- this._dh.setPrivateKey(key.part.x.data);
- this._dh.setPublicKey(key.part.y.data);
-
- } else if (key.type === 'ecdsa') {
- if (!CRYPTO_HAVE_ECDH) {
- this._ecParams = new X9ECParameters(this._curve);
-
- if (this._isPriv) {
- this._priv = new ECPrivate(
- this._ecParams, key.part.d.data);
- }
- return;
- }
-
- var curve = {
- 'nistp256': 'prime256v1',
- 'nistp384': 'secp384r1',
- 'nistp521': 'secp521r1'
- }[key.curve];
- this._dh = crypto.createECDH(curve);
- if (typeof (this._dh) !== 'object' ||
- typeof (this._dh.setPrivateKey) !== 'function') {
- CRYPTO_HAVE_ECDH = false;
- DiffieHellman.call(this, key);
- return;
- }
- if (this._isPriv)
- this._dh.setPrivateKey(key.part.d.data);
- this._dh.setPublicKey(key.part.Q.data);
-
- } else if (key.type === 'curve25519') {
- if (this._isPriv) {
- utils.assertCompatible(key, PrivateKey, [1, 5], 'key');
- this._priv = key.part.k.data;
- }
-
- } else {
- throw (new Error('DH not supported for ' + key.type + ' keys'));
- }
-}
-
-DiffieHellman.prototype.getPublicKey = function () {
- if (this._isPriv)
- return (this._key.toPublic());
- return (this._key);
-};
-
-DiffieHellman.prototype.getPrivateKey = function () {
- if (this._isPriv)
- return (this._key);
- else
- return (undefined);
-};
-DiffieHellman.prototype.getKey = DiffieHellman.prototype.getPrivateKey;
-
-DiffieHellman.prototype._keyCheck = function (pk, isPub) {
- assert.object(pk, 'key');
- if (!isPub)
- utils.assertCompatible(pk, PrivateKey, [1, 3], 'key');
- utils.assertCompatible(pk, Key, [1, 4], 'key');
-
- if (pk.type !== this._algo) {
- throw (new Error('A ' + pk.type + ' key cannot be used in ' +
- this._algo + ' Diffie-Hellman'));
- }
-
- if (pk.curve !== this._curve) {
- throw (new Error('A key from the ' + pk.curve + ' curve ' +
- 'cannot be used with a ' + this._curve +
- ' Diffie-Hellman'));
- }
-
- if (pk.type === 'dsa') {
- assert.deepEqual(pk.part.p, this._p,
- 'DSA key prime does not match');
- assert.deepEqual(pk.part.g, this._g,
- 'DSA key generator does not match');
- }
-};
-
-DiffieHellman.prototype.setKey = function (pk) {
- this._keyCheck(pk);
-
- if (pk.type === 'dsa') {
- this._dh.setPrivateKey(pk.part.x.data);
- this._dh.setPublicKey(pk.part.y.data);
-
- } else if (pk.type === 'ecdsa') {
- if (CRYPTO_HAVE_ECDH) {
- this._dh.setPrivateKey(pk.part.d.data);
- this._dh.setPublicKey(pk.part.Q.data);
- } else {
- this._priv = new ECPrivate(
- this._ecParams, pk.part.d.data);
- }
-
- } else if (pk.type === 'curve25519') {
- var k = pk.part.k;
- if (!pk.part.k)
- k = pk.part.r;
- this._priv = k.data;
- if (this._priv[0] === 0x00)
- this._priv = this._priv.slice(1);
- this._priv = this._priv.slice(0, 32);
- }
- this._key = pk;
- this._isPriv = true;
-};
-DiffieHellman.prototype.setPrivateKey = DiffieHellman.prototype.setKey;
-
-DiffieHellman.prototype.computeSecret = function (otherpk) {
- this._keyCheck(otherpk, true);
- if (!this._isPriv)
- throw (new Error('DH exchange has not been initialized with ' +
- 'a private key yet'));
-
- var pub;
- if (this._algo === 'dsa') {
- return (this._dh.computeSecret(
- otherpk.part.y.data));
-
- } else if (this._algo === 'ecdsa') {
- if (CRYPTO_HAVE_ECDH) {
- return (this._dh.computeSecret(
- otherpk.part.Q.data));
- } else {
- pub = new ECPublic(
- this._ecParams, otherpk.part.Q.data);
- return (this._priv.deriveSharedSecret(pub));
- }
-
- } else if (this._algo === 'curve25519') {
- pub = otherpk.part.A.data;
- while (pub[0] === 0x00 && pub.length > 32)
- pub = pub.slice(1);
- var priv = this._priv;
- assert.strictEqual(pub.length, 32);
- assert.strictEqual(priv.length, 32);
-
- var secret = nacl.box.before(new Uint8Array(pub),
- new Uint8Array(priv));
-
- return (Buffer.from(secret));
- }
-
- throw (new Error('Invalid algorithm: ' + this._algo));
-};
-
-DiffieHellman.prototype.generateKey = function () {
- var parts = [];
- var priv, pub;
- if (this._algo === 'dsa') {
- this._dh.generateKeys();
-
- parts.push({name: 'p', data: this._p.data});
- parts.push({name: 'q', data: this._key.part.q.data});
- parts.push({name: 'g', data: this._g.data});
- parts.push({name: 'y', data: this._dh.getPublicKey()});
- parts.push({name: 'x', data: this._dh.getPrivateKey()});
- this._key = new PrivateKey({
- type: 'dsa',
- parts: parts
- });
- this._isPriv = true;
- return (this._key);
-
- } else if (this._algo === 'ecdsa') {
- if (CRYPTO_HAVE_ECDH) {
- this._dh.generateKeys();
-
- parts.push({name: 'curve',
- data: Buffer.from(this._curve)});
- parts.push({name: 'Q', data: this._dh.getPublicKey()});
- parts.push({name: 'd', data: this._dh.getPrivateKey()});
- this._key = new PrivateKey({
- type: 'ecdsa',
- curve: this._curve,
- parts: parts
- });
- this._isPriv = true;
- return (this._key);
-
- } else {
- var n = this._ecParams.getN();
- var r = new jsbn(crypto.randomBytes(n.bitLength()));
- var n1 = n.subtract(jsbn.ONE);
- priv = r.mod(n1).add(jsbn.ONE);
- pub = this._ecParams.getG().multiply(priv);
-
- priv = Buffer.from(priv.toByteArray());
- pub = Buffer.from(this._ecParams.getCurve().
- encodePointHex(pub), 'hex');
-
- this._priv = new ECPrivate(this._ecParams, priv);
-
- parts.push({name: 'curve',
- data: Buffer.from(this._curve)});
- parts.push({name: 'Q', data: pub});
- parts.push({name: 'd', data: priv});
-
- this._key = new PrivateKey({
- type: 'ecdsa',
- curve: this._curve,
- parts: parts
- });
- this._isPriv = true;
- return (this._key);
- }
-
- } else if (this._algo === 'curve25519') {
- var pair = nacl.box.keyPair();
- priv = Buffer.from(pair.secretKey);
- pub = Buffer.from(pair.publicKey);
- priv = Buffer.concat([priv, pub]);
- assert.strictEqual(priv.length, 64);
- assert.strictEqual(pub.length, 32);
-
- parts.push({name: 'A', data: pub});
- parts.push({name: 'k', data: priv});
- this._key = new PrivateKey({
- type: 'curve25519',
- parts: parts
- });
- this._isPriv = true;
- return (this._key);
- }
-
- throw (new Error('Invalid algorithm: ' + this._algo));
-};
-DiffieHellman.prototype.generateKeys = DiffieHellman.prototype.generateKey;
-
-/* These are helpers for using ecc-jsbn (for node 0.10 compatibility). */
-
-function X9ECParameters(name) {
- var params = algs.curves[name];
- assert.object(params);
-
- var p = new jsbn(params.p);
- var a = new jsbn(params.a);
- var b = new jsbn(params.b);
- var n = new jsbn(params.n);
- var h = jsbn.ONE;
- var curve = new ec.ECCurveFp(p, a, b);
- var G = curve.decodePointHex(params.G.toString('hex'));
-
- this.curve = curve;
- this.g = G;
- this.n = n;
- this.h = h;
-}
-X9ECParameters.prototype.getCurve = function () { return (this.curve); };
-X9ECParameters.prototype.getG = function () { return (this.g); };
-X9ECParameters.prototype.getN = function () { return (this.n); };
-X9ECParameters.prototype.getH = function () { return (this.h); };
-
-function ECPublic(params, buffer) {
- this._params = params;
- if (buffer[0] === 0x00)
- buffer = buffer.slice(1);
- this._pub = params.getCurve().decodePointHex(buffer.toString('hex'));
-}
-
-function ECPrivate(params, buffer) {
- this._params = params;
- this._priv = new jsbn(utils.mpNormalize(buffer));
-}
-ECPrivate.prototype.deriveSharedSecret = function (pubKey) {
- assert.ok(pubKey instanceof ECPublic);
- var S = pubKey._pub.multiply(this._priv);
- return (Buffer.from(S.getX().toBigInteger().toByteArray()));
-};
-
-function generateED25519() {
- var pair = nacl.sign.keyPair();
- var priv = Buffer.from(pair.secretKey);
- var pub = Buffer.from(pair.publicKey);
- assert.strictEqual(priv.length, 64);
- assert.strictEqual(pub.length, 32);
-
- var parts = [];
- parts.push({name: 'A', data: pub});
- parts.push({name: 'k', data: priv.slice(0, 32)});
- var key = new PrivateKey({
- type: 'ed25519',
- parts: parts
- });
- return (key);
-}
-
-/* Generates a new ECDSA private key on a given curve. */
-function generateECDSA(curve) {
- var parts = [];
- var key;
-
- if (CRYPTO_HAVE_ECDH) {
- /*
- * Node crypto doesn't expose key generation directly, but the
- * ECDH instances can generate keys. It turns out this just
- * calls into the OpenSSL generic key generator, and we can
- * read its output happily without doing an actual DH. So we
- * use that here.
- */
- var osCurve = {
- 'nistp256': 'prime256v1',
- 'nistp384': 'secp384r1',
- 'nistp521': 'secp521r1'
- }[curve];
-
- var dh = crypto.createECDH(osCurve);
- dh.generateKeys();
-
- parts.push({name: 'curve',
- data: Buffer.from(curve)});
- parts.push({name: 'Q', data: dh.getPublicKey()});
- parts.push({name: 'd', data: dh.getPrivateKey()});
-
- key = new PrivateKey({
- type: 'ecdsa',
- curve: curve,
- parts: parts
- });
- return (key);
- } else {
-
- var ecParams = new X9ECParameters(curve);
-
- /* This algorithm taken from FIPS PUB 186-4 (section B.4.1) */
- var n = ecParams.getN();
- /*
- * The crypto.randomBytes() function can only give us whole
- * bytes, so taking a nod from X9.62, we round up.
- */
- var cByteLen = Math.ceil((n.bitLength() + 64) / 8);
- var c = new jsbn(crypto.randomBytes(cByteLen));
-
- var n1 = n.subtract(jsbn.ONE);
- var priv = c.mod(n1).add(jsbn.ONE);
- var pub = ecParams.getG().multiply(priv);
-
- priv = Buffer.from(priv.toByteArray());
- pub = Buffer.from(ecParams.getCurve().
- encodePointHex(pub), 'hex');
-
- parts.push({name: 'curve', data: Buffer.from(curve)});
- parts.push({name: 'Q', data: pub});
- parts.push({name: 'd', data: priv});
-
- key = new PrivateKey({
- type: 'ecdsa',
- curve: curve,
- parts: parts
- });
- return (key);
- }
-}
diff --git a/deps/npm/node_modules/sshpk/lib/ed-compat.js b/deps/npm/node_modules/sshpk/lib/ed-compat.js
deleted file mode 100644
index 70732e1f704355..00000000000000
--- a/deps/npm/node_modules/sshpk/lib/ed-compat.js
+++ /dev/null
@@ -1,92 +0,0 @@
-// Copyright 2015 Joyent, Inc.
-
-module.exports = {
- Verifier: Verifier,
- Signer: Signer
-};
-
-var nacl = require('tweetnacl');
-var stream = require('stream');
-var util = require('util');
-var assert = require('assert-plus');
-var Buffer = require('safer-buffer').Buffer;
-var Signature = require('./signature');
-
-function Verifier(key, hashAlgo) {
- if (hashAlgo.toLowerCase() !== 'sha512')
- throw (new Error('ED25519 only supports the use of ' +
- 'SHA-512 hashes'));
-
- this.key = key;
- this.chunks = [];
-
- stream.Writable.call(this, {});
-}
-util.inherits(Verifier, stream.Writable);
-
-Verifier.prototype._write = function (chunk, enc, cb) {
- this.chunks.push(chunk);
- cb();
-};
-
-Verifier.prototype.update = function (chunk) {
- if (typeof (chunk) === 'string')
- chunk = Buffer.from(chunk, 'binary');
- this.chunks.push(chunk);
-};
-
-Verifier.prototype.verify = function (signature, fmt) {
- var sig;
- if (Signature.isSignature(signature, [2, 0])) {
- if (signature.type !== 'ed25519')
- return (false);
- sig = signature.toBuffer('raw');
-
- } else if (typeof (signature) === 'string') {
- sig = Buffer.from(signature, 'base64');
-
- } else if (Signature.isSignature(signature, [1, 0])) {
- throw (new Error('signature was created by too old ' +
- 'a version of sshpk and cannot be verified'));
- }
-
- assert.buffer(sig);
- return (nacl.sign.detached.verify(
- new Uint8Array(Buffer.concat(this.chunks)),
- new Uint8Array(sig),
- new Uint8Array(this.key.part.A.data)));
-};
-
-function Signer(key, hashAlgo) {
- if (hashAlgo.toLowerCase() !== 'sha512')
- throw (new Error('ED25519 only supports the use of ' +
- 'SHA-512 hashes'));
-
- this.key = key;
- this.chunks = [];
-
- stream.Writable.call(this, {});
-}
-util.inherits(Signer, stream.Writable);
-
-Signer.prototype._write = function (chunk, enc, cb) {
- this.chunks.push(chunk);
- cb();
-};
-
-Signer.prototype.update = function (chunk) {
- if (typeof (chunk) === 'string')
- chunk = Buffer.from(chunk, 'binary');
- this.chunks.push(chunk);
-};
-
-Signer.prototype.sign = function () {
- var sig = nacl.sign.detached(
- new Uint8Array(Buffer.concat(this.chunks)),
- new Uint8Array(Buffer.concat([
- this.key.part.k.data, this.key.part.A.data])));
- var sigBuf = Buffer.from(sig);
- var sigObj = Signature.parse(sigBuf, 'ed25519', 'raw');
- sigObj.hashAlgorithm = 'sha512';
- return (sigObj);
-};
diff --git a/deps/npm/node_modules/sshpk/lib/errors.js b/deps/npm/node_modules/sshpk/lib/errors.js
deleted file mode 100644
index 1cc09ec71d48db..00000000000000
--- a/deps/npm/node_modules/sshpk/lib/errors.js
+++ /dev/null
@@ -1,84 +0,0 @@
-// Copyright 2015 Joyent, Inc.
-
-var assert = require('assert-plus');
-var util = require('util');
-
-function FingerprintFormatError(fp, format) {
- if (Error.captureStackTrace)
- Error.captureStackTrace(this, FingerprintFormatError);
- this.name = 'FingerprintFormatError';
- this.fingerprint = fp;
- this.format = format;
- this.message = 'Fingerprint format is not supported, or is invalid: ';
- if (fp !== undefined)
- this.message += ' fingerprint = ' + fp;
- if (format !== undefined)
- this.message += ' format = ' + format;
-}
-util.inherits(FingerprintFormatError, Error);
-
-function InvalidAlgorithmError(alg) {
- if (Error.captureStackTrace)
- Error.captureStackTrace(this, InvalidAlgorithmError);
- this.name = 'InvalidAlgorithmError';
- this.algorithm = alg;
- this.message = 'Algorithm "' + alg + '" is not supported';
-}
-util.inherits(InvalidAlgorithmError, Error);
-
-function KeyParseError(name, format, innerErr) {
- if (Error.captureStackTrace)
- Error.captureStackTrace(this, KeyParseError);
- this.name = 'KeyParseError';
- this.format = format;
- this.keyName = name;
- this.innerErr = innerErr;
- this.message = 'Failed to parse ' + name + ' as a valid ' + format +
- ' format key: ' + innerErr.message;
-}
-util.inherits(KeyParseError, Error);
-
-function SignatureParseError(type, format, innerErr) {
- if (Error.captureStackTrace)
- Error.captureStackTrace(this, SignatureParseError);
- this.name = 'SignatureParseError';
- this.type = type;
- this.format = format;
- this.innerErr = innerErr;
- this.message = 'Failed to parse the given data as a ' + type +
- ' signature in ' + format + ' format: ' + innerErr.message;
-}
-util.inherits(SignatureParseError, Error);
-
-function CertificateParseError(name, format, innerErr) {
- if (Error.captureStackTrace)
- Error.captureStackTrace(this, CertificateParseError);
- this.name = 'CertificateParseError';
- this.format = format;
- this.certName = name;
- this.innerErr = innerErr;
- this.message = 'Failed to parse ' + name + ' as a valid ' + format +
- ' format certificate: ' + innerErr.message;
-}
-util.inherits(CertificateParseError, Error);
-
-function KeyEncryptedError(name, format) {
- if (Error.captureStackTrace)
- Error.captureStackTrace(this, KeyEncryptedError);
- this.name = 'KeyEncryptedError';
- this.format = format;
- this.keyName = name;
- this.message = 'The ' + format + ' format key ' + name + ' is ' +
- 'encrypted (password-protected), and no passphrase was ' +
- 'provided in `options`';
-}
-util.inherits(KeyEncryptedError, Error);
-
-module.exports = {
- FingerprintFormatError: FingerprintFormatError,
- InvalidAlgorithmError: InvalidAlgorithmError,
- KeyParseError: KeyParseError,
- SignatureParseError: SignatureParseError,
- KeyEncryptedError: KeyEncryptedError,
- CertificateParseError: CertificateParseError
-};
diff --git a/deps/npm/node_modules/sshpk/lib/fingerprint.js b/deps/npm/node_modules/sshpk/lib/fingerprint.js
deleted file mode 100644
index 0004b376ec6902..00000000000000
--- a/deps/npm/node_modules/sshpk/lib/fingerprint.js
+++ /dev/null
@@ -1,220 +0,0 @@
-// Copyright 2018 Joyent, Inc.
-
-module.exports = Fingerprint;
-
-var assert = require('assert-plus');
-var Buffer = require('safer-buffer').Buffer;
-var algs = require('./algs');
-var crypto = require('crypto');
-var errs = require('./errors');
-var Key = require('./key');
-var PrivateKey = require('./private-key');
-var Certificate = require('./certificate');
-var utils = require('./utils');
-
-var FingerprintFormatError = errs.FingerprintFormatError;
-var InvalidAlgorithmError = errs.InvalidAlgorithmError;
-
-function Fingerprint(opts) {
- assert.object(opts, 'options');
- assert.string(opts.type, 'options.type');
- assert.buffer(opts.hash, 'options.hash');
- assert.string(opts.algorithm, 'options.algorithm');
-
- this.algorithm = opts.algorithm.toLowerCase();
- if (algs.hashAlgs[this.algorithm] !== true)
- throw (new InvalidAlgorithmError(this.algorithm));
-
- this.hash = opts.hash;
- this.type = opts.type;
- this.hashType = opts.hashType;
-}
-
-Fingerprint.prototype.toString = function (format) {
- if (format === undefined) {
- if (this.algorithm === 'md5' || this.hashType === 'spki')
- format = 'hex';
- else
- format = 'base64';
- }
- assert.string(format);
-
- switch (format) {
- case 'hex':
- if (this.hashType === 'spki')
- return (this.hash.toString('hex'));
- return (addColons(this.hash.toString('hex')));
- case 'base64':
- if (this.hashType === 'spki')
- return (this.hash.toString('base64'));
- return (sshBase64Format(this.algorithm,
- this.hash.toString('base64')));
- default:
- throw (new FingerprintFormatError(undefined, format));
- }
-};
-
-Fingerprint.prototype.matches = function (other) {
- assert.object(other, 'key or certificate');
- if (this.type === 'key' && this.hashType !== 'ssh') {
- utils.assertCompatible(other, Key, [1, 7], 'key with spki');
- if (PrivateKey.isPrivateKey(other)) {
- utils.assertCompatible(other, PrivateKey, [1, 6],
- 'privatekey with spki support');
- }
- } else if (this.type === 'key') {
- utils.assertCompatible(other, Key, [1, 0], 'key');
- } else {
- utils.assertCompatible(other, Certificate, [1, 0],
- 'certificate');
- }
-
- var theirHash = other.hash(this.algorithm, this.hashType);
- var theirHash2 = crypto.createHash(this.algorithm).
- update(theirHash).digest('base64');
-
- if (this.hash2 === undefined)
- this.hash2 = crypto.createHash(this.algorithm).
- update(this.hash).digest('base64');
-
- return (this.hash2 === theirHash2);
-};
-
-/*JSSTYLED*/
-var base64RE = /^[A-Za-z0-9+\/=]+$/;
-/*JSSTYLED*/
-var hexRE = /^[a-fA-F0-9]+$/;
-
-Fingerprint.parse = function (fp, options) {
- assert.string(fp, 'fingerprint');
-
- var alg, hash, enAlgs;
- if (Array.isArray(options)) {
- enAlgs = options;
- options = {};
- }
- assert.optionalObject(options, 'options');
- if (options === undefined)
- options = {};
- if (options.enAlgs !== undefined)
- enAlgs = options.enAlgs;
- if (options.algorithms !== undefined)
- enAlgs = options.algorithms;
- assert.optionalArrayOfString(enAlgs, 'algorithms');
-
- var hashType = 'ssh';
- if (options.hashType !== undefined)
- hashType = options.hashType;
- assert.string(hashType, 'options.hashType');
-
- var parts = fp.split(':');
- if (parts.length == 2) {
- alg = parts[0].toLowerCase();
- if (!base64RE.test(parts[1]))
- throw (new FingerprintFormatError(fp));
- try {
- hash = Buffer.from(parts[1], 'base64');
- } catch (e) {
- throw (new FingerprintFormatError(fp));
- }
- } else if (parts.length > 2) {
- alg = 'md5';
- if (parts[0].toLowerCase() === 'md5')
- parts = parts.slice(1);
- parts = parts.map(function (p) {
- while (p.length < 2)
- p = '0' + p;
- if (p.length > 2)
- throw (new FingerprintFormatError(fp));
- return (p);
- });
- parts = parts.join('');
- if (!hexRE.test(parts) || parts.length % 2 !== 0)
- throw (new FingerprintFormatError(fp));
- try {
- hash = Buffer.from(parts, 'hex');
- } catch (e) {
- throw (new FingerprintFormatError(fp));
- }
- } else {
- if (hexRE.test(fp)) {
- hash = Buffer.from(fp, 'hex');
- } else if (base64RE.test(fp)) {
- hash = Buffer.from(fp, 'base64');
- } else {
- throw (new FingerprintFormatError(fp));
- }
-
- switch (hash.length) {
- case 32:
- alg = 'sha256';
- break;
- case 16:
- alg = 'md5';
- break;
- case 20:
- alg = 'sha1';
- break;
- case 64:
- alg = 'sha512';
- break;
- default:
- throw (new FingerprintFormatError(fp));
- }
-
- /* Plain hex/base64: guess it's probably SPKI unless told. */
- if (options.hashType === undefined)
- hashType = 'spki';
- }
-
- if (alg === undefined)
- throw (new FingerprintFormatError(fp));
-
- if (algs.hashAlgs[alg] === undefined)
- throw (new InvalidAlgorithmError(alg));
-
- if (enAlgs !== undefined) {
- enAlgs = enAlgs.map(function (a) { return a.toLowerCase(); });
- if (enAlgs.indexOf(alg) === -1)
- throw (new InvalidAlgorithmError(alg));
- }
-
- return (new Fingerprint({
- algorithm: alg,
- hash: hash,
- type: options.type || 'key',
- hashType: hashType
- }));
-};
-
-function addColons(s) {
- /*JSSTYLED*/
- return (s.replace(/(.{2})(?=.)/g, '$1:'));
-}
-
-function base64Strip(s) {
- /*JSSTYLED*/
- return (s.replace(/=*$/, ''));
-}
-
-function sshBase64Format(alg, h) {
- return (alg.toUpperCase() + ':' + base64Strip(h));
-}
-
-Fingerprint.isFingerprint = function (obj, ver) {
- return (utils.isCompatible(obj, Fingerprint, ver));
-};
-
-/*
- * API versions for Fingerprint:
- * [1,0] -- initial ver
- * [1,1] -- first tagged ver
- * [1,2] -- hashType and spki support
- */
-Fingerprint.prototype._sshpkApiVersion = [1, 2];
-
-Fingerprint._oldVersionDetect = function (obj) {
- assert.func(obj.toString);
- assert.func(obj.matches);
- return ([1, 0]);
-};
diff --git a/deps/npm/node_modules/sshpk/lib/formats/auto.js b/deps/npm/node_modules/sshpk/lib/formats/auto.js
deleted file mode 100644
index f32cd9648bcf68..00000000000000
--- a/deps/npm/node_modules/sshpk/lib/formats/auto.js
+++ /dev/null
@@ -1,124 +0,0 @@
-// Copyright 2018 Joyent, Inc.
-
-module.exports = {
- read: read,
- write: write
-};
-
-var assert = require('assert-plus');
-var Buffer = require('safer-buffer').Buffer;
-var utils = require('../utils');
-var Key = require('../key');
-var PrivateKey = require('../private-key');
-
-var pem = require('./pem');
-var ssh = require('./ssh');
-var rfc4253 = require('./rfc4253');
-var dnssec = require('./dnssec');
-var putty = require('./putty');
-
-var DNSSEC_PRIVKEY_HEADER_PREFIX = 'Private-key-format: v1';
-
-function read(buf, options) {
- if (typeof (buf) === 'string') {
- if (buf.trim().match(/^[-]+[ ]*BEGIN/))
- return (pem.read(buf, options));
- if (buf.match(/^\s*ssh-[a-z]/))
- return (ssh.read(buf, options));
- if (buf.match(/^\s*ecdsa-/))
- return (ssh.read(buf, options));
- if (buf.match(/^putty-user-key-file-2:/i))
- return (putty.read(buf, options));
- if (findDNSSECHeader(buf))
- return (dnssec.read(buf, options));
- buf = Buffer.from(buf, 'binary');
- } else {
- assert.buffer(buf);
- if (findPEMHeader(buf))
- return (pem.read(buf, options));
- if (findSSHHeader(buf))
- return (ssh.read(buf, options));
- if (findPuTTYHeader(buf))
- return (putty.read(buf, options));
- if (findDNSSECHeader(buf))
- return (dnssec.read(buf, options));
- }
- if (buf.readUInt32BE(0) < buf.length)
- return (rfc4253.read(buf, options));
- throw (new Error('Failed to auto-detect format of key'));
-}
-
-function findPuTTYHeader(buf) {
- var offset = 0;
- while (offset < buf.length &&
- (buf[offset] === 32 || buf[offset] === 10 || buf[offset] === 9))
- ++offset;
- if (offset + 22 <= buf.length &&
- buf.slice(offset, offset + 22).toString('ascii').toLowerCase() ===
- 'putty-user-key-file-2:')
- return (true);
- return (false);
-}
-
-function findSSHHeader(buf) {
- var offset = 0;
- while (offset < buf.length &&
- (buf[offset] === 32 || buf[offset] === 10 || buf[offset] === 9))
- ++offset;
- if (offset + 4 <= buf.length &&
- buf.slice(offset, offset + 4).toString('ascii') === 'ssh-')
- return (true);
- if (offset + 6 <= buf.length &&
- buf.slice(offset, offset + 6).toString('ascii') === 'ecdsa-')
- return (true);
- return (false);
-}
-
-function findPEMHeader(buf) {
- var offset = 0;
- while (offset < buf.length &&
- (buf[offset] === 32 || buf[offset] === 10))
- ++offset;
- if (buf[offset] !== 45)
- return (false);
- while (offset < buf.length &&
- (buf[offset] === 45))
- ++offset;
- while (offset < buf.length &&
- (buf[offset] === 32))
- ++offset;
- if (offset + 5 > buf.length ||
- buf.slice(offset, offset + 5).toString('ascii') !== 'BEGIN')
- return (false);
- return (true);
-}
-
-function findDNSSECHeader(buf) {
- // private case first
- if (buf.length <= DNSSEC_PRIVKEY_HEADER_PREFIX.length)
- return (false);
- var headerCheck = buf.slice(0, DNSSEC_PRIVKEY_HEADER_PREFIX.length);
- if (headerCheck.toString('ascii') === DNSSEC_PRIVKEY_HEADER_PREFIX)
- return (true);
-
- // public-key RFC3110 ?
- // 'domain.com. IN KEY ...' or 'domain.com. IN DNSKEY ...'
- // skip any comment-lines
- if (typeof (buf) !== 'string') {
- buf = buf.toString('ascii');
- }
- var lines = buf.split('\n');
- var line = 0;
- /* JSSTYLED */
- while (lines[line].match(/^\;/))
- line++;
- if (lines[line].toString('ascii').match(/\. IN KEY /))
- return (true);
- if (lines[line].toString('ascii').match(/\. IN DNSKEY /))
- return (true);
- return (false);
-}
-
-function write(key, options) {
- throw (new Error('"auto" format cannot be used for writing'));
-}
diff --git a/deps/npm/node_modules/sshpk/lib/formats/dnssec.js b/deps/npm/node_modules/sshpk/lib/formats/dnssec.js
deleted file mode 100644
index a74ea9ce0de207..00000000000000
--- a/deps/npm/node_modules/sshpk/lib/formats/dnssec.js
+++ /dev/null
@@ -1,287 +0,0 @@
-// Copyright 2017 Joyent, Inc.
-
-module.exports = {
- read: read,
- write: write
-};
-
-var assert = require('assert-plus');
-var Buffer = require('safer-buffer').Buffer;
-var Key = require('../key');
-var PrivateKey = require('../private-key');
-var utils = require('../utils');
-var SSHBuffer = require('../ssh-buffer');
-var Dhe = require('../dhe');
-
-var supportedAlgos = {
- 'rsa-sha1' : 5,
- 'rsa-sha256' : 8,
- 'rsa-sha512' : 10,
- 'ecdsa-p256-sha256' : 13,
- 'ecdsa-p384-sha384' : 14
- /*
- * ed25519 is hypothetically supported with id 15
- * but the common tools available don't appear to be
- * capable of generating/using ed25519 keys
- */
-};
-
-var supportedAlgosById = {};
-Object.keys(supportedAlgos).forEach(function (k) {
- supportedAlgosById[supportedAlgos[k]] = k.toUpperCase();
-});
-
-function read(buf, options) {
- if (typeof (buf) !== 'string') {
- assert.buffer(buf, 'buf');
- buf = buf.toString('ascii');
- }
- var lines = buf.split('\n');
- if (lines[0].match(/^Private-key-format\: v1/)) {
- var algElems = lines[1].split(' ');
- var algoNum = parseInt(algElems[1], 10);
- var algoName = algElems[2];
- if (!supportedAlgosById[algoNum])
- throw (new Error('Unsupported algorithm: ' + algoName));
- return (readDNSSECPrivateKey(algoNum, lines.slice(2)));
- }
-
- // skip any comment-lines
- var line = 0;
- /* JSSTYLED */
- while (lines[line].match(/^\;/))
- line++;
- // we should now have *one single* line left with our KEY on it.
- if ((lines[line].match(/\. IN KEY /) ||
- lines[line].match(/\. IN DNSKEY /)) && lines[line+1].length === 0) {
- return (readRFC3110(lines[line]));
- }
- throw (new Error('Cannot parse dnssec key'));
-}
-
-function readRFC3110(keyString) {
- var elems = keyString.split(' ');
- //unused var flags = parseInt(elems[3], 10);
- //unused var protocol = parseInt(elems[4], 10);
- var algorithm = parseInt(elems[5], 10);
- if (!supportedAlgosById[algorithm])
- throw (new Error('Unsupported algorithm: ' + algorithm));
- var base64key = elems.slice(6, elems.length).join();
- var keyBuffer = Buffer.from(base64key, 'base64');
- if (supportedAlgosById[algorithm].match(/^RSA-/)) {
- // join the rest of the body into a single base64-blob
- var publicExponentLen = keyBuffer.readUInt8(0);
- if (publicExponentLen != 3 && publicExponentLen != 1)
- throw (new Error('Cannot parse dnssec key: ' +
- 'unsupported exponent length'));
-
- var publicExponent = keyBuffer.slice(1, publicExponentLen+1);
- publicExponent = utils.mpNormalize(publicExponent);
- var modulus = keyBuffer.slice(1+publicExponentLen);
- modulus = utils.mpNormalize(modulus);
- // now, make the key
- var rsaKey = {
- type: 'rsa',
- parts: []
- };
- rsaKey.parts.push({ name: 'e', data: publicExponent});
- rsaKey.parts.push({ name: 'n', data: modulus});
- return (new Key(rsaKey));
- }
- if (supportedAlgosById[algorithm] === 'ECDSA-P384-SHA384' ||
- supportedAlgosById[algorithm] === 'ECDSA-P256-SHA256') {
- var curve = 'nistp384';
- var size = 384;
- if (supportedAlgosById[algorithm].match(/^ECDSA-P256-SHA256/)) {
- curve = 'nistp256';
- size = 256;
- }
-
- var ecdsaKey = {
- type: 'ecdsa',
- curve: curve,
- size: size,
- parts: [
- {name: 'curve', data: Buffer.from(curve) },
- {name: 'Q', data: utils.ecNormalize(keyBuffer) }
- ]
- };
- return (new Key(ecdsaKey));
- }
- throw (new Error('Unsupported algorithm: ' +
- supportedAlgosById[algorithm]));
-}
-
-function elementToBuf(e) {
- return (Buffer.from(e.split(' ')[1], 'base64'));
-}
-
-function readDNSSECRSAPrivateKey(elements) {
- var rsaParams = {};
- elements.forEach(function (element) {
- if (element.split(' ')[0] === 'Modulus:')
- rsaParams['n'] = elementToBuf(element);
- else if (element.split(' ')[0] === 'PublicExponent:')
- rsaParams['e'] = elementToBuf(element);
- else if (element.split(' ')[0] === 'PrivateExponent:')
- rsaParams['d'] = elementToBuf(element);
- else if (element.split(' ')[0] === 'Prime1:')
- rsaParams['p'] = elementToBuf(element);
- else if (element.split(' ')[0] === 'Prime2:')
- rsaParams['q'] = elementToBuf(element);
- else if (element.split(' ')[0] === 'Exponent1:')
- rsaParams['dmodp'] = elementToBuf(element);
- else if (element.split(' ')[0] === 'Exponent2:')
- rsaParams['dmodq'] = elementToBuf(element);
- else if (element.split(' ')[0] === 'Coefficient:')
- rsaParams['iqmp'] = elementToBuf(element);
- });
- // now, make the key
- var key = {
- type: 'rsa',
- parts: [
- { name: 'e', data: utils.mpNormalize(rsaParams['e'])},
- { name: 'n', data: utils.mpNormalize(rsaParams['n'])},
- { name: 'd', data: utils.mpNormalize(rsaParams['d'])},
- { name: 'p', data: utils.mpNormalize(rsaParams['p'])},
- { name: 'q', data: utils.mpNormalize(rsaParams['q'])},
- { name: 'dmodp',
- data: utils.mpNormalize(rsaParams['dmodp'])},
- { name: 'dmodq',
- data: utils.mpNormalize(rsaParams['dmodq'])},
- { name: 'iqmp',
- data: utils.mpNormalize(rsaParams['iqmp'])}
- ]
- };
- return (new PrivateKey(key));
-}
-
-function readDNSSECPrivateKey(alg, elements) {
- if (supportedAlgosById[alg].match(/^RSA-/)) {
- return (readDNSSECRSAPrivateKey(elements));
- }
- if (supportedAlgosById[alg] === 'ECDSA-P384-SHA384' ||
- supportedAlgosById[alg] === 'ECDSA-P256-SHA256') {
- var d = Buffer.from(elements[0].split(' ')[1], 'base64');
- var curve = 'nistp384';
- var size = 384;
- if (supportedAlgosById[alg] === 'ECDSA-P256-SHA256') {
- curve = 'nistp256';
- size = 256;
- }
- // DNSSEC generates the public-key on the fly (go calculate it)
- var publicKey = utils.publicFromPrivateECDSA(curve, d);
- var Q = publicKey.part['Q'].data;
- var ecdsaKey = {
- type: 'ecdsa',
- curve: curve,
- size: size,
- parts: [
- {name: 'curve', data: Buffer.from(curve) },
- {name: 'd', data: d },
- {name: 'Q', data: Q }
- ]
- };
- return (new PrivateKey(ecdsaKey));
- }
- throw (new Error('Unsupported algorithm: ' + supportedAlgosById[alg]));
-}
-
-function dnssecTimestamp(date) {
- var year = date.getFullYear() + ''; //stringify
- var month = (date.getMonth() + 1);
- var timestampStr = year + month + date.getUTCDate();
- timestampStr += '' + date.getUTCHours() + date.getUTCMinutes();
- timestampStr += date.getUTCSeconds();
- return (timestampStr);
-}
-
-function rsaAlgFromOptions(opts) {
- if (!opts || !opts.hashAlgo || opts.hashAlgo === 'sha1')
- return ('5 (RSASHA1)');
- else if (opts.hashAlgo === 'sha256')
- return ('8 (RSASHA256)');
- else if (opts.hashAlgo === 'sha512')
- return ('10 (RSASHA512)');
- else
- throw (new Error('Unknown or unsupported hash: ' +
- opts.hashAlgo));
-}
-
-function writeRSA(key, options) {
- // if we're missing parts, add them.
- if (!key.part.dmodp || !key.part.dmodq) {
- utils.addRSAMissing(key);
- }
-
- var out = '';
- out += 'Private-key-format: v1.3\n';
- out += 'Algorithm: ' + rsaAlgFromOptions(options) + '\n';
- var n = utils.mpDenormalize(key.part['n'].data);
- out += 'Modulus: ' + n.toString('base64') + '\n';
- var e = utils.mpDenormalize(key.part['e'].data);
- out += 'PublicExponent: ' + e.toString('base64') + '\n';
- var d = utils.mpDenormalize(key.part['d'].data);
- out += 'PrivateExponent: ' + d.toString('base64') + '\n';
- var p = utils.mpDenormalize(key.part['p'].data);
- out += 'Prime1: ' + p.toString('base64') + '\n';
- var q = utils.mpDenormalize(key.part['q'].data);
- out += 'Prime2: ' + q.toString('base64') + '\n';
- var dmodp = utils.mpDenormalize(key.part['dmodp'].data);
- out += 'Exponent1: ' + dmodp.toString('base64') + '\n';
- var dmodq = utils.mpDenormalize(key.part['dmodq'].data);
- out += 'Exponent2: ' + dmodq.toString('base64') + '\n';
- var iqmp = utils.mpDenormalize(key.part['iqmp'].data);
- out += 'Coefficient: ' + iqmp.toString('base64') + '\n';
- // Assume that we're valid as-of now
- var timestamp = new Date();
- out += 'Created: ' + dnssecTimestamp(timestamp) + '\n';
- out += 'Publish: ' + dnssecTimestamp(timestamp) + '\n';
- out += 'Activate: ' + dnssecTimestamp(timestamp) + '\n';
- return (Buffer.from(out, 'ascii'));
-}
-
-function writeECDSA(key, options) {
- var out = '';
- out += 'Private-key-format: v1.3\n';
-
- if (key.curve === 'nistp256') {
- out += 'Algorithm: 13 (ECDSAP256SHA256)\n';
- } else if (key.curve === 'nistp384') {
- out += 'Algorithm: 14 (ECDSAP384SHA384)\n';
- } else {
- throw (new Error('Unsupported curve'));
- }
- var base64Key = key.part['d'].data.toString('base64');
- out += 'PrivateKey: ' + base64Key + '\n';
-
- // Assume that we're valid as-of now
- var timestamp = new Date();
- out += 'Created: ' + dnssecTimestamp(timestamp) + '\n';
- out += 'Publish: ' + dnssecTimestamp(timestamp) + '\n';
- out += 'Activate: ' + dnssecTimestamp(timestamp) + '\n';
-
- return (Buffer.from(out, 'ascii'));
-}
-
-function write(key, options) {
- if (PrivateKey.isPrivateKey(key)) {
- if (key.type === 'rsa') {
- return (writeRSA(key, options));
- } else if (key.type === 'ecdsa') {
- return (writeECDSA(key, options));
- } else {
- throw (new Error('Unsupported algorithm: ' + key.type));
- }
- } else if (Key.isKey(key)) {
- /*
- * RFC3110 requires a keyname, and a keytype, which we
- * don't really have a mechanism for specifying such
- * additional metadata.
- */
- throw (new Error('Format "dnssec" only supports ' +
- 'writing private keys'));
- } else {
- throw (new Error('key is not a Key or PrivateKey'));
- }
-}
diff --git a/deps/npm/node_modules/sshpk/lib/formats/openssh-cert.js b/deps/npm/node_modules/sshpk/lib/formats/openssh-cert.js
deleted file mode 100644
index 766f3d39cb31da..00000000000000
--- a/deps/npm/node_modules/sshpk/lib/formats/openssh-cert.js
+++ /dev/null
@@ -1,352 +0,0 @@
-// Copyright 2017 Joyent, Inc.
-
-module.exports = {
- read: read,
- verify: verify,
- sign: sign,
- signAsync: signAsync,
- write: write,
-
- /* Internal private API */
- fromBuffer: fromBuffer,
- toBuffer: toBuffer
-};
-
-var assert = require('assert-plus');
-var SSHBuffer = require('../ssh-buffer');
-var crypto = require('crypto');
-var Buffer = require('safer-buffer').Buffer;
-var algs = require('../algs');
-var Key = require('../key');
-var PrivateKey = require('../private-key');
-var Identity = require('../identity');
-var rfc4253 = require('./rfc4253');
-var Signature = require('../signature');
-var utils = require('../utils');
-var Certificate = require('../certificate');
-
-function verify(cert, key) {
- /*
- * We always give an issuerKey, so if our verify() is being called then
- * there was no signature. Return false.
- */
- return (false);
-}
-
-var TYPES = {
- 'user': 1,
- 'host': 2
-};
-Object.keys(TYPES).forEach(function (k) { TYPES[TYPES[k]] = k; });
-
-var ECDSA_ALGO = /^ecdsa-sha2-([^@-]+)-cert-v01@openssh.com$/;
-
-function read(buf, options) {
- if (Buffer.isBuffer(buf))
- buf = buf.toString('ascii');
- var parts = buf.trim().split(/[ \t\n]+/g);
- if (parts.length < 2 || parts.length > 3)
- throw (new Error('Not a valid SSH certificate line'));
-
- var algo = parts[0];
- var data = parts[1];
-
- data = Buffer.from(data, 'base64');
- return (fromBuffer(data, algo));
-}
-
-function fromBuffer(data, algo, partial) {
- var sshbuf = new SSHBuffer({ buffer: data });
- var innerAlgo = sshbuf.readString();
- if (algo !== undefined && innerAlgo !== algo)
- throw (new Error('SSH certificate algorithm mismatch'));
- if (algo === undefined)
- algo = innerAlgo;
-
- var cert = {};
- cert.signatures = {};
- cert.signatures.openssh = {};
-
- cert.signatures.openssh.nonce = sshbuf.readBuffer();
-
- var key = {};
- var parts = (key.parts = []);
- key.type = getAlg(algo);
-
- var partCount = algs.info[key.type].parts.length;
- while (parts.length < partCount)
- parts.push(sshbuf.readPart());
- assert.ok(parts.length >= 1, 'key must have at least one part');
-
- var algInfo = algs.info[key.type];
- if (key.type === 'ecdsa') {
- var res = ECDSA_ALGO.exec(algo);
- assert.ok(res !== null);
- assert.strictEqual(res[1], parts[0].data.toString());
- }
-
- for (var i = 0; i < algInfo.parts.length; ++i) {
- parts[i].name = algInfo.parts[i];
- if (parts[i].name !== 'curve' &&
- algInfo.normalize !== false) {
- var p = parts[i];
- p.data = utils.mpNormalize(p.data);
- }
- }
-
- cert.subjectKey = new Key(key);
-
- cert.serial = sshbuf.readInt64();
-
- var type = TYPES[sshbuf.readInt()];
- assert.string(type, 'valid cert type');
-
- cert.signatures.openssh.keyId = sshbuf.readString();
-
- var principals = [];
- var pbuf = sshbuf.readBuffer();
- var psshbuf = new SSHBuffer({ buffer: pbuf });
- while (!psshbuf.atEnd())
- principals.push(psshbuf.readString());
- if (principals.length === 0)
- principals = ['*'];
-
- cert.subjects = principals.map(function (pr) {
- if (type === 'user')
- return (Identity.forUser(pr));
- else if (type === 'host')
- return (Identity.forHost(pr));
- throw (new Error('Unknown identity type ' + type));
- });
-
- cert.validFrom = int64ToDate(sshbuf.readInt64());
- cert.validUntil = int64ToDate(sshbuf.readInt64());
-
- var exts = [];
- var extbuf = new SSHBuffer({ buffer: sshbuf.readBuffer() });
- var ext;
- while (!extbuf.atEnd()) {
- ext = { critical: true };
- ext.name = extbuf.readString();
- ext.data = extbuf.readBuffer();
- exts.push(ext);
- }
- extbuf = new SSHBuffer({ buffer: sshbuf.readBuffer() });
- while (!extbuf.atEnd()) {
- ext = { critical: false };
- ext.name = extbuf.readString();
- ext.data = extbuf.readBuffer();
- exts.push(ext);
- }
- cert.signatures.openssh.exts = exts;
-
- /* reserved */
- sshbuf.readBuffer();
-
- var signingKeyBuf = sshbuf.readBuffer();
- cert.issuerKey = rfc4253.read(signingKeyBuf);
-
- /*
- * OpenSSH certs don't give the identity of the issuer, just their
- * public key. So, we use an Identity that matches anything. The
- * isSignedBy() function will later tell you if the key matches.
- */
- cert.issuer = Identity.forHost('**');
-
- var sigBuf = sshbuf.readBuffer();
- cert.signatures.openssh.signature =
- Signature.parse(sigBuf, cert.issuerKey.type, 'ssh');
-
- if (partial !== undefined) {
- partial.remainder = sshbuf.remainder();
- partial.consumed = sshbuf._offset;
- }
-
- return (new Certificate(cert));
-}
-
-function int64ToDate(buf) {
- var i = buf.readUInt32BE(0) * 4294967296;
- i += buf.readUInt32BE(4);
- var d = new Date();
- d.setTime(i * 1000);
- d.sourceInt64 = buf;
- return (d);
-}
-
-function dateToInt64(date) {
- if (date.sourceInt64 !== undefined)
- return (date.sourceInt64);
- var i = Math.round(date.getTime() / 1000);
- var upper = Math.floor(i / 4294967296);
- var lower = Math.floor(i % 4294967296);
- var buf = Buffer.alloc(8);
- buf.writeUInt32BE(upper, 0);
- buf.writeUInt32BE(lower, 4);
- return (buf);
-}
-
-function sign(cert, key) {
- if (cert.signatures.openssh === undefined)
- cert.signatures.openssh = {};
- try {
- var blob = toBuffer(cert, true);
- } catch (e) {
- delete (cert.signatures.openssh);
- return (false);
- }
- var sig = cert.signatures.openssh;
- var hashAlgo = undefined;
- if (key.type === 'rsa' || key.type === 'dsa')
- hashAlgo = 'sha1';
- var signer = key.createSign(hashAlgo);
- signer.write(blob);
- sig.signature = signer.sign();
- return (true);
-}
-
-function signAsync(cert, signer, done) {
- if (cert.signatures.openssh === undefined)
- cert.signatures.openssh = {};
- try {
- var blob = toBuffer(cert, true);
- } catch (e) {
- delete (cert.signatures.openssh);
- done(e);
- return;
- }
- var sig = cert.signatures.openssh;
-
- signer(blob, function (err, signature) {
- if (err) {
- done(err);
- return;
- }
- try {
- /*
- * This will throw if the signature isn't of a
- * type/algo that can be used for SSH.
- */
- signature.toBuffer('ssh');
- } catch (e) {
- done(e);
- return;
- }
- sig.signature = signature;
- done();
- });
-}
-
-function write(cert, options) {
- if (options === undefined)
- options = {};
-
- var blob = toBuffer(cert);
- var out = getCertType(cert.subjectKey) + ' ' + blob.toString('base64');
- if (options.comment)
- out = out + ' ' + options.comment;
- return (out);
-}
-
-
-function toBuffer(cert, noSig) {
- assert.object(cert.signatures.openssh, 'signature for openssh format');
- var sig = cert.signatures.openssh;
-
- if (sig.nonce === undefined)
- sig.nonce = crypto.randomBytes(16);
- var buf = new SSHBuffer({});
- buf.writeString(getCertType(cert.subjectKey));
- buf.writeBuffer(sig.nonce);
-
- var key = cert.subjectKey;
- var algInfo = algs.info[key.type];
- algInfo.parts.forEach(function (part) {
- buf.writePart(key.part[part]);
- });
-
- buf.writeInt64(cert.serial);
-
- var type = cert.subjects[0].type;
- assert.notStrictEqual(type, 'unknown');
- cert.subjects.forEach(function (id) {
- assert.strictEqual(id.type, type);
- });
- type = TYPES[type];
- buf.writeInt(type);
-
- if (sig.keyId === undefined) {
- sig.keyId = cert.subjects[0].type + '_' +
- (cert.subjects[0].uid || cert.subjects[0].hostname);
- }
- buf.writeString(sig.keyId);
-
- var sub = new SSHBuffer({});
- cert.subjects.forEach(function (id) {
- if (type === TYPES.host)
- sub.writeString(id.hostname);
- else if (type === TYPES.user)
- sub.writeString(id.uid);
- });
- buf.writeBuffer(sub.toBuffer());
-
- buf.writeInt64(dateToInt64(cert.validFrom));
- buf.writeInt64(dateToInt64(cert.validUntil));
-
- var exts = sig.exts;
- if (exts === undefined)
- exts = [];
-
- var extbuf = new SSHBuffer({});
- exts.forEach(function (ext) {
- if (ext.critical !== true)
- return;
- extbuf.writeString(ext.name);
- extbuf.writeBuffer(ext.data);
- });
- buf.writeBuffer(extbuf.toBuffer());
-
- extbuf = new SSHBuffer({});
- exts.forEach(function (ext) {
- if (ext.critical === true)
- return;
- extbuf.writeString(ext.name);
- extbuf.writeBuffer(ext.data);
- });
- buf.writeBuffer(extbuf.toBuffer());
-
- /* reserved */
- buf.writeBuffer(Buffer.alloc(0));
-
- sub = rfc4253.write(cert.issuerKey);
- buf.writeBuffer(sub);
-
- if (!noSig)
- buf.writeBuffer(sig.signature.toBuffer('ssh'));
-
- return (buf.toBuffer());
-}
-
-function getAlg(certType) {
- if (certType === 'ssh-rsa-cert-v01@openssh.com')
- return ('rsa');
- if (certType === 'ssh-dss-cert-v01@openssh.com')
- return ('dsa');
- if (certType.match(ECDSA_ALGO))
- return ('ecdsa');
- if (certType === 'ssh-ed25519-cert-v01@openssh.com')
- return ('ed25519');
- throw (new Error('Unsupported cert type ' + certType));
-}
-
-function getCertType(key) {
- if (key.type === 'rsa')
- return ('ssh-rsa-cert-v01@openssh.com');
- if (key.type === 'dsa')
- return ('ssh-dss-cert-v01@openssh.com');
- if (key.type === 'ecdsa')
- return ('ecdsa-sha2-' + key.curve + '-cert-v01@openssh.com');
- if (key.type === 'ed25519')
- return ('ssh-ed25519-cert-v01@openssh.com');
- throw (new Error('Unsupported key type ' + key.type));
-}
diff --git a/deps/npm/node_modules/sshpk/lib/formats/pem.js b/deps/npm/node_modules/sshpk/lib/formats/pem.js
deleted file mode 100644
index bbe78fcb56f360..00000000000000
--- a/deps/npm/node_modules/sshpk/lib/formats/pem.js
+++ /dev/null
@@ -1,290 +0,0 @@
-// Copyright 2018 Joyent, Inc.
-
-module.exports = {
- read: read,
- write: write
-};
-
-var assert = require('assert-plus');
-var asn1 = require('asn1');
-var crypto = require('crypto');
-var Buffer = require('safer-buffer').Buffer;
-var algs = require('../algs');
-var utils = require('../utils');
-var Key = require('../key');
-var PrivateKey = require('../private-key');
-
-var pkcs1 = require('./pkcs1');
-var pkcs8 = require('./pkcs8');
-var sshpriv = require('./ssh-private');
-var rfc4253 = require('./rfc4253');
-
-var errors = require('../errors');
-
-var OID_PBES2 = '1.2.840.113549.1.5.13';
-var OID_PBKDF2 = '1.2.840.113549.1.5.12';
-
-var OID_TO_CIPHER = {
- '1.2.840.113549.3.7': '3des-cbc',
- '2.16.840.1.101.3.4.1.2': 'aes128-cbc',
- '2.16.840.1.101.3.4.1.42': 'aes256-cbc'
-};
-var CIPHER_TO_OID = {};
-Object.keys(OID_TO_CIPHER).forEach(function (k) {
- CIPHER_TO_OID[OID_TO_CIPHER[k]] = k;
-});
-
-var OID_TO_HASH = {
- '1.2.840.113549.2.7': 'sha1',
- '1.2.840.113549.2.9': 'sha256',
- '1.2.840.113549.2.11': 'sha512'
-};
-var HASH_TO_OID = {};
-Object.keys(OID_TO_HASH).forEach(function (k) {
- HASH_TO_OID[OID_TO_HASH[k]] = k;
-});
-
-/*
- * For reading we support both PKCS#1 and PKCS#8. If we find a private key,
- * we just take the public component of it and use that.
- */
-function read(buf, options, forceType) {
- var input = buf;
- if (typeof (buf) !== 'string') {
- assert.buffer(buf, 'buf');
- buf = buf.toString('ascii');
- }
-
- var lines = buf.trim().split(/[\r\n]+/g);
-
- var m;
- var si = -1;
- while (!m && si < lines.length) {
- m = lines[++si].match(/*JSSTYLED*/
- /[-]+[ ]*BEGIN ([A-Z0-9][A-Za-z0-9]+ )?(PUBLIC|PRIVATE) KEY[ ]*[-]+/);
- }
- assert.ok(m, 'invalid PEM header');
-
- var m2;
- var ei = lines.length;
- while (!m2 && ei > 0) {
- m2 = lines[--ei].match(/*JSSTYLED*/
- /[-]+[ ]*END ([A-Z0-9][A-Za-z0-9]+ )?(PUBLIC|PRIVATE) KEY[ ]*[-]+/);
- }
- assert.ok(m2, 'invalid PEM footer');
-
- /* Begin and end banners must match key type */
- assert.equal(m[2], m2[2]);
- var type = m[2].toLowerCase();
-
- var alg;
- if (m[1]) {
- /* They also must match algorithms, if given */
- assert.equal(m[1], m2[1], 'PEM header and footer mismatch');
- alg = m[1].trim();
- }
-
- lines = lines.slice(si, ei + 1);
-
- var headers = {};
- while (true) {
- lines = lines.slice(1);
- m = lines[0].match(/*JSSTYLED*/
- /^([A-Za-z0-9-]+): (.+)$/);
- if (!m)
- break;
- headers[m[1].toLowerCase()] = m[2];
- }
-
- /* Chop off the first and last lines */
- lines = lines.slice(0, -1).join('');
- buf = Buffer.from(lines, 'base64');
-
- var cipher, key, iv;
- if (headers['proc-type']) {
- var parts = headers['proc-type'].split(',');
- if (parts[0] === '4' && parts[1] === 'ENCRYPTED') {
- if (typeof (options.passphrase) === 'string') {
- options.passphrase = Buffer.from(
- options.passphrase, 'utf-8');
- }
- if (!Buffer.isBuffer(options.passphrase)) {
- throw (new errors.KeyEncryptedError(
- options.filename, 'PEM'));
- } else {
- parts = headers['dek-info'].split(',');
- assert.ok(parts.length === 2);
- cipher = parts[0].toLowerCase();
- iv = Buffer.from(parts[1], 'hex');
- key = utils.opensslKeyDeriv(cipher, iv,
- options.passphrase, 1).key;
- }
- }
- }
-
- if (alg && alg.toLowerCase() === 'encrypted') {
- var eder = new asn1.BerReader(buf);
- var pbesEnd;
- eder.readSequence();
-
- eder.readSequence();
- pbesEnd = eder.offset + eder.length;
-
- var method = eder.readOID();
- if (method !== OID_PBES2) {
- throw (new Error('Unsupported PEM/PKCS8 encryption ' +
- 'scheme: ' + method));
- }
-
- eder.readSequence(); /* PBES2-params */
-
- eder.readSequence(); /* keyDerivationFunc */
- var kdfEnd = eder.offset + eder.length;
- var kdfOid = eder.readOID();
- if (kdfOid !== OID_PBKDF2)
- throw (new Error('Unsupported PBES2 KDF: ' + kdfOid));
- eder.readSequence();
- var salt = eder.readString(asn1.Ber.OctetString, true);
- var iterations = eder.readInt();
- var hashAlg = 'sha1';
- if (eder.offset < kdfEnd) {
- eder.readSequence();
- var hashAlgOid = eder.readOID();
- hashAlg = OID_TO_HASH[hashAlgOid];
- if (hashAlg === undefined) {
- throw (new Error('Unsupported PBKDF2 hash: ' +
- hashAlgOid));
- }
- }
- eder._offset = kdfEnd;
-
- eder.readSequence(); /* encryptionScheme */
- var cipherOid = eder.readOID();
- cipher = OID_TO_CIPHER[cipherOid];
- if (cipher === undefined) {
- throw (new Error('Unsupported PBES2 cipher: ' +
- cipherOid));
- }
- iv = eder.readString(asn1.Ber.OctetString, true);
-
- eder._offset = pbesEnd;
- buf = eder.readString(asn1.Ber.OctetString, true);
-
- if (typeof (options.passphrase) === 'string') {
- options.passphrase = Buffer.from(
- options.passphrase, 'utf-8');
- }
- if (!Buffer.isBuffer(options.passphrase)) {
- throw (new errors.KeyEncryptedError(
- options.filename, 'PEM'));
- }
-
- var cinfo = utils.opensshCipherInfo(cipher);
-
- cipher = cinfo.opensslName;
- key = utils.pbkdf2(hashAlg, salt, iterations, cinfo.keySize,
- options.passphrase);
- alg = undefined;
- }
-
- if (cipher && key && iv) {
- var cipherStream = crypto.createDecipheriv(cipher, key, iv);
- var chunk, chunks = [];
- cipherStream.once('error', function (e) {
- if (e.toString().indexOf('bad decrypt') !== -1) {
- throw (new Error('Incorrect passphrase ' +
- 'supplied, could not decrypt key'));
- }
- throw (e);
- });
- cipherStream.write(buf);
- cipherStream.end();
- while ((chunk = cipherStream.read()) !== null)
- chunks.push(chunk);
- buf = Buffer.concat(chunks);
- }
-
- /* The new OpenSSH internal format abuses PEM headers */
- if (alg && alg.toLowerCase() === 'openssh')
- return (sshpriv.readSSHPrivate(type, buf, options));
- if (alg && alg.toLowerCase() === 'ssh2')
- return (rfc4253.readType(type, buf, options));
-
- var der = new asn1.BerReader(buf);
- der.originalInput = input;
-
- /*
- * All of the PEM file types start with a sequence tag, so chop it
- * off here
- */
- der.readSequence();
-
- /* PKCS#1 type keys name an algorithm in the banner explicitly */
- if (alg) {
- if (forceType)
- assert.strictEqual(forceType, 'pkcs1');
- return (pkcs1.readPkcs1(alg, type, der));
- } else {
- if (forceType)
- assert.strictEqual(forceType, 'pkcs8');
- return (pkcs8.readPkcs8(alg, type, der));
- }
-}
-
-function write(key, options, type) {
- assert.object(key);
-
- var alg = {
- 'ecdsa': 'EC',
- 'rsa': 'RSA',
- 'dsa': 'DSA',
- 'ed25519': 'EdDSA'
- }[key.type];
- var header;
-
- var der = new asn1.BerWriter();
-
- if (PrivateKey.isPrivateKey(key)) {
- if (type && type === 'pkcs8') {
- header = 'PRIVATE KEY';
- pkcs8.writePkcs8(der, key);
- } else {
- if (type)
- assert.strictEqual(type, 'pkcs1');
- header = alg + ' PRIVATE KEY';
- pkcs1.writePkcs1(der, key);
- }
-
- } else if (Key.isKey(key)) {
- if (type && type === 'pkcs1') {
- header = alg + ' PUBLIC KEY';
- pkcs1.writePkcs1(der, key);
- } else {
- if (type)
- assert.strictEqual(type, 'pkcs8');
- header = 'PUBLIC KEY';
- pkcs8.writePkcs8(der, key);
- }
-
- } else {
- throw (new Error('key is not a Key or PrivateKey'));
- }
-
- var tmp = der.buffer.toString('base64');
- var len = tmp.length + (tmp.length / 64) +
- 18 + 16 + header.length*2 + 10;
- var buf = Buffer.alloc(len);
- var o = 0;
- o += buf.write('-----BEGIN ' + header + '-----\n', o);
- for (var i = 0; i < tmp.length; ) {
- var limit = i + 64;
- if (limit > tmp.length)
- limit = tmp.length;
- o += buf.write(tmp.slice(i, limit), o);
- buf[o++] = 10;
- i = limit;
- }
- o += buf.write('-----END ' + header + '-----\n', o);
-
- return (buf.slice(0, o));
-}
diff --git a/deps/npm/node_modules/sshpk/lib/formats/pkcs1.js b/deps/npm/node_modules/sshpk/lib/formats/pkcs1.js
deleted file mode 100644
index bc485500252478..00000000000000
--- a/deps/npm/node_modules/sshpk/lib/formats/pkcs1.js
+++ /dev/null
@@ -1,373 +0,0 @@
-// Copyright 2015 Joyent, Inc.
-
-module.exports = {
- read: read,
- readPkcs1: readPkcs1,
- write: write,
- writePkcs1: writePkcs1
-};
-
-var assert = require('assert-plus');
-var asn1 = require('asn1');
-var Buffer = require('safer-buffer').Buffer;
-var algs = require('../algs');
-var utils = require('../utils');
-
-var Key = require('../key');
-var PrivateKey = require('../private-key');
-var pem = require('./pem');
-
-var pkcs8 = require('./pkcs8');
-var readECDSACurve = pkcs8.readECDSACurve;
-
-function read(buf, options) {
- return (pem.read(buf, options, 'pkcs1'));
-}
-
-function write(key, options) {
- return (pem.write(key, options, 'pkcs1'));
-}
-
-/* Helper to read in a single mpint */
-function readMPInt(der, nm) {
- assert.strictEqual(der.peek(), asn1.Ber.Integer,
- nm + ' is not an Integer');
- return (utils.mpNormalize(der.readString(asn1.Ber.Integer, true)));
-}
-
-function readPkcs1(alg, type, der) {
- switch (alg) {
- case 'RSA':
- if (type === 'public')
- return (readPkcs1RSAPublic(der));
- else if (type === 'private')
- return (readPkcs1RSAPrivate(der));
- throw (new Error('Unknown key type: ' + type));
- case 'DSA':
- if (type === 'public')
- return (readPkcs1DSAPublic(der));
- else if (type === 'private')
- return (readPkcs1DSAPrivate(der));
- throw (new Error('Unknown key type: ' + type));
- case 'EC':
- case 'ECDSA':
- if (type === 'private')
- return (readPkcs1ECDSAPrivate(der));
- else if (type === 'public')
- return (readPkcs1ECDSAPublic(der));
- throw (new Error('Unknown key type: ' + type));
- case 'EDDSA':
- case 'EdDSA':
- if (type === 'private')
- return (readPkcs1EdDSAPrivate(der));
- throw (new Error(type + ' keys not supported with EdDSA'));
- default:
- throw (new Error('Unknown key algo: ' + alg));
- }
-}
-
-function readPkcs1RSAPublic(der) {
- // modulus and exponent
- var n = readMPInt(der, 'modulus');
- var e = readMPInt(der, 'exponent');
-
- // now, make the key
- var key = {
- type: 'rsa',
- parts: [
- { name: 'e', data: e },
- { name: 'n', data: n }
- ]
- };
-
- return (new Key(key));
-}
-
-function readPkcs1RSAPrivate(der) {
- var version = readMPInt(der, 'version');
- assert.strictEqual(version[0], 0);
-
- // modulus then public exponent
- var n = readMPInt(der, 'modulus');
- var e = readMPInt(der, 'public exponent');
- var d = readMPInt(der, 'private exponent');
- var p = readMPInt(der, 'prime1');
- var q = readMPInt(der, 'prime2');
- var dmodp = readMPInt(der, 'exponent1');
- var dmodq = readMPInt(der, 'exponent2');
- var iqmp = readMPInt(der, 'iqmp');
-
- // now, make the key
- var key = {
- type: 'rsa',
- parts: [
- { name: 'n', data: n },
- { name: 'e', data: e },
- { name: 'd', data: d },
- { name: 'iqmp', data: iqmp },
- { name: 'p', data: p },
- { name: 'q', data: q },
- { name: 'dmodp', data: dmodp },
- { name: 'dmodq', data: dmodq }
- ]
- };
-
- return (new PrivateKey(key));
-}
-
-function readPkcs1DSAPrivate(der) {
- var version = readMPInt(der, 'version');
- assert.strictEqual(version.readUInt8(0), 0);
-
- var p = readMPInt(der, 'p');
- var q = readMPInt(der, 'q');
- var g = readMPInt(der, 'g');
- var y = readMPInt(der, 'y');
- var x = readMPInt(der, 'x');
-
- // now, make the key
- var key = {
- type: 'dsa',
- parts: [
- { name: 'p', data: p },
- { name: 'q', data: q },
- { name: 'g', data: g },
- { name: 'y', data: y },
- { name: 'x', data: x }
- ]
- };
-
- return (new PrivateKey(key));
-}
-
-function readPkcs1EdDSAPrivate(der) {
- var version = readMPInt(der, 'version');
- assert.strictEqual(version.readUInt8(0), 1);
-
- // private key
- var k = der.readString(asn1.Ber.OctetString, true);
-
- der.readSequence(0xa0);
- var oid = der.readOID();
- assert.strictEqual(oid, '1.3.101.112', 'the ed25519 curve identifier');
-
- der.readSequence(0xa1);
- var A = utils.readBitString(der);
-
- var key = {
- type: 'ed25519',
- parts: [
- { name: 'A', data: utils.zeroPadToLength(A, 32) },
- { name: 'k', data: k }
- ]
- };
-
- return (new PrivateKey(key));
-}
-
-function readPkcs1DSAPublic(der) {
- var y = readMPInt(der, 'y');
- var p = readMPInt(der, 'p');
- var q = readMPInt(der, 'q');
- var g = readMPInt(der, 'g');
-
- var key = {
- type: 'dsa',
- parts: [
- { name: 'y', data: y },
- { name: 'p', data: p },
- { name: 'q', data: q },
- { name: 'g', data: g }
- ]
- };
-
- return (new Key(key));
-}
-
-function readPkcs1ECDSAPublic(der) {
- der.readSequence();
-
- var oid = der.readOID();
- assert.strictEqual(oid, '1.2.840.10045.2.1', 'must be ecPublicKey');
-
- var curveOid = der.readOID();
-
- var curve;
- var curves = Object.keys(algs.curves);
- for (var j = 0; j < curves.length; ++j) {
- var c = curves[j];
- var cd = algs.curves[c];
- if (cd.pkcs8oid === curveOid) {
- curve = c;
- break;
- }
- }
- assert.string(curve, 'a known ECDSA named curve');
-
- var Q = der.readString(asn1.Ber.BitString, true);
- Q = utils.ecNormalize(Q);
-
- var key = {
- type: 'ecdsa',
- parts: [
- { name: 'curve', data: Buffer.from(curve) },
- { name: 'Q', data: Q }
- ]
- };
-
- return (new Key(key));
-}
-
-function readPkcs1ECDSAPrivate(der) {
- var version = readMPInt(der, 'version');
- assert.strictEqual(version.readUInt8(0), 1);
-
- // private key
- var d = der.readString(asn1.Ber.OctetString, true);
-
- der.readSequence(0xa0);
- var curve = readECDSACurve(der);
- assert.string(curve, 'a known elliptic curve');
-
- der.readSequence(0xa1);
- var Q = der.readString(asn1.Ber.BitString, true);
- Q = utils.ecNormalize(Q);
-
- var key = {
- type: 'ecdsa',
- parts: [
- { name: 'curve', data: Buffer.from(curve) },
- { name: 'Q', data: Q },
- { name: 'd', data: d }
- ]
- };
-
- return (new PrivateKey(key));
-}
-
-function writePkcs1(der, key) {
- der.startSequence();
-
- switch (key.type) {
- case 'rsa':
- if (PrivateKey.isPrivateKey(key))
- writePkcs1RSAPrivate(der, key);
- else
- writePkcs1RSAPublic(der, key);
- break;
- case 'dsa':
- if (PrivateKey.isPrivateKey(key))
- writePkcs1DSAPrivate(der, key);
- else
- writePkcs1DSAPublic(der, key);
- break;
- case 'ecdsa':
- if (PrivateKey.isPrivateKey(key))
- writePkcs1ECDSAPrivate(der, key);
- else
- writePkcs1ECDSAPublic(der, key);
- break;
- case 'ed25519':
- if (PrivateKey.isPrivateKey(key))
- writePkcs1EdDSAPrivate(der, key);
- else
- writePkcs1EdDSAPublic(der, key);
- break;
- default:
- throw (new Error('Unknown key algo: ' + key.type));
- }
-
- der.endSequence();
-}
-
-function writePkcs1RSAPublic(der, key) {
- der.writeBuffer(key.part.n.data, asn1.Ber.Integer);
- der.writeBuffer(key.part.e.data, asn1.Ber.Integer);
-}
-
-function writePkcs1RSAPrivate(der, key) {
- var ver = Buffer.from([0]);
- der.writeBuffer(ver, asn1.Ber.Integer);
-
- der.writeBuffer(key.part.n.data, asn1.Ber.Integer);
- der.writeBuffer(key.part.e.data, asn1.Ber.Integer);
- der.writeBuffer(key.part.d.data, asn1.Ber.Integer);
- der.writeBuffer(key.part.p.data, asn1.Ber.Integer);
- der.writeBuffer(key.part.q.data, asn1.Ber.Integer);
- if (!key.part.dmodp || !key.part.dmodq)
- utils.addRSAMissing(key);
- der.writeBuffer(key.part.dmodp.data, asn1.Ber.Integer);
- der.writeBuffer(key.part.dmodq.data, asn1.Ber.Integer);
- der.writeBuffer(key.part.iqmp.data, asn1.Ber.Integer);
-}
-
-function writePkcs1DSAPrivate(der, key) {
- var ver = Buffer.from([0]);
- der.writeBuffer(ver, asn1.Ber.Integer);
-
- der.writeBuffer(key.part.p.data, asn1.Ber.Integer);
- der.writeBuffer(key.part.q.data, asn1.Ber.Integer);
- der.writeBuffer(key.part.g.data, asn1.Ber.Integer);
- der.writeBuffer(key.part.y.data, asn1.Ber.Integer);
- der.writeBuffer(key.part.x.data, asn1.Ber.Integer);
-}
-
-function writePkcs1DSAPublic(der, key) {
- der.writeBuffer(key.part.y.data, asn1.Ber.Integer);
- der.writeBuffer(key.part.p.data, asn1.Ber.Integer);
- der.writeBuffer(key.part.q.data, asn1.Ber.Integer);
- der.writeBuffer(key.part.g.data, asn1.Ber.Integer);
-}
-
-function writePkcs1ECDSAPublic(der, key) {
- der.startSequence();
-
- der.writeOID('1.2.840.10045.2.1'); /* ecPublicKey */
- var curve = key.part.curve.data.toString();
- var curveOid = algs.curves[curve].pkcs8oid;
- assert.string(curveOid, 'a known ECDSA named curve');
- der.writeOID(curveOid);
-
- der.endSequence();
-
- var Q = utils.ecNormalize(key.part.Q.data, true);
- der.writeBuffer(Q, asn1.Ber.BitString);
-}
-
-function writePkcs1ECDSAPrivate(der, key) {
- var ver = Buffer.from([1]);
- der.writeBuffer(ver, asn1.Ber.Integer);
-
- der.writeBuffer(key.part.d.data, asn1.Ber.OctetString);
-
- der.startSequence(0xa0);
- var curve = key.part.curve.data.toString();
- var curveOid = algs.curves[curve].pkcs8oid;
- assert.string(curveOid, 'a known ECDSA named curve');
- der.writeOID(curveOid);
- der.endSequence();
-
- der.startSequence(0xa1);
- var Q = utils.ecNormalize(key.part.Q.data, true);
- der.writeBuffer(Q, asn1.Ber.BitString);
- der.endSequence();
-}
-
-function writePkcs1EdDSAPrivate(der, key) {
- var ver = Buffer.from([1]);
- der.writeBuffer(ver, asn1.Ber.Integer);
-
- der.writeBuffer(key.part.k.data, asn1.Ber.OctetString);
-
- der.startSequence(0xa0);
- der.writeOID('1.3.101.112');
- der.endSequence();
-
- der.startSequence(0xa1);
- utils.writeBitString(der, key.part.A.data);
- der.endSequence();
-}
-
-function writePkcs1EdDSAPublic(der, key) {
- throw (new Error('Public keys are not supported for EdDSA PKCS#1'));
-}
diff --git a/deps/npm/node_modules/sshpk/lib/formats/pkcs8.js b/deps/npm/node_modules/sshpk/lib/formats/pkcs8.js
deleted file mode 100644
index 2ca3ca7a26014e..00000000000000
--- a/deps/npm/node_modules/sshpk/lib/formats/pkcs8.js
+++ /dev/null
@@ -1,631 +0,0 @@
-// Copyright 2018 Joyent, Inc.
-
-module.exports = {
- read: read,
- readPkcs8: readPkcs8,
- write: write,
- writePkcs8: writePkcs8,
- pkcs8ToBuffer: pkcs8ToBuffer,
-
- readECDSACurve: readECDSACurve,
- writeECDSACurve: writeECDSACurve
-};
-
-var assert = require('assert-plus');
-var asn1 = require('asn1');
-var Buffer = require('safer-buffer').Buffer;
-var algs = require('../algs');
-var utils = require('../utils');
-var Key = require('../key');
-var PrivateKey = require('../private-key');
-var pem = require('./pem');
-
-function read(buf, options) {
- return (pem.read(buf, options, 'pkcs8'));
-}
-
-function write(key, options) {
- return (pem.write(key, options, 'pkcs8'));
-}
-
-/* Helper to read in a single mpint */
-function readMPInt(der, nm) {
- assert.strictEqual(der.peek(), asn1.Ber.Integer,
- nm + ' is not an Integer');
- return (utils.mpNormalize(der.readString(asn1.Ber.Integer, true)));
-}
-
-function readPkcs8(alg, type, der) {
- /* Private keys in pkcs#8 format have a weird extra int */
- if (der.peek() === asn1.Ber.Integer) {
- assert.strictEqual(type, 'private',
- 'unexpected Integer at start of public key');
- der.readString(asn1.Ber.Integer, true);
- }
-
- der.readSequence();
- var next = der.offset + der.length;
-
- var oid = der.readOID();
- switch (oid) {
- case '1.2.840.113549.1.1.1':
- der._offset = next;
- if (type === 'public')
- return (readPkcs8RSAPublic(der));
- else
- return (readPkcs8RSAPrivate(der));
- case '1.2.840.10040.4.1':
- if (type === 'public')
- return (readPkcs8DSAPublic(der));
- else
- return (readPkcs8DSAPrivate(der));
- case '1.2.840.10045.2.1':
- if (type === 'public')
- return (readPkcs8ECDSAPublic(der));
- else
- return (readPkcs8ECDSAPrivate(der));
- case '1.3.101.112':
- if (type === 'public') {
- return (readPkcs8EdDSAPublic(der));
- } else {
- return (readPkcs8EdDSAPrivate(der));
- }
- case '1.3.101.110':
- if (type === 'public') {
- return (readPkcs8X25519Public(der));
- } else {
- return (readPkcs8X25519Private(der));
- }
- default:
- throw (new Error('Unknown key type OID ' + oid));
- }
-}
-
-function readPkcs8RSAPublic(der) {
- // bit string sequence
- der.readSequence(asn1.Ber.BitString);
- der.readByte();
- der.readSequence();
-
- // modulus
- var n = readMPInt(der, 'modulus');
- var e = readMPInt(der, 'exponent');
-
- // now, make the key
- var key = {
- type: 'rsa',
- source: der.originalInput,
- parts: [
- { name: 'e', data: e },
- { name: 'n', data: n }
- ]
- };
-
- return (new Key(key));
-}
-
-function readPkcs8RSAPrivate(der) {
- der.readSequence(asn1.Ber.OctetString);
- der.readSequence();
-
- var ver = readMPInt(der, 'version');
- assert.equal(ver[0], 0x0, 'unknown RSA private key version');
-
- // modulus then public exponent
- var n = readMPInt(der, 'modulus');
- var e = readMPInt(der, 'public exponent');
- var d = readMPInt(der, 'private exponent');
- var p = readMPInt(der, 'prime1');
- var q = readMPInt(der, 'prime2');
- var dmodp = readMPInt(der, 'exponent1');
- var dmodq = readMPInt(der, 'exponent2');
- var iqmp = readMPInt(der, 'iqmp');
-
- // now, make the key
- var key = {
- type: 'rsa',
- parts: [
- { name: 'n', data: n },
- { name: 'e', data: e },
- { name: 'd', data: d },
- { name: 'iqmp', data: iqmp },
- { name: 'p', data: p },
- { name: 'q', data: q },
- { name: 'dmodp', data: dmodp },
- { name: 'dmodq', data: dmodq }
- ]
- };
-
- return (new PrivateKey(key));
-}
-
-function readPkcs8DSAPublic(der) {
- der.readSequence();
-
- var p = readMPInt(der, 'p');
- var q = readMPInt(der, 'q');
- var g = readMPInt(der, 'g');
-
- // bit string sequence
- der.readSequence(asn1.Ber.BitString);
- der.readByte();
-
- var y = readMPInt(der, 'y');
-
- // now, make the key
- var key = {
- type: 'dsa',
- parts: [
- { name: 'p', data: p },
- { name: 'q', data: q },
- { name: 'g', data: g },
- { name: 'y', data: y }
- ]
- };
-
- return (new Key(key));
-}
-
-function readPkcs8DSAPrivate(der) {
- der.readSequence();
-
- var p = readMPInt(der, 'p');
- var q = readMPInt(der, 'q');
- var g = readMPInt(der, 'g');
-
- der.readSequence(asn1.Ber.OctetString);
- var x = readMPInt(der, 'x');
-
- /* The pkcs#8 format does not include the public key */
- var y = utils.calculateDSAPublic(g, p, x);
-
- var key = {
- type: 'dsa',
- parts: [
- { name: 'p', data: p },
- { name: 'q', data: q },
- { name: 'g', data: g },
- { name: 'y', data: y },
- { name: 'x', data: x }
- ]
- };
-
- return (new PrivateKey(key));
-}
-
-function readECDSACurve(der) {
- var curveName, curveNames;
- var j, c, cd;
-
- if (der.peek() === asn1.Ber.OID) {
- var oid = der.readOID();
-
- curveNames = Object.keys(algs.curves);
- for (j = 0; j < curveNames.length; ++j) {
- c = curveNames[j];
- cd = algs.curves[c];
- if (cd.pkcs8oid === oid) {
- curveName = c;
- break;
- }
- }
-
- } else {
- // ECParameters sequence
- der.readSequence();
- var version = der.readString(asn1.Ber.Integer, true);
- assert.strictEqual(version[0], 1, 'ECDSA key not version 1');
-
- var curve = {};
-
- // FieldID sequence
- der.readSequence();
- var fieldTypeOid = der.readOID();
- assert.strictEqual(fieldTypeOid, '1.2.840.10045.1.1',
- 'ECDSA key is not from a prime-field');
- var p = curve.p = utils.mpNormalize(
- der.readString(asn1.Ber.Integer, true));
- /*
- * p always starts with a 1 bit, so count the zeros to get its
- * real size.
- */
- curve.size = p.length * 8 - utils.countZeros(p);
-
- // Curve sequence
- der.readSequence();
- curve.a = utils.mpNormalize(
- der.readString(asn1.Ber.OctetString, true));
- curve.b = utils.mpNormalize(
- der.readString(asn1.Ber.OctetString, true));
- if (der.peek() === asn1.Ber.BitString)
- curve.s = der.readString(asn1.Ber.BitString, true);
-
- // Combined Gx and Gy
- curve.G = der.readString(asn1.Ber.OctetString, true);
- assert.strictEqual(curve.G[0], 0x4,
- 'uncompressed G is required');
-
- curve.n = utils.mpNormalize(
- der.readString(asn1.Ber.Integer, true));
- curve.h = utils.mpNormalize(
- der.readString(asn1.Ber.Integer, true));
- assert.strictEqual(curve.h[0], 0x1, 'a cofactor=1 curve is ' +
- 'required');
-
- curveNames = Object.keys(algs.curves);
- var ks = Object.keys(curve);
- for (j = 0; j < curveNames.length; ++j) {
- c = curveNames[j];
- cd = algs.curves[c];
- var equal = true;
- for (var i = 0; i < ks.length; ++i) {
- var k = ks[i];
- if (cd[k] === undefined)
- continue;
- if (typeof (cd[k]) === 'object' &&
- cd[k].equals !== undefined) {
- if (!cd[k].equals(curve[k])) {
- equal = false;
- break;
- }
- } else if (Buffer.isBuffer(cd[k])) {
- if (cd[k].toString('binary')
- !== curve[k].toString('binary')) {
- equal = false;
- break;
- }
- } else {
- if (cd[k] !== curve[k]) {
- equal = false;
- break;
- }
- }
- }
- if (equal) {
- curveName = c;
- break;
- }
- }
- }
- return (curveName);
-}
-
-function readPkcs8ECDSAPrivate(der) {
- var curveName = readECDSACurve(der);
- assert.string(curveName, 'a known elliptic curve');
-
- der.readSequence(asn1.Ber.OctetString);
- der.readSequence();
-
- var version = readMPInt(der, 'version');
- assert.equal(version[0], 1, 'unknown version of ECDSA key');
-
- var d = der.readString(asn1.Ber.OctetString, true);
- var Q;
-
- if (der.peek() == 0xa0) {
- der.readSequence(0xa0);
- der._offset += der.length;
- }
- if (der.peek() == 0xa1) {
- der.readSequence(0xa1);
- Q = der.readString(asn1.Ber.BitString, true);
- Q = utils.ecNormalize(Q);
- }
-
- if (Q === undefined) {
- var pub = utils.publicFromPrivateECDSA(curveName, d);
- Q = pub.part.Q.data;
- }
-
- var key = {
- type: 'ecdsa',
- parts: [
- { name: 'curve', data: Buffer.from(curveName) },
- { name: 'Q', data: Q },
- { name: 'd', data: d }
- ]
- };
-
- return (new PrivateKey(key));
-}
-
-function readPkcs8ECDSAPublic(der) {
- var curveName = readECDSACurve(der);
- assert.string(curveName, 'a known elliptic curve');
-
- var Q = der.readString(asn1.Ber.BitString, true);
- Q = utils.ecNormalize(Q);
-
- var key = {
- type: 'ecdsa',
- parts: [
- { name: 'curve', data: Buffer.from(curveName) },
- { name: 'Q', data: Q }
- ]
- };
-
- return (new Key(key));
-}
-
-function readPkcs8EdDSAPublic(der) {
- if (der.peek() === 0x00)
- der.readByte();
-
- var A = utils.readBitString(der);
-
- var key = {
- type: 'ed25519',
- parts: [
- { name: 'A', data: utils.zeroPadToLength(A, 32) }
- ]
- };
-
- return (new Key(key));
-}
-
-function readPkcs8X25519Public(der) {
- var A = utils.readBitString(der);
-
- var key = {
- type: 'curve25519',
- parts: [
- { name: 'A', data: utils.zeroPadToLength(A, 32) }
- ]
- };
-
- return (new Key(key));
-}
-
-function readPkcs8EdDSAPrivate(der) {
- if (der.peek() === 0x00)
- der.readByte();
-
- der.readSequence(asn1.Ber.OctetString);
- var k = der.readString(asn1.Ber.OctetString, true);
- k = utils.zeroPadToLength(k, 32);
-
- var A;
- if (der.peek() === asn1.Ber.BitString) {
- A = utils.readBitString(der);
- A = utils.zeroPadToLength(A, 32);
- } else {
- A = utils.calculateED25519Public(k);
- }
-
- var key = {
- type: 'ed25519',
- parts: [
- { name: 'A', data: utils.zeroPadToLength(A, 32) },
- { name: 'k', data: utils.zeroPadToLength(k, 32) }
- ]
- };
-
- return (new PrivateKey(key));
-}
-
-function readPkcs8X25519Private(der) {
- if (der.peek() === 0x00)
- der.readByte();
-
- der.readSequence(asn1.Ber.OctetString);
- var k = der.readString(asn1.Ber.OctetString, true);
- k = utils.zeroPadToLength(k, 32);
-
- var A = utils.calculateX25519Public(k);
-
- var key = {
- type: 'curve25519',
- parts: [
- { name: 'A', data: utils.zeroPadToLength(A, 32) },
- { name: 'k', data: utils.zeroPadToLength(k, 32) }
- ]
- };
-
- return (new PrivateKey(key));
-}
-
-function pkcs8ToBuffer(key) {
- var der = new asn1.BerWriter();
- writePkcs8(der, key);
- return (der.buffer);
-}
-
-function writePkcs8(der, key) {
- der.startSequence();
-
- if (PrivateKey.isPrivateKey(key)) {
- var sillyInt = Buffer.from([0]);
- der.writeBuffer(sillyInt, asn1.Ber.Integer);
- }
-
- der.startSequence();
- switch (key.type) {
- case 'rsa':
- der.writeOID('1.2.840.113549.1.1.1');
- if (PrivateKey.isPrivateKey(key))
- writePkcs8RSAPrivate(key, der);
- else
- writePkcs8RSAPublic(key, der);
- break;
- case 'dsa':
- der.writeOID('1.2.840.10040.4.1');
- if (PrivateKey.isPrivateKey(key))
- writePkcs8DSAPrivate(key, der);
- else
- writePkcs8DSAPublic(key, der);
- break;
- case 'ecdsa':
- der.writeOID('1.2.840.10045.2.1');
- if (PrivateKey.isPrivateKey(key))
- writePkcs8ECDSAPrivate(key, der);
- else
- writePkcs8ECDSAPublic(key, der);
- break;
- case 'ed25519':
- der.writeOID('1.3.101.112');
- if (PrivateKey.isPrivateKey(key))
- throw (new Error('Ed25519 private keys in pkcs8 ' +
- 'format are not supported'));
- writePkcs8EdDSAPublic(key, der);
- break;
- default:
- throw (new Error('Unsupported key type: ' + key.type));
- }
-
- der.endSequence();
-}
-
-function writePkcs8RSAPrivate(key, der) {
- der.writeNull();
- der.endSequence();
-
- der.startSequence(asn1.Ber.OctetString);
- der.startSequence();
-
- var version = Buffer.from([0]);
- der.writeBuffer(version, asn1.Ber.Integer);
-
- der.writeBuffer(key.part.n.data, asn1.Ber.Integer);
- der.writeBuffer(key.part.e.data, asn1.Ber.Integer);
- der.writeBuffer(key.part.d.data, asn1.Ber.Integer);
- der.writeBuffer(key.part.p.data, asn1.Ber.Integer);
- der.writeBuffer(key.part.q.data, asn1.Ber.Integer);
- if (!key.part.dmodp || !key.part.dmodq)
- utils.addRSAMissing(key);
- der.writeBuffer(key.part.dmodp.data, asn1.Ber.Integer);
- der.writeBuffer(key.part.dmodq.data, asn1.Ber.Integer);
- der.writeBuffer(key.part.iqmp.data, asn1.Ber.Integer);
-
- der.endSequence();
- der.endSequence();
-}
-
-function writePkcs8RSAPublic(key, der) {
- der.writeNull();
- der.endSequence();
-
- der.startSequence(asn1.Ber.BitString);
- der.writeByte(0x00);
-
- der.startSequence();
- der.writeBuffer(key.part.n.data, asn1.Ber.Integer);
- der.writeBuffer(key.part.e.data, asn1.Ber.Integer);
- der.endSequence();
-
- der.endSequence();
-}
-
-function writePkcs8DSAPrivate(key, der) {
- der.startSequence();
- der.writeBuffer(key.part.p.data, asn1.Ber.Integer);
- der.writeBuffer(key.part.q.data, asn1.Ber.Integer);
- der.writeBuffer(key.part.g.data, asn1.Ber.Integer);
- der.endSequence();
-
- der.endSequence();
-
- der.startSequence(asn1.Ber.OctetString);
- der.writeBuffer(key.part.x.data, asn1.Ber.Integer);
- der.endSequence();
-}
-
-function writePkcs8DSAPublic(key, der) {
- der.startSequence();
- der.writeBuffer(key.part.p.data, asn1.Ber.Integer);
- der.writeBuffer(key.part.q.data, asn1.Ber.Integer);
- der.writeBuffer(key.part.g.data, asn1.Ber.Integer);
- der.endSequence();
- der.endSequence();
-
- der.startSequence(asn1.Ber.BitString);
- der.writeByte(0x00);
- der.writeBuffer(key.part.y.data, asn1.Ber.Integer);
- der.endSequence();
-}
-
-function writeECDSACurve(key, der) {
- var curve = algs.curves[key.curve];
- if (curve.pkcs8oid) {
- /* This one has a name in pkcs#8, so just write the oid */
- der.writeOID(curve.pkcs8oid);
-
- } else {
- // ECParameters sequence
- der.startSequence();
-
- var version = Buffer.from([1]);
- der.writeBuffer(version, asn1.Ber.Integer);
-
- // FieldID sequence
- der.startSequence();
- der.writeOID('1.2.840.10045.1.1'); // prime-field
- der.writeBuffer(curve.p, asn1.Ber.Integer);
- der.endSequence();
-
- // Curve sequence
- der.startSequence();
- var a = curve.p;
- if (a[0] === 0x0)
- a = a.slice(1);
- der.writeBuffer(a, asn1.Ber.OctetString);
- der.writeBuffer(curve.b, asn1.Ber.OctetString);
- der.writeBuffer(curve.s, asn1.Ber.BitString);
- der.endSequence();
-
- der.writeBuffer(curve.G, asn1.Ber.OctetString);
- der.writeBuffer(curve.n, asn1.Ber.Integer);
- var h = curve.h;
- if (!h) {
- h = Buffer.from([1]);
- }
- der.writeBuffer(h, asn1.Ber.Integer);
-
- // ECParameters
- der.endSequence();
- }
-}
-
-function writePkcs8ECDSAPublic(key, der) {
- writeECDSACurve(key, der);
- der.endSequence();
-
- var Q = utils.ecNormalize(key.part.Q.data, true);
- der.writeBuffer(Q, asn1.Ber.BitString);
-}
-
-function writePkcs8ECDSAPrivate(key, der) {
- writeECDSACurve(key, der);
- der.endSequence();
-
- der.startSequence(asn1.Ber.OctetString);
- der.startSequence();
-
- var version = Buffer.from([1]);
- der.writeBuffer(version, asn1.Ber.Integer);
-
- der.writeBuffer(key.part.d.data, asn1.Ber.OctetString);
-
- der.startSequence(0xa1);
- var Q = utils.ecNormalize(key.part.Q.data, true);
- der.writeBuffer(Q, asn1.Ber.BitString);
- der.endSequence();
-
- der.endSequence();
- der.endSequence();
-}
-
-function writePkcs8EdDSAPublic(key, der) {
- der.endSequence();
-
- utils.writeBitString(der, key.part.A.data);
-}
-
-function writePkcs8EdDSAPrivate(key, der) {
- der.endSequence();
-
- var k = utils.mpNormalize(key.part.k.data, true);
- der.startSequence(asn1.Ber.OctetString);
- der.writeBuffer(k, asn1.Ber.OctetString);
- der.endSequence();
-}
diff --git a/deps/npm/node_modules/sshpk/lib/formats/putty.js b/deps/npm/node_modules/sshpk/lib/formats/putty.js
deleted file mode 100644
index 344419f980efb4..00000000000000
--- a/deps/npm/node_modules/sshpk/lib/formats/putty.js
+++ /dev/null
@@ -1,99 +0,0 @@
-// Copyright 2018 Joyent, Inc.
-
-module.exports = {
- read: read,
- write: write
-};
-
-var assert = require('assert-plus');
-var Buffer = require('safer-buffer').Buffer;
-var rfc4253 = require('./rfc4253');
-var Key = require('../key');
-
-var errors = require('../errors');
-
-function read(buf, options) {
- var lines = buf.toString('ascii').split(/[\r\n]+/);
- var found = false;
- var parts;
- var si = 0;
- while (si < lines.length) {
- parts = splitHeader(lines[si++]);
- if (parts &&
- parts[0].toLowerCase() === 'putty-user-key-file-2') {
- found = true;
- break;
- }
- }
- if (!found) {
- throw (new Error('No PuTTY format first line found'));
- }
- var alg = parts[1];
-
- parts = splitHeader(lines[si++]);
- assert.equal(parts[0].toLowerCase(), 'encryption');
-
- parts = splitHeader(lines[si++]);
- assert.equal(parts[0].toLowerCase(), 'comment');
- var comment = parts[1];
-
- parts = splitHeader(lines[si++]);
- assert.equal(parts[0].toLowerCase(), 'public-lines');
- var publicLines = parseInt(parts[1], 10);
- if (!isFinite(publicLines) || publicLines < 0 ||
- publicLines > lines.length) {
- throw (new Error('Invalid public-lines count'));
- }
-
- var publicBuf = Buffer.from(
- lines.slice(si, si + publicLines).join(''), 'base64');
- var keyType = rfc4253.algToKeyType(alg);
- var key = rfc4253.read(publicBuf);
- if (key.type !== keyType) {
- throw (new Error('Outer key algorithm mismatch'));
- }
- key.comment = comment;
- return (key);
-}
-
-function splitHeader(line) {
- var idx = line.indexOf(':');
- if (idx === -1)
- return (null);
- var header = line.slice(0, idx);
- ++idx;
- while (line[idx] === ' ')
- ++idx;
- var rest = line.slice(idx);
- return ([header, rest]);
-}
-
-function write(key, options) {
- assert.object(key);
- if (!Key.isKey(key))
- throw (new Error('Must be a public key'));
-
- var alg = rfc4253.keyTypeToAlg(key);
- var buf = rfc4253.write(key);
- var comment = key.comment || '';
-
- var b64 = buf.toString('base64');
- var lines = wrap(b64, 64);
-
- lines.unshift('Public-Lines: ' + lines.length);
- lines.unshift('Comment: ' + comment);
- lines.unshift('Encryption: none');
- lines.unshift('PuTTY-User-Key-File-2: ' + alg);
-
- return (Buffer.from(lines.join('\n') + '\n'));
-}
-
-function wrap(txt, len) {
- var lines = [];
- var pos = 0;
- while (pos < txt.length) {
- lines.push(txt.slice(pos, pos + 64));
- pos += 64;
- }
- return (lines);
-}
diff --git a/deps/npm/node_modules/sshpk/lib/formats/rfc4253.js b/deps/npm/node_modules/sshpk/lib/formats/rfc4253.js
deleted file mode 100644
index 52fddcb6b65f88..00000000000000
--- a/deps/npm/node_modules/sshpk/lib/formats/rfc4253.js
+++ /dev/null
@@ -1,166 +0,0 @@
-// Copyright 2015 Joyent, Inc.
-
-module.exports = {
- read: read.bind(undefined, false, undefined),
- readType: read.bind(undefined, false),
- write: write,
- /* semi-private api, used by sshpk-agent */
- readPartial: read.bind(undefined, true),
-
- /* shared with ssh format */
- readInternal: read,
- keyTypeToAlg: keyTypeToAlg,
- algToKeyType: algToKeyType
-};
-
-var assert = require('assert-plus');
-var Buffer = require('safer-buffer').Buffer;
-var algs = require('../algs');
-var utils = require('../utils');
-var Key = require('../key');
-var PrivateKey = require('../private-key');
-var SSHBuffer = require('../ssh-buffer');
-
-function algToKeyType(alg) {
- assert.string(alg);
- if (alg === 'ssh-dss')
- return ('dsa');
- else if (alg === 'ssh-rsa')
- return ('rsa');
- else if (alg === 'ssh-ed25519')
- return ('ed25519');
- else if (alg === 'ssh-curve25519')
- return ('curve25519');
- else if (alg.match(/^ecdsa-sha2-/))
- return ('ecdsa');
- else
- throw (new Error('Unknown algorithm ' + alg));
-}
-
-function keyTypeToAlg(key) {
- assert.object(key);
- if (key.type === 'dsa')
- return ('ssh-dss');
- else if (key.type === 'rsa')
- return ('ssh-rsa');
- else if (key.type === 'ed25519')
- return ('ssh-ed25519');
- else if (key.type === 'curve25519')
- return ('ssh-curve25519');
- else if (key.type === 'ecdsa')
- return ('ecdsa-sha2-' + key.part.curve.data.toString());
- else
- throw (new Error('Unknown key type ' + key.type));
-}
-
-function read(partial, type, buf, options) {
- if (typeof (buf) === 'string')
- buf = Buffer.from(buf);
- assert.buffer(buf, 'buf');
-
- var key = {};
-
- var parts = key.parts = [];
- var sshbuf = new SSHBuffer({buffer: buf});
-
- var alg = sshbuf.readString();
- assert.ok(!sshbuf.atEnd(), 'key must have at least one part');
-
- key.type = algToKeyType(alg);
-
- var partCount = algs.info[key.type].parts.length;
- if (type && type === 'private')
- partCount = algs.privInfo[key.type].parts.length;
-
- while (!sshbuf.atEnd() && parts.length < partCount)
- parts.push(sshbuf.readPart());
- while (!partial && !sshbuf.atEnd())
- parts.push(sshbuf.readPart());
-
- assert.ok(parts.length >= 1,
- 'key must have at least one part');
- assert.ok(partial || sshbuf.atEnd(),
- 'leftover bytes at end of key');
-
- var Constructor = Key;
- var algInfo = algs.info[key.type];
- if (type === 'private' || algInfo.parts.length !== parts.length) {
- algInfo = algs.privInfo[key.type];
- Constructor = PrivateKey;
- }
- assert.strictEqual(algInfo.parts.length, parts.length);
-
- if (key.type === 'ecdsa') {
- var res = /^ecdsa-sha2-(.+)$/.exec(alg);
- assert.ok(res !== null);
- assert.strictEqual(res[1], parts[0].data.toString());
- }
-
- var normalized = true;
- for (var i = 0; i < algInfo.parts.length; ++i) {
- var p = parts[i];
- p.name = algInfo.parts[i];
- /*
- * OpenSSH stores ed25519 "private" keys as seed + public key
- * concat'd together (k followed by A). We want to keep them
- * separate for other formats that don't do this.
- */
- if (key.type === 'ed25519' && p.name === 'k')
- p.data = p.data.slice(0, 32);
-
- if (p.name !== 'curve' && algInfo.normalize !== false) {
- var nd;
- if (key.type === 'ed25519') {
- nd = utils.zeroPadToLength(p.data, 32);
- } else {
- nd = utils.mpNormalize(p.data);
- }
- if (nd.toString('binary') !==
- p.data.toString('binary')) {
- p.data = nd;
- normalized = false;
- }
- }
- }
-
- if (normalized)
- key._rfc4253Cache = sshbuf.toBuffer();
-
- if (partial && typeof (partial) === 'object') {
- partial.remainder = sshbuf.remainder();
- partial.consumed = sshbuf._offset;
- }
-
- return (new Constructor(key));
-}
-
-function write(key, options) {
- assert.object(key);
-
- var alg = keyTypeToAlg(key);
- var i;
-
- var algInfo = algs.info[key.type];
- if (PrivateKey.isPrivateKey(key))
- algInfo = algs.privInfo[key.type];
- var parts = algInfo.parts;
-
- var buf = new SSHBuffer({});
-
- buf.writeString(alg);
-
- for (i = 0; i < parts.length; ++i) {
- var data = key.part[parts[i]].data;
- if (algInfo.normalize !== false) {
- if (key.type === 'ed25519')
- data = utils.zeroPadToLength(data, 32);
- else
- data = utils.mpNormalize(data);
- }
- if (key.type === 'ed25519' && parts[i] === 'k')
- data = Buffer.concat([data, key.part.A.data]);
- buf.writeBuffer(data);
- }
-
- return (buf.toBuffer());
-}
diff --git a/deps/npm/node_modules/sshpk/lib/formats/ssh-private.js b/deps/npm/node_modules/sshpk/lib/formats/ssh-private.js
deleted file mode 100644
index 5e7eed887a737b..00000000000000
--- a/deps/npm/node_modules/sshpk/lib/formats/ssh-private.js
+++ /dev/null
@@ -1,262 +0,0 @@
-// Copyright 2015 Joyent, Inc.
-
-module.exports = {
- read: read,
- readSSHPrivate: readSSHPrivate,
- write: write
-};
-
-var assert = require('assert-plus');
-var asn1 = require('asn1');
-var Buffer = require('safer-buffer').Buffer;
-var algs = require('../algs');
-var utils = require('../utils');
-var crypto = require('crypto');
-
-var Key = require('../key');
-var PrivateKey = require('../private-key');
-var pem = require('./pem');
-var rfc4253 = require('./rfc4253');
-var SSHBuffer = require('../ssh-buffer');
-var errors = require('../errors');
-
-var bcrypt;
-
-function read(buf, options) {
- return (pem.read(buf, options));
-}
-
-var MAGIC = 'openssh-key-v1';
-
-function readSSHPrivate(type, buf, options) {
- buf = new SSHBuffer({buffer: buf});
-
- var magic = buf.readCString();
- assert.strictEqual(magic, MAGIC, 'bad magic string');
-
- var cipher = buf.readString();
- var kdf = buf.readString();
- var kdfOpts = buf.readBuffer();
-
- var nkeys = buf.readInt();
- if (nkeys !== 1) {
- throw (new Error('OpenSSH-format key file contains ' +
- 'multiple keys: this is unsupported.'));
- }
-
- var pubKey = buf.readBuffer();
-
- if (type === 'public') {
- assert.ok(buf.atEnd(), 'excess bytes left after key');
- return (rfc4253.read(pubKey));
- }
-
- var privKeyBlob = buf.readBuffer();
- assert.ok(buf.atEnd(), 'excess bytes left after key');
-
- var kdfOptsBuf = new SSHBuffer({ buffer: kdfOpts });
- switch (kdf) {
- case 'none':
- if (cipher !== 'none') {
- throw (new Error('OpenSSH-format key uses KDF "none" ' +
- 'but specifies a cipher other than "none"'));
- }
- break;
- case 'bcrypt':
- var salt = kdfOptsBuf.readBuffer();
- var rounds = kdfOptsBuf.readInt();
- var cinf = utils.opensshCipherInfo(cipher);
- if (bcrypt === undefined) {
- bcrypt = require('bcrypt-pbkdf');
- }
-
- if (typeof (options.passphrase) === 'string') {
- options.passphrase = Buffer.from(options.passphrase,
- 'utf-8');
- }
- if (!Buffer.isBuffer(options.passphrase)) {
- throw (new errors.KeyEncryptedError(
- options.filename, 'OpenSSH'));
- }
-
- var pass = new Uint8Array(options.passphrase);
- var salti = new Uint8Array(salt);
- /* Use the pbkdf to derive both the key and the IV. */
- var out = new Uint8Array(cinf.keySize + cinf.blockSize);
- var res = bcrypt.pbkdf(pass, pass.length, salti, salti.length,
- out, out.length, rounds);
- if (res !== 0) {
- throw (new Error('bcrypt_pbkdf function returned ' +
- 'failure, parameters invalid'));
- }
- out = Buffer.from(out);
- var ckey = out.slice(0, cinf.keySize);
- var iv = out.slice(cinf.keySize, cinf.keySize + cinf.blockSize);
- var cipherStream = crypto.createDecipheriv(cinf.opensslName,
- ckey, iv);
- cipherStream.setAutoPadding(false);
- var chunk, chunks = [];
- cipherStream.once('error', function (e) {
- if (e.toString().indexOf('bad decrypt') !== -1) {
- throw (new Error('Incorrect passphrase ' +
- 'supplied, could not decrypt key'));
- }
- throw (e);
- });
- cipherStream.write(privKeyBlob);
- cipherStream.end();
- while ((chunk = cipherStream.read()) !== null)
- chunks.push(chunk);
- privKeyBlob = Buffer.concat(chunks);
- break;
- default:
- throw (new Error(
- 'OpenSSH-format key uses unknown KDF "' + kdf + '"'));
- }
-
- buf = new SSHBuffer({buffer: privKeyBlob});
-
- var checkInt1 = buf.readInt();
- var checkInt2 = buf.readInt();
- if (checkInt1 !== checkInt2) {
- throw (new Error('Incorrect passphrase supplied, could not ' +
- 'decrypt key'));
- }
-
- var ret = {};
- var key = rfc4253.readInternal(ret, 'private', buf.remainder());
-
- buf.skip(ret.consumed);
-
- var comment = buf.readString();
- key.comment = comment;
-
- return (key);
-}
-
-function write(key, options) {
- var pubKey;
- if (PrivateKey.isPrivateKey(key))
- pubKey = key.toPublic();
- else
- pubKey = key;
-
- var cipher = 'none';
- var kdf = 'none';
- var kdfopts = Buffer.alloc(0);
- var cinf = { blockSize: 8 };
- var passphrase;
- if (options !== undefined) {
- passphrase = options.passphrase;
- if (typeof (passphrase) === 'string')
- passphrase = Buffer.from(passphrase, 'utf-8');
- if (passphrase !== undefined) {
- assert.buffer(passphrase, 'options.passphrase');
- assert.optionalString(options.cipher, 'options.cipher');
- cipher = options.cipher;
- if (cipher === undefined)
- cipher = 'aes128-ctr';
- cinf = utils.opensshCipherInfo(cipher);
- kdf = 'bcrypt';
- }
- }
-
- var privBuf;
- if (PrivateKey.isPrivateKey(key)) {
- privBuf = new SSHBuffer({});
- var checkInt = crypto.randomBytes(4).readUInt32BE(0);
- privBuf.writeInt(checkInt);
- privBuf.writeInt(checkInt);
- privBuf.write(key.toBuffer('rfc4253'));
- privBuf.writeString(key.comment || '');
-
- var n = 1;
- while (privBuf._offset % cinf.blockSize !== 0)
- privBuf.writeChar(n++);
- privBuf = privBuf.toBuffer();
- }
-
- switch (kdf) {
- case 'none':
- break;
- case 'bcrypt':
- var salt = crypto.randomBytes(16);
- var rounds = 16;
- var kdfssh = new SSHBuffer({});
- kdfssh.writeBuffer(salt);
- kdfssh.writeInt(rounds);
- kdfopts = kdfssh.toBuffer();
-
- if (bcrypt === undefined) {
- bcrypt = require('bcrypt-pbkdf');
- }
- var pass = new Uint8Array(passphrase);
- var salti = new Uint8Array(salt);
- /* Use the pbkdf to derive both the key and the IV. */
- var out = new Uint8Array(cinf.keySize + cinf.blockSize);
- var res = bcrypt.pbkdf(pass, pass.length, salti, salti.length,
- out, out.length, rounds);
- if (res !== 0) {
- throw (new Error('bcrypt_pbkdf function returned ' +
- 'failure, parameters invalid'));
- }
- out = Buffer.from(out);
- var ckey = out.slice(0, cinf.keySize);
- var iv = out.slice(cinf.keySize, cinf.keySize + cinf.blockSize);
-
- var cipherStream = crypto.createCipheriv(cinf.opensslName,
- ckey, iv);
- cipherStream.setAutoPadding(false);
- var chunk, chunks = [];
- cipherStream.once('error', function (e) {
- throw (e);
- });
- cipherStream.write(privBuf);
- cipherStream.end();
- while ((chunk = cipherStream.read()) !== null)
- chunks.push(chunk);
- privBuf = Buffer.concat(chunks);
- break;
- default:
- throw (new Error('Unsupported kdf ' + kdf));
- }
-
- var buf = new SSHBuffer({});
-
- buf.writeCString(MAGIC);
- buf.writeString(cipher); /* cipher */
- buf.writeString(kdf); /* kdf */
- buf.writeBuffer(kdfopts); /* kdfoptions */
-
- buf.writeInt(1); /* nkeys */
- buf.writeBuffer(pubKey.toBuffer('rfc4253'));
-
- if (privBuf)
- buf.writeBuffer(privBuf);
-
- buf = buf.toBuffer();
-
- var header;
- if (PrivateKey.isPrivateKey(key))
- header = 'OPENSSH PRIVATE KEY';
- else
- header = 'OPENSSH PUBLIC KEY';
-
- var tmp = buf.toString('base64');
- var len = tmp.length + (tmp.length / 70) +
- 18 + 16 + header.length*2 + 10;
- buf = Buffer.alloc(len);
- var o = 0;
- o += buf.write('-----BEGIN ' + header + '-----\n', o);
- for (var i = 0; i < tmp.length; ) {
- var limit = i + 70;
- if (limit > tmp.length)
- limit = tmp.length;
- o += buf.write(tmp.slice(i, limit), o);
- buf[o++] = 10;
- i = limit;
- }
- o += buf.write('-----END ' + header + '-----\n', o);
-
- return (buf.slice(0, o));
-}
diff --git a/deps/npm/node_modules/sshpk/lib/formats/ssh.js b/deps/npm/node_modules/sshpk/lib/formats/ssh.js
deleted file mode 100644
index c8e9c9310583a9..00000000000000
--- a/deps/npm/node_modules/sshpk/lib/formats/ssh.js
+++ /dev/null
@@ -1,115 +0,0 @@
-// Copyright 2015 Joyent, Inc.
-
-module.exports = {
- read: read,
- write: write
-};
-
-var assert = require('assert-plus');
-var Buffer = require('safer-buffer').Buffer;
-var rfc4253 = require('./rfc4253');
-var utils = require('../utils');
-var Key = require('../key');
-var PrivateKey = require('../private-key');
-
-var sshpriv = require('./ssh-private');
-
-/*JSSTYLED*/
-var SSHKEY_RE = /^([a-z0-9-]+)[ \t]+([a-zA-Z0-9+\/]+[=]*)([ \t]+([^ \t][^\n]*[\n]*)?)?$/;
-/*JSSTYLED*/
-var SSHKEY_RE2 = /^([a-z0-9-]+)[ \t\n]+([a-zA-Z0-9+\/][a-zA-Z0-9+\/ \t\n=]*)([^a-zA-Z0-9+\/ \t\n=].*)?$/;
-
-function read(buf, options) {
- if (typeof (buf) !== 'string') {
- assert.buffer(buf, 'buf');
- buf = buf.toString('ascii');
- }
-
- var trimmed = buf.trim().replace(/[\\\r]/g, '');
- var m = trimmed.match(SSHKEY_RE);
- if (!m)
- m = trimmed.match(SSHKEY_RE2);
- assert.ok(m, 'key must match regex');
-
- var type = rfc4253.algToKeyType(m[1]);
- var kbuf = Buffer.from(m[2], 'base64');
-
- /*
- * This is a bit tricky. If we managed to parse the key and locate the
- * key comment with the regex, then do a non-partial read and assert
- * that we have consumed all bytes. If we couldn't locate the key
- * comment, though, there may be whitespace shenanigans going on that
- * have conjoined the comment to the rest of the key. We do a partial
- * read in this case to try to make the best out of a sorry situation.
- */
- var key;
- var ret = {};
- if (m[4]) {
- try {
- key = rfc4253.read(kbuf);
-
- } catch (e) {
- m = trimmed.match(SSHKEY_RE2);
- assert.ok(m, 'key must match regex');
- kbuf = Buffer.from(m[2], 'base64');
- key = rfc4253.readInternal(ret, 'public', kbuf);
- }
- } else {
- key = rfc4253.readInternal(ret, 'public', kbuf);
- }
-
- assert.strictEqual(type, key.type);
-
- if (m[4] && m[4].length > 0) {
- key.comment = m[4];
-
- } else if (ret.consumed) {
- /*
- * Now the magic: trying to recover the key comment when it's
- * gotten conjoined to the key or otherwise shenanigan'd.
- *
- * Work out how much base64 we used, then drop all non-base64
- * chars from the beginning up to this point in the the string.
- * Then offset in this and try to make up for missing = chars.
- */
- var data = m[2] + (m[3] ? m[3] : '');
- var realOffset = Math.ceil(ret.consumed / 3) * 4;
- data = data.slice(0, realOffset - 2). /*JSSTYLED*/
- replace(/[^a-zA-Z0-9+\/=]/g, '') +
- data.slice(realOffset - 2);
-
- var padding = ret.consumed % 3;
- if (padding > 0 &&
- data.slice(realOffset - 1, realOffset) !== '=')
- realOffset--;
- while (data.slice(realOffset, realOffset + 1) === '=')
- realOffset++;
-
- /* Finally, grab what we think is the comment & clean it up. */
- var trailer = data.slice(realOffset);
- trailer = trailer.replace(/[\r\n]/g, ' ').
- replace(/^\s+/, '');
- if (trailer.match(/^[a-zA-Z0-9]/))
- key.comment = trailer;
- }
-
- return (key);
-}
-
-function write(key, options) {
- assert.object(key);
- if (!Key.isKey(key))
- throw (new Error('Must be a public key'));
-
- var parts = [];
- var alg = rfc4253.keyTypeToAlg(key);
- parts.push(alg);
-
- var buf = rfc4253.write(key);
- parts.push(buf.toString('base64'));
-
- if (key.comment)
- parts.push(key.comment);
-
- return (Buffer.from(parts.join(' ')));
-}
diff --git a/deps/npm/node_modules/sshpk/lib/formats/x509-pem.js b/deps/npm/node_modules/sshpk/lib/formats/x509-pem.js
deleted file mode 100644
index 3155ef0b3a1468..00000000000000
--- a/deps/npm/node_modules/sshpk/lib/formats/x509-pem.js
+++ /dev/null
@@ -1,88 +0,0 @@
-// Copyright 2016 Joyent, Inc.
-
-var x509 = require('./x509');
-
-module.exports = {
- read: read,
- verify: x509.verify,
- sign: x509.sign,
- write: write
-};
-
-var assert = require('assert-plus');
-var asn1 = require('asn1');
-var Buffer = require('safer-buffer').Buffer;
-var algs = require('../algs');
-var utils = require('../utils');
-var Key = require('../key');
-var PrivateKey = require('../private-key');
-var pem = require('./pem');
-var Identity = require('../identity');
-var Signature = require('../signature');
-var Certificate = require('../certificate');
-
-function read(buf, options) {
- if (typeof (buf) !== 'string') {
- assert.buffer(buf, 'buf');
- buf = buf.toString('ascii');
- }
-
- var lines = buf.trim().split(/[\r\n]+/g);
-
- var m;
- var si = -1;
- while (!m && si < lines.length) {
- m = lines[++si].match(/*JSSTYLED*/
- /[-]+[ ]*BEGIN CERTIFICATE[ ]*[-]+/);
- }
- assert.ok(m, 'invalid PEM header');
-
- var m2;
- var ei = lines.length;
- while (!m2 && ei > 0) {
- m2 = lines[--ei].match(/*JSSTYLED*/
- /[-]+[ ]*END CERTIFICATE[ ]*[-]+/);
- }
- assert.ok(m2, 'invalid PEM footer');
-
- lines = lines.slice(si, ei + 1);
-
- var headers = {};
- while (true) {
- lines = lines.slice(1);
- m = lines[0].match(/*JSSTYLED*/
- /^([A-Za-z0-9-]+): (.+)$/);
- if (!m)
- break;
- headers[m[1].toLowerCase()] = m[2];
- }
-
- /* Chop off the first and last lines */
- lines = lines.slice(0, -1).join('');
- buf = Buffer.from(lines, 'base64');
-
- return (x509.read(buf, options));
-}
-
-function write(cert, options) {
- var dbuf = x509.write(cert, options);
-
- var header = 'CERTIFICATE';
- var tmp = dbuf.toString('base64');
- var len = tmp.length + (tmp.length / 64) +
- 18 + 16 + header.length*2 + 10;
- var buf = Buffer.alloc(len);
- var o = 0;
- o += buf.write('-----BEGIN ' + header + '-----\n', o);
- for (var i = 0; i < tmp.length; ) {
- var limit = i + 64;
- if (limit > tmp.length)
- limit = tmp.length;
- o += buf.write(tmp.slice(i, limit), o);
- buf[o++] = 10;
- i = limit;
- }
- o += buf.write('-----END ' + header + '-----\n', o);
-
- return (buf.slice(0, o));
-}
diff --git a/deps/npm/node_modules/sshpk/lib/formats/x509.js b/deps/npm/node_modules/sshpk/lib/formats/x509.js
deleted file mode 100644
index 0144c4449133bd..00000000000000
--- a/deps/npm/node_modules/sshpk/lib/formats/x509.js
+++ /dev/null
@@ -1,752 +0,0 @@
-// Copyright 2017 Joyent, Inc.
-
-module.exports = {
- read: read,
- verify: verify,
- sign: sign,
- signAsync: signAsync,
- write: write
-};
-
-var assert = require('assert-plus');
-var asn1 = require('asn1');
-var Buffer = require('safer-buffer').Buffer;
-var algs = require('../algs');
-var utils = require('../utils');
-var Key = require('../key');
-var PrivateKey = require('../private-key');
-var pem = require('./pem');
-var Identity = require('../identity');
-var Signature = require('../signature');
-var Certificate = require('../certificate');
-var pkcs8 = require('./pkcs8');
-
-/*
- * This file is based on RFC5280 (X.509).
- */
-
-/* Helper to read in a single mpint */
-function readMPInt(der, nm) {
- assert.strictEqual(der.peek(), asn1.Ber.Integer,
- nm + ' is not an Integer');
- return (utils.mpNormalize(der.readString(asn1.Ber.Integer, true)));
-}
-
-function verify(cert, key) {
- var sig = cert.signatures.x509;
- assert.object(sig, 'x509 signature');
-
- var algParts = sig.algo.split('-');
- if (algParts[0] !== key.type)
- return (false);
-
- var blob = sig.cache;
- if (blob === undefined) {
- var der = new asn1.BerWriter();
- writeTBSCert(cert, der);
- blob = der.buffer;
- }
-
- var verifier = key.createVerify(algParts[1]);
- verifier.write(blob);
- return (verifier.verify(sig.signature));
-}
-
-function Local(i) {
- return (asn1.Ber.Context | asn1.Ber.Constructor | i);
-}
-
-function Context(i) {
- return (asn1.Ber.Context | i);
-}
-
-var SIGN_ALGS = {
- 'rsa-md5': '1.2.840.113549.1.1.4',
- 'rsa-sha1': '1.2.840.113549.1.1.5',
- 'rsa-sha256': '1.2.840.113549.1.1.11',
- 'rsa-sha384': '1.2.840.113549.1.1.12',
- 'rsa-sha512': '1.2.840.113549.1.1.13',
- 'dsa-sha1': '1.2.840.10040.4.3',
- 'dsa-sha256': '2.16.840.1.101.3.4.3.2',
- 'ecdsa-sha1': '1.2.840.10045.4.1',
- 'ecdsa-sha256': '1.2.840.10045.4.3.2',
- 'ecdsa-sha384': '1.2.840.10045.4.3.3',
- 'ecdsa-sha512': '1.2.840.10045.4.3.4',
- 'ed25519-sha512': '1.3.101.112'
-};
-Object.keys(SIGN_ALGS).forEach(function (k) {
- SIGN_ALGS[SIGN_ALGS[k]] = k;
-});
-SIGN_ALGS['1.3.14.3.2.3'] = 'rsa-md5';
-SIGN_ALGS['1.3.14.3.2.29'] = 'rsa-sha1';
-
-var EXTS = {
- 'issuerKeyId': '2.5.29.35',
- 'altName': '2.5.29.17',
- 'basicConstraints': '2.5.29.19',
- 'keyUsage': '2.5.29.15',
- 'extKeyUsage': '2.5.29.37'
-};
-
-function read(buf, options) {
- if (typeof (buf) === 'string') {
- buf = Buffer.from(buf, 'binary');
- }
- assert.buffer(buf, 'buf');
-
- var der = new asn1.BerReader(buf);
-
- der.readSequence();
- if (Math.abs(der.length - der.remain) > 1) {
- throw (new Error('DER sequence does not contain whole byte ' +
- 'stream'));
- }
-
- var tbsStart = der.offset;
- der.readSequence();
- var sigOffset = der.offset + der.length;
- var tbsEnd = sigOffset;
-
- if (der.peek() === Local(0)) {
- der.readSequence(Local(0));
- var version = der.readInt();
- assert.ok(version <= 3,
- 'only x.509 versions up to v3 supported');
- }
-
- var cert = {};
- cert.signatures = {};
- var sig = (cert.signatures.x509 = {});
- sig.extras = {};
-
- cert.serial = readMPInt(der, 'serial');
-
- der.readSequence();
- var after = der.offset + der.length;
- var certAlgOid = der.readOID();
- var certAlg = SIGN_ALGS[certAlgOid];
- if (certAlg === undefined)
- throw (new Error('unknown signature algorithm ' + certAlgOid));
-
- der._offset = after;
- cert.issuer = Identity.parseAsn1(der);
-
- der.readSequence();
- cert.validFrom = readDate(der);
- cert.validUntil = readDate(der);
-
- cert.subjects = [Identity.parseAsn1(der)];
-
- der.readSequence();
- after = der.offset + der.length;
- cert.subjectKey = pkcs8.readPkcs8(undefined, 'public', der);
- der._offset = after;
-
- /* issuerUniqueID */
- if (der.peek() === Local(1)) {
- der.readSequence(Local(1));
- sig.extras.issuerUniqueID =
- buf.slice(der.offset, der.offset + der.length);
- der._offset += der.length;
- }
-
- /* subjectUniqueID */
- if (der.peek() === Local(2)) {
- der.readSequence(Local(2));
- sig.extras.subjectUniqueID =
- buf.slice(der.offset, der.offset + der.length);
- der._offset += der.length;
- }
-
- /* extensions */
- if (der.peek() === Local(3)) {
- der.readSequence(Local(3));
- var extEnd = der.offset + der.length;
- der.readSequence();
-
- while (der.offset < extEnd)
- readExtension(cert, buf, der);
-
- assert.strictEqual(der.offset, extEnd);
- }
-
- assert.strictEqual(der.offset, sigOffset);
-
- der.readSequence();
- after = der.offset + der.length;
- var sigAlgOid = der.readOID();
- var sigAlg = SIGN_ALGS[sigAlgOid];
- if (sigAlg === undefined)
- throw (new Error('unknown signature algorithm ' + sigAlgOid));
- der._offset = after;
-
- var sigData = der.readString(asn1.Ber.BitString, true);
- if (sigData[0] === 0)
- sigData = sigData.slice(1);
- var algParts = sigAlg.split('-');
-
- sig.signature = Signature.parse(sigData, algParts[0], 'asn1');
- sig.signature.hashAlgorithm = algParts[1];
- sig.algo = sigAlg;
- sig.cache = buf.slice(tbsStart, tbsEnd);
-
- return (new Certificate(cert));
-}
-
-function readDate(der) {
- if (der.peek() === asn1.Ber.UTCTime) {
- return (utcTimeToDate(der.readString(asn1.Ber.UTCTime)));
- } else if (der.peek() === asn1.Ber.GeneralizedTime) {
- return (gTimeToDate(der.readString(asn1.Ber.GeneralizedTime)));
- } else {
- throw (new Error('Unsupported date format'));
- }
-}
-
-function writeDate(der, date) {
- if (date.getUTCFullYear() >= 2050 || date.getUTCFullYear() < 1950) {
- der.writeString(dateToGTime(date), asn1.Ber.GeneralizedTime);
- } else {
- der.writeString(dateToUTCTime(date), asn1.Ber.UTCTime);
- }
-}
-
-/* RFC5280, section 4.2.1.6 (GeneralName type) */
-var ALTNAME = {
- OtherName: Local(0),
- RFC822Name: Context(1),
- DNSName: Context(2),
- X400Address: Local(3),
- DirectoryName: Local(4),
- EDIPartyName: Local(5),
- URI: Context(6),
- IPAddress: Context(7),
- OID: Context(8)
-};
-
-/* RFC5280, section 4.2.1.12 (KeyPurposeId) */
-var EXTPURPOSE = {
- 'serverAuth': '1.3.6.1.5.5.7.3.1',
- 'clientAuth': '1.3.6.1.5.5.7.3.2',
- 'codeSigning': '1.3.6.1.5.5.7.3.3',
-
- /* See https://github.com/joyent/oid-docs/blob/master/root.md */
- 'joyentDocker': '1.3.6.1.4.1.38678.1.4.1',
- 'joyentCmon': '1.3.6.1.4.1.38678.1.4.2'
-};
-var EXTPURPOSE_REV = {};
-Object.keys(EXTPURPOSE).forEach(function (k) {
- EXTPURPOSE_REV[EXTPURPOSE[k]] = k;
-});
-
-var KEYUSEBITS = [
- 'signature', 'identity', 'keyEncryption',
- 'encryption', 'keyAgreement', 'ca', 'crl'
-];
-
-function readExtension(cert, buf, der) {
- der.readSequence();
- var after = der.offset + der.length;
- var extId = der.readOID();
- var id;
- var sig = cert.signatures.x509;
- if (!sig.extras.exts)
- sig.extras.exts = [];
-
- var critical;
- if (der.peek() === asn1.Ber.Boolean)
- critical = der.readBoolean();
-
- switch (extId) {
- case (EXTS.basicConstraints):
- der.readSequence(asn1.Ber.OctetString);
- der.readSequence();
- var bcEnd = der.offset + der.length;
- var ca = false;
- if (der.peek() === asn1.Ber.Boolean)
- ca = der.readBoolean();
- if (cert.purposes === undefined)
- cert.purposes = [];
- if (ca === true)
- cert.purposes.push('ca');
- var bc = { oid: extId, critical: critical };
- if (der.offset < bcEnd && der.peek() === asn1.Ber.Integer)
- bc.pathLen = der.readInt();
- sig.extras.exts.push(bc);
- break;
- case (EXTS.extKeyUsage):
- der.readSequence(asn1.Ber.OctetString);
- der.readSequence();
- if (cert.purposes === undefined)
- cert.purposes = [];
- var ekEnd = der.offset + der.length;
- while (der.offset < ekEnd) {
- var oid = der.readOID();
- cert.purposes.push(EXTPURPOSE_REV[oid] || oid);
- }
- /*
- * This is a bit of a hack: in the case where we have a cert
- * that's only allowed to do serverAuth or clientAuth (and not
- * the other), we want to make sure all our Subjects are of
- * the right type. But we already parsed our Subjects and
- * decided if they were hosts or users earlier (since it appears
- * first in the cert).
- *
- * So we go through and mutate them into the right kind here if
- * it doesn't match. This might not be hugely beneficial, as it
- * seems that single-purpose certs are not often seen in the
- * wild.
- */
- if (cert.purposes.indexOf('serverAuth') !== -1 &&
- cert.purposes.indexOf('clientAuth') === -1) {
- cert.subjects.forEach(function (ide) {
- if (ide.type !== 'host') {
- ide.type = 'host';
- ide.hostname = ide.uid ||
- ide.email ||
- ide.components[0].value;
- }
- });
- } else if (cert.purposes.indexOf('clientAuth') !== -1 &&
- cert.purposes.indexOf('serverAuth') === -1) {
- cert.subjects.forEach(function (ide) {
- if (ide.type !== 'user') {
- ide.type = 'user';
- ide.uid = ide.hostname ||
- ide.email ||
- ide.components[0].value;
- }
- });
- }
- sig.extras.exts.push({ oid: extId, critical: critical });
- break;
- case (EXTS.keyUsage):
- der.readSequence(asn1.Ber.OctetString);
- var bits = der.readString(asn1.Ber.BitString, true);
- var setBits = readBitField(bits, KEYUSEBITS);
- setBits.forEach(function (bit) {
- if (cert.purposes === undefined)
- cert.purposes = [];
- if (cert.purposes.indexOf(bit) === -1)
- cert.purposes.push(bit);
- });
- sig.extras.exts.push({ oid: extId, critical: critical,
- bits: bits });
- break;
- case (EXTS.altName):
- der.readSequence(asn1.Ber.OctetString);
- der.readSequence();
- var aeEnd = der.offset + der.length;
- while (der.offset < aeEnd) {
- switch (der.peek()) {
- case ALTNAME.OtherName:
- case ALTNAME.EDIPartyName:
- der.readSequence();
- der._offset += der.length;
- break;
- case ALTNAME.OID:
- der.readOID(ALTNAME.OID);
- break;
- case ALTNAME.RFC822Name:
- /* RFC822 specifies email addresses */
- var email = der.readString(ALTNAME.RFC822Name);
- id = Identity.forEmail(email);
- if (!cert.subjects[0].equals(id))
- cert.subjects.push(id);
- break;
- case ALTNAME.DirectoryName:
- der.readSequence(ALTNAME.DirectoryName);
- id = Identity.parseAsn1(der);
- if (!cert.subjects[0].equals(id))
- cert.subjects.push(id);
- break;
- case ALTNAME.DNSName:
- var host = der.readString(
- ALTNAME.DNSName);
- id = Identity.forHost(host);
- if (!cert.subjects[0].equals(id))
- cert.subjects.push(id);
- break;
- default:
- der.readString(der.peek());
- break;
- }
- }
- sig.extras.exts.push({ oid: extId, critical: critical });
- break;
- default:
- sig.extras.exts.push({
- oid: extId,
- critical: critical,
- data: der.readString(asn1.Ber.OctetString, true)
- });
- break;
- }
-
- der._offset = after;
-}
-
-var UTCTIME_RE =
- /^([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})?Z$/;
-function utcTimeToDate(t) {
- var m = t.match(UTCTIME_RE);
- assert.ok(m, 'timestamps must be in UTC');
- var d = new Date();
-
- var thisYear = d.getUTCFullYear();
- var century = Math.floor(thisYear / 100) * 100;
-
- var year = parseInt(m[1], 10);
- if (thisYear % 100 < 50 && year >= 60)
- year += (century - 1);
- else
- year += century;
- d.setUTCFullYear(year, parseInt(m[2], 10) - 1, parseInt(m[3], 10));
- d.setUTCHours(parseInt(m[4], 10), parseInt(m[5], 10));
- if (m[6] && m[6].length > 0)
- d.setUTCSeconds(parseInt(m[6], 10));
- return (d);
-}
-
-var GTIME_RE =
- /^([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})?Z$/;
-function gTimeToDate(t) {
- var m = t.match(GTIME_RE);
- assert.ok(m);
- var d = new Date();
-
- d.setUTCFullYear(parseInt(m[1], 10), parseInt(m[2], 10) - 1,
- parseInt(m[3], 10));
- d.setUTCHours(parseInt(m[4], 10), parseInt(m[5], 10));
- if (m[6] && m[6].length > 0)
- d.setUTCSeconds(parseInt(m[6], 10));
- return (d);
-}
-
-function zeroPad(n, m) {
- if (m === undefined)
- m = 2;
- var s = '' + n;
- while (s.length < m)
- s = '0' + s;
- return (s);
-}
-
-function dateToUTCTime(d) {
- var s = '';
- s += zeroPad(d.getUTCFullYear() % 100);
- s += zeroPad(d.getUTCMonth() + 1);
- s += zeroPad(d.getUTCDate());
- s += zeroPad(d.getUTCHours());
- s += zeroPad(d.getUTCMinutes());
- s += zeroPad(d.getUTCSeconds());
- s += 'Z';
- return (s);
-}
-
-function dateToGTime(d) {
- var s = '';
- s += zeroPad(d.getUTCFullYear(), 4);
- s += zeroPad(d.getUTCMonth() + 1);
- s += zeroPad(d.getUTCDate());
- s += zeroPad(d.getUTCHours());
- s += zeroPad(d.getUTCMinutes());
- s += zeroPad(d.getUTCSeconds());
- s += 'Z';
- return (s);
-}
-
-function sign(cert, key) {
- if (cert.signatures.x509 === undefined)
- cert.signatures.x509 = {};
- var sig = cert.signatures.x509;
-
- sig.algo = key.type + '-' + key.defaultHashAlgorithm();
- if (SIGN_ALGS[sig.algo] === undefined)
- return (false);
-
- var der = new asn1.BerWriter();
- writeTBSCert(cert, der);
- var blob = der.buffer;
- sig.cache = blob;
-
- var signer = key.createSign();
- signer.write(blob);
- cert.signatures.x509.signature = signer.sign();
-
- return (true);
-}
-
-function signAsync(cert, signer, done) {
- if (cert.signatures.x509 === undefined)
- cert.signatures.x509 = {};
- var sig = cert.signatures.x509;
-
- var der = new asn1.BerWriter();
- writeTBSCert(cert, der);
- var blob = der.buffer;
- sig.cache = blob;
-
- signer(blob, function (err, signature) {
- if (err) {
- done(err);
- return;
- }
- sig.algo = signature.type + '-' + signature.hashAlgorithm;
- if (SIGN_ALGS[sig.algo] === undefined) {
- done(new Error('Invalid signing algorithm "' +
- sig.algo + '"'));
- return;
- }
- sig.signature = signature;
- done();
- });
-}
-
-function write(cert, options) {
- var sig = cert.signatures.x509;
- assert.object(sig, 'x509 signature');
-
- var der = new asn1.BerWriter();
- der.startSequence();
- if (sig.cache) {
- der._ensure(sig.cache.length);
- sig.cache.copy(der._buf, der._offset);
- der._offset += sig.cache.length;
- } else {
- writeTBSCert(cert, der);
- }
-
- der.startSequence();
- der.writeOID(SIGN_ALGS[sig.algo]);
- if (sig.algo.match(/^rsa-/))
- der.writeNull();
- der.endSequence();
-
- var sigData = sig.signature.toBuffer('asn1');
- var data = Buffer.alloc(sigData.length + 1);
- data[0] = 0;
- sigData.copy(data, 1);
- der.writeBuffer(data, asn1.Ber.BitString);
- der.endSequence();
-
- return (der.buffer);
-}
-
-function writeTBSCert(cert, der) {
- var sig = cert.signatures.x509;
- assert.object(sig, 'x509 signature');
-
- der.startSequence();
-
- der.startSequence(Local(0));
- der.writeInt(2);
- der.endSequence();
-
- der.writeBuffer(utils.mpNormalize(cert.serial), asn1.Ber.Integer);
-
- der.startSequence();
- der.writeOID(SIGN_ALGS[sig.algo]);
- if (sig.algo.match(/^rsa-/))
- der.writeNull();
- der.endSequence();
-
- cert.issuer.toAsn1(der);
-
- der.startSequence();
- writeDate(der, cert.validFrom);
- writeDate(der, cert.validUntil);
- der.endSequence();
-
- var subject = cert.subjects[0];
- var altNames = cert.subjects.slice(1);
- subject.toAsn1(der);
-
- pkcs8.writePkcs8(der, cert.subjectKey);
-
- if (sig.extras && sig.extras.issuerUniqueID) {
- der.writeBuffer(sig.extras.issuerUniqueID, Local(1));
- }
-
- if (sig.extras && sig.extras.subjectUniqueID) {
- der.writeBuffer(sig.extras.subjectUniqueID, Local(2));
- }
-
- if (altNames.length > 0 || subject.type === 'host' ||
- (cert.purposes !== undefined && cert.purposes.length > 0) ||
- (sig.extras && sig.extras.exts)) {
- der.startSequence(Local(3));
- der.startSequence();
-
- var exts = [];
- if (cert.purposes !== undefined && cert.purposes.length > 0) {
- exts.push({
- oid: EXTS.basicConstraints,
- critical: true
- });
- exts.push({
- oid: EXTS.keyUsage,
- critical: true
- });
- exts.push({
- oid: EXTS.extKeyUsage,
- critical: true
- });
- }
- exts.push({ oid: EXTS.altName });
- if (sig.extras && sig.extras.exts)
- exts = sig.extras.exts;
-
- for (var i = 0; i < exts.length; ++i) {
- der.startSequence();
- der.writeOID(exts[i].oid);
-
- if (exts[i].critical !== undefined)
- der.writeBoolean(exts[i].critical);
-
- if (exts[i].oid === EXTS.altName) {
- der.startSequence(asn1.Ber.OctetString);
- der.startSequence();
- if (subject.type === 'host') {
- der.writeString(subject.hostname,
- Context(2));
- }
- for (var j = 0; j < altNames.length; ++j) {
- if (altNames[j].type === 'host') {
- der.writeString(
- altNames[j].hostname,
- ALTNAME.DNSName);
- } else if (altNames[j].type ===
- 'email') {
- der.writeString(
- altNames[j].email,
- ALTNAME.RFC822Name);
- } else {
- /*
- * Encode anything else as a
- * DN style name for now.
- */
- der.startSequence(
- ALTNAME.DirectoryName);
- altNames[j].toAsn1(der);
- der.endSequence();
- }
- }
- der.endSequence();
- der.endSequence();
- } else if (exts[i].oid === EXTS.basicConstraints) {
- der.startSequence(asn1.Ber.OctetString);
- der.startSequence();
- var ca = (cert.purposes.indexOf('ca') !== -1);
- var pathLen = exts[i].pathLen;
- der.writeBoolean(ca);
- if (pathLen !== undefined)
- der.writeInt(pathLen);
- der.endSequence();
- der.endSequence();
- } else if (exts[i].oid === EXTS.extKeyUsage) {
- der.startSequence(asn1.Ber.OctetString);
- der.startSequence();
- cert.purposes.forEach(function (purpose) {
- if (purpose === 'ca')
- return;
- if (KEYUSEBITS.indexOf(purpose) !== -1)
- return;
- var oid = purpose;
- if (EXTPURPOSE[purpose] !== undefined)
- oid = EXTPURPOSE[purpose];
- der.writeOID(oid);
- });
- der.endSequence();
- der.endSequence();
- } else if (exts[i].oid === EXTS.keyUsage) {
- der.startSequence(asn1.Ber.OctetString);
- /*
- * If we parsed this certificate from a byte
- * stream (i.e. we didn't generate it in sshpk)
- * then we'll have a ".bits" property on the
- * ext with the original raw byte contents.
- *
- * If we have this, use it here instead of
- * regenerating it. This guarantees we output
- * the same data we parsed, so signatures still
- * validate.
- */
- if (exts[i].bits !== undefined) {
- der.writeBuffer(exts[i].bits,
- asn1.Ber.BitString);
- } else {
- var bits = writeBitField(cert.purposes,
- KEYUSEBITS);
- der.writeBuffer(bits,
- asn1.Ber.BitString);
- }
- der.endSequence();
- } else {
- der.writeBuffer(exts[i].data,
- asn1.Ber.OctetString);
- }
-
- der.endSequence();
- }
-
- der.endSequence();
- der.endSequence();
- }
-
- der.endSequence();
-}
-
-/*
- * Reads an ASN.1 BER bitfield out of the Buffer produced by doing
- * `BerReader#readString(asn1.Ber.BitString)`. That function gives us the raw
- * contents of the BitString tag, which is a count of unused bits followed by
- * the bits as a right-padded byte string.
- *
- * `bits` is the Buffer, `bitIndex` should contain an array of string names
- * for the bits in the string, ordered starting with bit #0 in the ASN.1 spec.
- *
- * Returns an array of Strings, the names of the bits that were set to 1.
- */
-function readBitField(bits, bitIndex) {
- var bitLen = 8 * (bits.length - 1) - bits[0];
- var setBits = {};
- for (var i = 0; i < bitLen; ++i) {
- var byteN = 1 + Math.floor(i / 8);
- var bit = 7 - (i % 8);
- var mask = 1 << bit;
- var bitVal = ((bits[byteN] & mask) !== 0);
- var name = bitIndex[i];
- if (bitVal && typeof (name) === 'string') {
- setBits[name] = true;
- }
- }
- return (Object.keys(setBits));
-}
-
-/*
- * `setBits` is an array of strings, containing the names for each bit that
- * sould be set to 1. `bitIndex` is same as in `readBitField()`.
- *
- * Returns a Buffer, ready to be written out with `BerWriter#writeString()`.
- */
-function writeBitField(setBits, bitIndex) {
- var bitLen = bitIndex.length;
- var blen = Math.ceil(bitLen / 8);
- var unused = blen * 8 - bitLen;
- var bits = Buffer.alloc(1 + blen); // zero-filled
- bits[0] = unused;
- for (var i = 0; i < bitLen; ++i) {
- var byteN = 1 + Math.floor(i / 8);
- var bit = 7 - (i % 8);
- var mask = 1 << bit;
- var name = bitIndex[i];
- if (name === undefined)
- continue;
- var bitVal = (setBits.indexOf(name) !== -1);
- if (bitVal) {
- bits[byteN] |= mask;
- }
- }
- return (bits);
-}
diff --git a/deps/npm/node_modules/sshpk/lib/identity.js b/deps/npm/node_modules/sshpk/lib/identity.js
deleted file mode 100644
index 7d75b6671b62a8..00000000000000
--- a/deps/npm/node_modules/sshpk/lib/identity.js
+++ /dev/null
@@ -1,373 +0,0 @@
-// Copyright 2017 Joyent, Inc.
-
-module.exports = Identity;
-
-var assert = require('assert-plus');
-var algs = require('./algs');
-var crypto = require('crypto');
-var Fingerprint = require('./fingerprint');
-var Signature = require('./signature');
-var errs = require('./errors');
-var util = require('util');
-var utils = require('./utils');
-var asn1 = require('asn1');
-var Buffer = require('safer-buffer').Buffer;
-
-/*JSSTYLED*/
-var DNS_NAME_RE = /^([*]|[a-z0-9][a-z0-9\-]{0,62})(?:\.([*]|[a-z0-9][a-z0-9\-]{0,62}))*$/i;
-
-var oids = {};
-oids.cn = '2.5.4.3';
-oids.o = '2.5.4.10';
-oids.ou = '2.5.4.11';
-oids.l = '2.5.4.7';
-oids.s = '2.5.4.8';
-oids.c = '2.5.4.6';
-oids.sn = '2.5.4.4';
-oids.postalCode = '2.5.4.17';
-oids.serialNumber = '2.5.4.5';
-oids.street = '2.5.4.9';
-oids.x500UniqueIdentifier = '2.5.4.45';
-oids.role = '2.5.4.72';
-oids.telephoneNumber = '2.5.4.20';
-oids.description = '2.5.4.13';
-oids.dc = '0.9.2342.19200300.100.1.25';
-oids.uid = '0.9.2342.19200300.100.1.1';
-oids.mail = '0.9.2342.19200300.100.1.3';
-oids.title = '2.5.4.12';
-oids.gn = '2.5.4.42';
-oids.initials = '2.5.4.43';
-oids.pseudonym = '2.5.4.65';
-oids.emailAddress = '1.2.840.113549.1.9.1';
-
-var unoids = {};
-Object.keys(oids).forEach(function (k) {
- unoids[oids[k]] = k;
-});
-
-function Identity(opts) {
- var self = this;
- assert.object(opts, 'options');
- assert.arrayOfObject(opts.components, 'options.components');
- this.components = opts.components;
- this.componentLookup = {};
- this.components.forEach(function (c) {
- if (c.name && !c.oid)
- c.oid = oids[c.name];
- if (c.oid && !c.name)
- c.name = unoids[c.oid];
- if (self.componentLookup[c.name] === undefined)
- self.componentLookup[c.name] = [];
- self.componentLookup[c.name].push(c);
- });
- if (this.componentLookup.cn && this.componentLookup.cn.length > 0) {
- this.cn = this.componentLookup.cn[0].value;
- }
- assert.optionalString(opts.type, 'options.type');
- if (opts.type === undefined) {
- if (this.components.length === 1 &&
- this.componentLookup.cn &&
- this.componentLookup.cn.length === 1 &&
- this.componentLookup.cn[0].value.match(DNS_NAME_RE)) {
- this.type = 'host';
- this.hostname = this.componentLookup.cn[0].value;
-
- } else if (this.componentLookup.dc &&
- this.components.length === this.componentLookup.dc.length) {
- this.type = 'host';
- this.hostname = this.componentLookup.dc.map(
- function (c) {
- return (c.value);
- }).join('.');
-
- } else if (this.componentLookup.uid &&
- this.components.length ===
- this.componentLookup.uid.length) {
- this.type = 'user';
- this.uid = this.componentLookup.uid[0].value;
-
- } else if (this.componentLookup.cn &&
- this.componentLookup.cn.length === 1 &&
- this.componentLookup.cn[0].value.match(DNS_NAME_RE)) {
- this.type = 'host';
- this.hostname = this.componentLookup.cn[0].value;
-
- } else if (this.componentLookup.uid &&
- this.componentLookup.uid.length === 1) {
- this.type = 'user';
- this.uid = this.componentLookup.uid[0].value;
-
- } else if (this.componentLookup.mail &&
- this.componentLookup.mail.length === 1) {
- this.type = 'email';
- this.email = this.componentLookup.mail[0].value;
-
- } else if (this.componentLookup.cn &&
- this.componentLookup.cn.length === 1) {
- this.type = 'user';
- this.uid = this.componentLookup.cn[0].value;
-
- } else {
- this.type = 'unknown';
- }
- } else {
- this.type = opts.type;
- if (this.type === 'host')
- this.hostname = opts.hostname;
- else if (this.type === 'user')
- this.uid = opts.uid;
- else if (this.type === 'email')
- this.email = opts.email;
- else
- throw (new Error('Unknown type ' + this.type));
- }
-}
-
-Identity.prototype.toString = function () {
- return (this.components.map(function (c) {
- var n = c.name.toUpperCase();
- /*JSSTYLED*/
- n = n.replace(/=/g, '\\=');
- var v = c.value;
- /*JSSTYLED*/
- v = v.replace(/,/g, '\\,');
- return (n + '=' + v);
- }).join(', '));
-};
-
-Identity.prototype.get = function (name, asArray) {
- assert.string(name, 'name');
- var arr = this.componentLookup[name];
- if (arr === undefined || arr.length === 0)
- return (undefined);
- if (!asArray && arr.length > 1)
- throw (new Error('Multiple values for attribute ' + name));
- if (!asArray)
- return (arr[0].value);
- return (arr.map(function (c) {
- return (c.value);
- }));
-};
-
-Identity.prototype.toArray = function (idx) {
- return (this.components.map(function (c) {
- return ({
- name: c.name,
- value: c.value
- });
- }));
-};
-
-/*
- * These are from X.680 -- PrintableString allowed chars are in section 37.4
- * table 8. Spec for IA5Strings is "1,6 + SPACE + DEL" where 1 refers to
- * ISO IR #001 (standard ASCII control characters) and 6 refers to ISO IR #006
- * (the basic ASCII character set).
- */
-/* JSSTYLED */
-var NOT_PRINTABLE = /[^a-zA-Z0-9 '(),+.\/:=?-]/;
-/* JSSTYLED */
-var NOT_IA5 = /[^\x00-\x7f]/;
-
-Identity.prototype.toAsn1 = function (der, tag) {
- der.startSequence(tag);
- this.components.forEach(function (c) {
- der.startSequence(asn1.Ber.Constructor | asn1.Ber.Set);
- der.startSequence();
- der.writeOID(c.oid);
- /*
- * If we fit in a PrintableString, use that. Otherwise use an
- * IA5String or UTF8String.
- *
- * If this identity was parsed from a DN, use the ASN.1 types
- * from the original representation (otherwise this might not
- * be a full match for the original in some validators).
- */
- if (c.asn1type === asn1.Ber.Utf8String ||
- c.value.match(NOT_IA5)) {
- var v = Buffer.from(c.value, 'utf8');
- der.writeBuffer(v, asn1.Ber.Utf8String);
-
- } else if (c.asn1type === asn1.Ber.IA5String ||
- c.value.match(NOT_PRINTABLE)) {
- der.writeString(c.value, asn1.Ber.IA5String);
-
- } else {
- var type = asn1.Ber.PrintableString;
- if (c.asn1type !== undefined)
- type = c.asn1type;
- der.writeString(c.value, type);
- }
- der.endSequence();
- der.endSequence();
- });
- der.endSequence();
-};
-
-function globMatch(a, b) {
- if (a === '**' || b === '**')
- return (true);
- var aParts = a.split('.');
- var bParts = b.split('.');
- if (aParts.length !== bParts.length)
- return (false);
- for (var i = 0; i < aParts.length; ++i) {
- if (aParts[i] === '*' || bParts[i] === '*')
- continue;
- if (aParts[i] !== bParts[i])
- return (false);
- }
- return (true);
-}
-
-Identity.prototype.equals = function (other) {
- if (!Identity.isIdentity(other, [1, 0]))
- return (false);
- if (other.components.length !== this.components.length)
- return (false);
- for (var i = 0; i < this.components.length; ++i) {
- if (this.components[i].oid !== other.components[i].oid)
- return (false);
- if (!globMatch(this.components[i].value,
- other.components[i].value)) {
- return (false);
- }
- }
- return (true);
-};
-
-Identity.forHost = function (hostname) {
- assert.string(hostname, 'hostname');
- return (new Identity({
- type: 'host',
- hostname: hostname,
- components: [ { name: 'cn', value: hostname } ]
- }));
-};
-
-Identity.forUser = function (uid) {
- assert.string(uid, 'uid');
- return (new Identity({
- type: 'user',
- uid: uid,
- components: [ { name: 'uid', value: uid } ]
- }));
-};
-
-Identity.forEmail = function (email) {
- assert.string(email, 'email');
- return (new Identity({
- type: 'email',
- email: email,
- components: [ { name: 'mail', value: email } ]
- }));
-};
-
-Identity.parseDN = function (dn) {
- assert.string(dn, 'dn');
- var parts = [''];
- var idx = 0;
- var rem = dn;
- while (rem.length > 0) {
- var m;
- /*JSSTYLED*/
- if ((m = /^,/.exec(rem)) !== null) {
- parts[++idx] = '';
- rem = rem.slice(m[0].length);
- /*JSSTYLED*/
- } else if ((m = /^\\,/.exec(rem)) !== null) {
- parts[idx] += ',';
- rem = rem.slice(m[0].length);
- /*JSSTYLED*/
- } else if ((m = /^\\./.exec(rem)) !== null) {
- parts[idx] += m[0];
- rem = rem.slice(m[0].length);
- /*JSSTYLED*/
- } else if ((m = /^[^\\,]+/.exec(rem)) !== null) {
- parts[idx] += m[0];
- rem = rem.slice(m[0].length);
- } else {
- throw (new Error('Failed to parse DN'));
- }
- }
- var cmps = parts.map(function (c) {
- c = c.trim();
- var eqPos = c.indexOf('=');
- while (eqPos > 0 && c.charAt(eqPos - 1) === '\\')
- eqPos = c.indexOf('=', eqPos + 1);
- if (eqPos === -1) {
- throw (new Error('Failed to parse DN'));
- }
- /*JSSTYLED*/
- var name = c.slice(0, eqPos).toLowerCase().replace(/\\=/g, '=');
- var value = c.slice(eqPos + 1);
- return ({ name: name, value: value });
- });
- return (new Identity({ components: cmps }));
-};
-
-Identity.fromArray = function (components) {
- assert.arrayOfObject(components, 'components');
- components.forEach(function (cmp) {
- assert.object(cmp, 'component');
- assert.string(cmp.name, 'component.name');
- if (!Buffer.isBuffer(cmp.value) &&
- !(typeof (cmp.value) === 'string')) {
- throw (new Error('Invalid component value'));
- }
- });
- return (new Identity({ components: components }));
-};
-
-Identity.parseAsn1 = function (der, top) {
- var components = [];
- der.readSequence(top);
- var end = der.offset + der.length;
- while (der.offset < end) {
- der.readSequence(asn1.Ber.Constructor | asn1.Ber.Set);
- var after = der.offset + der.length;
- der.readSequence();
- var oid = der.readOID();
- var type = der.peek();
- var value;
- switch (type) {
- case asn1.Ber.PrintableString:
- case asn1.Ber.IA5String:
- case asn1.Ber.OctetString:
- case asn1.Ber.T61String:
- value = der.readString(type);
- break;
- case asn1.Ber.Utf8String:
- value = der.readString(type, true);
- value = value.toString('utf8');
- break;
- case asn1.Ber.CharacterString:
- case asn1.Ber.BMPString:
- value = der.readString(type, true);
- value = value.toString('utf16le');
- break;
- default:
- throw (new Error('Unknown asn1 type ' + type));
- }
- components.push({ oid: oid, asn1type: type, value: value });
- der._offset = after;
- }
- der._offset = end;
- return (new Identity({
- components: components
- }));
-};
-
-Identity.isIdentity = function (obj, ver) {
- return (utils.isCompatible(obj, Identity, ver));
-};
-
-/*
- * API versions for Identity:
- * [1,0] -- initial ver
- */
-Identity.prototype._sshpkApiVersion = [1, 0];
-
-Identity._oldVersionDetect = function (obj) {
- return ([1, 0]);
-};
diff --git a/deps/npm/node_modules/sshpk/lib/index.js b/deps/npm/node_modules/sshpk/lib/index.js
deleted file mode 100644
index f76db7918dc360..00000000000000
--- a/deps/npm/node_modules/sshpk/lib/index.js
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2015 Joyent, Inc.
-
-var Key = require('./key');
-var Fingerprint = require('./fingerprint');
-var Signature = require('./signature');
-var PrivateKey = require('./private-key');
-var Certificate = require('./certificate');
-var Identity = require('./identity');
-var errs = require('./errors');
-
-module.exports = {
- /* top-level classes */
- Key: Key,
- parseKey: Key.parse,
- Fingerprint: Fingerprint,
- parseFingerprint: Fingerprint.parse,
- Signature: Signature,
- parseSignature: Signature.parse,
- PrivateKey: PrivateKey,
- parsePrivateKey: PrivateKey.parse,
- generatePrivateKey: PrivateKey.generate,
- Certificate: Certificate,
- parseCertificate: Certificate.parse,
- createSelfSignedCertificate: Certificate.createSelfSigned,
- createCertificate: Certificate.create,
- Identity: Identity,
- identityFromDN: Identity.parseDN,
- identityForHost: Identity.forHost,
- identityForUser: Identity.forUser,
- identityForEmail: Identity.forEmail,
- identityFromArray: Identity.fromArray,
-
- /* errors */
- FingerprintFormatError: errs.FingerprintFormatError,
- InvalidAlgorithmError: errs.InvalidAlgorithmError,
- KeyParseError: errs.KeyParseError,
- SignatureParseError: errs.SignatureParseError,
- KeyEncryptedError: errs.KeyEncryptedError,
- CertificateParseError: errs.CertificateParseError
-};
diff --git a/deps/npm/node_modules/sshpk/lib/key.js b/deps/npm/node_modules/sshpk/lib/key.js
deleted file mode 100644
index 706f83400d554a..00000000000000
--- a/deps/npm/node_modules/sshpk/lib/key.js
+++ /dev/null
@@ -1,294 +0,0 @@
-// Copyright 2018 Joyent, Inc.
-
-module.exports = Key;
-
-var assert = require('assert-plus');
-var algs = require('./algs');
-var crypto = require('crypto');
-var Fingerprint = require('./fingerprint');
-var Signature = require('./signature');
-var DiffieHellman = require('./dhe').DiffieHellman;
-var errs = require('./errors');
-var utils = require('./utils');
-var PrivateKey = require('./private-key');
-var edCompat;
-
-try {
- edCompat = require('./ed-compat');
-} catch (e) {
- /* Just continue through, and bail out if we try to use it. */
-}
-
-var InvalidAlgorithmError = errs.InvalidAlgorithmError;
-var KeyParseError = errs.KeyParseError;
-
-var formats = {};
-formats['auto'] = require('./formats/auto');
-formats['pem'] = require('./formats/pem');
-formats['pkcs1'] = require('./formats/pkcs1');
-formats['pkcs8'] = require('./formats/pkcs8');
-formats['rfc4253'] = require('./formats/rfc4253');
-formats['ssh'] = require('./formats/ssh');
-formats['ssh-private'] = require('./formats/ssh-private');
-formats['openssh'] = formats['ssh-private'];
-formats['dnssec'] = require('./formats/dnssec');
-formats['putty'] = require('./formats/putty');
-formats['ppk'] = formats['putty'];
-
-function Key(opts) {
- assert.object(opts, 'options');
- assert.arrayOfObject(opts.parts, 'options.parts');
- assert.string(opts.type, 'options.type');
- assert.optionalString(opts.comment, 'options.comment');
-
- var algInfo = algs.info[opts.type];
- if (typeof (algInfo) !== 'object')
- throw (new InvalidAlgorithmError(opts.type));
-
- var partLookup = {};
- for (var i = 0; i < opts.parts.length; ++i) {
- var part = opts.parts[i];
- partLookup[part.name] = part;
- }
-
- this.type = opts.type;
- this.parts = opts.parts;
- this.part = partLookup;
- this.comment = undefined;
- this.source = opts.source;
-
- /* for speeding up hashing/fingerprint operations */
- this._rfc4253Cache = opts._rfc4253Cache;
- this._hashCache = {};
-
- var sz;
- this.curve = undefined;
- if (this.type === 'ecdsa') {
- var curve = this.part.curve.data.toString();
- this.curve = curve;
- sz = algs.curves[curve].size;
- } else if (this.type === 'ed25519' || this.type === 'curve25519') {
- sz = 256;
- this.curve = 'curve25519';
- } else {
- var szPart = this.part[algInfo.sizePart];
- sz = szPart.data.length;
- sz = sz * 8 - utils.countZeros(szPart.data);
- }
- this.size = sz;
-}
-
-Key.formats = formats;
-
-Key.prototype.toBuffer = function (format, options) {
- if (format === undefined)
- format = 'ssh';
- assert.string(format, 'format');
- assert.object(formats[format], 'formats[format]');
- assert.optionalObject(options, 'options');
-
- if (format === 'rfc4253') {
- if (this._rfc4253Cache === undefined)
- this._rfc4253Cache = formats['rfc4253'].write(this);
- return (this._rfc4253Cache);
- }
-
- return (formats[format].write(this, options));
-};
-
-Key.prototype.toString = function (format, options) {
- return (this.toBuffer(format, options).toString());
-};
-
-Key.prototype.hash = function (algo, type) {
- assert.string(algo, 'algorithm');
- assert.optionalString(type, 'type');
- if (type === undefined)
- type = 'ssh';
- algo = algo.toLowerCase();
- if (algs.hashAlgs[algo] === undefined)
- throw (new InvalidAlgorithmError(algo));
-
- var cacheKey = algo + '||' + type;
- if (this._hashCache[cacheKey])
- return (this._hashCache[cacheKey]);
-
- var buf;
- if (type === 'ssh') {
- buf = this.toBuffer('rfc4253');
- } else if (type === 'spki') {
- buf = formats.pkcs8.pkcs8ToBuffer(this);
- } else {
- throw (new Error('Hash type ' + type + ' not supported'));
- }
- var hash = crypto.createHash(algo).update(buf).digest();
- this._hashCache[cacheKey] = hash;
- return (hash);
-};
-
-Key.prototype.fingerprint = function (algo, type) {
- if (algo === undefined)
- algo = 'sha256';
- if (type === undefined)
- type = 'ssh';
- assert.string(algo, 'algorithm');
- assert.string(type, 'type');
- var opts = {
- type: 'key',
- hash: this.hash(algo, type),
- algorithm: algo,
- hashType: type
- };
- return (new Fingerprint(opts));
-};
-
-Key.prototype.defaultHashAlgorithm = function () {
- var hashAlgo = 'sha1';
- if (this.type === 'rsa')
- hashAlgo = 'sha256';
- if (this.type === 'dsa' && this.size > 1024)
- hashAlgo = 'sha256';
- if (this.type === 'ed25519')
- hashAlgo = 'sha512';
- if (this.type === 'ecdsa') {
- if (this.size <= 256)
- hashAlgo = 'sha256';
- else if (this.size <= 384)
- hashAlgo = 'sha384';
- else
- hashAlgo = 'sha512';
- }
- return (hashAlgo);
-};
-
-Key.prototype.createVerify = function (hashAlgo) {
- if (hashAlgo === undefined)
- hashAlgo = this.defaultHashAlgorithm();
- assert.string(hashAlgo, 'hash algorithm');
-
- /* ED25519 is not supported by OpenSSL, use a javascript impl. */
- if (this.type === 'ed25519' && edCompat !== undefined)
- return (new edCompat.Verifier(this, hashAlgo));
- if (this.type === 'curve25519')
- throw (new Error('Curve25519 keys are not suitable for ' +
- 'signing or verification'));
-
- var v, nm, err;
- try {
- nm = hashAlgo.toUpperCase();
- v = crypto.createVerify(nm);
- } catch (e) {
- err = e;
- }
- if (v === undefined || (err instanceof Error &&
- err.message.match(/Unknown message digest/))) {
- nm = 'RSA-';
- nm += hashAlgo.toUpperCase();
- v = crypto.createVerify(nm);
- }
- assert.ok(v, 'failed to create verifier');
- var oldVerify = v.verify.bind(v);
- var key = this.toBuffer('pkcs8');
- var curve = this.curve;
- var self = this;
- v.verify = function (signature, fmt) {
- if (Signature.isSignature(signature, [2, 0])) {
- if (signature.type !== self.type)
- return (false);
- if (signature.hashAlgorithm &&
- signature.hashAlgorithm !== hashAlgo)
- return (false);
- if (signature.curve && self.type === 'ecdsa' &&
- signature.curve !== curve)
- return (false);
- return (oldVerify(key, signature.toBuffer('asn1')));
-
- } else if (typeof (signature) === 'string' ||
- Buffer.isBuffer(signature)) {
- return (oldVerify(key, signature, fmt));
-
- /*
- * Avoid doing this on valid arguments, walking the prototype
- * chain can be quite slow.
- */
- } else if (Signature.isSignature(signature, [1, 0])) {
- throw (new Error('signature was created by too old ' +
- 'a version of sshpk and cannot be verified'));
-
- } else {
- throw (new TypeError('signature must be a string, ' +
- 'Buffer, or Signature object'));
- }
- };
- return (v);
-};
-
-Key.prototype.createDiffieHellman = function () {
- if (this.type === 'rsa')
- throw (new Error('RSA keys do not support Diffie-Hellman'));
-
- return (new DiffieHellman(this));
-};
-Key.prototype.createDH = Key.prototype.createDiffieHellman;
-
-Key.parse = function (data, format, options) {
- if (typeof (data) !== 'string')
- assert.buffer(data, 'data');
- if (format === undefined)
- format = 'auto';
- assert.string(format, 'format');
- if (typeof (options) === 'string')
- options = { filename: options };
- assert.optionalObject(options, 'options');
- if (options === undefined)
- options = {};
- assert.optionalString(options.filename, 'options.filename');
- if (options.filename === undefined)
- options.filename = '(unnamed)';
-
- assert.object(formats[format], 'formats[format]');
-
- try {
- var k = formats[format].read(data, options);
- if (k instanceof PrivateKey)
- k = k.toPublic();
- if (!k.comment)
- k.comment = options.filename;
- return (k);
- } catch (e) {
- if (e.name === 'KeyEncryptedError')
- throw (e);
- throw (new KeyParseError(options.filename, format, e));
- }
-};
-
-Key.isKey = function (obj, ver) {
- return (utils.isCompatible(obj, Key, ver));
-};
-
-/*
- * API versions for Key:
- * [1,0] -- initial ver, may take Signature for createVerify or may not
- * [1,1] -- added pkcs1, pkcs8 formats
- * [1,2] -- added auto, ssh-private, openssh formats
- * [1,3] -- added defaultHashAlgorithm
- * [1,4] -- added ed support, createDH
- * [1,5] -- first explicitly tagged version
- * [1,6] -- changed ed25519 part names
- * [1,7] -- spki hash types
- */
-Key.prototype._sshpkApiVersion = [1, 7];
-
-Key._oldVersionDetect = function (obj) {
- assert.func(obj.toBuffer);
- assert.func(obj.fingerprint);
- if (obj.createDH)
- return ([1, 4]);
- if (obj.defaultHashAlgorithm)
- return ([1, 3]);
- if (obj.formats['auto'])
- return ([1, 2]);
- if (obj.formats['pkcs1'])
- return ([1, 1]);
- return ([1, 0]);
-};
diff --git a/deps/npm/node_modules/sshpk/lib/private-key.js b/deps/npm/node_modules/sshpk/lib/private-key.js
deleted file mode 100644
index 560083801ece1a..00000000000000
--- a/deps/npm/node_modules/sshpk/lib/private-key.js
+++ /dev/null
@@ -1,246 +0,0 @@
-// Copyright 2017 Joyent, Inc.
-
-module.exports = PrivateKey;
-
-var assert = require('assert-plus');
-var Buffer = require('safer-buffer').Buffer;
-var algs = require('./algs');
-var crypto = require('crypto');
-var Fingerprint = require('./fingerprint');
-var Signature = require('./signature');
-var errs = require('./errors');
-var util = require('util');
-var utils = require('./utils');
-var dhe = require('./dhe');
-var generateECDSA = dhe.generateECDSA;
-var generateED25519 = dhe.generateED25519;
-var edCompat = require('./ed-compat');
-var nacl = require('tweetnacl');
-
-var Key = require('./key');
-
-var InvalidAlgorithmError = errs.InvalidAlgorithmError;
-var KeyParseError = errs.KeyParseError;
-var KeyEncryptedError = errs.KeyEncryptedError;
-
-var formats = {};
-formats['auto'] = require('./formats/auto');
-formats['pem'] = require('./formats/pem');
-formats['pkcs1'] = require('./formats/pkcs1');
-formats['pkcs8'] = require('./formats/pkcs8');
-formats['rfc4253'] = require('./formats/rfc4253');
-formats['ssh-private'] = require('./formats/ssh-private');
-formats['openssh'] = formats['ssh-private'];
-formats['ssh'] = formats['ssh-private'];
-formats['dnssec'] = require('./formats/dnssec');
-
-function PrivateKey(opts) {
- assert.object(opts, 'options');
- Key.call(this, opts);
-
- this._pubCache = undefined;
-}
-util.inherits(PrivateKey, Key);
-
-PrivateKey.formats = formats;
-
-PrivateKey.prototype.toBuffer = function (format, options) {
- if (format === undefined)
- format = 'pkcs1';
- assert.string(format, 'format');
- assert.object(formats[format], 'formats[format]');
- assert.optionalObject(options, 'options');
-
- return (formats[format].write(this, options));
-};
-
-PrivateKey.prototype.hash = function (algo, type) {
- return (this.toPublic().hash(algo, type));
-};
-
-PrivateKey.prototype.fingerprint = function (algo, type) {
- return (this.toPublic().fingerprint(algo, type));
-};
-
-PrivateKey.prototype.toPublic = function () {
- if (this._pubCache)
- return (this._pubCache);
-
- var algInfo = algs.info[this.type];
- var pubParts = [];
- for (var i = 0; i < algInfo.parts.length; ++i) {
- var p = algInfo.parts[i];
- pubParts.push(this.part[p]);
- }
-
- this._pubCache = new Key({
- type: this.type,
- source: this,
- parts: pubParts
- });
- if (this.comment)
- this._pubCache.comment = this.comment;
- return (this._pubCache);
-};
-
-PrivateKey.prototype.derive = function (newType) {
- assert.string(newType, 'type');
- var priv, pub, pair;
-
- if (this.type === 'ed25519' && newType === 'curve25519') {
- priv = this.part.k.data;
- if (priv[0] === 0x00)
- priv = priv.slice(1);
-
- pair = nacl.box.keyPair.fromSecretKey(new Uint8Array(priv));
- pub = Buffer.from(pair.publicKey);
-
- return (new PrivateKey({
- type: 'curve25519',
- parts: [
- { name: 'A', data: utils.mpNormalize(pub) },
- { name: 'k', data: utils.mpNormalize(priv) }
- ]
- }));
- } else if (this.type === 'curve25519' && newType === 'ed25519') {
- priv = this.part.k.data;
- if (priv[0] === 0x00)
- priv = priv.slice(1);
-
- pair = nacl.sign.keyPair.fromSeed(new Uint8Array(priv));
- pub = Buffer.from(pair.publicKey);
-
- return (new PrivateKey({
- type: 'ed25519',
- parts: [
- { name: 'A', data: utils.mpNormalize(pub) },
- { name: 'k', data: utils.mpNormalize(priv) }
- ]
- }));
- }
- throw (new Error('Key derivation not supported from ' + this.type +
- ' to ' + newType));
-};
-
-PrivateKey.prototype.createVerify = function (hashAlgo) {
- return (this.toPublic().createVerify(hashAlgo));
-};
-
-PrivateKey.prototype.createSign = function (hashAlgo) {
- if (hashAlgo === undefined)
- hashAlgo = this.defaultHashAlgorithm();
- assert.string(hashAlgo, 'hash algorithm');
-
- /* ED25519 is not supported by OpenSSL, use a javascript impl. */
- if (this.type === 'ed25519' && edCompat !== undefined)
- return (new edCompat.Signer(this, hashAlgo));
- if (this.type === 'curve25519')
- throw (new Error('Curve25519 keys are not suitable for ' +
- 'signing or verification'));
-
- var v, nm, err;
- try {
- nm = hashAlgo.toUpperCase();
- v = crypto.createSign(nm);
- } catch (e) {
- err = e;
- }
- if (v === undefined || (err instanceof Error &&
- err.message.match(/Unknown message digest/))) {
- nm = 'RSA-';
- nm += hashAlgo.toUpperCase();
- v = crypto.createSign(nm);
- }
- assert.ok(v, 'failed to create verifier');
- var oldSign = v.sign.bind(v);
- var key = this.toBuffer('pkcs1');
- var type = this.type;
- var curve = this.curve;
- v.sign = function () {
- var sig = oldSign(key);
- if (typeof (sig) === 'string')
- sig = Buffer.from(sig, 'binary');
- sig = Signature.parse(sig, type, 'asn1');
- sig.hashAlgorithm = hashAlgo;
- sig.curve = curve;
- return (sig);
- };
- return (v);
-};
-
-PrivateKey.parse = function (data, format, options) {
- if (typeof (data) !== 'string')
- assert.buffer(data, 'data');
- if (format === undefined)
- format = 'auto';
- assert.string(format, 'format');
- if (typeof (options) === 'string')
- options = { filename: options };
- assert.optionalObject(options, 'options');
- if (options === undefined)
- options = {};
- assert.optionalString(options.filename, 'options.filename');
- if (options.filename === undefined)
- options.filename = '(unnamed)';
-
- assert.object(formats[format], 'formats[format]');
-
- try {
- var k = formats[format].read(data, options);
- assert.ok(k instanceof PrivateKey, 'key is not a private key');
- if (!k.comment)
- k.comment = options.filename;
- return (k);
- } catch (e) {
- if (e.name === 'KeyEncryptedError')
- throw (e);
- throw (new KeyParseError(options.filename, format, e));
- }
-};
-
-PrivateKey.isPrivateKey = function (obj, ver) {
- return (utils.isCompatible(obj, PrivateKey, ver));
-};
-
-PrivateKey.generate = function (type, options) {
- if (options === undefined)
- options = {};
- assert.object(options, 'options');
-
- switch (type) {
- case 'ecdsa':
- if (options.curve === undefined)
- options.curve = 'nistp256';
- assert.string(options.curve, 'options.curve');
- return (generateECDSA(options.curve));
- case 'ed25519':
- return (generateED25519());
- default:
- throw (new Error('Key generation not supported with key ' +
- 'type "' + type + '"'));
- }
-};
-
-/*
- * API versions for PrivateKey:
- * [1,0] -- initial ver
- * [1,1] -- added auto, pkcs[18], openssh/ssh-private formats
- * [1,2] -- added defaultHashAlgorithm
- * [1,3] -- added derive, ed, createDH
- * [1,4] -- first tagged version
- * [1,5] -- changed ed25519 part names and format
- * [1,6] -- type arguments for hash() and fingerprint()
- */
-PrivateKey.prototype._sshpkApiVersion = [1, 6];
-
-PrivateKey._oldVersionDetect = function (obj) {
- assert.func(obj.toPublic);
- assert.func(obj.createSign);
- if (obj.derive)
- return ([1, 3]);
- if (obj.defaultHashAlgorithm)
- return ([1, 2]);
- if (obj.formats['auto'])
- return ([1, 1]);
- return ([1, 0]);
-};
diff --git a/deps/npm/node_modules/sshpk/lib/signature.js b/deps/npm/node_modules/sshpk/lib/signature.js
deleted file mode 100644
index aa8fdbb8782616..00000000000000
--- a/deps/npm/node_modules/sshpk/lib/signature.js
+++ /dev/null
@@ -1,314 +0,0 @@
-// Copyright 2015 Joyent, Inc.
-
-module.exports = Signature;
-
-var assert = require('assert-plus');
-var Buffer = require('safer-buffer').Buffer;
-var algs = require('./algs');
-var crypto = require('crypto');
-var errs = require('./errors');
-var utils = require('./utils');
-var asn1 = require('asn1');
-var SSHBuffer = require('./ssh-buffer');
-
-var InvalidAlgorithmError = errs.InvalidAlgorithmError;
-var SignatureParseError = errs.SignatureParseError;
-
-function Signature(opts) {
- assert.object(opts, 'options');
- assert.arrayOfObject(opts.parts, 'options.parts');
- assert.string(opts.type, 'options.type');
-
- var partLookup = {};
- for (var i = 0; i < opts.parts.length; ++i) {
- var part = opts.parts[i];
- partLookup[part.name] = part;
- }
-
- this.type = opts.type;
- this.hashAlgorithm = opts.hashAlgo;
- this.curve = opts.curve;
- this.parts = opts.parts;
- this.part = partLookup;
-}
-
-Signature.prototype.toBuffer = function (format) {
- if (format === undefined)
- format = 'asn1';
- assert.string(format, 'format');
-
- var buf;
- var stype = 'ssh-' + this.type;
-
- switch (this.type) {
- case 'rsa':
- switch (this.hashAlgorithm) {
- case 'sha256':
- stype = 'rsa-sha2-256';
- break;
- case 'sha512':
- stype = 'rsa-sha2-512';
- break;
- case 'sha1':
- case undefined:
- break;
- default:
- throw (new Error('SSH signature ' +
- 'format does not support hash ' +
- 'algorithm ' + this.hashAlgorithm));
- }
- if (format === 'ssh') {
- buf = new SSHBuffer({});
- buf.writeString(stype);
- buf.writePart(this.part.sig);
- return (buf.toBuffer());
- } else {
- return (this.part.sig.data);
- }
- break;
-
- case 'ed25519':
- if (format === 'ssh') {
- buf = new SSHBuffer({});
- buf.writeString(stype);
- buf.writePart(this.part.sig);
- return (buf.toBuffer());
- } else {
- return (this.part.sig.data);
- }
- break;
-
- case 'dsa':
- case 'ecdsa':
- var r, s;
- if (format === 'asn1') {
- var der = new asn1.BerWriter();
- der.startSequence();
- r = utils.mpNormalize(this.part.r.data);
- s = utils.mpNormalize(this.part.s.data);
- der.writeBuffer(r, asn1.Ber.Integer);
- der.writeBuffer(s, asn1.Ber.Integer);
- der.endSequence();
- return (der.buffer);
- } else if (format === 'ssh' && this.type === 'dsa') {
- buf = new SSHBuffer({});
- buf.writeString('ssh-dss');
- r = this.part.r.data;
- if (r.length > 20 && r[0] === 0x00)
- r = r.slice(1);
- s = this.part.s.data;
- if (s.length > 20 && s[0] === 0x00)
- s = s.slice(1);
- if ((this.hashAlgorithm &&
- this.hashAlgorithm !== 'sha1') ||
- r.length + s.length !== 40) {
- throw (new Error('OpenSSH only supports ' +
- 'DSA signatures with SHA1 hash'));
- }
- buf.writeBuffer(Buffer.concat([r, s]));
- return (buf.toBuffer());
- } else if (format === 'ssh' && this.type === 'ecdsa') {
- var inner = new SSHBuffer({});
- r = this.part.r.data;
- inner.writeBuffer(r);
- inner.writePart(this.part.s);
-
- buf = new SSHBuffer({});
- /* XXX: find a more proper way to do this? */
- var curve;
- if (r[0] === 0x00)
- r = r.slice(1);
- var sz = r.length * 8;
- if (sz === 256)
- curve = 'nistp256';
- else if (sz === 384)
- curve = 'nistp384';
- else if (sz === 528)
- curve = 'nistp521';
- buf.writeString('ecdsa-sha2-' + curve);
- buf.writeBuffer(inner.toBuffer());
- return (buf.toBuffer());
- }
- throw (new Error('Invalid signature format'));
- default:
- throw (new Error('Invalid signature data'));
- }
-};
-
-Signature.prototype.toString = function (format) {
- assert.optionalString(format, 'format');
- return (this.toBuffer(format).toString('base64'));
-};
-
-Signature.parse = function (data, type, format) {
- if (typeof (data) === 'string')
- data = Buffer.from(data, 'base64');
- assert.buffer(data, 'data');
- assert.string(format, 'format');
- assert.string(type, 'type');
-
- var opts = {};
- opts.type = type.toLowerCase();
- opts.parts = [];
-
- try {
- assert.ok(data.length > 0, 'signature must not be empty');
- switch (opts.type) {
- case 'rsa':
- return (parseOneNum(data, type, format, opts));
- case 'ed25519':
- return (parseOneNum(data, type, format, opts));
-
- case 'dsa':
- case 'ecdsa':
- if (format === 'asn1')
- return (parseDSAasn1(data, type, format, opts));
- else if (opts.type === 'dsa')
- return (parseDSA(data, type, format, opts));
- else
- return (parseECDSA(data, type, format, opts));
-
- default:
- throw (new InvalidAlgorithmError(type));
- }
-
- } catch (e) {
- if (e instanceof InvalidAlgorithmError)
- throw (e);
- throw (new SignatureParseError(type, format, e));
- }
-};
-
-function parseOneNum(data, type, format, opts) {
- if (format === 'ssh') {
- try {
- var buf = new SSHBuffer({buffer: data});
- var head = buf.readString();
- } catch (e) {
- /* fall through */
- }
- if (buf !== undefined) {
- var msg = 'SSH signature does not match expected ' +
- 'type (expected ' + type + ', got ' + head + ')';
- switch (head) {
- case 'ssh-rsa':
- assert.strictEqual(type, 'rsa', msg);
- opts.hashAlgo = 'sha1';
- break;
- case 'rsa-sha2-256':
- assert.strictEqual(type, 'rsa', msg);
- opts.hashAlgo = 'sha256';
- break;
- case 'rsa-sha2-512':
- assert.strictEqual(type, 'rsa', msg);
- opts.hashAlgo = 'sha512';
- break;
- case 'ssh-ed25519':
- assert.strictEqual(type, 'ed25519', msg);
- opts.hashAlgo = 'sha512';
- break;
- default:
- throw (new Error('Unknown SSH signature ' +
- 'type: ' + head));
- }
- var sig = buf.readPart();
- assert.ok(buf.atEnd(), 'extra trailing bytes');
- sig.name = 'sig';
- opts.parts.push(sig);
- return (new Signature(opts));
- }
- }
- opts.parts.push({name: 'sig', data: data});
- return (new Signature(opts));
-}
-
-function parseDSAasn1(data, type, format, opts) {
- var der = new asn1.BerReader(data);
- der.readSequence();
- var r = der.readString(asn1.Ber.Integer, true);
- var s = der.readString(asn1.Ber.Integer, true);
-
- opts.parts.push({name: 'r', data: utils.mpNormalize(r)});
- opts.parts.push({name: 's', data: utils.mpNormalize(s)});
-
- return (new Signature(opts));
-}
-
-function parseDSA(data, type, format, opts) {
- if (data.length != 40) {
- var buf = new SSHBuffer({buffer: data});
- var d = buf.readBuffer();
- if (d.toString('ascii') === 'ssh-dss')
- d = buf.readBuffer();
- assert.ok(buf.atEnd(), 'extra trailing bytes');
- assert.strictEqual(d.length, 40, 'invalid inner length');
- data = d;
- }
- opts.parts.push({name: 'r', data: data.slice(0, 20)});
- opts.parts.push({name: 's', data: data.slice(20, 40)});
- return (new Signature(opts));
-}
-
-function parseECDSA(data, type, format, opts) {
- var buf = new SSHBuffer({buffer: data});
-
- var r, s;
- var inner = buf.readBuffer();
- var stype = inner.toString('ascii');
- if (stype.slice(0, 6) === 'ecdsa-') {
- var parts = stype.split('-');
- assert.strictEqual(parts[0], 'ecdsa');
- assert.strictEqual(parts[1], 'sha2');
- opts.curve = parts[2];
- switch (opts.curve) {
- case 'nistp256':
- opts.hashAlgo = 'sha256';
- break;
- case 'nistp384':
- opts.hashAlgo = 'sha384';
- break;
- case 'nistp521':
- opts.hashAlgo = 'sha512';
- break;
- default:
- throw (new Error('Unsupported ECDSA curve: ' +
- opts.curve));
- }
- inner = buf.readBuffer();
- assert.ok(buf.atEnd(), 'extra trailing bytes on outer');
- buf = new SSHBuffer({buffer: inner});
- r = buf.readPart();
- } else {
- r = {data: inner};
- }
-
- s = buf.readPart();
- assert.ok(buf.atEnd(), 'extra trailing bytes');
-
- r.name = 'r';
- s.name = 's';
-
- opts.parts.push(r);
- opts.parts.push(s);
- return (new Signature(opts));
-}
-
-Signature.isSignature = function (obj, ver) {
- return (utils.isCompatible(obj, Signature, ver));
-};
-
-/*
- * API versions for Signature:
- * [1,0] -- initial ver
- * [2,0] -- support for rsa in full ssh format, compat with sshpk-agent
- * hashAlgorithm property
- * [2,1] -- first tagged version
- */
-Signature.prototype._sshpkApiVersion = [2, 1];
-
-Signature._oldVersionDetect = function (obj) {
- assert.func(obj.toBuffer);
- if (obj.hasOwnProperty('hashAlgorithm'))
- return ([2, 0]);
- return ([1, 0]);
-};
diff --git a/deps/npm/node_modules/sshpk/lib/ssh-buffer.js b/deps/npm/node_modules/sshpk/lib/ssh-buffer.js
deleted file mode 100644
index 1dd286c8d2c369..00000000000000
--- a/deps/npm/node_modules/sshpk/lib/ssh-buffer.js
+++ /dev/null
@@ -1,149 +0,0 @@
-// Copyright 2015 Joyent, Inc.
-
-module.exports = SSHBuffer;
-
-var assert = require('assert-plus');
-var Buffer = require('safer-buffer').Buffer;
-
-function SSHBuffer(opts) {
- assert.object(opts, 'options');
- if (opts.buffer !== undefined)
- assert.buffer(opts.buffer, 'options.buffer');
-
- this._size = opts.buffer ? opts.buffer.length : 1024;
- this._buffer = opts.buffer || Buffer.alloc(this._size);
- this._offset = 0;
-}
-
-SSHBuffer.prototype.toBuffer = function () {
- return (this._buffer.slice(0, this._offset));
-};
-
-SSHBuffer.prototype.atEnd = function () {
- return (this._offset >= this._buffer.length);
-};
-
-SSHBuffer.prototype.remainder = function () {
- return (this._buffer.slice(this._offset));
-};
-
-SSHBuffer.prototype.skip = function (n) {
- this._offset += n;
-};
-
-SSHBuffer.prototype.expand = function () {
- this._size *= 2;
- var buf = Buffer.alloc(this._size);
- this._buffer.copy(buf, 0);
- this._buffer = buf;
-};
-
-SSHBuffer.prototype.readPart = function () {
- return ({data: this.readBuffer()});
-};
-
-SSHBuffer.prototype.readBuffer = function () {
- var len = this._buffer.readUInt32BE(this._offset);
- this._offset += 4;
- assert.ok(this._offset + len <= this._buffer.length,
- 'length out of bounds at +0x' + this._offset.toString(16) +
- ' (data truncated?)');
- var buf = this._buffer.slice(this._offset, this._offset + len);
- this._offset += len;
- return (buf);
-};
-
-SSHBuffer.prototype.readString = function () {
- return (this.readBuffer().toString());
-};
-
-SSHBuffer.prototype.readCString = function () {
- var offset = this._offset;
- while (offset < this._buffer.length &&
- this._buffer[offset] !== 0x00)
- offset++;
- assert.ok(offset < this._buffer.length, 'c string does not terminate');
- var str = this._buffer.slice(this._offset, offset).toString();
- this._offset = offset + 1;
- return (str);
-};
-
-SSHBuffer.prototype.readInt = function () {
- var v = this._buffer.readUInt32BE(this._offset);
- this._offset += 4;
- return (v);
-};
-
-SSHBuffer.prototype.readInt64 = function () {
- assert.ok(this._offset + 8 < this._buffer.length,
- 'buffer not long enough to read Int64');
- var v = this._buffer.slice(this._offset, this._offset + 8);
- this._offset += 8;
- return (v);
-};
-
-SSHBuffer.prototype.readChar = function () {
- var v = this._buffer[this._offset++];
- return (v);
-};
-
-SSHBuffer.prototype.writeBuffer = function (buf) {
- while (this._offset + 4 + buf.length > this._size)
- this.expand();
- this._buffer.writeUInt32BE(buf.length, this._offset);
- this._offset += 4;
- buf.copy(this._buffer, this._offset);
- this._offset += buf.length;
-};
-
-SSHBuffer.prototype.writeString = function (str) {
- this.writeBuffer(Buffer.from(str, 'utf8'));
-};
-
-SSHBuffer.prototype.writeCString = function (str) {
- while (this._offset + 1 + str.length > this._size)
- this.expand();
- this._buffer.write(str, this._offset);
- this._offset += str.length;
- this._buffer[this._offset++] = 0;
-};
-
-SSHBuffer.prototype.writeInt = function (v) {
- while (this._offset + 4 > this._size)
- this.expand();
- this._buffer.writeUInt32BE(v, this._offset);
- this._offset += 4;
-};
-
-SSHBuffer.prototype.writeInt64 = function (v) {
- assert.buffer(v, 'value');
- if (v.length > 8) {
- var lead = v.slice(0, v.length - 8);
- for (var i = 0; i < lead.length; ++i) {
- assert.strictEqual(lead[i], 0,
- 'must fit in 64 bits of precision');
- }
- v = v.slice(v.length - 8, v.length);
- }
- while (this._offset + 8 > this._size)
- this.expand();
- v.copy(this._buffer, this._offset);
- this._offset += 8;
-};
-
-SSHBuffer.prototype.writeChar = function (v) {
- while (this._offset + 1 > this._size)
- this.expand();
- this._buffer[this._offset++] = v;
-};
-
-SSHBuffer.prototype.writePart = function (p) {
- this.writeBuffer(p.data);
-};
-
-SSHBuffer.prototype.write = function (buf) {
- while (this._offset + buf.length > this._size)
- this.expand();
- buf.copy(this._buffer, this._offset);
- this._offset += buf.length;
-};
diff --git a/deps/npm/node_modules/sshpk/lib/utils.js b/deps/npm/node_modules/sshpk/lib/utils.js
deleted file mode 100644
index 6b83a322d151b0..00000000000000
--- a/deps/npm/node_modules/sshpk/lib/utils.js
+++ /dev/null
@@ -1,404 +0,0 @@
-// Copyright 2015 Joyent, Inc.
-
-module.exports = {
- bufferSplit: bufferSplit,
- addRSAMissing: addRSAMissing,
- calculateDSAPublic: calculateDSAPublic,
- calculateED25519Public: calculateED25519Public,
- calculateX25519Public: calculateX25519Public,
- mpNormalize: mpNormalize,
- mpDenormalize: mpDenormalize,
- ecNormalize: ecNormalize,
- countZeros: countZeros,
- assertCompatible: assertCompatible,
- isCompatible: isCompatible,
- opensslKeyDeriv: opensslKeyDeriv,
- opensshCipherInfo: opensshCipherInfo,
- publicFromPrivateECDSA: publicFromPrivateECDSA,
- zeroPadToLength: zeroPadToLength,
- writeBitString: writeBitString,
- readBitString: readBitString,
- pbkdf2: pbkdf2
-};
-
-var assert = require('assert-plus');
-var Buffer = require('safer-buffer').Buffer;
-var PrivateKey = require('./private-key');
-var Key = require('./key');
-var crypto = require('crypto');
-var algs = require('./algs');
-var asn1 = require('asn1');
-
-var ec = require('ecc-jsbn/lib/ec');
-var jsbn = require('jsbn').BigInteger;
-var nacl = require('tweetnacl');
-
-var MAX_CLASS_DEPTH = 3;
-
-function isCompatible(obj, klass, needVer) {
- if (obj === null || typeof (obj) !== 'object')
- return (false);
- if (needVer === undefined)
- needVer = klass.prototype._sshpkApiVersion;
- if (obj instanceof klass &&
- klass.prototype._sshpkApiVersion[0] == needVer[0])
- return (true);
- var proto = Object.getPrototypeOf(obj);
- var depth = 0;
- while (proto.constructor.name !== klass.name) {
- proto = Object.getPrototypeOf(proto);
- if (!proto || ++depth > MAX_CLASS_DEPTH)
- return (false);
- }
- if (proto.constructor.name !== klass.name)
- return (false);
- var ver = proto._sshpkApiVersion;
- if (ver === undefined)
- ver = klass._oldVersionDetect(obj);
- if (ver[0] != needVer[0] || ver[1] < needVer[1])
- return (false);
- return (true);
-}
-
-function assertCompatible(obj, klass, needVer, name) {
- if (name === undefined)
- name = 'object';
- assert.ok(obj, name + ' must not be null');
- assert.object(obj, name + ' must be an object');
- if (needVer === undefined)
- needVer = klass.prototype._sshpkApiVersion;
- if (obj instanceof klass &&
- klass.prototype._sshpkApiVersion[0] == needVer[0])
- return;
- var proto = Object.getPrototypeOf(obj);
- var depth = 0;
- while (proto.constructor.name !== klass.name) {
- proto = Object.getPrototypeOf(proto);
- assert.ok(proto && ++depth <= MAX_CLASS_DEPTH,
- name + ' must be a ' + klass.name + ' instance');
- }
- assert.strictEqual(proto.constructor.name, klass.name,
- name + ' must be a ' + klass.name + ' instance');
- var ver = proto._sshpkApiVersion;
- if (ver === undefined)
- ver = klass._oldVersionDetect(obj);
- assert.ok(ver[0] == needVer[0] && ver[1] >= needVer[1],
- name + ' must be compatible with ' + klass.name + ' klass ' +
- 'version ' + needVer[0] + '.' + needVer[1]);
-}
-
-var CIPHER_LEN = {
- 'des-ede3-cbc': { key: 24, iv: 8 },
- 'aes-128-cbc': { key: 16, iv: 16 },
- 'aes-256-cbc': { key: 32, iv: 16 }
-};
-var PKCS5_SALT_LEN = 8;
-
-function opensslKeyDeriv(cipher, salt, passphrase, count) {
- assert.buffer(salt, 'salt');
- assert.buffer(passphrase, 'passphrase');
- assert.number(count, 'iteration count');
-
- var clen = CIPHER_LEN[cipher];
- assert.object(clen, 'supported cipher');
-
- salt = salt.slice(0, PKCS5_SALT_LEN);
-
- var D, D_prev, bufs;
- var material = Buffer.alloc(0);
- while (material.length < clen.key + clen.iv) {
- bufs = [];
- if (D_prev)
- bufs.push(D_prev);
- bufs.push(passphrase);
- bufs.push(salt);
- D = Buffer.concat(bufs);
- for (var j = 0; j < count; ++j)
- D = crypto.createHash('md5').update(D).digest();
- material = Buffer.concat([material, D]);
- D_prev = D;
- }
-
- return ({
- key: material.slice(0, clen.key),
- iv: material.slice(clen.key, clen.key + clen.iv)
- });
-}
-
-/* See: RFC2898 */
-function pbkdf2(hashAlg, salt, iterations, size, passphrase) {
- var hkey = Buffer.alloc(salt.length + 4);
- salt.copy(hkey);
-
- var gen = 0, ts = [];
- var i = 1;
- while (gen < size) {
- var t = T(i++);
- gen += t.length;
- ts.push(t);
- }
- return (Buffer.concat(ts).slice(0, size));
-
- function T(I) {
- hkey.writeUInt32BE(I, hkey.length - 4);
-
- var hmac = crypto.createHmac(hashAlg, passphrase);
- hmac.update(hkey);
-
- var Ti = hmac.digest();
- var Uc = Ti;
- var c = 1;
- while (c++ < iterations) {
- hmac = crypto.createHmac(hashAlg, passphrase);
- hmac.update(Uc);
- Uc = hmac.digest();
- for (var x = 0; x < Ti.length; ++x)
- Ti[x] ^= Uc[x];
- }
- return (Ti);
- }
-}
-
-/* Count leading zero bits on a buffer */
-function countZeros(buf) {
- var o = 0, obit = 8;
- while (o < buf.length) {
- var mask = (1 << obit);
- if ((buf[o] & mask) === mask)
- break;
- obit--;
- if (obit < 0) {
- o++;
- obit = 8;
- }
- }
- return (o*8 + (8 - obit) - 1);
-}
-
-function bufferSplit(buf, chr) {
- assert.buffer(buf);
- assert.string(chr);
-
- var parts = [];
- var lastPart = 0;
- var matches = 0;
- for (var i = 0; i < buf.length; ++i) {
- if (buf[i] === chr.charCodeAt(matches))
- ++matches;
- else if (buf[i] === chr.charCodeAt(0))
- matches = 1;
- else
- matches = 0;
-
- if (matches >= chr.length) {
- var newPart = i + 1;
- parts.push(buf.slice(lastPart, newPart - matches));
- lastPart = newPart;
- matches = 0;
- }
- }
- if (lastPart <= buf.length)
- parts.push(buf.slice(lastPart, buf.length));
-
- return (parts);
-}
-
-function ecNormalize(buf, addZero) {
- assert.buffer(buf);
- if (buf[0] === 0x00 && buf[1] === 0x04) {
- if (addZero)
- return (buf);
- return (buf.slice(1));
- } else if (buf[0] === 0x04) {
- if (!addZero)
- return (buf);
- } else {
- while (buf[0] === 0x00)
- buf = buf.slice(1);
- if (buf[0] === 0x02 || buf[0] === 0x03)
- throw (new Error('Compressed elliptic curve points ' +
- 'are not supported'));
- if (buf[0] !== 0x04)
- throw (new Error('Not a valid elliptic curve point'));
- if (!addZero)
- return (buf);
- }
- var b = Buffer.alloc(buf.length + 1);
- b[0] = 0x0;
- buf.copy(b, 1);
- return (b);
-}
-
-function readBitString(der, tag) {
- if (tag === undefined)
- tag = asn1.Ber.BitString;
- var buf = der.readString(tag, true);
- assert.strictEqual(buf[0], 0x00, 'bit strings with unused bits are ' +
- 'not supported (0x' + buf[0].toString(16) + ')');
- return (buf.slice(1));
-}
-
-function writeBitString(der, buf, tag) {
- if (tag === undefined)
- tag = asn1.Ber.BitString;
- var b = Buffer.alloc(buf.length + 1);
- b[0] = 0x00;
- buf.copy(b, 1);
- der.writeBuffer(b, tag);
-}
-
-function mpNormalize(buf) {
- assert.buffer(buf);
- while (buf.length > 1 && buf[0] === 0x00 && (buf[1] & 0x80) === 0x00)
- buf = buf.slice(1);
- if ((buf[0] & 0x80) === 0x80) {
- var b = Buffer.alloc(buf.length + 1);
- b[0] = 0x00;
- buf.copy(b, 1);
- buf = b;
- }
- return (buf);
-}
-
-function mpDenormalize(buf) {
- assert.buffer(buf);
- while (buf.length > 1 && buf[0] === 0x00)
- buf = buf.slice(1);
- return (buf);
-}
-
-function zeroPadToLength(buf, len) {
- assert.buffer(buf);
- assert.number(len);
- while (buf.length > len) {
- assert.equal(buf[0], 0x00);
- buf = buf.slice(1);
- }
- while (buf.length < len) {
- var b = Buffer.alloc(buf.length + 1);
- b[0] = 0x00;
- buf.copy(b, 1);
- buf = b;
- }
- return (buf);
-}
-
-function bigintToMpBuf(bigint) {
- var buf = Buffer.from(bigint.toByteArray());
- buf = mpNormalize(buf);
- return (buf);
-}
-
-function calculateDSAPublic(g, p, x) {
- assert.buffer(g);
- assert.buffer(p);
- assert.buffer(x);
- g = new jsbn(g);
- p = new jsbn(p);
- x = new jsbn(x);
- var y = g.modPow(x, p);
- var ybuf = bigintToMpBuf(y);
- return (ybuf);
-}
-
-function calculateED25519Public(k) {
- assert.buffer(k);
-
- var kp = nacl.sign.keyPair.fromSeed(new Uint8Array(k));
- return (Buffer.from(kp.publicKey));
-}
-
-function calculateX25519Public(k) {
- assert.buffer(k);
-
- var kp = nacl.box.keyPair.fromSeed(new Uint8Array(k));
- return (Buffer.from(kp.publicKey));
-}
-
-function addRSAMissing(key) {
- assert.object(key);
- assertCompatible(key, PrivateKey, [1, 1]);
-
- var d = new jsbn(key.part.d.data);
- var buf;
-
- if (!key.part.dmodp) {
- var p = new jsbn(key.part.p.data);
- var dmodp = d.mod(p.subtract(1));
-
- buf = bigintToMpBuf(dmodp);
- key.part.dmodp = {name: 'dmodp', data: buf};
- key.parts.push(key.part.dmodp);
- }
- if (!key.part.dmodq) {
- var q = new jsbn(key.part.q.data);
- var dmodq = d.mod(q.subtract(1));
-
- buf = bigintToMpBuf(dmodq);
- key.part.dmodq = {name: 'dmodq', data: buf};
- key.parts.push(key.part.dmodq);
- }
-}
-
-function publicFromPrivateECDSA(curveName, priv) {
- assert.string(curveName, 'curveName');
- assert.buffer(priv);
- var params = algs.curves[curveName];
- var p = new jsbn(params.p);
- var a = new jsbn(params.a);
- var b = new jsbn(params.b);
- var curve = new ec.ECCurveFp(p, a, b);
- var G = curve.decodePointHex(params.G.toString('hex'));
-
- var d = new jsbn(mpNormalize(priv));
- var pub = G.multiply(d);
- pub = Buffer.from(curve.encodePointHex(pub), 'hex');
-
- var parts = [];
- parts.push({name: 'curve', data: Buffer.from(curveName)});
- parts.push({name: 'Q', data: pub});
-
- var key = new Key({type: 'ecdsa', curve: curve, parts: parts});
- return (key);
-}
-
-function opensshCipherInfo(cipher) {
- var inf = {};
- switch (cipher) {
- case '3des-cbc':
- inf.keySize = 24;
- inf.blockSize = 8;
- inf.opensslName = 'des-ede3-cbc';
- break;
- case 'blowfish-cbc':
- inf.keySize = 16;
- inf.blockSize = 8;
- inf.opensslName = 'bf-cbc';
- break;
- case 'aes128-cbc':
- case 'aes128-ctr':
- case 'aes128-gcm@openssh.com':
- inf.keySize = 16;
- inf.blockSize = 16;
- inf.opensslName = 'aes-128-' + cipher.slice(7, 10);
- break;
- case 'aes192-cbc':
- case 'aes192-ctr':
- case 'aes192-gcm@openssh.com':
- inf.keySize = 24;
- inf.blockSize = 16;
- inf.opensslName = 'aes-192-' + cipher.slice(7, 10);
- break;
- case 'aes256-cbc':
- case 'aes256-ctr':
- case 'aes256-gcm@openssh.com':
- inf.keySize = 32;
- inf.blockSize = 16;
- inf.opensslName = 'aes-256-' + cipher.slice(7, 10);
- break;
- default:
- throw (new Error(
- 'Unsupported openssl cipher "' + cipher + '"'));
- }
- return (inf);
-}
diff --git a/deps/npm/node_modules/sshpk/man/man1/sshpk-conv.1 b/deps/npm/node_modules/sshpk/man/man1/sshpk-conv.1
deleted file mode 100644
index 0887dce2728fb2..00000000000000
--- a/deps/npm/node_modules/sshpk/man/man1/sshpk-conv.1
+++ /dev/null
@@ -1,135 +0,0 @@
-.TH sshpk\-conv 1 "Jan 2016" sshpk "sshpk Commands"
-.SH NAME
-.PP
-sshpk\-conv \- convert between key formats
-.SH SYNOPSYS
-.PP
-\fB\fCsshpk\-conv\fR \-t FORMAT [FILENAME] [OPTIONS...]
-.PP
-\fB\fCsshpk\-conv\fR \-i [FILENAME] [OPTIONS...]
-.SH DESCRIPTION
-.PP
-Reads in a public or private key and converts it between different formats,
-particularly formats used in the SSH protocol and the well\-known PEM PKCS#1/7
-formats.
-.PP
-In the second form, with the \fB\fC\-i\fR option given, identifies a key and prints to
-stderr information about its nature, size and fingerprint.
-.SH EXAMPLES
-.PP
-Assume the following SSH\-format public key in \fB\fCid_ecdsa.pub\fR:
-.PP
-.RS
-.nf
-ecdsa\-sha2\-nistp256 AAAAE2VjZHNhLXNoYTI...9M/4c4= user@host
-.fi
-.RE
-.PP
-Identify it with \fB\fC\-i\fR:
-.PP
-.RS
-.nf
-$ sshpk\-conv \-i id_ecdsa.pub
-id_ecdsa: a 256 bit ECDSA public key
-ECDSA curve: nistp256
-Comment: user@host
-Fingerprint:
- SHA256:vCNX7eUkdvqqW0m4PoxQAZRv+CM4P4fS8+CbliAvS4k
- 81:ad:d5:57:e5:6f:7d:a2:93:79:56:af:d7:c0:38:51
-.fi
-.RE
-.PP
-Convert it to \fB\fCpkcs8\fR format, for use with e.g. OpenSSL:
-.PP
-.RS
-.nf
-$ sshpk\-conv \-t pkcs8 id_ecdsa
-\-\-\-\-\-BEGIN PUBLIC KEY\-\-\-\-\-
-MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAsA4R6N6AS3gzaPBeLjG2ObSgUsR
-zOt+kWJoijLnw3ZMYUKmAx+lD0I5XUxdrPcs1vH5f3cn9TvRvO9L0z/hzg==
-\-\-\-\-\-END PUBLIC KEY\-\-\-\-\-
-.fi
-.RE
-.PP
-Retrieve the public half of a private key:
-.PP
-.RS
-.nf
-$ openssl genrsa 2048 | sshpk\-conv \-t ssh \-c foo@bar
-ssh\-rsa AAAAB3NzaC1yc2EAAA...koK7 foo@bar
-.fi
-.RE
-.PP
-Convert a private key to PKCS#1 (OpenSSL) format from a new\-style OpenSSH key
-format (the \fB\fCssh\-keygen \-o\fR format):
-.PP
-.RS
-.nf
-$ ssh\-keygen \-o \-f foobar
-\&...
-$ sshpk\-conv \-p \-t pkcs1 foobar
-\-\-\-\-\-BEGIN RSA PRIVATE KEY\-\-\-\-\-
-MIIDpAIBAAKCAQEA6T/GYJndb1TRH3+NL....
-\-\-\-\-\-END RSA PRIVATE KEY\-\-\-\-\-
-.fi
-.RE
-.SH OPTIONS
-.TP
-\fB\fC\-i, \-\-identify\fR
-Instead of converting the key, output identifying information about it to
-stderr, including its type, size and fingerprints.
-.TP
-\fB\fC\-p, \-\-private\fR
-Treat the key as a private key instead of a public key (the default). If you
-supply \fB\fCsshpk\-conv\fR with a private key and do not give this option, it will
-extract only the public half of the key from it and work with that.
-.TP
-\fB\fC\-f PATH, \-\-file=PATH\fR
-Input file to take the key from instead of stdin. If a filename is supplied
-as a positional argument, it is equivalent to using this option.
-.TP
-\fB\fC\-o PATH, \-\-out=PATH\fR
-Output file name to use instead of stdout.
-.PP
-\fB\fC\-T FORMAT, \-\-informat=FORMAT\fR
-.TP
-\fB\fC\-t FORMAT, \-\-outformat=FORMAT\fR
-Selects the input and output formats to be used (see FORMATS, below).
-.TP
-\fB\fC\-c TEXT, \-\-comment=TEXT\fR
-Sets the key comment for the output file, if supported.
-.SH FORMATS
-.PP
-Currently supported formats:
-.TP
-\fB\fCpem, pkcs1\fR
-The standard PEM format used by older OpenSSH and most TLS libraries such as
-OpenSSL. The classic \fB\fCid_rsa\fR file is usually in this format. It is an ASN.1
-encoded structure, base64\-encoded and placed between PEM headers.
-.TP
-\fB\fCssh\fR
-The SSH public key text format (the format of an \fB\fCid_rsa.pub\fR file). A single
-line, containing 3 space separated parts: the key type, key body and optional
-key comment.
-.TP
-\fB\fCpkcs8\fR
-A newer PEM format, usually used only for public keys by TLS libraries such
-as OpenSSL. The ASN.1 structure is more generic than that of \fB\fCpkcs1\fR\&.
-.TP
-\fB\fCopenssh\fR
-The new \fB\fCssh\-keygen \-o\fR format from OpenSSH. This can be mistaken for a PEM
-encoding but is actually an OpenSSH internal format.
-.TP
-\fB\fCrfc4253\fR
-The internal binary format of keys when sent over the wire in the SSH
-protocol. This is also the format that the \fB\fCssh\-agent\fR uses in its protocol.
-.SH SEE ALSO
-.PP
-.BR ssh-keygen (1),
-.BR openssl (1)
-.SH BUGS
-.PP
-Encrypted (password\-protected) keys are not supported.
-.PP
-Report bugs at Github
-\[la]https://github.com/arekinath/node-sshpk/issues\[ra]
diff --git a/deps/npm/node_modules/sshpk/man/man1/sshpk-sign.1 b/deps/npm/node_modules/sshpk/man/man1/sshpk-sign.1
deleted file mode 100644
index 749916ba88745f..00000000000000
--- a/deps/npm/node_modules/sshpk/man/man1/sshpk-sign.1
+++ /dev/null
@@ -1,81 +0,0 @@
-.TH sshpk\-sign 1 "Jan 2016" sshpk "sshpk Commands"
-.SH NAME
-.PP
-sshpk\-sign \- sign data using an SSH key
-.SH SYNOPSYS
-.PP
-\fB\fCsshpk\-sign\fR \-i KEYPATH [OPTION...]
-.SH DESCRIPTION
-.PP
-Takes in arbitrary bytes, and signs them using an SSH private key. The key can
-be of any type or format supported by the \fB\fCsshpk\fR library, including the
-standard OpenSSH formats, as well as PEM PKCS#1 and PKCS#8.
-.PP
-The signature is printed out in Base64 encoding, unless the \fB\fC\-\-binary\fR or \fB\fC\-b\fR
-option is given.
-.SH EXAMPLES
-.PP
-Signing with default settings:
-.PP
-.RS
-.nf
-$ printf 'foo' | sshpk\-sign \-i ~/.ssh/id_ecdsa
-MEUCIAMdLS/vXrrtWFepwe...
-.fi
-.RE
-.PP
-Signing in SSH (RFC 4253) format (rather than the default ASN.1):
-.PP
-.RS
-.nf
-$ printf 'foo' | sshpk\-sign \-i ~/.ssh/id_ecdsa \-t ssh
-AAAAFGVjZHNhLXNoYTIt...
-.fi
-.RE
-.PP
-Saving the binary signature to a file:
-.PP
-.RS
-.nf
-$ printf 'foo' | sshpk\-sign \-i ~/.ssh/id_ecdsa \\
- \-o signature.bin \-b
-$ cat signature.bin | base64
-MEUCIAMdLS/vXrrtWFepwe...
-.fi
-.RE
-.SH OPTIONS
-.TP
-\fB\fC\-v, \-\-verbose\fR
-Print extra information about the key and signature to stderr when signing.
-.TP
-\fB\fC\-b, \-\-binary\fR
-Don't base64\-encode the signature before outputting it.
-.TP
-\fB\fC\-i KEY, \-\-identity=KEY\fR
-Select the key to be used for signing. \fB\fCKEY\fR must be a relative or absolute
-filesystem path to the key file. Any format supported by the \fB\fCsshpk\fR library
-is supported, including OpenSSH formats and standard PEM PKCS.
-.TP
-\fB\fC\-f PATH, \-\-file=PATH\fR
-Input file to sign instead of stdin.
-.TP
-\fB\fC\-o PATH, \-\-out=PATH\fR
-Output file to save signature in instead of stdout.
-.TP
-\fB\fC\-H HASH, \-\-hash=HASH\fR
-Set the hash algorithm to be used for signing. This should be one of \fB\fCsha1\fR,
-\fB\fCsha256\fR or \fB\fCsha512\fR\&. Some key types may place restrictions on which hash
-algorithms may be used (e.g. ED25519 keys can only use SHA\-512).
-.TP
-\fB\fC\-t FORMAT, \-\-format=FORMAT\fR
-Choose the signature format to use, from \fB\fCasn1\fR, \fB\fCssh\fR or \fB\fCraw\fR (only for
-ED25519 signatures). The \fB\fCasn1\fR format is the default, as it is the format
-used with TLS and typically the standard in most non\-SSH libraries (e.g.
-OpenSSL). The \fB\fCssh\fR format is used in the SSH protocol and by the ssh\-agent.
-.SH SEE ALSO
-.PP
-.BR sshpk-verify (1)
-.SH BUGS
-.PP
-Report bugs at Github
-\[la]https://github.com/arekinath/node-sshpk/issues\[ra]
diff --git a/deps/npm/node_modules/sshpk/man/man1/sshpk-verify.1 b/deps/npm/node_modules/sshpk/man/man1/sshpk-verify.1
deleted file mode 100644
index f79169d2753488..00000000000000
--- a/deps/npm/node_modules/sshpk/man/man1/sshpk-verify.1
+++ /dev/null
@@ -1,68 +0,0 @@
-.TH sshpk\-verify 1 "Jan 2016" sshpk "sshpk Commands"
-.SH NAME
-.PP
-sshpk\-verify \- verify a signature on data using an SSH key
-.SH SYNOPSYS
-.PP
-\fB\fCsshpk\-verify\fR \-i KEYPATH \-s SIGNATURE [OPTION...]
-.SH DESCRIPTION
-.PP
-Takes in arbitrary bytes and a Base64\-encoded signature, and verifies that the
-signature was produced by the private half of the given SSH public key.
-.SH EXAMPLES
-.PP
-.RS
-.nf
-$ printf 'foo' | sshpk\-verify \-i ~/.ssh/id_ecdsa \-s MEUCIQCYp...
-OK
-$ printf 'foo' | sshpk\-verify \-i ~/.ssh/id_ecdsa \-s GARBAGE...
-NOT OK
-.fi
-.RE
-.SH EXIT STATUS
-.TP
-\fB\fC0\fR
-Signature validates and matches the key.
-.TP
-\fB\fC1\fR
-Signature is parseable and the correct length but does not match the key or
-otherwise is invalid.
-.TP
-\fB\fC2\fR
-The signature or key could not be parsed.
-.TP
-\fB\fC3\fR
-Invalid commandline options were supplied.
-.SH OPTIONS
-.TP
-\fB\fC\-v, \-\-verbose\fR
-Print extra information about the key and signature to stderr when verifying.
-.TP
-\fB\fC\-i KEY, \-\-identity=KEY\fR
-Select the key to be used for verification. \fB\fCKEY\fR must be a relative or
-absolute filesystem path to the key file. Any format supported by the \fB\fCsshpk\fR
-library is supported, including OpenSSH formats and standard PEM PKCS.
-.TP
-\fB\fC\-s BASE64, \-\-signature=BASE64\fR
-Supplies the base64\-encoded signature to be verified.
-.TP
-\fB\fC\-f PATH, \-\-file=PATH\fR
-Input file to verify instead of stdin.
-.TP
-\fB\fC\-H HASH, \-\-hash=HASH\fR
-Set the hash algorithm to be used for signing. This should be one of \fB\fCsha1\fR,
-\fB\fCsha256\fR or \fB\fCsha512\fR\&. Some key types may place restrictions on which hash
-algorithms may be used (e.g. ED25519 keys can only use SHA\-512).
-.TP
-\fB\fC\-t FORMAT, \-\-format=FORMAT\fR
-Choose the signature format to use, from \fB\fCasn1\fR, \fB\fCssh\fR or \fB\fCraw\fR (only for
-ED25519 signatures). The \fB\fCasn1\fR format is the default, as it is the format
-used with TLS and typically the standard in most non\-SSH libraries (e.g.
-OpenSSL). The \fB\fCssh\fR format is used in the SSH protocol and by the ssh\-agent.
-.SH SEE ALSO
-.PP
-.BR sshpk-sign (1)
-.SH BUGS
-.PP
-Report bugs at Github
-\[la]https://github.com/arekinath/node-sshpk/issues\[ra]
diff --git a/deps/npm/node_modules/sshpk/package.json b/deps/npm/node_modules/sshpk/package.json
deleted file mode 100644
index cc78787f8c2af7..00000000000000
--- a/deps/npm/node_modules/sshpk/package.json
+++ /dev/null
@@ -1,60 +0,0 @@
-{
- "name": "sshpk",
- "version": "1.16.1",
- "description": "A library for finding and using SSH public keys",
- "main": "lib/index.js",
- "scripts": {
- "test": "tape test/*.js"
- },
- "repository": {
- "type": "git",
- "url": "git+https://github.com/joyent/node-sshpk.git"
- },
- "author": "Joyent, Inc",
- "contributors": [
- {
- "name": "Dave Eddy",
- "email": "dave@daveeddy.com"
- },
- {
- "name": "Mark Cavage",
- "email": "mcavage@gmail.com"
- },
- {
- "name": "Alex Wilson",
- "email": "alex@cooperi.net"
- }
- ],
- "license": "MIT",
- "bugs": {
- "url": "https://github.com/arekinath/node-sshpk/issues"
- },
- "engines": {
- "node": ">=0.10.0"
- },
- "directories": {
- "bin": "./bin",
- "lib": "./lib",
- "man": "./man/man1"
- },
- "homepage": "https://github.com/arekinath/node-sshpk#readme",
- "dependencies": {
- "asn1": "~0.2.3",
- "assert-plus": "^1.0.0",
- "dashdash": "^1.12.0",
- "getpass": "^0.1.1",
- "safer-buffer": "^2.0.2",
- "jsbn": "~0.1.0",
- "tweetnacl": "~0.14.0",
- "ecc-jsbn": "~0.1.1",
- "bcrypt-pbkdf": "^1.0.0"
- },
- "optionalDependencies": {
- },
- "devDependencies": {
- "tape": "^3.5.0",
- "benchmark": "^1.0.0",
- "sinon": "^1.17.2",
- "temp": "^0.8.2"
- }
-}
diff --git a/deps/npm/node_modules/tunnel-agent/LICENSE b/deps/npm/node_modules/tunnel-agent/LICENSE
deleted file mode 100644
index a4a9aee0c2fa14..00000000000000
--- a/deps/npm/node_modules/tunnel-agent/LICENSE
+++ /dev/null
@@ -1,55 +0,0 @@
-Apache License
-
-Version 2.0, January 2004
-
-http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
-
-"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
-
-"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
-
-"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
-
-"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
-
-"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
-
-"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
-
-"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
-
-"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
-
-"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
-
-You must give any other recipients of the Work or Derivative Works a copy of this License; and
-
-You must cause any modified files to carry prominent notices stating that You changed the files; and
-
-You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
-
-If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
\ No newline at end of file
diff --git a/deps/npm/node_modules/tunnel-agent/index.js b/deps/npm/node_modules/tunnel-agent/index.js
deleted file mode 100644
index 3ee9abc5075313..00000000000000
--- a/deps/npm/node_modules/tunnel-agent/index.js
+++ /dev/null
@@ -1,244 +0,0 @@
-'use strict'
-
-var net = require('net')
- , tls = require('tls')
- , http = require('http')
- , https = require('https')
- , events = require('events')
- , assert = require('assert')
- , util = require('util')
- , Buffer = require('safe-buffer').Buffer
- ;
-
-exports.httpOverHttp = httpOverHttp
-exports.httpsOverHttp = httpsOverHttp
-exports.httpOverHttps = httpOverHttps
-exports.httpsOverHttps = httpsOverHttps
-
-
-function httpOverHttp(options) {
- var agent = new TunnelingAgent(options)
- agent.request = http.request
- return agent
-}
-
-function httpsOverHttp(options) {
- var agent = new TunnelingAgent(options)
- agent.request = http.request
- agent.createSocket = createSecureSocket
- agent.defaultPort = 443
- return agent
-}
-
-function httpOverHttps(options) {
- var agent = new TunnelingAgent(options)
- agent.request = https.request
- return agent
-}
-
-function httpsOverHttps(options) {
- var agent = new TunnelingAgent(options)
- agent.request = https.request
- agent.createSocket = createSecureSocket
- agent.defaultPort = 443
- return agent
-}
-
-
-function TunnelingAgent(options) {
- var self = this
- self.options = options || {}
- self.proxyOptions = self.options.proxy || {}
- self.maxSockets = self.options.maxSockets || http.Agent.defaultMaxSockets
- self.requests = []
- self.sockets = []
-
- self.on('free', function onFree(socket, host, port) {
- for (var i = 0, len = self.requests.length; i < len; ++i) {
- var pending = self.requests[i]
- if (pending.host === host && pending.port === port) {
- // Detect the request to connect same origin server,
- // reuse the connection.
- self.requests.splice(i, 1)
- pending.request.onSocket(socket)
- return
- }
- }
- socket.destroy()
- self.removeSocket(socket)
- })
-}
-util.inherits(TunnelingAgent, events.EventEmitter)
-
-TunnelingAgent.prototype.addRequest = function addRequest(req, options) {
- var self = this
-
- // Legacy API: addRequest(req, host, port, path)
- if (typeof options === 'string') {
- options = {
- host: options,
- port: arguments[2],
- path: arguments[3]
- };
- }
-
- if (self.sockets.length >= this.maxSockets) {
- // We are over limit so we'll add it to the queue.
- self.requests.push({host: options.host, port: options.port, request: req})
- return
- }
-
- // If we are under maxSockets create a new one.
- self.createConnection({host: options.host, port: options.port, request: req})
-}
-
-TunnelingAgent.prototype.createConnection = function createConnection(pending) {
- var self = this
-
- self.createSocket(pending, function(socket) {
- socket.on('free', onFree)
- socket.on('close', onCloseOrRemove)
- socket.on('agentRemove', onCloseOrRemove)
- pending.request.onSocket(socket)
-
- function onFree() {
- self.emit('free', socket, pending.host, pending.port)
- }
-
- function onCloseOrRemove(err) {
- self.removeSocket(socket)
- socket.removeListener('free', onFree)
- socket.removeListener('close', onCloseOrRemove)
- socket.removeListener('agentRemove', onCloseOrRemove)
- }
- })
-}
-
-TunnelingAgent.prototype.createSocket = function createSocket(options, cb) {
- var self = this
- var placeholder = {}
- self.sockets.push(placeholder)
-
- var connectOptions = mergeOptions({}, self.proxyOptions,
- { method: 'CONNECT'
- , path: options.host + ':' + options.port
- , agent: false
- }
- )
- if (connectOptions.proxyAuth) {
- connectOptions.headers = connectOptions.headers || {}
- connectOptions.headers['Proxy-Authorization'] = 'Basic ' +
- Buffer.from(connectOptions.proxyAuth).toString('base64')
- }
-
- debug('making CONNECT request')
- var connectReq = self.request(connectOptions)
- connectReq.useChunkedEncodingByDefault = false // for v0.6
- connectReq.once('response', onResponse) // for v0.6
- connectReq.once('upgrade', onUpgrade) // for v0.6
- connectReq.once('connect', onConnect) // for v0.7 or later
- connectReq.once('error', onError)
- connectReq.end()
-
- function onResponse(res) {
- // Very hacky. This is necessary to avoid http-parser leaks.
- res.upgrade = true
- }
-
- function onUpgrade(res, socket, head) {
- // Hacky.
- process.nextTick(function() {
- onConnect(res, socket, head)
- })
- }
-
- function onConnect(res, socket, head) {
- connectReq.removeAllListeners()
- socket.removeAllListeners()
-
- if (res.statusCode === 200) {
- assert.equal(head.length, 0)
- debug('tunneling connection has established')
- self.sockets[self.sockets.indexOf(placeholder)] = socket
- cb(socket)
- } else {
- debug('tunneling socket could not be established, statusCode=%d', res.statusCode)
- var error = new Error('tunneling socket could not be established, ' + 'statusCode=' + res.statusCode)
- error.code = 'ECONNRESET'
- options.request.emit('error', error)
- self.removeSocket(placeholder)
- }
- }
-
- function onError(cause) {
- connectReq.removeAllListeners()
-
- debug('tunneling socket could not be established, cause=%s\n', cause.message, cause.stack)
- var error = new Error('tunneling socket could not be established, ' + 'cause=' + cause.message)
- error.code = 'ECONNRESET'
- options.request.emit('error', error)
- self.removeSocket(placeholder)
- }
-}
-
-TunnelingAgent.prototype.removeSocket = function removeSocket(socket) {
- var pos = this.sockets.indexOf(socket)
- if (pos === -1) return
-
- this.sockets.splice(pos, 1)
-
- var pending = this.requests.shift()
- if (pending) {
- // If we have pending requests and a socket gets closed a new one
- // needs to be created to take over in the pool for the one that closed.
- this.createConnection(pending)
- }
-}
-
-function createSecureSocket(options, cb) {
- var self = this
- TunnelingAgent.prototype.createSocket.call(self, options, function(socket) {
- // 0 is dummy port for v0.6
- var secureSocket = tls.connect(0, mergeOptions({}, self.options,
- { servername: options.host
- , socket: socket
- }
- ))
- self.sockets[self.sockets.indexOf(socket)] = secureSocket
- cb(secureSocket)
- })
-}
-
-
-function mergeOptions(target) {
- for (var i = 1, len = arguments.length; i < len; ++i) {
- var overrides = arguments[i]
- if (typeof overrides === 'object') {
- var keys = Object.keys(overrides)
- for (var j = 0, keyLen = keys.length; j < keyLen; ++j) {
- var k = keys[j]
- if (overrides[k] !== undefined) {
- target[k] = overrides[k]
- }
- }
- }
- }
- return target
-}
-
-
-var debug
-if (process.env.NODE_DEBUG && /\btunnel\b/.test(process.env.NODE_DEBUG)) {
- debug = function() {
- var args = Array.prototype.slice.call(arguments)
- if (typeof args[0] === 'string') {
- args[0] = 'TUNNEL: ' + args[0]
- } else {
- args.unshift('TUNNEL:')
- }
- console.error.apply(console, args)
- }
-} else {
- debug = function() {}
-}
-exports.debug = debug // for test
diff --git a/deps/npm/node_modules/tunnel-agent/package.json b/deps/npm/node_modules/tunnel-agent/package.json
deleted file mode 100644
index a271fda91ae5f8..00000000000000
--- a/deps/npm/node_modules/tunnel-agent/package.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "author": "Mikeal Rogers (http://www.futurealoof.com)",
- "name": "tunnel-agent",
- "license": "Apache-2.0",
- "description": "HTTP proxy tunneling agent. Formerly part of mikeal/request, now a standalone module.",
- "version": "0.6.0",
- "repository": {
- "url": "https://github.com/mikeal/tunnel-agent"
- },
- "main": "index.js",
- "files": [
- "index.js"
- ],
- "dependencies": {
- "safe-buffer": "^5.0.1"
- },
- "devDependencies": {},
- "optionalDependencies": {},
- "engines": {
- "node": "*"
- }
-}
diff --git a/deps/npm/node_modules/tweetnacl/AUTHORS.md b/deps/npm/node_modules/tweetnacl/AUTHORS.md
deleted file mode 100644
index 6d74d40694c904..00000000000000
--- a/deps/npm/node_modules/tweetnacl/AUTHORS.md
+++ /dev/null
@@ -1,28 +0,0 @@
-List of TweetNaCl.js authors
-============================
-
- Alphabetical order by first name.
- Format: Name (GitHub username or URL)
-
-* AndSDev (@AndSDev)
-* Devi Mandiri (@devi)
-* Dmitry Chestnykh (@dchest)
-
-List of authors of third-party public domain code from which TweetNaCl.js code was derived
-==========================================================================================
-
-[TweetNaCl](http://tweetnacl.cr.yp.to/)
---------------------------------------
-
-* Bernard van Gastel
-* Daniel J. Bernstein
-* Peter Schwabe
-* Sjaak Smetsers
-* Tanja Lange
-* Wesley Janssen
-
-
-[Poly1305-donna](https://github.com/floodyberry/poly1305-donna)
---------------------------------------------------------------
-
-* Andrew Moon (@floodyberry)
diff --git a/deps/npm/node_modules/tweetnacl/LICENSE b/deps/npm/node_modules/tweetnacl/LICENSE
deleted file mode 100644
index cf1ab25da0349f..00000000000000
--- a/deps/npm/node_modules/tweetnacl/LICENSE
+++ /dev/null
@@ -1,24 +0,0 @@
-This is free and unencumbered software released into the public domain.
-
-Anyone is free to copy, modify, publish, use, compile, sell, or
-distribute this software, either in source code form or as a compiled
-binary, for any purpose, commercial or non-commercial, and by any
-means.
-
-In jurisdictions that recognize copyright laws, the author or authors
-of this software dedicate any and all copyright interest in the
-software to the public domain. We make this dedication for the benefit
-of the public at large and to the detriment of our heirs and
-successors. We intend this dedication to be an overt act of
-relinquishment in perpetuity of all present and future rights to this
-software under copyright law.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-For more information, please refer to
diff --git a/deps/npm/node_modules/tweetnacl/PULL_REQUEST_TEMPLATE.md b/deps/npm/node_modules/tweetnacl/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index a8eb4a9a9a7e3d..00000000000000
--- a/deps/npm/node_modules/tweetnacl/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,20 +0,0 @@
-# Important!
-
-If your contribution is not trivial (not a typo fix, etc.), we can only accept
-it if you dedicate your copyright for the contribution to the public domain.
-Make sure you understand what it means (see http://unlicense.org/)! If you
-agree, please add yourself to AUTHORS.md file, and include the following text
-to your pull request description or a comment in it:
-
-------------------------------------------------------------------------------
-
- I dedicate any and all copyright interest in this software to the
- public domain. I make this dedication for the benefit of the public at
- large and to the detriment of my heirs and successors. I intend this
- dedication to be an overt act of relinquishment in perpetuity of all
- present and future rights to this software under copyright law.
-
- Anyone is free to copy, modify, publish, use, compile, sell, or
- distribute this software, either in source code form or as a compiled
- binary, for any purpose, commercial or non-commercial, and by any
- means.
diff --git a/deps/npm/node_modules/tweetnacl/nacl-fast.js b/deps/npm/node_modules/tweetnacl/nacl-fast.js
deleted file mode 100644
index 5e4562fe89a1ab..00000000000000
--- a/deps/npm/node_modules/tweetnacl/nacl-fast.js
+++ /dev/null
@@ -1,2388 +0,0 @@
-(function(nacl) {
-'use strict';
-
-// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri.
-// Public domain.
-//
-// Implementation derived from TweetNaCl version 20140427.
-// See for details: http://tweetnacl.cr.yp.to/
-
-var gf = function(init) {
- var i, r = new Float64Array(16);
- if (init) for (i = 0; i < init.length; i++) r[i] = init[i];
- return r;
-};
-
-// Pluggable, initialized in high-level API below.
-var randombytes = function(/* x, n */) { throw new Error('no PRNG'); };
-
-var _0 = new Uint8Array(16);
-var _9 = new Uint8Array(32); _9[0] = 9;
-
-var gf0 = gf(),
- gf1 = gf([1]),
- _121665 = gf([0xdb41, 1]),
- D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]),
- D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]),
- X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]),
- Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]),
- I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]);
-
-function ts64(x, i, h, l) {
- x[i] = (h >> 24) & 0xff;
- x[i+1] = (h >> 16) & 0xff;
- x[i+2] = (h >> 8) & 0xff;
- x[i+3] = h & 0xff;
- x[i+4] = (l >> 24) & 0xff;
- x[i+5] = (l >> 16) & 0xff;
- x[i+6] = (l >> 8) & 0xff;
- x[i+7] = l & 0xff;
-}
-
-function vn(x, xi, y, yi, n) {
- var i,d = 0;
- for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i];
- return (1 & ((d - 1) >>> 8)) - 1;
-}
-
-function crypto_verify_16(x, xi, y, yi) {
- return vn(x,xi,y,yi,16);
-}
-
-function crypto_verify_32(x, xi, y, yi) {
- return vn(x,xi,y,yi,32);
-}
-
-function core_salsa20(o, p, k, c) {
- var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,
- j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,
- j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,
- j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,
- j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,
- j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,
- j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,
- j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,
- j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,
- j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,
- j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,
- j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,
- j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,
- j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,
- j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,
- j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;
-
- var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,
- x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,
- x15 = j15, u;
-
- for (var i = 0; i < 20; i += 2) {
- u = x0 + x12 | 0;
- x4 ^= u<<7 | u>>>(32-7);
- u = x4 + x0 | 0;
- x8 ^= u<<9 | u>>>(32-9);
- u = x8 + x4 | 0;
- x12 ^= u<<13 | u>>>(32-13);
- u = x12 + x8 | 0;
- x0 ^= u<<18 | u>>>(32-18);
-
- u = x5 + x1 | 0;
- x9 ^= u<<7 | u>>>(32-7);
- u = x9 + x5 | 0;
- x13 ^= u<<9 | u>>>(32-9);
- u = x13 + x9 | 0;
- x1 ^= u<<13 | u>>>(32-13);
- u = x1 + x13 | 0;
- x5 ^= u<<18 | u>>>(32-18);
-
- u = x10 + x6 | 0;
- x14 ^= u<<7 | u>>>(32-7);
- u = x14 + x10 | 0;
- x2 ^= u<<9 | u>>>(32-9);
- u = x2 + x14 | 0;
- x6 ^= u<<13 | u>>>(32-13);
- u = x6 + x2 | 0;
- x10 ^= u<<18 | u>>>(32-18);
-
- u = x15 + x11 | 0;
- x3 ^= u<<7 | u>>>(32-7);
- u = x3 + x15 | 0;
- x7 ^= u<<9 | u>>>(32-9);
- u = x7 + x3 | 0;
- x11 ^= u<<13 | u>>>(32-13);
- u = x11 + x7 | 0;
- x15 ^= u<<18 | u>>>(32-18);
-
- u = x0 + x3 | 0;
- x1 ^= u<<7 | u>>>(32-7);
- u = x1 + x0 | 0;
- x2 ^= u<<9 | u>>>(32-9);
- u = x2 + x1 | 0;
- x3 ^= u<<13 | u>>>(32-13);
- u = x3 + x2 | 0;
- x0 ^= u<<18 | u>>>(32-18);
-
- u = x5 + x4 | 0;
- x6 ^= u<<7 | u>>>(32-7);
- u = x6 + x5 | 0;
- x7 ^= u<<9 | u>>>(32-9);
- u = x7 + x6 | 0;
- x4 ^= u<<13 | u>>>(32-13);
- u = x4 + x7 | 0;
- x5 ^= u<<18 | u>>>(32-18);
-
- u = x10 + x9 | 0;
- x11 ^= u<<7 | u>>>(32-7);
- u = x11 + x10 | 0;
- x8 ^= u<<9 | u>>>(32-9);
- u = x8 + x11 | 0;
- x9 ^= u<<13 | u>>>(32-13);
- u = x9 + x8 | 0;
- x10 ^= u<<18 | u>>>(32-18);
-
- u = x15 + x14 | 0;
- x12 ^= u<<7 | u>>>(32-7);
- u = x12 + x15 | 0;
- x13 ^= u<<9 | u>>>(32-9);
- u = x13 + x12 | 0;
- x14 ^= u<<13 | u>>>(32-13);
- u = x14 + x13 | 0;
- x15 ^= u<<18 | u>>>(32-18);
- }
- x0 = x0 + j0 | 0;
- x1 = x1 + j1 | 0;
- x2 = x2 + j2 | 0;
- x3 = x3 + j3 | 0;
- x4 = x4 + j4 | 0;
- x5 = x5 + j5 | 0;
- x6 = x6 + j6 | 0;
- x7 = x7 + j7 | 0;
- x8 = x8 + j8 | 0;
- x9 = x9 + j9 | 0;
- x10 = x10 + j10 | 0;
- x11 = x11 + j11 | 0;
- x12 = x12 + j12 | 0;
- x13 = x13 + j13 | 0;
- x14 = x14 + j14 | 0;
- x15 = x15 + j15 | 0;
-
- o[ 0] = x0 >>> 0 & 0xff;
- o[ 1] = x0 >>> 8 & 0xff;
- o[ 2] = x0 >>> 16 & 0xff;
- o[ 3] = x0 >>> 24 & 0xff;
-
- o[ 4] = x1 >>> 0 & 0xff;
- o[ 5] = x1 >>> 8 & 0xff;
- o[ 6] = x1 >>> 16 & 0xff;
- o[ 7] = x1 >>> 24 & 0xff;
-
- o[ 8] = x2 >>> 0 & 0xff;
- o[ 9] = x2 >>> 8 & 0xff;
- o[10] = x2 >>> 16 & 0xff;
- o[11] = x2 >>> 24 & 0xff;
-
- o[12] = x3 >>> 0 & 0xff;
- o[13] = x3 >>> 8 & 0xff;
- o[14] = x3 >>> 16 & 0xff;
- o[15] = x3 >>> 24 & 0xff;
-
- o[16] = x4 >>> 0 & 0xff;
- o[17] = x4 >>> 8 & 0xff;
- o[18] = x4 >>> 16 & 0xff;
- o[19] = x4 >>> 24 & 0xff;
-
- o[20] = x5 >>> 0 & 0xff;
- o[21] = x5 >>> 8 & 0xff;
- o[22] = x5 >>> 16 & 0xff;
- o[23] = x5 >>> 24 & 0xff;
-
- o[24] = x6 >>> 0 & 0xff;
- o[25] = x6 >>> 8 & 0xff;
- o[26] = x6 >>> 16 & 0xff;
- o[27] = x6 >>> 24 & 0xff;
-
- o[28] = x7 >>> 0 & 0xff;
- o[29] = x7 >>> 8 & 0xff;
- o[30] = x7 >>> 16 & 0xff;
- o[31] = x7 >>> 24 & 0xff;
-
- o[32] = x8 >>> 0 & 0xff;
- o[33] = x8 >>> 8 & 0xff;
- o[34] = x8 >>> 16 & 0xff;
- o[35] = x8 >>> 24 & 0xff;
-
- o[36] = x9 >>> 0 & 0xff;
- o[37] = x9 >>> 8 & 0xff;
- o[38] = x9 >>> 16 & 0xff;
- o[39] = x9 >>> 24 & 0xff;
-
- o[40] = x10 >>> 0 & 0xff;
- o[41] = x10 >>> 8 & 0xff;
- o[42] = x10 >>> 16 & 0xff;
- o[43] = x10 >>> 24 & 0xff;
-
- o[44] = x11 >>> 0 & 0xff;
- o[45] = x11 >>> 8 & 0xff;
- o[46] = x11 >>> 16 & 0xff;
- o[47] = x11 >>> 24 & 0xff;
-
- o[48] = x12 >>> 0 & 0xff;
- o[49] = x12 >>> 8 & 0xff;
- o[50] = x12 >>> 16 & 0xff;
- o[51] = x12 >>> 24 & 0xff;
-
- o[52] = x13 >>> 0 & 0xff;
- o[53] = x13 >>> 8 & 0xff;
- o[54] = x13 >>> 16 & 0xff;
- o[55] = x13 >>> 24 & 0xff;
-
- o[56] = x14 >>> 0 & 0xff;
- o[57] = x14 >>> 8 & 0xff;
- o[58] = x14 >>> 16 & 0xff;
- o[59] = x14 >>> 24 & 0xff;
-
- o[60] = x15 >>> 0 & 0xff;
- o[61] = x15 >>> 8 & 0xff;
- o[62] = x15 >>> 16 & 0xff;
- o[63] = x15 >>> 24 & 0xff;
-}
-
-function core_hsalsa20(o,p,k,c) {
- var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,
- j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,
- j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,
- j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,
- j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,
- j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,
- j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,
- j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,
- j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,
- j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,
- j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,
- j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,
- j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,
- j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,
- j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,
- j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;
-
- var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,
- x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,
- x15 = j15, u;
-
- for (var i = 0; i < 20; i += 2) {
- u = x0 + x12 | 0;
- x4 ^= u<<7 | u>>>(32-7);
- u = x4 + x0 | 0;
- x8 ^= u<<9 | u>>>(32-9);
- u = x8 + x4 | 0;
- x12 ^= u<<13 | u>>>(32-13);
- u = x12 + x8 | 0;
- x0 ^= u<<18 | u>>>(32-18);
-
- u = x5 + x1 | 0;
- x9 ^= u<<7 | u>>>(32-7);
- u = x9 + x5 | 0;
- x13 ^= u<<9 | u>>>(32-9);
- u = x13 + x9 | 0;
- x1 ^= u<<13 | u>>>(32-13);
- u = x1 + x13 | 0;
- x5 ^= u<<18 | u>>>(32-18);
-
- u = x10 + x6 | 0;
- x14 ^= u<<7 | u>>>(32-7);
- u = x14 + x10 | 0;
- x2 ^= u<<9 | u>>>(32-9);
- u = x2 + x14 | 0;
- x6 ^= u<<13 | u>>>(32-13);
- u = x6 + x2 | 0;
- x10 ^= u<<18 | u>>>(32-18);
-
- u = x15 + x11 | 0;
- x3 ^= u<<7 | u>>>(32-7);
- u = x3 + x15 | 0;
- x7 ^= u<<9 | u>>>(32-9);
- u = x7 + x3 | 0;
- x11 ^= u<<13 | u>>>(32-13);
- u = x11 + x7 | 0;
- x15 ^= u<<18 | u>>>(32-18);
-
- u = x0 + x3 | 0;
- x1 ^= u<<7 | u>>>(32-7);
- u = x1 + x0 | 0;
- x2 ^= u<<9 | u>>>(32-9);
- u = x2 + x1 | 0;
- x3 ^= u<<13 | u>>>(32-13);
- u = x3 + x2 | 0;
- x0 ^= u<<18 | u>>>(32-18);
-
- u = x5 + x4 | 0;
- x6 ^= u<<7 | u>>>(32-7);
- u = x6 + x5 | 0;
- x7 ^= u<<9 | u>>>(32-9);
- u = x7 + x6 | 0;
- x4 ^= u<<13 | u>>>(32-13);
- u = x4 + x7 | 0;
- x5 ^= u<<18 | u>>>(32-18);
-
- u = x10 + x9 | 0;
- x11 ^= u<<7 | u>>>(32-7);
- u = x11 + x10 | 0;
- x8 ^= u<<9 | u>>>(32-9);
- u = x8 + x11 | 0;
- x9 ^= u<<13 | u>>>(32-13);
- u = x9 + x8 | 0;
- x10 ^= u<<18 | u>>>(32-18);
-
- u = x15 + x14 | 0;
- x12 ^= u<<7 | u>>>(32-7);
- u = x12 + x15 | 0;
- x13 ^= u<<9 | u>>>(32-9);
- u = x13 + x12 | 0;
- x14 ^= u<<13 | u>>>(32-13);
- u = x14 + x13 | 0;
- x15 ^= u<<18 | u>>>(32-18);
- }
-
- o[ 0] = x0 >>> 0 & 0xff;
- o[ 1] = x0 >>> 8 & 0xff;
- o[ 2] = x0 >>> 16 & 0xff;
- o[ 3] = x0 >>> 24 & 0xff;
-
- o[ 4] = x5 >>> 0 & 0xff;
- o[ 5] = x5 >>> 8 & 0xff;
- o[ 6] = x5 >>> 16 & 0xff;
- o[ 7] = x5 >>> 24 & 0xff;
-
- o[ 8] = x10 >>> 0 & 0xff;
- o[ 9] = x10 >>> 8 & 0xff;
- o[10] = x10 >>> 16 & 0xff;
- o[11] = x10 >>> 24 & 0xff;
-
- o[12] = x15 >>> 0 & 0xff;
- o[13] = x15 >>> 8 & 0xff;
- o[14] = x15 >>> 16 & 0xff;
- o[15] = x15 >>> 24 & 0xff;
-
- o[16] = x6 >>> 0 & 0xff;
- o[17] = x6 >>> 8 & 0xff;
- o[18] = x6 >>> 16 & 0xff;
- o[19] = x6 >>> 24 & 0xff;
-
- o[20] = x7 >>> 0 & 0xff;
- o[21] = x7 >>> 8 & 0xff;
- o[22] = x7 >>> 16 & 0xff;
- o[23] = x7 >>> 24 & 0xff;
-
- o[24] = x8 >>> 0 & 0xff;
- o[25] = x8 >>> 8 & 0xff;
- o[26] = x8 >>> 16 & 0xff;
- o[27] = x8 >>> 24 & 0xff;
-
- o[28] = x9 >>> 0 & 0xff;
- o[29] = x9 >>> 8 & 0xff;
- o[30] = x9 >>> 16 & 0xff;
- o[31] = x9 >>> 24 & 0xff;
-}
-
-function crypto_core_salsa20(out,inp,k,c) {
- core_salsa20(out,inp,k,c);
-}
-
-function crypto_core_hsalsa20(out,inp,k,c) {
- core_hsalsa20(out,inp,k,c);
-}
-
-var sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]);
- // "expand 32-byte k"
-
-function crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) {
- var z = new Uint8Array(16), x = new Uint8Array(64);
- var u, i;
- for (i = 0; i < 16; i++) z[i] = 0;
- for (i = 0; i < 8; i++) z[i] = n[i];
- while (b >= 64) {
- crypto_core_salsa20(x,z,k,sigma);
- for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i];
- u = 1;
- for (i = 8; i < 16; i++) {
- u = u + (z[i] & 0xff) | 0;
- z[i] = u & 0xff;
- u >>>= 8;
- }
- b -= 64;
- cpos += 64;
- mpos += 64;
- }
- if (b > 0) {
- crypto_core_salsa20(x,z,k,sigma);
- for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i];
- }
- return 0;
-}
-
-function crypto_stream_salsa20(c,cpos,b,n,k) {
- var z = new Uint8Array(16), x = new Uint8Array(64);
- var u, i;
- for (i = 0; i < 16; i++) z[i] = 0;
- for (i = 0; i < 8; i++) z[i] = n[i];
- while (b >= 64) {
- crypto_core_salsa20(x,z,k,sigma);
- for (i = 0; i < 64; i++) c[cpos+i] = x[i];
- u = 1;
- for (i = 8; i < 16; i++) {
- u = u + (z[i] & 0xff) | 0;
- z[i] = u & 0xff;
- u >>>= 8;
- }
- b -= 64;
- cpos += 64;
- }
- if (b > 0) {
- crypto_core_salsa20(x,z,k,sigma);
- for (i = 0; i < b; i++) c[cpos+i] = x[i];
- }
- return 0;
-}
-
-function crypto_stream(c,cpos,d,n,k) {
- var s = new Uint8Array(32);
- crypto_core_hsalsa20(s,n,k,sigma);
- var sn = new Uint8Array(8);
- for (var i = 0; i < 8; i++) sn[i] = n[i+16];
- return crypto_stream_salsa20(c,cpos,d,sn,s);
-}
-
-function crypto_stream_xor(c,cpos,m,mpos,d,n,k) {
- var s = new Uint8Array(32);
- crypto_core_hsalsa20(s,n,k,sigma);
- var sn = new Uint8Array(8);
- for (var i = 0; i < 8; i++) sn[i] = n[i+16];
- return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s);
-}
-
-/*
-* Port of Andrew Moon's Poly1305-donna-16. Public domain.
-* https://github.com/floodyberry/poly1305-donna
-*/
-
-var poly1305 = function(key) {
- this.buffer = new Uint8Array(16);
- this.r = new Uint16Array(10);
- this.h = new Uint16Array(10);
- this.pad = new Uint16Array(8);
- this.leftover = 0;
- this.fin = 0;
-
- var t0, t1, t2, t3, t4, t5, t6, t7;
-
- t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0 ) & 0x1fff;
- t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff;
- t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03;
- t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff;
- t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff;
- this.r[5] = ((t4 >>> 1)) & 0x1ffe;
- t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff;
- t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81;
- t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff;
- this.r[9] = ((t7 >>> 5)) & 0x007f;
-
- this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8;
- this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8;
- this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8;
- this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8;
- this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8;
- this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8;
- this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8;
- this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8;
-};
-
-poly1305.prototype.blocks = function(m, mpos, bytes) {
- var hibit = this.fin ? 0 : (1 << 11);
- var t0, t1, t2, t3, t4, t5, t6, t7, c;
- var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9;
-
- var h0 = this.h[0],
- h1 = this.h[1],
- h2 = this.h[2],
- h3 = this.h[3],
- h4 = this.h[4],
- h5 = this.h[5],
- h6 = this.h[6],
- h7 = this.h[7],
- h8 = this.h[8],
- h9 = this.h[9];
-
- var r0 = this.r[0],
- r1 = this.r[1],
- r2 = this.r[2],
- r3 = this.r[3],
- r4 = this.r[4],
- r5 = this.r[5],
- r6 = this.r[6],
- r7 = this.r[7],
- r8 = this.r[8],
- r9 = this.r[9];
-
- while (bytes >= 16) {
- t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0 ) & 0x1fff;
- t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff;
- t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff;
- t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff;
- t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff;
- h5 += ((t4 >>> 1)) & 0x1fff;
- t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff;
- t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff;
- t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff;
- h9 += ((t7 >>> 5)) | hibit;
-
- c = 0;
-
- d0 = c;
- d0 += h0 * r0;
- d0 += h1 * (5 * r9);
- d0 += h2 * (5 * r8);
- d0 += h3 * (5 * r7);
- d0 += h4 * (5 * r6);
- c = (d0 >>> 13); d0 &= 0x1fff;
- d0 += h5 * (5 * r5);
- d0 += h6 * (5 * r4);
- d0 += h7 * (5 * r3);
- d0 += h8 * (5 * r2);
- d0 += h9 * (5 * r1);
- c += (d0 >>> 13); d0 &= 0x1fff;
-
- d1 = c;
- d1 += h0 * r1;
- d1 += h1 * r0;
- d1 += h2 * (5 * r9);
- d1 += h3 * (5 * r8);
- d1 += h4 * (5 * r7);
- c = (d1 >>> 13); d1 &= 0x1fff;
- d1 += h5 * (5 * r6);
- d1 += h6 * (5 * r5);
- d1 += h7 * (5 * r4);
- d1 += h8 * (5 * r3);
- d1 += h9 * (5 * r2);
- c += (d1 >>> 13); d1 &= 0x1fff;
-
- d2 = c;
- d2 += h0 * r2;
- d2 += h1 * r1;
- d2 += h2 * r0;
- d2 += h3 * (5 * r9);
- d2 += h4 * (5 * r8);
- c = (d2 >>> 13); d2 &= 0x1fff;
- d2 += h5 * (5 * r7);
- d2 += h6 * (5 * r6);
- d2 += h7 * (5 * r5);
- d2 += h8 * (5 * r4);
- d2 += h9 * (5 * r3);
- c += (d2 >>> 13); d2 &= 0x1fff;
-
- d3 = c;
- d3 += h0 * r3;
- d3 += h1 * r2;
- d3 += h2 * r1;
- d3 += h3 * r0;
- d3 += h4 * (5 * r9);
- c = (d3 >>> 13); d3 &= 0x1fff;
- d3 += h5 * (5 * r8);
- d3 += h6 * (5 * r7);
- d3 += h7 * (5 * r6);
- d3 += h8 * (5 * r5);
- d3 += h9 * (5 * r4);
- c += (d3 >>> 13); d3 &= 0x1fff;
-
- d4 = c;
- d4 += h0 * r4;
- d4 += h1 * r3;
- d4 += h2 * r2;
- d4 += h3 * r1;
- d4 += h4 * r0;
- c = (d4 >>> 13); d4 &= 0x1fff;
- d4 += h5 * (5 * r9);
- d4 += h6 * (5 * r8);
- d4 += h7 * (5 * r7);
- d4 += h8 * (5 * r6);
- d4 += h9 * (5 * r5);
- c += (d4 >>> 13); d4 &= 0x1fff;
-
- d5 = c;
- d5 += h0 * r5;
- d5 += h1 * r4;
- d5 += h2 * r3;
- d5 += h3 * r2;
- d5 += h4 * r1;
- c = (d5 >>> 13); d5 &= 0x1fff;
- d5 += h5 * r0;
- d5 += h6 * (5 * r9);
- d5 += h7 * (5 * r8);
- d5 += h8 * (5 * r7);
- d5 += h9 * (5 * r6);
- c += (d5 >>> 13); d5 &= 0x1fff;
-
- d6 = c;
- d6 += h0 * r6;
- d6 += h1 * r5;
- d6 += h2 * r4;
- d6 += h3 * r3;
- d6 += h4 * r2;
- c = (d6 >>> 13); d6 &= 0x1fff;
- d6 += h5 * r1;
- d6 += h6 * r0;
- d6 += h7 * (5 * r9);
- d6 += h8 * (5 * r8);
- d6 += h9 * (5 * r7);
- c += (d6 >>> 13); d6 &= 0x1fff;
-
- d7 = c;
- d7 += h0 * r7;
- d7 += h1 * r6;
- d7 += h2 * r5;
- d7 += h3 * r4;
- d7 += h4 * r3;
- c = (d7 >>> 13); d7 &= 0x1fff;
- d7 += h5 * r2;
- d7 += h6 * r1;
- d7 += h7 * r0;
- d7 += h8 * (5 * r9);
- d7 += h9 * (5 * r8);
- c += (d7 >>> 13); d7 &= 0x1fff;
-
- d8 = c;
- d8 += h0 * r8;
- d8 += h1 * r7;
- d8 += h2 * r6;
- d8 += h3 * r5;
- d8 += h4 * r4;
- c = (d8 >>> 13); d8 &= 0x1fff;
- d8 += h5 * r3;
- d8 += h6 * r2;
- d8 += h7 * r1;
- d8 += h8 * r0;
- d8 += h9 * (5 * r9);
- c += (d8 >>> 13); d8 &= 0x1fff;
-
- d9 = c;
- d9 += h0 * r9;
- d9 += h1 * r8;
- d9 += h2 * r7;
- d9 += h3 * r6;
- d9 += h4 * r5;
- c = (d9 >>> 13); d9 &= 0x1fff;
- d9 += h5 * r4;
- d9 += h6 * r3;
- d9 += h7 * r2;
- d9 += h8 * r1;
- d9 += h9 * r0;
- c += (d9 >>> 13); d9 &= 0x1fff;
-
- c = (((c << 2) + c)) | 0;
- c = (c + d0) | 0;
- d0 = c & 0x1fff;
- c = (c >>> 13);
- d1 += c;
-
- h0 = d0;
- h1 = d1;
- h2 = d2;
- h3 = d3;
- h4 = d4;
- h5 = d5;
- h6 = d6;
- h7 = d7;
- h8 = d8;
- h9 = d9;
-
- mpos += 16;
- bytes -= 16;
- }
- this.h[0] = h0;
- this.h[1] = h1;
- this.h[2] = h2;
- this.h[3] = h3;
- this.h[4] = h4;
- this.h[5] = h5;
- this.h[6] = h6;
- this.h[7] = h7;
- this.h[8] = h8;
- this.h[9] = h9;
-};
-
-poly1305.prototype.finish = function(mac, macpos) {
- var g = new Uint16Array(10);
- var c, mask, f, i;
-
- if (this.leftover) {
- i = this.leftover;
- this.buffer[i++] = 1;
- for (; i < 16; i++) this.buffer[i] = 0;
- this.fin = 1;
- this.blocks(this.buffer, 0, 16);
- }
-
- c = this.h[1] >>> 13;
- this.h[1] &= 0x1fff;
- for (i = 2; i < 10; i++) {
- this.h[i] += c;
- c = this.h[i] >>> 13;
- this.h[i] &= 0x1fff;
- }
- this.h[0] += (c * 5);
- c = this.h[0] >>> 13;
- this.h[0] &= 0x1fff;
- this.h[1] += c;
- c = this.h[1] >>> 13;
- this.h[1] &= 0x1fff;
- this.h[2] += c;
-
- g[0] = this.h[0] + 5;
- c = g[0] >>> 13;
- g[0] &= 0x1fff;
- for (i = 1; i < 10; i++) {
- g[i] = this.h[i] + c;
- c = g[i] >>> 13;
- g[i] &= 0x1fff;
- }
- g[9] -= (1 << 13);
-
- mask = (c ^ 1) - 1;
- for (i = 0; i < 10; i++) g[i] &= mask;
- mask = ~mask;
- for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i];
-
- this.h[0] = ((this.h[0] ) | (this.h[1] << 13) ) & 0xffff;
- this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10) ) & 0xffff;
- this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7) ) & 0xffff;
- this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4) ) & 0xffff;
- this.h[4] = ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff;
- this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11) ) & 0xffff;
- this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8) ) & 0xffff;
- this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5) ) & 0xffff;
-
- f = this.h[0] + this.pad[0];
- this.h[0] = f & 0xffff;
- for (i = 1; i < 8; i++) {
- f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0;
- this.h[i] = f & 0xffff;
- }
-
- mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff;
- mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff;
- mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff;
- mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff;
- mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff;
- mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff;
- mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff;
- mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff;
- mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff;
- mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff;
- mac[macpos+10] = (this.h[5] >>> 0) & 0xff;
- mac[macpos+11] = (this.h[5] >>> 8) & 0xff;
- mac[macpos+12] = (this.h[6] >>> 0) & 0xff;
- mac[macpos+13] = (this.h[6] >>> 8) & 0xff;
- mac[macpos+14] = (this.h[7] >>> 0) & 0xff;
- mac[macpos+15] = (this.h[7] >>> 8) & 0xff;
-};
-
-poly1305.prototype.update = function(m, mpos, bytes) {
- var i, want;
-
- if (this.leftover) {
- want = (16 - this.leftover);
- if (want > bytes)
- want = bytes;
- for (i = 0; i < want; i++)
- this.buffer[this.leftover + i] = m[mpos+i];
- bytes -= want;
- mpos += want;
- this.leftover += want;
- if (this.leftover < 16)
- return;
- this.blocks(this.buffer, 0, 16);
- this.leftover = 0;
- }
-
- if (bytes >= 16) {
- want = bytes - (bytes % 16);
- this.blocks(m, mpos, want);
- mpos += want;
- bytes -= want;
- }
-
- if (bytes) {
- for (i = 0; i < bytes; i++)
- this.buffer[this.leftover + i] = m[mpos+i];
- this.leftover += bytes;
- }
-};
-
-function crypto_onetimeauth(out, outpos, m, mpos, n, k) {
- var s = new poly1305(k);
- s.update(m, mpos, n);
- s.finish(out, outpos);
- return 0;
-}
-
-function crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) {
- var x = new Uint8Array(16);
- crypto_onetimeauth(x,0,m,mpos,n,k);
- return crypto_verify_16(h,hpos,x,0);
-}
-
-function crypto_secretbox(c,m,d,n,k) {
- var i;
- if (d < 32) return -1;
- crypto_stream_xor(c,0,m,0,d,n,k);
- crypto_onetimeauth(c, 16, c, 32, d - 32, c);
- for (i = 0; i < 16; i++) c[i] = 0;
- return 0;
-}
-
-function crypto_secretbox_open(m,c,d,n,k) {
- var i;
- var x = new Uint8Array(32);
- if (d < 32) return -1;
- crypto_stream(x,0,32,n,k);
- if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1;
- crypto_stream_xor(m,0,c,0,d,n,k);
- for (i = 0; i < 32; i++) m[i] = 0;
- return 0;
-}
-
-function set25519(r, a) {
- var i;
- for (i = 0; i < 16; i++) r[i] = a[i]|0;
-}
-
-function car25519(o) {
- var i, v, c = 1;
- for (i = 0; i < 16; i++) {
- v = o[i] + c + 65535;
- c = Math.floor(v / 65536);
- o[i] = v - c * 65536;
- }
- o[0] += c-1 + 37 * (c-1);
-}
-
-function sel25519(p, q, b) {
- var t, c = ~(b-1);
- for (var i = 0; i < 16; i++) {
- t = c & (p[i] ^ q[i]);
- p[i] ^= t;
- q[i] ^= t;
- }
-}
-
-function pack25519(o, n) {
- var i, j, b;
- var m = gf(), t = gf();
- for (i = 0; i < 16; i++) t[i] = n[i];
- car25519(t);
- car25519(t);
- car25519(t);
- for (j = 0; j < 2; j++) {
- m[0] = t[0] - 0xffed;
- for (i = 1; i < 15; i++) {
- m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1);
- m[i-1] &= 0xffff;
- }
- m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1);
- b = (m[15]>>16) & 1;
- m[14] &= 0xffff;
- sel25519(t, m, 1-b);
- }
- for (i = 0; i < 16; i++) {
- o[2*i] = t[i] & 0xff;
- o[2*i+1] = t[i]>>8;
- }
-}
-
-function neq25519(a, b) {
- var c = new Uint8Array(32), d = new Uint8Array(32);
- pack25519(c, a);
- pack25519(d, b);
- return crypto_verify_32(c, 0, d, 0);
-}
-
-function par25519(a) {
- var d = new Uint8Array(32);
- pack25519(d, a);
- return d[0] & 1;
-}
-
-function unpack25519(o, n) {
- var i;
- for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8);
- o[15] &= 0x7fff;
-}
-
-function A(o, a, b) {
- for (var i = 0; i < 16; i++) o[i] = a[i] + b[i];
-}
-
-function Z(o, a, b) {
- for (var i = 0; i < 16; i++) o[i] = a[i] - b[i];
-}
-
-function M(o, a, b) {
- var v, c,
- t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0,
- t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0,
- t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0,
- t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0,
- b0 = b[0],
- b1 = b[1],
- b2 = b[2],
- b3 = b[3],
- b4 = b[4],
- b5 = b[5],
- b6 = b[6],
- b7 = b[7],
- b8 = b[8],
- b9 = b[9],
- b10 = b[10],
- b11 = b[11],
- b12 = b[12],
- b13 = b[13],
- b14 = b[14],
- b15 = b[15];
-
- v = a[0];
- t0 += v * b0;
- t1 += v * b1;
- t2 += v * b2;
- t3 += v * b3;
- t4 += v * b4;
- t5 += v * b5;
- t6 += v * b6;
- t7 += v * b7;
- t8 += v * b8;
- t9 += v * b9;
- t10 += v * b10;
- t11 += v * b11;
- t12 += v * b12;
- t13 += v * b13;
- t14 += v * b14;
- t15 += v * b15;
- v = a[1];
- t1 += v * b0;
- t2 += v * b1;
- t3 += v * b2;
- t4 += v * b3;
- t5 += v * b4;
- t6 += v * b5;
- t7 += v * b6;
- t8 += v * b7;
- t9 += v * b8;
- t10 += v * b9;
- t11 += v * b10;
- t12 += v * b11;
- t13 += v * b12;
- t14 += v * b13;
- t15 += v * b14;
- t16 += v * b15;
- v = a[2];
- t2 += v * b0;
- t3 += v * b1;
- t4 += v * b2;
- t5 += v * b3;
- t6 += v * b4;
- t7 += v * b5;
- t8 += v * b6;
- t9 += v * b7;
- t10 += v * b8;
- t11 += v * b9;
- t12 += v * b10;
- t13 += v * b11;
- t14 += v * b12;
- t15 += v * b13;
- t16 += v * b14;
- t17 += v * b15;
- v = a[3];
- t3 += v * b0;
- t4 += v * b1;
- t5 += v * b2;
- t6 += v * b3;
- t7 += v * b4;
- t8 += v * b5;
- t9 += v * b6;
- t10 += v * b7;
- t11 += v * b8;
- t12 += v * b9;
- t13 += v * b10;
- t14 += v * b11;
- t15 += v * b12;
- t16 += v * b13;
- t17 += v * b14;
- t18 += v * b15;
- v = a[4];
- t4 += v * b0;
- t5 += v * b1;
- t6 += v * b2;
- t7 += v * b3;
- t8 += v * b4;
- t9 += v * b5;
- t10 += v * b6;
- t11 += v * b7;
- t12 += v * b8;
- t13 += v * b9;
- t14 += v * b10;
- t15 += v * b11;
- t16 += v * b12;
- t17 += v * b13;
- t18 += v * b14;
- t19 += v * b15;
- v = a[5];
- t5 += v * b0;
- t6 += v * b1;
- t7 += v * b2;
- t8 += v * b3;
- t9 += v * b4;
- t10 += v * b5;
- t11 += v * b6;
- t12 += v * b7;
- t13 += v * b8;
- t14 += v * b9;
- t15 += v * b10;
- t16 += v * b11;
- t17 += v * b12;
- t18 += v * b13;
- t19 += v * b14;
- t20 += v * b15;
- v = a[6];
- t6 += v * b0;
- t7 += v * b1;
- t8 += v * b2;
- t9 += v * b3;
- t10 += v * b4;
- t11 += v * b5;
- t12 += v * b6;
- t13 += v * b7;
- t14 += v * b8;
- t15 += v * b9;
- t16 += v * b10;
- t17 += v * b11;
- t18 += v * b12;
- t19 += v * b13;
- t20 += v * b14;
- t21 += v * b15;
- v = a[7];
- t7 += v * b0;
- t8 += v * b1;
- t9 += v * b2;
- t10 += v * b3;
- t11 += v * b4;
- t12 += v * b5;
- t13 += v * b6;
- t14 += v * b7;
- t15 += v * b8;
- t16 += v * b9;
- t17 += v * b10;
- t18 += v * b11;
- t19 += v * b12;
- t20 += v * b13;
- t21 += v * b14;
- t22 += v * b15;
- v = a[8];
- t8 += v * b0;
- t9 += v * b1;
- t10 += v * b2;
- t11 += v * b3;
- t12 += v * b4;
- t13 += v * b5;
- t14 += v * b6;
- t15 += v * b7;
- t16 += v * b8;
- t17 += v * b9;
- t18 += v * b10;
- t19 += v * b11;
- t20 += v * b12;
- t21 += v * b13;
- t22 += v * b14;
- t23 += v * b15;
- v = a[9];
- t9 += v * b0;
- t10 += v * b1;
- t11 += v * b2;
- t12 += v * b3;
- t13 += v * b4;
- t14 += v * b5;
- t15 += v * b6;
- t16 += v * b7;
- t17 += v * b8;
- t18 += v * b9;
- t19 += v * b10;
- t20 += v * b11;
- t21 += v * b12;
- t22 += v * b13;
- t23 += v * b14;
- t24 += v * b15;
- v = a[10];
- t10 += v * b0;
- t11 += v * b1;
- t12 += v * b2;
- t13 += v * b3;
- t14 += v * b4;
- t15 += v * b5;
- t16 += v * b6;
- t17 += v * b7;
- t18 += v * b8;
- t19 += v * b9;
- t20 += v * b10;
- t21 += v * b11;
- t22 += v * b12;
- t23 += v * b13;
- t24 += v * b14;
- t25 += v * b15;
- v = a[11];
- t11 += v * b0;
- t12 += v * b1;
- t13 += v * b2;
- t14 += v * b3;
- t15 += v * b4;
- t16 += v * b5;
- t17 += v * b6;
- t18 += v * b7;
- t19 += v * b8;
- t20 += v * b9;
- t21 += v * b10;
- t22 += v * b11;
- t23 += v * b12;
- t24 += v * b13;
- t25 += v * b14;
- t26 += v * b15;
- v = a[12];
- t12 += v * b0;
- t13 += v * b1;
- t14 += v * b2;
- t15 += v * b3;
- t16 += v * b4;
- t17 += v * b5;
- t18 += v * b6;
- t19 += v * b7;
- t20 += v * b8;
- t21 += v * b9;
- t22 += v * b10;
- t23 += v * b11;
- t24 += v * b12;
- t25 += v * b13;
- t26 += v * b14;
- t27 += v * b15;
- v = a[13];
- t13 += v * b0;
- t14 += v * b1;
- t15 += v * b2;
- t16 += v * b3;
- t17 += v * b4;
- t18 += v * b5;
- t19 += v * b6;
- t20 += v * b7;
- t21 += v * b8;
- t22 += v * b9;
- t23 += v * b10;
- t24 += v * b11;
- t25 += v * b12;
- t26 += v * b13;
- t27 += v * b14;
- t28 += v * b15;
- v = a[14];
- t14 += v * b0;
- t15 += v * b1;
- t16 += v * b2;
- t17 += v * b3;
- t18 += v * b4;
- t19 += v * b5;
- t20 += v * b6;
- t21 += v * b7;
- t22 += v * b8;
- t23 += v * b9;
- t24 += v * b10;
- t25 += v * b11;
- t26 += v * b12;
- t27 += v * b13;
- t28 += v * b14;
- t29 += v * b15;
- v = a[15];
- t15 += v * b0;
- t16 += v * b1;
- t17 += v * b2;
- t18 += v * b3;
- t19 += v * b4;
- t20 += v * b5;
- t21 += v * b6;
- t22 += v * b7;
- t23 += v * b8;
- t24 += v * b9;
- t25 += v * b10;
- t26 += v * b11;
- t27 += v * b12;
- t28 += v * b13;
- t29 += v * b14;
- t30 += v * b15;
-
- t0 += 38 * t16;
- t1 += 38 * t17;
- t2 += 38 * t18;
- t3 += 38 * t19;
- t4 += 38 * t20;
- t5 += 38 * t21;
- t6 += 38 * t22;
- t7 += 38 * t23;
- t8 += 38 * t24;
- t9 += 38 * t25;
- t10 += 38 * t26;
- t11 += 38 * t27;
- t12 += 38 * t28;
- t13 += 38 * t29;
- t14 += 38 * t30;
- // t15 left as is
-
- // first car
- c = 1;
- v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;
- v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;
- v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;
- v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;
- v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;
- v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;
- v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;
- v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;
- v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;
- v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;
- v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;
- v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;
- v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;
- v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;
- v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;
- v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;
- t0 += c-1 + 37 * (c-1);
-
- // second car
- c = 1;
- v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;
- v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;
- v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;
- v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;
- v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;
- v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;
- v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;
- v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;
- v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;
- v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;
- v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;
- v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;
- v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;
- v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;
- v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;
- v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;
- t0 += c-1 + 37 * (c-1);
-
- o[ 0] = t0;
- o[ 1] = t1;
- o[ 2] = t2;
- o[ 3] = t3;
- o[ 4] = t4;
- o[ 5] = t5;
- o[ 6] = t6;
- o[ 7] = t7;
- o[ 8] = t8;
- o[ 9] = t9;
- o[10] = t10;
- o[11] = t11;
- o[12] = t12;
- o[13] = t13;
- o[14] = t14;
- o[15] = t15;
-}
-
-function S(o, a) {
- M(o, a, a);
-}
-
-function inv25519(o, i) {
- var c = gf();
- var a;
- for (a = 0; a < 16; a++) c[a] = i[a];
- for (a = 253; a >= 0; a--) {
- S(c, c);
- if(a !== 2 && a !== 4) M(c, c, i);
- }
- for (a = 0; a < 16; a++) o[a] = c[a];
-}
-
-function pow2523(o, i) {
- var c = gf();
- var a;
- for (a = 0; a < 16; a++) c[a] = i[a];
- for (a = 250; a >= 0; a--) {
- S(c, c);
- if(a !== 1) M(c, c, i);
- }
- for (a = 0; a < 16; a++) o[a] = c[a];
-}
-
-function crypto_scalarmult(q, n, p) {
- var z = new Uint8Array(32);
- var x = new Float64Array(80), r, i;
- var a = gf(), b = gf(), c = gf(),
- d = gf(), e = gf(), f = gf();
- for (i = 0; i < 31; i++) z[i] = n[i];
- z[31]=(n[31]&127)|64;
- z[0]&=248;
- unpack25519(x,p);
- for (i = 0; i < 16; i++) {
- b[i]=x[i];
- d[i]=a[i]=c[i]=0;
- }
- a[0]=d[0]=1;
- for (i=254; i>=0; --i) {
- r=(z[i>>>3]>>>(i&7))&1;
- sel25519(a,b,r);
- sel25519(c,d,r);
- A(e,a,c);
- Z(a,a,c);
- A(c,b,d);
- Z(b,b,d);
- S(d,e);
- S(f,a);
- M(a,c,a);
- M(c,b,e);
- A(e,a,c);
- Z(a,a,c);
- S(b,a);
- Z(c,d,f);
- M(a,c,_121665);
- A(a,a,d);
- M(c,c,a);
- M(a,d,f);
- M(d,b,x);
- S(b,e);
- sel25519(a,b,r);
- sel25519(c,d,r);
- }
- for (i = 0; i < 16; i++) {
- x[i+16]=a[i];
- x[i+32]=c[i];
- x[i+48]=b[i];
- x[i+64]=d[i];
- }
- var x32 = x.subarray(32);
- var x16 = x.subarray(16);
- inv25519(x32,x32);
- M(x16,x16,x32);
- pack25519(q,x16);
- return 0;
-}
-
-function crypto_scalarmult_base(q, n) {
- return crypto_scalarmult(q, n, _9);
-}
-
-function crypto_box_keypair(y, x) {
- randombytes(x, 32);
- return crypto_scalarmult_base(y, x);
-}
-
-function crypto_box_beforenm(k, y, x) {
- var s = new Uint8Array(32);
- crypto_scalarmult(s, x, y);
- return crypto_core_hsalsa20(k, _0, s, sigma);
-}
-
-var crypto_box_afternm = crypto_secretbox;
-var crypto_box_open_afternm = crypto_secretbox_open;
-
-function crypto_box(c, m, d, n, y, x) {
- var k = new Uint8Array(32);
- crypto_box_beforenm(k, y, x);
- return crypto_box_afternm(c, m, d, n, k);
-}
-
-function crypto_box_open(m, c, d, n, y, x) {
- var k = new Uint8Array(32);
- crypto_box_beforenm(k, y, x);
- return crypto_box_open_afternm(m, c, d, n, k);
-}
-
-var K = [
- 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
- 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
- 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
- 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
- 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
- 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
- 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
- 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
- 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
- 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
- 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
- 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
- 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
- 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
- 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
- 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
- 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
- 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
- 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
- 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
- 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
- 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
- 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
- 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
- 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
- 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
- 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
- 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
- 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
- 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
- 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
- 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
- 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
- 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
- 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
- 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
- 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
- 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
- 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
- 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
-];
-
-function crypto_hashblocks_hl(hh, hl, m, n) {
- var wh = new Int32Array(16), wl = new Int32Array(16),
- bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7,
- bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7,
- th, tl, i, j, h, l, a, b, c, d;
-
- var ah0 = hh[0],
- ah1 = hh[1],
- ah2 = hh[2],
- ah3 = hh[3],
- ah4 = hh[4],
- ah5 = hh[5],
- ah6 = hh[6],
- ah7 = hh[7],
-
- al0 = hl[0],
- al1 = hl[1],
- al2 = hl[2],
- al3 = hl[3],
- al4 = hl[4],
- al5 = hl[5],
- al6 = hl[6],
- al7 = hl[7];
-
- var pos = 0;
- while (n >= 128) {
- for (i = 0; i < 16; i++) {
- j = 8 * i + pos;
- wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3];
- wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7];
- }
- for (i = 0; i < 80; i++) {
- bh0 = ah0;
- bh1 = ah1;
- bh2 = ah2;
- bh3 = ah3;
- bh4 = ah4;
- bh5 = ah5;
- bh6 = ah6;
- bh7 = ah7;
-
- bl0 = al0;
- bl1 = al1;
- bl2 = al2;
- bl3 = al3;
- bl4 = al4;
- bl5 = al5;
- bl6 = al6;
- bl7 = al7;
-
- // add
- h = ah7;
- l = al7;
-
- a = l & 0xffff; b = l >>> 16;
- c = h & 0xffff; d = h >>> 16;
-
- // Sigma1
- h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32))));
- l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32))));
-
- a += l & 0xffff; b += l >>> 16;
- c += h & 0xffff; d += h >>> 16;
-
- // Ch
- h = (ah4 & ah5) ^ (~ah4 & ah6);
- l = (al4 & al5) ^ (~al4 & al6);
-
- a += l & 0xffff; b += l >>> 16;
- c += h & 0xffff; d += h >>> 16;
-
- // K
- h = K[i*2];
- l = K[i*2+1];
-
- a += l & 0xffff; b += l >>> 16;
- c += h & 0xffff; d += h >>> 16;
-
- // w
- h = wh[i%16];
- l = wl[i%16];
-
- a += l & 0xffff; b += l >>> 16;
- c += h & 0xffff; d += h >>> 16;
-
- b += a >>> 16;
- c += b >>> 16;
- d += c >>> 16;
-
- th = c & 0xffff | d << 16;
- tl = a & 0xffff | b << 16;
-
- // add
- h = th;
- l = tl;
-
- a = l & 0xffff; b = l >>> 16;
- c = h & 0xffff; d = h >>> 16;
-
- // Sigma0
- h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32))));
- l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32))));
-
- a += l & 0xffff; b += l >>> 16;
- c += h & 0xffff; d += h >>> 16;
-
- // Maj
- h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2);
- l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2);
-
- a += l & 0xffff; b += l >>> 16;
- c += h & 0xffff; d += h >>> 16;
-
- b += a >>> 16;
- c += b >>> 16;
- d += c >>> 16;
-
- bh7 = (c & 0xffff) | (d << 16);
- bl7 = (a & 0xffff) | (b << 16);
-
- // add
- h = bh3;
- l = bl3;
-
- a = l & 0xffff; b = l >>> 16;
- c = h & 0xffff; d = h >>> 16;
-
- h = th;
- l = tl;
-
- a += l & 0xffff; b += l >>> 16;
- c += h & 0xffff; d += h >>> 16;
-
- b += a >>> 16;
- c += b >>> 16;
- d += c >>> 16;
-
- bh3 = (c & 0xffff) | (d << 16);
- bl3 = (a & 0xffff) | (b << 16);
-
- ah1 = bh0;
- ah2 = bh1;
- ah3 = bh2;
- ah4 = bh3;
- ah5 = bh4;
- ah6 = bh5;
- ah7 = bh6;
- ah0 = bh7;
-
- al1 = bl0;
- al2 = bl1;
- al3 = bl2;
- al4 = bl3;
- al5 = bl4;
- al6 = bl5;
- al7 = bl6;
- al0 = bl7;
-
- if (i%16 === 15) {
- for (j = 0; j < 16; j++) {
- // add
- h = wh[j];
- l = wl[j];
-
- a = l & 0xffff; b = l >>> 16;
- c = h & 0xffff; d = h >>> 16;
-
- h = wh[(j+9)%16];
- l = wl[(j+9)%16];
-
- a += l & 0xffff; b += l >>> 16;
- c += h & 0xffff; d += h >>> 16;
-
- // sigma0
- th = wh[(j+1)%16];
- tl = wl[(j+1)%16];
- h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7);
- l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7)));
-
- a += l & 0xffff; b += l >>> 16;
- c += h & 0xffff; d += h >>> 16;
-
- // sigma1
- th = wh[(j+14)%16];
- tl = wl[(j+14)%16];
- h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6);
- l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6)));
-
- a += l & 0xffff; b += l >>> 16;
- c += h & 0xffff; d += h >>> 16;
-
- b += a >>> 16;
- c += b >>> 16;
- d += c >>> 16;
-
- wh[j] = (c & 0xffff) | (d << 16);
- wl[j] = (a & 0xffff) | (b << 16);
- }
- }
- }
-
- // add
- h = ah0;
- l = al0;
-
- a = l & 0xffff; b = l >>> 16;
- c = h & 0xffff; d = h >>> 16;
-
- h = hh[0];
- l = hl[0];
-
- a += l & 0xffff; b += l >>> 16;
- c += h & 0xffff; d += h >>> 16;
-
- b += a >>> 16;
- c += b >>> 16;
- d += c >>> 16;
-
- hh[0] = ah0 = (c & 0xffff) | (d << 16);
- hl[0] = al0 = (a & 0xffff) | (b << 16);
-
- h = ah1;
- l = al1;
-
- a = l & 0xffff; b = l >>> 16;
- c = h & 0xffff; d = h >>> 16;
-
- h = hh[1];
- l = hl[1];
-
- a += l & 0xffff; b += l >>> 16;
- c += h & 0xffff; d += h >>> 16;
-
- b += a >>> 16;
- c += b >>> 16;
- d += c >>> 16;
-
- hh[1] = ah1 = (c & 0xffff) | (d << 16);
- hl[1] = al1 = (a & 0xffff) | (b << 16);
-
- h = ah2;
- l = al2;
-
- a = l & 0xffff; b = l >>> 16;
- c = h & 0xffff; d = h >>> 16;
-
- h = hh[2];
- l = hl[2];
-
- a += l & 0xffff; b += l >>> 16;
- c += h & 0xffff; d += h >>> 16;
-
- b += a >>> 16;
- c += b >>> 16;
- d += c >>> 16;
-
- hh[2] = ah2 = (c & 0xffff) | (d << 16);
- hl[2] = al2 = (a & 0xffff) | (b << 16);
-
- h = ah3;
- l = al3;
-
- a = l & 0xffff; b = l >>> 16;
- c = h & 0xffff; d = h >>> 16;
-
- h = hh[3];
- l = hl[3];
-
- a += l & 0xffff; b += l >>> 16;
- c += h & 0xffff; d += h >>> 16;
-
- b += a >>> 16;
- c += b >>> 16;
- d += c >>> 16;
-
- hh[3] = ah3 = (c & 0xffff) | (d << 16);
- hl[3] = al3 = (a & 0xffff) | (b << 16);
-
- h = ah4;
- l = al4;
-
- a = l & 0xffff; b = l >>> 16;
- c = h & 0xffff; d = h >>> 16;
-
- h = hh[4];
- l = hl[4];
-
- a += l & 0xffff; b += l >>> 16;
- c += h & 0xffff; d += h >>> 16;
-
- b += a >>> 16;
- c += b >>> 16;
- d += c >>> 16;
-
- hh[4] = ah4 = (c & 0xffff) | (d << 16);
- hl[4] = al4 = (a & 0xffff) | (b << 16);
-
- h = ah5;
- l = al5;
-
- a = l & 0xffff; b = l >>> 16;
- c = h & 0xffff; d = h >>> 16;
-
- h = hh[5];
- l = hl[5];
-
- a += l & 0xffff; b += l >>> 16;
- c += h & 0xffff; d += h >>> 16;
-
- b += a >>> 16;
- c += b >>> 16;
- d += c >>> 16;
-
- hh[5] = ah5 = (c & 0xffff) | (d << 16);
- hl[5] = al5 = (a & 0xffff) | (b << 16);
-
- h = ah6;
- l = al6;
-
- a = l & 0xffff; b = l >>> 16;
- c = h & 0xffff; d = h >>> 16;
-
- h = hh[6];
- l = hl[6];
-
- a += l & 0xffff; b += l >>> 16;
- c += h & 0xffff; d += h >>> 16;
-
- b += a >>> 16;
- c += b >>> 16;
- d += c >>> 16;
-
- hh[6] = ah6 = (c & 0xffff) | (d << 16);
- hl[6] = al6 = (a & 0xffff) | (b << 16);
-
- h = ah7;
- l = al7;
-
- a = l & 0xffff; b = l >>> 16;
- c = h & 0xffff; d = h >>> 16;
-
- h = hh[7];
- l = hl[7];
-
- a += l & 0xffff; b += l >>> 16;
- c += h & 0xffff; d += h >>> 16;
-
- b += a >>> 16;
- c += b >>> 16;
- d += c >>> 16;
-
- hh[7] = ah7 = (c & 0xffff) | (d << 16);
- hl[7] = al7 = (a & 0xffff) | (b << 16);
-
- pos += 128;
- n -= 128;
- }
-
- return n;
-}
-
-function crypto_hash(out, m, n) {
- var hh = new Int32Array(8),
- hl = new Int32Array(8),
- x = new Uint8Array(256),
- i, b = n;
-
- hh[0] = 0x6a09e667;
- hh[1] = 0xbb67ae85;
- hh[2] = 0x3c6ef372;
- hh[3] = 0xa54ff53a;
- hh[4] = 0x510e527f;
- hh[5] = 0x9b05688c;
- hh[6] = 0x1f83d9ab;
- hh[7] = 0x5be0cd19;
-
- hl[0] = 0xf3bcc908;
- hl[1] = 0x84caa73b;
- hl[2] = 0xfe94f82b;
- hl[3] = 0x5f1d36f1;
- hl[4] = 0xade682d1;
- hl[5] = 0x2b3e6c1f;
- hl[6] = 0xfb41bd6b;
- hl[7] = 0x137e2179;
-
- crypto_hashblocks_hl(hh, hl, m, n);
- n %= 128;
-
- for (i = 0; i < n; i++) x[i] = m[b-n+i];
- x[n] = 128;
-
- n = 256-128*(n<112?1:0);
- x[n-9] = 0;
- ts64(x, n-8, (b / 0x20000000) | 0, b << 3);
- crypto_hashblocks_hl(hh, hl, x, n);
-
- for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]);
-
- return 0;
-}
-
-function add(p, q) {
- var a = gf(), b = gf(), c = gf(),
- d = gf(), e = gf(), f = gf(),
- g = gf(), h = gf(), t = gf();
-
- Z(a, p[1], p[0]);
- Z(t, q[1], q[0]);
- M(a, a, t);
- A(b, p[0], p[1]);
- A(t, q[0], q[1]);
- M(b, b, t);
- M(c, p[3], q[3]);
- M(c, c, D2);
- M(d, p[2], q[2]);
- A(d, d, d);
- Z(e, b, a);
- Z(f, d, c);
- A(g, d, c);
- A(h, b, a);
-
- M(p[0], e, f);
- M(p[1], h, g);
- M(p[2], g, f);
- M(p[3], e, h);
-}
-
-function cswap(p, q, b) {
- var i;
- for (i = 0; i < 4; i++) {
- sel25519(p[i], q[i], b);
- }
-}
-
-function pack(r, p) {
- var tx = gf(), ty = gf(), zi = gf();
- inv25519(zi, p[2]);
- M(tx, p[0], zi);
- M(ty, p[1], zi);
- pack25519(r, ty);
- r[31] ^= par25519(tx) << 7;
-}
-
-function scalarmult(p, q, s) {
- var b, i;
- set25519(p[0], gf0);
- set25519(p[1], gf1);
- set25519(p[2], gf1);
- set25519(p[3], gf0);
- for (i = 255; i >= 0; --i) {
- b = (s[(i/8)|0] >> (i&7)) & 1;
- cswap(p, q, b);
- add(q, p);
- add(p, p);
- cswap(p, q, b);
- }
-}
-
-function scalarbase(p, s) {
- var q = [gf(), gf(), gf(), gf()];
- set25519(q[0], X);
- set25519(q[1], Y);
- set25519(q[2], gf1);
- M(q[3], X, Y);
- scalarmult(p, q, s);
-}
-
-function crypto_sign_keypair(pk, sk, seeded) {
- var d = new Uint8Array(64);
- var p = [gf(), gf(), gf(), gf()];
- var i;
-
- if (!seeded) randombytes(sk, 32);
- crypto_hash(d, sk, 32);
- d[0] &= 248;
- d[31] &= 127;
- d[31] |= 64;
-
- scalarbase(p, d);
- pack(pk, p);
-
- for (i = 0; i < 32; i++) sk[i+32] = pk[i];
- return 0;
-}
-
-var L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]);
-
-function modL(r, x) {
- var carry, i, j, k;
- for (i = 63; i >= 32; --i) {
- carry = 0;
- for (j = i - 32, k = i - 12; j < k; ++j) {
- x[j] += carry - 16 * x[i] * L[j - (i - 32)];
- carry = (x[j] + 128) >> 8;
- x[j] -= carry * 256;
- }
- x[j] += carry;
- x[i] = 0;
- }
- carry = 0;
- for (j = 0; j < 32; j++) {
- x[j] += carry - (x[31] >> 4) * L[j];
- carry = x[j] >> 8;
- x[j] &= 255;
- }
- for (j = 0; j < 32; j++) x[j] -= carry * L[j];
- for (i = 0; i < 32; i++) {
- x[i+1] += x[i] >> 8;
- r[i] = x[i] & 255;
- }
-}
-
-function reduce(r) {
- var x = new Float64Array(64), i;
- for (i = 0; i < 64; i++) x[i] = r[i];
- for (i = 0; i < 64; i++) r[i] = 0;
- modL(r, x);
-}
-
-// Note: difference from C - smlen returned, not passed as argument.
-function crypto_sign(sm, m, n, sk) {
- var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64);
- var i, j, x = new Float64Array(64);
- var p = [gf(), gf(), gf(), gf()];
-
- crypto_hash(d, sk, 32);
- d[0] &= 248;
- d[31] &= 127;
- d[31] |= 64;
-
- var smlen = n + 64;
- for (i = 0; i < n; i++) sm[64 + i] = m[i];
- for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i];
-
- crypto_hash(r, sm.subarray(32), n+32);
- reduce(r);
- scalarbase(p, r);
- pack(sm, p);
-
- for (i = 32; i < 64; i++) sm[i] = sk[i];
- crypto_hash(h, sm, n + 64);
- reduce(h);
-
- for (i = 0; i < 64; i++) x[i] = 0;
- for (i = 0; i < 32; i++) x[i] = r[i];
- for (i = 0; i < 32; i++) {
- for (j = 0; j < 32; j++) {
- x[i+j] += h[i] * d[j];
- }
- }
-
- modL(sm.subarray(32), x);
- return smlen;
-}
-
-function unpackneg(r, p) {
- var t = gf(), chk = gf(), num = gf(),
- den = gf(), den2 = gf(), den4 = gf(),
- den6 = gf();
-
- set25519(r[2], gf1);
- unpack25519(r[1], p);
- S(num, r[1]);
- M(den, num, D);
- Z(num, num, r[2]);
- A(den, r[2], den);
-
- S(den2, den);
- S(den4, den2);
- M(den6, den4, den2);
- M(t, den6, num);
- M(t, t, den);
-
- pow2523(t, t);
- M(t, t, num);
- M(t, t, den);
- M(t, t, den);
- M(r[0], t, den);
-
- S(chk, r[0]);
- M(chk, chk, den);
- if (neq25519(chk, num)) M(r[0], r[0], I);
-
- S(chk, r[0]);
- M(chk, chk, den);
- if (neq25519(chk, num)) return -1;
-
- if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]);
-
- M(r[3], r[0], r[1]);
- return 0;
-}
-
-function crypto_sign_open(m, sm, n, pk) {
- var i, mlen;
- var t = new Uint8Array(32), h = new Uint8Array(64);
- var p = [gf(), gf(), gf(), gf()],
- q = [gf(), gf(), gf(), gf()];
-
- mlen = -1;
- if (n < 64) return -1;
-
- if (unpackneg(q, pk)) return -1;
-
- for (i = 0; i < n; i++) m[i] = sm[i];
- for (i = 0; i < 32; i++) m[i+32] = pk[i];
- crypto_hash(h, m, n);
- reduce(h);
- scalarmult(p, q, h);
-
- scalarbase(q, sm.subarray(32));
- add(p, q);
- pack(t, p);
-
- n -= 64;
- if (crypto_verify_32(sm, 0, t, 0)) {
- for (i = 0; i < n; i++) m[i] = 0;
- return -1;
- }
-
- for (i = 0; i < n; i++) m[i] = sm[i + 64];
- mlen = n;
- return mlen;
-}
-
-var crypto_secretbox_KEYBYTES = 32,
- crypto_secretbox_NONCEBYTES = 24,
- crypto_secretbox_ZEROBYTES = 32,
- crypto_secretbox_BOXZEROBYTES = 16,
- crypto_scalarmult_BYTES = 32,
- crypto_scalarmult_SCALARBYTES = 32,
- crypto_box_PUBLICKEYBYTES = 32,
- crypto_box_SECRETKEYBYTES = 32,
- crypto_box_BEFORENMBYTES = 32,
- crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES,
- crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES,
- crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES,
- crypto_sign_BYTES = 64,
- crypto_sign_PUBLICKEYBYTES = 32,
- crypto_sign_SECRETKEYBYTES = 64,
- crypto_sign_SEEDBYTES = 32,
- crypto_hash_BYTES = 64;
-
-nacl.lowlevel = {
- crypto_core_hsalsa20: crypto_core_hsalsa20,
- crypto_stream_xor: crypto_stream_xor,
- crypto_stream: crypto_stream,
- crypto_stream_salsa20_xor: crypto_stream_salsa20_xor,
- crypto_stream_salsa20: crypto_stream_salsa20,
- crypto_onetimeauth: crypto_onetimeauth,
- crypto_onetimeauth_verify: crypto_onetimeauth_verify,
- crypto_verify_16: crypto_verify_16,
- crypto_verify_32: crypto_verify_32,
- crypto_secretbox: crypto_secretbox,
- crypto_secretbox_open: crypto_secretbox_open,
- crypto_scalarmult: crypto_scalarmult,
- crypto_scalarmult_base: crypto_scalarmult_base,
- crypto_box_beforenm: crypto_box_beforenm,
- crypto_box_afternm: crypto_box_afternm,
- crypto_box: crypto_box,
- crypto_box_open: crypto_box_open,
- crypto_box_keypair: crypto_box_keypair,
- crypto_hash: crypto_hash,
- crypto_sign: crypto_sign,
- crypto_sign_keypair: crypto_sign_keypair,
- crypto_sign_open: crypto_sign_open,
-
- crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES,
- crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES,
- crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES,
- crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES,
- crypto_scalarmult_BYTES: crypto_scalarmult_BYTES,
- crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES,
- crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES,
- crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES,
- crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES,
- crypto_box_NONCEBYTES: crypto_box_NONCEBYTES,
- crypto_box_ZEROBYTES: crypto_box_ZEROBYTES,
- crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES,
- crypto_sign_BYTES: crypto_sign_BYTES,
- crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES,
- crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES,
- crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES,
- crypto_hash_BYTES: crypto_hash_BYTES
-};
-
-/* High-level API */
-
-function checkLengths(k, n) {
- if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size');
- if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size');
-}
-
-function checkBoxLengths(pk, sk) {
- if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size');
- if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size');
-}
-
-function checkArrayTypes() {
- var t, i;
- for (i = 0; i < arguments.length; i++) {
- if ((t = Object.prototype.toString.call(arguments[i])) !== '[object Uint8Array]')
- throw new TypeError('unexpected type ' + t + ', use Uint8Array');
- }
-}
-
-function cleanup(arr) {
- for (var i = 0; i < arr.length; i++) arr[i] = 0;
-}
-
-// TODO: Completely remove this in v0.15.
-if (!nacl.util) {
- nacl.util = {};
- nacl.util.decodeUTF8 = nacl.util.encodeUTF8 = nacl.util.encodeBase64 = nacl.util.decodeBase64 = function() {
- throw new Error('nacl.util moved into separate package: https://github.com/dchest/tweetnacl-util-js');
- };
-}
-
-nacl.randomBytes = function(n) {
- var b = new Uint8Array(n);
- randombytes(b, n);
- return b;
-};
-
-nacl.secretbox = function(msg, nonce, key) {
- checkArrayTypes(msg, nonce, key);
- checkLengths(key, nonce);
- var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length);
- var c = new Uint8Array(m.length);
- for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i];
- crypto_secretbox(c, m, m.length, nonce, key);
- return c.subarray(crypto_secretbox_BOXZEROBYTES);
-};
-
-nacl.secretbox.open = function(box, nonce, key) {
- checkArrayTypes(box, nonce, key);
- checkLengths(key, nonce);
- var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length);
- var m = new Uint8Array(c.length);
- for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i];
- if (c.length < 32) return false;
- if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return false;
- return m.subarray(crypto_secretbox_ZEROBYTES);
-};
-
-nacl.secretbox.keyLength = crypto_secretbox_KEYBYTES;
-nacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES;
-nacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES;
-
-nacl.scalarMult = function(n, p) {
- checkArrayTypes(n, p);
- if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');
- if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size');
- var q = new Uint8Array(crypto_scalarmult_BYTES);
- crypto_scalarmult(q, n, p);
- return q;
-};
-
-nacl.scalarMult.base = function(n) {
- checkArrayTypes(n);
- if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');
- var q = new Uint8Array(crypto_scalarmult_BYTES);
- crypto_scalarmult_base(q, n);
- return q;
-};
-
-nacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES;
-nacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES;
-
-nacl.box = function(msg, nonce, publicKey, secretKey) {
- var k = nacl.box.before(publicKey, secretKey);
- return nacl.secretbox(msg, nonce, k);
-};
-
-nacl.box.before = function(publicKey, secretKey) {
- checkArrayTypes(publicKey, secretKey);
- checkBoxLengths(publicKey, secretKey);
- var k = new Uint8Array(crypto_box_BEFORENMBYTES);
- crypto_box_beforenm(k, publicKey, secretKey);
- return k;
-};
-
-nacl.box.after = nacl.secretbox;
-
-nacl.box.open = function(msg, nonce, publicKey, secretKey) {
- var k = nacl.box.before(publicKey, secretKey);
- return nacl.secretbox.open(msg, nonce, k);
-};
-
-nacl.box.open.after = nacl.secretbox.open;
-
-nacl.box.keyPair = function() {
- var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);
- var sk = new Uint8Array(crypto_box_SECRETKEYBYTES);
- crypto_box_keypair(pk, sk);
- return {publicKey: pk, secretKey: sk};
-};
-
-nacl.box.keyPair.fromSecretKey = function(secretKey) {
- checkArrayTypes(secretKey);
- if (secretKey.length !== crypto_box_SECRETKEYBYTES)
- throw new Error('bad secret key size');
- var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);
- crypto_scalarmult_base(pk, secretKey);
- return {publicKey: pk, secretKey: new Uint8Array(secretKey)};
-};
-
-nacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES;
-nacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES;
-nacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES;
-nacl.box.nonceLength = crypto_box_NONCEBYTES;
-nacl.box.overheadLength = nacl.secretbox.overheadLength;
-
-nacl.sign = function(msg, secretKey) {
- checkArrayTypes(msg, secretKey);
- if (secretKey.length !== crypto_sign_SECRETKEYBYTES)
- throw new Error('bad secret key size');
- var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length);
- crypto_sign(signedMsg, msg, msg.length, secretKey);
- return signedMsg;
-};
-
-nacl.sign.open = function(signedMsg, publicKey) {
- if (arguments.length !== 2)
- throw new Error('nacl.sign.open accepts 2 arguments; did you mean to use nacl.sign.detached.verify?');
- checkArrayTypes(signedMsg, publicKey);
- if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)
- throw new Error('bad public key size');
- var tmp = new Uint8Array(signedMsg.length);
- var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey);
- if (mlen < 0) return null;
- var m = new Uint8Array(mlen);
- for (var i = 0; i < m.length; i++) m[i] = tmp[i];
- return m;
-};
-
-nacl.sign.detached = function(msg, secretKey) {
- var signedMsg = nacl.sign(msg, secretKey);
- var sig = new Uint8Array(crypto_sign_BYTES);
- for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i];
- return sig;
-};
-
-nacl.sign.detached.verify = function(msg, sig, publicKey) {
- checkArrayTypes(msg, sig, publicKey);
- if (sig.length !== crypto_sign_BYTES)
- throw new Error('bad signature size');
- if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)
- throw new Error('bad public key size');
- var sm = new Uint8Array(crypto_sign_BYTES + msg.length);
- var m = new Uint8Array(crypto_sign_BYTES + msg.length);
- var i;
- for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i];
- for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i];
- return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0);
-};
-
-nacl.sign.keyPair = function() {
- var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);
- var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);
- crypto_sign_keypair(pk, sk);
- return {publicKey: pk, secretKey: sk};
-};
-
-nacl.sign.keyPair.fromSecretKey = function(secretKey) {
- checkArrayTypes(secretKey);
- if (secretKey.length !== crypto_sign_SECRETKEYBYTES)
- throw new Error('bad secret key size');
- var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);
- for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i];
- return {publicKey: pk, secretKey: new Uint8Array(secretKey)};
-};
-
-nacl.sign.keyPair.fromSeed = function(seed) {
- checkArrayTypes(seed);
- if (seed.length !== crypto_sign_SEEDBYTES)
- throw new Error('bad seed size');
- var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);
- var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);
- for (var i = 0; i < 32; i++) sk[i] = seed[i];
- crypto_sign_keypair(pk, sk, true);
- return {publicKey: pk, secretKey: sk};
-};
-
-nacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES;
-nacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES;
-nacl.sign.seedLength = crypto_sign_SEEDBYTES;
-nacl.sign.signatureLength = crypto_sign_BYTES;
-
-nacl.hash = function(msg) {
- checkArrayTypes(msg);
- var h = new Uint8Array(crypto_hash_BYTES);
- crypto_hash(h, msg, msg.length);
- return h;
-};
-
-nacl.hash.hashLength = crypto_hash_BYTES;
-
-nacl.verify = function(x, y) {
- checkArrayTypes(x, y);
- // Zero length arguments are considered not equal.
- if (x.length === 0 || y.length === 0) return false;
- if (x.length !== y.length) return false;
- return (vn(x, 0, y, 0, x.length) === 0) ? true : false;
-};
-
-nacl.setPRNG = function(fn) {
- randombytes = fn;
-};
-
-(function() {
- // Initialize PRNG if environment provides CSPRNG.
- // If not, methods calling randombytes will throw.
- var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null;
- if (crypto && crypto.getRandomValues) {
- // Browsers.
- var QUOTA = 65536;
- nacl.setPRNG(function(x, n) {
- var i, v = new Uint8Array(n);
- for (i = 0; i < n; i += QUOTA) {
- crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA)));
- }
- for (i = 0; i < n; i++) x[i] = v[i];
- cleanup(v);
- });
- } else if (typeof require !== 'undefined') {
- // Node.js.
- crypto = require('crypto');
- if (crypto && crypto.randomBytes) {
- nacl.setPRNG(function(x, n) {
- var i, v = crypto.randomBytes(n);
- for (i = 0; i < n; i++) x[i] = v[i];
- cleanup(v);
- });
- }
- }
-})();
-
-})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {}));
diff --git a/deps/npm/node_modules/tweetnacl/nacl-fast.min.js b/deps/npm/node_modules/tweetnacl/nacl-fast.min.js
deleted file mode 100644
index 8bc47daa036d91..00000000000000
--- a/deps/npm/node_modules/tweetnacl/nacl-fast.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-!function(r){"use strict";function t(r,t,n,e){r[t]=n>>24&255,r[t+1]=n>>16&255,r[t+2]=n>>8&255,r[t+3]=255&n,r[t+4]=e>>24&255,r[t+5]=e>>16&255,r[t+6]=e>>8&255,r[t+7]=255&e}function n(r,t,n,e,o){var i,h=0;for(i=0;i>>8)-1}function e(r,t,e,o){return n(r,t,e,o,16)}function o(r,t,e,o){return n(r,t,e,o,32)}function i(r,t,n,e){for(var o,i=255&e[0]|(255&e[1])<<8|(255&e[2])<<16|(255&e[3])<<24,h=255&n[0]|(255&n[1])<<8|(255&n[2])<<16|(255&n[3])<<24,a=255&n[4]|(255&n[5])<<8|(255&n[6])<<16|(255&n[7])<<24,f=255&n[8]|(255&n[9])<<8|(255&n[10])<<16|(255&n[11])<<24,s=255&n[12]|(255&n[13])<<8|(255&n[14])<<16|(255&n[15])<<24,c=255&e[4]|(255&e[5])<<8|(255&e[6])<<16|(255&e[7])<<24,u=255&t[0]|(255&t[1])<<8|(255&t[2])<<16|(255&t[3])<<24,y=255&t[4]|(255&t[5])<<8|(255&t[6])<<16|(255&t[7])<<24,l=255&t[8]|(255&t[9])<<8|(255&t[10])<<16|(255&t[11])<<24,w=255&t[12]|(255&t[13])<<8|(255&t[14])<<16|(255&t[15])<<24,p=255&e[8]|(255&e[9])<<8|(255&e[10])<<16|(255&e[11])<<24,v=255&n[16]|(255&n[17])<<8|(255&n[18])<<16|(255&n[19])<<24,b=255&n[20]|(255&n[21])<<8|(255&n[22])<<16|(255&n[23])<<24,g=255&n[24]|(255&n[25])<<8|(255&n[26])<<16|(255&n[27])<<24,_=255&n[28]|(255&n[29])<<8|(255&n[30])<<16|(255&n[31])<<24,A=255&e[12]|(255&e[13])<<8|(255&e[14])<<16|(255&e[15])<<24,d=i,U=h,E=a,x=f,M=s,m=c,B=u,S=y,K=l,T=w,Y=p,k=v,L=b,z=g,R=_,P=A,O=0;O<20;O+=2)o=d+L|0,M^=o<<7|o>>>25,o=M+d|0,K^=o<<9|o>>>23,o=K+M|0,L^=o<<13|o>>>19,o=L+K|0,d^=o<<18|o>>>14,o=m+U|0,T^=o<<7|o>>>25,o=T+m|0,z^=o<<9|o>>>23,o=z+T|0,U^=o<<13|o>>>19,o=U+z|0,m^=o<<18|o>>>14,o=Y+B|0,R^=o<<7|o>>>25,o=R+Y|0,E^=o<<9|o>>>23,o=E+R|0,B^=o<<13|o>>>19,o=B+E|0,Y^=o<<18|o>>>14,o=P+k|0,x^=o<<7|o>>>25,o=x+P|0,S^=o<<9|o>>>23,o=S+x|0,k^=o<<13|o>>>19,o=k+S|0,P^=o<<18|o>>>14,o=d+x|0,U^=o<<7|o>>>25,o=U+d|0,E^=o<<9|o>>>23,o=E+U|0,x^=o<<13|o>>>19,o=x+E|0,d^=o<<18|o>>>14,o=m+M|0,B^=o<<7|o>>>25,o=B+m|0,S^=o<<9|o>>>23,o=S+B|0,M^=o<<13|o>>>19,o=M+S|0,m^=o<<18|o>>>14,o=Y+T|0,k^=o<<7|o>>>25,o=k+Y|0,K^=o<<9|o>>>23,o=K+k|0,T^=o<<13|o>>>19,o=T+K|0,Y^=o<<18|o>>>14,o=P+R|0,L^=o<<7|o>>>25,o=L+P|0,z^=o<<9|o>>>23,o=z+L|0,R^=o<<13|o>>>19,o=R+z|0,P^=o<<18|o>>>14;d=d+i|0,U=U+h|0,E=E+a|0,x=x+f|0,M=M+s|0,m=m+c|0,B=B+u|0,S=S+y|0,K=K+l|0,T=T+w|0,Y=Y+p|0,k=k+v|0,L=L+b|0,z=z+g|0,R=R+_|0,P=P+A|0,r[0]=d>>>0&255,r[1]=d>>>8&255,r[2]=d>>>16&255,r[3]=d>>>24&255,r[4]=U>>>0&255,r[5]=U>>>8&255,r[6]=U>>>16&255,r[7]=U>>>24&255,r[8]=E>>>0&255,r[9]=E>>>8&255,r[10]=E>>>16&255,r[11]=E>>>24&255,r[12]=x>>>0&255,r[13]=x>>>8&255,r[14]=x>>>16&255,r[15]=x>>>24&255,r[16]=M>>>0&255,r[17]=M>>>8&255,r[18]=M>>>16&255,r[19]=M>>>24&255,r[20]=m>>>0&255,r[21]=m>>>8&255,r[22]=m>>>16&255,r[23]=m>>>24&255,r[24]=B>>>0&255,r[25]=B>>>8&255,r[26]=B>>>16&255,r[27]=B>>>24&255,r[28]=S>>>0&255,r[29]=S>>>8&255,r[30]=S>>>16&255,r[31]=S>>>24&255,r[32]=K>>>0&255,r[33]=K>>>8&255,r[34]=K>>>16&255,r[35]=K>>>24&255,r[36]=T>>>0&255,r[37]=T>>>8&255,r[38]=T>>>16&255,r[39]=T>>>24&255,r[40]=Y>>>0&255,r[41]=Y>>>8&255,r[42]=Y>>>16&255,r[43]=Y>>>24&255,r[44]=k>>>0&255,r[45]=k>>>8&255,r[46]=k>>>16&255,r[47]=k>>>24&255,r[48]=L>>>0&255,r[49]=L>>>8&255,r[50]=L>>>16&255,r[51]=L>>>24&255,r[52]=z>>>0&255,r[53]=z>>>8&255,r[54]=z>>>16&255,r[55]=z>>>24&255,r[56]=R>>>0&255,r[57]=R>>>8&255,r[58]=R>>>16&255,r[59]=R>>>24&255,r[60]=P>>>0&255,r[61]=P>>>8&255,r[62]=P>>>16&255,r[63]=P>>>24&255}function h(r,t,n,e){for(var o,i=255&e[0]|(255&e[1])<<8|(255&e[2])<<16|(255&e[3])<<24,h=255&n[0]|(255&n[1])<<8|(255&n[2])<<16|(255&n[3])<<24,a=255&n[4]|(255&n[5])<<8|(255&n[6])<<16|(255&n[7])<<24,f=255&n[8]|(255&n[9])<<8|(255&n[10])<<16|(255&n[11])<<24,s=255&n[12]|(255&n[13])<<8|(255&n[14])<<16|(255&n[15])<<24,c=255&e[4]|(255&e[5])<<8|(255&e[6])<<16|(255&e[7])<<24,u=255&t[0]|(255&t[1])<<8|(255&t[2])<<16|(255&t[3])<<24,y=255&t[4]|(255&t[5])<<8|(255&t[6])<<16|(255&t[7])<<24,l=255&t[8]|(255&t[9])<<8|(255&t[10])<<16|(255&t[11])<<24,w=255&t[12]|(255&t[13])<<8|(255&t[14])<<16|(255&t[15])<<24,p=255&e[8]|(255&e[9])<<8|(255&e[10])<<16|(255&e[11])<<24,v=255&n[16]|(255&n[17])<<8|(255&n[18])<<16|(255&n[19])<<24,b=255&n[20]|(255&n[21])<<8|(255&n[22])<<16|(255&n[23])<<24,g=255&n[24]|(255&n[25])<<8|(255&n[26])<<16|(255&n[27])<<24,_=255&n[28]|(255&n[29])<<8|(255&n[30])<<16|(255&n[31])<<24,A=255&e[12]|(255&e[13])<<8|(255&e[14])<<16|(255&e[15])<<24,d=i,U=h,E=a,x=f,M=s,m=c,B=u,S=y,K=l,T=w,Y=p,k=v,L=b,z=g,R=_,P=A,O=0;O<20;O+=2)o=d+L|0,M^=o<<7|o>>>25,o=M+d|0,K^=o<<9|o>>>23,o=K+M|0,L^=o<<13|o>>>19,o=L+K|0,d^=o<<18|o>>>14,o=m+U|0,T^=o<<7|o>>>25,o=T+m|0,z^=o<<9|o>>>23,o=z+T|0,U^=o<<13|o>>>19,o=U+z|0,m^=o<<18|o>>>14,o=Y+B|0,R^=o<<7|o>>>25,o=R+Y|0,E^=o<<9|o>>>23,o=E+R|0,B^=o<<13|o>>>19,o=B+E|0,Y^=o<<18|o>>>14,o=P+k|0,x^=o<<7|o>>>25,o=x+P|0,S^=o<<9|o>>>23,o=S+x|0,k^=o<<13|o>>>19,o=k+S|0,P^=o<<18|o>>>14,o=d+x|0,U^=o<<7|o>>>25,o=U+d|0,E^=o<<9|o>>>23,o=E+U|0,x^=o<<13|o>>>19,o=x+E|0,d^=o<<18|o>>>14,o=m+M|0,B^=o<<7|o>>>25,o=B+m|0,S^=o<<9|o>>>23,o=S+B|0,M^=o<<13|o>>>19,o=M+S|0,m^=o<<18|o>>>14,o=Y+T|0,k^=o<<7|o>>>25,o=k+Y|0,K^=o<<9|o>>>23,o=K+k|0,T^=o<<13|o>>>19,o=T+K|0,Y^=o<<18|o>>>14,o=P+R|0,L^=o<<7|o>>>25,o=L+P|0,z^=o<<9|o>>>23,o=z+L|0,R^=o<<13|o>>>19,o=R+z|0,P^=o<<18|o>>>14;r[0]=d>>>0&255,r[1]=d>>>8&255,r[2]=d>>>16&255,r[3]=d>>>24&255,r[4]=m>>>0&255,r[5]=m>>>8&255,r[6]=m>>>16&255,r[7]=m>>>24&255,r[8]=Y>>>0&255,r[9]=Y>>>8&255,r[10]=Y>>>16&255,r[11]=Y>>>24&255,r[12]=P>>>0&255,r[13]=P>>>8&255,r[14]=P>>>16&255,r[15]=P>>>24&255,r[16]=B>>>0&255,r[17]=B>>>8&255,r[18]=B>>>16&255,r[19]=B>>>24&255,r[20]=S>>>0&255,r[21]=S>>>8&255,r[22]=S>>>16&255,r[23]=S>>>24&255,r[24]=K>>>0&255,r[25]=K>>>8&255,r[26]=K>>>16&255,r[27]=K>>>24&255,r[28]=T>>>0&255,r[29]=T>>>8&255,r[30]=T>>>16&255,r[31]=T>>>24&255}function a(r,t,n,e){i(r,t,n,e)}function f(r,t,n,e){h(r,t,n,e)}function s(r,t,n,e,o,i,h){var f,s,c=new Uint8Array(16),u=new Uint8Array(64);for(s=0;s<16;s++)c[s]=0;for(s=0;s<8;s++)c[s]=i[s];for(;o>=64;){for(a(u,c,h,ur),s=0;s<64;s++)r[t+s]=n[e+s]^u[s];for(f=1,s=8;s<16;s++)f=f+(255&c[s])|0,c[s]=255&f,f>>>=8;o-=64,t+=64,e+=64}if(o>0)for(a(u,c,h,ur),s=0;s=64;){for(a(s,f,o,ur),h=0;h<64;h++)r[t+h]=s[h];for(i=1,h=8;h<16;h++)i=i+(255&f[h])|0,f[h]=255&i,i>>>=8;n-=64,t+=64}if(n>0)for(a(s,f,o,ur),h=0;h>16&1),i[n-1]&=65535;i[15]=h[15]-32767-(i[14]>>16&1),o=i[15]>>16&1,i[14]&=65535,_(h,i,1-o)}for(n=0;n<16;n++)r[2*n]=255&h[n],r[2*n+1]=h[n]>>8}function d(r,t){var n=new Uint8Array(32),e=new Uint8Array(32);return A(n,r),A(e,t),o(n,0,e,0)}function U(r){var t=new Uint8Array(32);return A(t,r),1&t[0]}function E(r,t){var n;for(n=0;n<16;n++)r[n]=t[2*n]+(t[2*n+1]<<8);r[15]&=32767}function x(r,t,n){for(var e=0;e<16;e++)r[e]=t[e]+n[e]}function M(r,t,n){for(var e=0;e<16;e++)r[e]=t[e]-n[e]}function m(r,t,n){var e,o,i=0,h=0,a=0,f=0,s=0,c=0,u=0,y=0,l=0,w=0,p=0,v=0,b=0,g=0,_=0,A=0,d=0,U=0,E=0,x=0,M=0,m=0,B=0,S=0,K=0,T=0,Y=0,k=0,L=0,z=0,R=0,P=n[0],O=n[1],N=n[2],C=n[3],F=n[4],I=n[5],G=n[6],Z=n[7],j=n[8],q=n[9],V=n[10],X=n[11],D=n[12],H=n[13],J=n[14],Q=n[15];e=t[0],i+=e*P,h+=e*O,a+=e*N,f+=e*C,s+=e*F,c+=e*I,u+=e*G,y+=e*Z,l+=e*j,w+=e*q,p+=e*V,v+=e*X,b+=e*D,g+=e*H,_+=e*J,A+=e*Q,e=t[1],h+=e*P,a+=e*O,f+=e*N,s+=e*C,c+=e*F,u+=e*I,y+=e*G,l+=e*Z,w+=e*j,p+=e*q,v+=e*V,b+=e*X,g+=e*D,_+=e*H,A+=e*J,d+=e*Q,e=t[2],a+=e*P,f+=e*O,s+=e*N,c+=e*C,u+=e*F,y+=e*I,l+=e*G,w+=e*Z,p+=e*j,v+=e*q,b+=e*V,g+=e*X,_+=e*D,A+=e*H,d+=e*J,U+=e*Q,e=t[3],f+=e*P,s+=e*O,c+=e*N,u+=e*C,y+=e*F,l+=e*I,w+=e*G,p+=e*Z,v+=e*j,b+=e*q,g+=e*V,_+=e*X,A+=e*D,d+=e*H,U+=e*J,E+=e*Q,e=t[4],s+=e*P,c+=e*O,u+=e*N,y+=e*C,l+=e*F,w+=e*I,p+=e*G,v+=e*Z,b+=e*j,g+=e*q,_+=e*V,A+=e*X,d+=e*D,U+=e*H,E+=e*J,x+=e*Q,e=t[5],c+=e*P,u+=e*O,y+=e*N,l+=e*C,w+=e*F,p+=e*I,v+=e*G,b+=e*Z,g+=e*j,_+=e*q,A+=e*V,d+=e*X,U+=e*D,E+=e*H,x+=e*J,M+=e*Q,e=t[6],u+=e*P,y+=e*O,l+=e*N,w+=e*C,p+=e*F,v+=e*I,b+=e*G,g+=e*Z,_+=e*j,A+=e*q,d+=e*V,U+=e*X,E+=e*D,x+=e*H,M+=e*J,m+=e*Q,e=t[7],y+=e*P,l+=e*O,w+=e*N,p+=e*C,v+=e*F,b+=e*I,g+=e*G,_+=e*Z,A+=e*j,d+=e*q,U+=e*V,E+=e*X,x+=e*D,M+=e*H,m+=e*J,B+=e*Q,e=t[8],l+=e*P,w+=e*O,p+=e*N,v+=e*C,b+=e*F,g+=e*I,_+=e*G,A+=e*Z,d+=e*j,U+=e*q,E+=e*V,x+=e*X,M+=e*D,m+=e*H,B+=e*J,S+=e*Q,e=t[9],w+=e*P,p+=e*O,v+=e*N,b+=e*C,g+=e*F,_+=e*I,A+=e*G,d+=e*Z,U+=e*j,E+=e*q,x+=e*V,M+=e*X,m+=e*D,B+=e*H,S+=e*J,K+=e*Q,e=t[10],p+=e*P,v+=e*O,b+=e*N,g+=e*C,_+=e*F,A+=e*I,d+=e*G,U+=e*Z,E+=e*j,x+=e*q,M+=e*V,m+=e*X,B+=e*D,S+=e*H,K+=e*J,T+=e*Q,e=t[11],v+=e*P,b+=e*O,g+=e*N,_+=e*C,A+=e*F,d+=e*I,U+=e*G,E+=e*Z,x+=e*j,M+=e*q,m+=e*V,B+=e*X;S+=e*D;K+=e*H,T+=e*J,Y+=e*Q,e=t[12],b+=e*P,g+=e*O,_+=e*N,A+=e*C,d+=e*F,U+=e*I,E+=e*G,x+=e*Z,M+=e*j,m+=e*q,B+=e*V,S+=e*X,K+=e*D,T+=e*H,Y+=e*J,k+=e*Q,e=t[13],g+=e*P,_+=e*O,A+=e*N,d+=e*C,U+=e*F,E+=e*I,x+=e*G,M+=e*Z,m+=e*j,B+=e*q,S+=e*V,K+=e*X,T+=e*D,Y+=e*H,k+=e*J,L+=e*Q,e=t[14],_+=e*P,A+=e*O,d+=e*N,U+=e*C,E+=e*F,x+=e*I,M+=e*G,m+=e*Z,B+=e*j,S+=e*q,K+=e*V,T+=e*X,Y+=e*D,k+=e*H,L+=e*J,z+=e*Q,e=t[15],A+=e*P,d+=e*O,U+=e*N,E+=e*C,x+=e*F,M+=e*I,m+=e*G,B+=e*Z,S+=e*j,K+=e*q,T+=e*V,Y+=e*X,k+=e*D,L+=e*H,z+=e*J,R+=e*Q,i+=38*d,h+=38*U,a+=38*E,f+=38*x,s+=38*M,c+=38*m,u+=38*B,y+=38*S,l+=38*K,w+=38*T,p+=38*Y,v+=38*k,b+=38*L,g+=38*z,_+=38*R,o=1,e=i+o+65535,o=Math.floor(e/65536),i=e-65536*o,e=h+o+65535,o=Math.floor(e/65536),h=e-65536*o,e=a+o+65535,o=Math.floor(e/65536),a=e-65536*o,e=f+o+65535,o=Math.floor(e/65536),f=e-65536*o,e=s+o+65535,o=Math.floor(e/65536),s=e-65536*o,e=c+o+65535,o=Math.floor(e/65536),c=e-65536*o,e=u+o+65535,o=Math.floor(e/65536),u=e-65536*o,e=y+o+65535,o=Math.floor(e/65536),y=e-65536*o,e=l+o+65535,o=Math.floor(e/65536),l=e-65536*o,e=w+o+65535,o=Math.floor(e/65536),w=e-65536*o,e=p+o+65535,o=Math.floor(e/65536),p=e-65536*o,e=v+o+65535,o=Math.floor(e/65536),v=e-65536*o,e=b+o+65535,o=Math.floor(e/65536),b=e-65536*o,e=g+o+65535,o=Math.floor(e/65536),g=e-65536*o,e=_+o+65535,o=Math.floor(e/65536),_=e-65536*o,e=A+o+65535,o=Math.floor(e/65536),A=e-65536*o,i+=o-1+37*(o-1),o=1,e=i+o+65535,o=Math.floor(e/65536),i=e-65536*o,e=h+o+65535,o=Math.floor(e/65536),h=e-65536*o,e=a+o+65535,o=Math.floor(e/65536),a=e-65536*o,e=f+o+65535,o=Math.floor(e/65536),f=e-65536*o,e=s+o+65535,o=Math.floor(e/65536),s=e-65536*o,e=c+o+65535,o=Math.floor(e/65536),c=e-65536*o,e=u+o+65535,o=Math.floor(e/65536),u=e-65536*o,e=y+o+65535,o=Math.floor(e/65536),y=e-65536*o,e=l+o+65535,o=Math.floor(e/65536),l=e-65536*o,e=w+o+65535,o=Math.floor(e/65536),w=e-65536*o,e=p+o+65535,o=Math.floor(e/65536),p=e-65536*o,e=v+o+65535,o=Math.floor(e/65536),v=e-65536*o,e=b+o+65535,o=Math.floor(e/65536),b=e-65536*o,e=g+o+65535,o=Math.floor(e/65536),g=e-65536*o,e=_+o+65535,o=Math.floor(e/65536),_=e-65536*o,e=A+o+65535,o=Math.floor(e/65536),A=e-65536*o,i+=o-1+37*(o-1),r[0]=i,r[1]=h,r[2]=a,r[3]=f,r[4]=s,r[5]=c,r[6]=u,r[7]=y,r[8]=l,r[9]=w,r[10]=p,r[11]=v,r[12]=b,r[13]=g;r[14]=_;r[15]=A}function B(r,t){m(r,t,t)}function S(r,t){var n,e=$();for(n=0;n<16;n++)e[n]=t[n];for(n=253;n>=0;n--)B(e,e),2!==n&&4!==n&&m(e,e,t);for(n=0;n<16;n++)r[n]=e[n]}function K(r,t){var n,e=$();for(n=0;n<16;n++)e[n]=t[n];for(n=250;n>=0;n--)B(e,e),1!==n&&m(e,e,t);for(n=0;n<16;n++)r[n]=e[n]}function T(r,t,n){var e,o,i=new Uint8Array(32),h=new Float64Array(80),a=$(),f=$(),s=$(),c=$(),u=$(),y=$();for(o=0;o<31;o++)i[o]=t[o];for(i[31]=127&t[31]|64,i[0]&=248,E(h,n),o=0;o<16;o++)f[o]=h[o],c[o]=a[o]=s[o]=0;for(a[0]=c[0]=1,o=254;o>=0;--o)e=i[o>>>3]>>>(7&o)&1,_(a,f,e),_(s,c,e),x(u,a,s),M(a,a,s),x(s,f,c),M(f,f,c),B(c,u),B(y,a),m(a,s,a),m(s,f,u),x(u,a,s),M(a,a,s),B(f,a),M(s,c,y),m(a,s,ir),x(a,a,c),m(s,s,a),m(a,c,y),m(c,f,h),B(f,u),_(a,f,e),_(s,c,e);for(o=0;o<16;o++)h[o+16]=a[o],h[o+32]=s[o],h[o+48]=f[o],h[o+64]=c[o];var l=h.subarray(32),w=h.subarray(16);return S(l,l),m(w,w,l),A(r,w),0}function Y(r,t){return T(r,t,nr)}function k(r,t){return rr(t,32),Y(r,t)}function L(r,t,n){var e=new Uint8Array(32);return T(e,n,t),f(r,tr,e,ur)}function z(r,t,n,e,o,i){var h=new Uint8Array(32);return L(h,o,i),lr(r,t,n,e,h)}function R(r,t,n,e,o,i){var h=new Uint8Array(32);return L(h,o,i),wr(r,t,n,e,h)}function P(r,t,n,e){for(var o,i,h,a,f,s,c,u,y,l,w,p,v,b,g,_,A,d,U,E,x,M,m,B,S,K,T=new Int32Array(16),Y=new Int32Array(16),k=r[0],L=r[1],z=r[2],R=r[3],P=r[4],O=r[5],N=r[6],C=r[7],F=t[0],I=t[1],G=t[2],Z=t[3],j=t[4],q=t[5],V=t[6],X=t[7],D=0;e>=128;){for(U=0;U<16;U++)E=8*U+D,T[U]=n[E+0]<<24|n[E+1]<<16|n[E+2]<<8|n[E+3],Y[U]=n[E+4]<<24|n[E+5]<<16|n[E+6]<<8|n[E+7];for(U=0;U<80;U++)if(o=k,i=L,h=z,a=R,f=P,s=O,c=N,u=C,y=F,l=I,w=G,p=Z,v=j,b=q,g=V,_=X,x=C,M=X,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=(P>>>14|j<<18)^(P>>>18|j<<14)^(j>>>9|P<<23),M=(j>>>14|P<<18)^(j>>>18|P<<14)^(P>>>9|j<<23),m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,x=P&O^~P&N,M=j&q^~j&V,m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,x=pr[2*U],M=pr[2*U+1],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,x=T[U%16],M=Y[U%16],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,A=65535&S|K<<16,d=65535&m|B<<16,x=A,M=d,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=(k>>>28|F<<4)^(F>>>2|k<<30)^(F>>>7|k<<25),M=(F>>>28|k<<4)^(k>>>2|F<<30)^(k>>>7|F<<25),m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,x=k&L^k&z^L&z,M=F&I^F&G^I&G,m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,u=65535&S|K<<16,_=65535&m|B<<16,x=a,M=p,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=A,M=d,m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,a=65535&S|K<<16,p=65535&m|B<<16,L=o,z=i,R=h,P=a,O=f,N=s,C=c,k=u,I=y,G=l,Z=w,j=p,q=v,V=b,X=g,F=_,U%16===15)for(E=0;E<16;E++)x=T[E],M=Y[E],m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=T[(E+9)%16],M=Y[(E+9)%16],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,A=T[(E+1)%16],d=Y[(E+1)%16],x=(A>>>1|d<<31)^(A>>>8|d<<24)^A>>>7,M=(d>>>1|A<<31)^(d>>>8|A<<24)^(d>>>7|A<<25),m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,A=T[(E+14)%16],d=Y[(E+14)%16],x=(A>>>19|d<<13)^(d>>>29|A<<3)^A>>>6,M=(d>>>19|A<<13)^(A>>>29|d<<3)^(d>>>6|A<<26),m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,T[E]=65535&S|K<<16,Y[E]=65535&m|B<<16;x=k,M=F,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=r[0],M=t[0],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,r[0]=k=65535&S|K<<16,t[0]=F=65535&m|B<<16,x=L,M=I,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=r[1],M=t[1],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,r[1]=L=65535&S|K<<16,t[1]=I=65535&m|B<<16,x=z,M=G,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=r[2],M=t[2],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,r[2]=z=65535&S|K<<16,t[2]=G=65535&m|B<<16,x=R,M=Z,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=r[3],M=t[3],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,r[3]=R=65535&S|K<<16,t[3]=Z=65535&m|B<<16,x=P,M=j,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=r[4],M=t[4],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,r[4]=P=65535&S|K<<16,t[4]=j=65535&m|B<<16,x=O,M=q,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=r[5],M=t[5],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,r[5]=O=65535&S|K<<16,t[5]=q=65535&m|B<<16,x=N,M=V,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=r[6],M=t[6],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,r[6]=N=65535&S|K<<16,t[6]=V=65535&m|B<<16,x=C,M=X,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=r[7],M=t[7],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,r[7]=C=65535&S|K<<16,t[7]=X=65535&m|B<<16,D+=128,e-=128}return e}function O(r,n,e){var o,i=new Int32Array(8),h=new Int32Array(8),a=new Uint8Array(256),f=e;for(i[0]=1779033703,i[1]=3144134277,i[2]=1013904242,i[3]=2773480762,i[4]=1359893119,i[5]=2600822924,i[6]=528734635,i[7]=1541459225,h[0]=4089235720,h[1]=2227873595,h[2]=4271175723,h[3]=1595750129,h[4]=2917565137,h[5]=725511199,h[6]=4215389547,h[7]=327033209,P(i,h,n,e),e%=128,o=0;o=0;--o)e=n[o/8|0]>>(7&o)&1,C(r,t,e),N(t,r),N(r,r),C(r,t,e)}function G(r,t){var n=[$(),$(),$(),$()];b(n[0],fr),b(n[1],sr),b(n[2],or),m(n[3],fr,sr),I(r,n,t)}function Z(r,t,n){var e,o=new Uint8Array(64),i=[$(),$(),$(),$()];for(n||rr(t,32),O(o,t,32),o[0]&=248,o[31]&=127,o[31]|=64,G(i,o),F(r,i),e=0;e<32;e++)t[e+32]=r[e];return 0}function j(r,t){var n,e,o,i;for(e=63;e>=32;--e){for(n=0,o=e-32,i=e-12;o>8,t[o]-=256*n;t[o]+=n,t[e]=0}for(n=0,o=0;o<32;o++)t[o]+=n-(t[31]>>4)*vr[o],n=t[o]>>8,t[o]&=255;for(o=0;o<32;o++)t[o]-=n*vr[o];for(e=0;e<32;e++)t[e+1]+=t[e]>>8,r[e]=255&t[e]}function q(r){var t,n=new Float64Array(64);for(t=0;t<64;t++)n[t]=r[t];for(t=0;t<64;t++)r[t]=0;j(r,n)}function V(r,t,n,e){var o,i,h=new Uint8Array(64),a=new Uint8Array(64),f=new Uint8Array(64),s=new Float64Array(64),c=[$(),$(),$(),$()];O(h,e,32),h[0]&=248,h[31]&=127,h[31]|=64;var u=n+64;for(o=0;o>7&&M(r[0],er,r[0]),m(r[3],r[0],r[1]),0)}function D(r,t,n,e){var i,h,a=new Uint8Array(32),f=new Uint8Array(64),s=[$(),$(),$(),$()],c=[$(),$(),$(),$()];if(h=-1,n<64)return-1;if(X(c,e))return-1;for(i=0;i>>13|n<<3),e=255&r[4]|(255&r[5])<<8,this.r[2]=7939&(n>>>10|e<<6),o=255&r[6]|(255&r[7])<<8,this.r[3]=8191&(e>>>7|o<<9),i=255&r[8]|(255&r[9])<<8,this.r[4]=255&(o>>>4|i<<12),this.r[5]=i>>>1&8190,h=255&r[10]|(255&r[11])<<8,this.r[6]=8191&(i>>>14|h<<2),a=255&r[12]|(255&r[13])<<8,this.r[7]=8065&(h>>>11|a<<5),f=255&r[14]|(255&r[15])<<8,this.r[8]=8191&(a>>>8|f<<8),this.r[9]=f>>>5&127,this.pad[0]=255&r[16]|(255&r[17])<<8,this.pad[1]=255&r[18]|(255&r[19])<<8,this.pad[2]=255&r[20]|(255&r[21])<<8,this.pad[3]=255&r[22]|(255&r[23])<<8,this.pad[4]=255&r[24]|(255&r[25])<<8,this.pad[5]=255&r[26]|(255&r[27])<<8,this.pad[6]=255&r[28]|(255&r[29])<<8,this.pad[7]=255&r[30]|(255&r[31])<<8};yr.prototype.blocks=function(r,t,n){for(var e,o,i,h,a,f,s,c,u,y,l,w,p,v,b,g,_,A,d,U=this.fin?0:2048,E=this.h[0],x=this.h[1],M=this.h[2],m=this.h[3],B=this.h[4],S=this.h[5],K=this.h[6],T=this.h[7],Y=this.h[8],k=this.h[9],L=this.r[0],z=this.r[1],R=this.r[2],P=this.r[3],O=this.r[4],N=this.r[5],C=this.r[6],F=this.r[7],I=this.r[8],G=this.r[9];n>=16;)e=255&r[t+0]|(255&r[t+1])<<8,E+=8191&e,o=255&r[t+2]|(255&r[t+3])<<8,x+=8191&(e>>>13|o<<3),i=255&r[t+4]|(255&r[t+5])<<8,M+=8191&(o>>>10|i<<6),h=255&r[t+6]|(255&r[t+7])<<8,m+=8191&(i>>>7|h<<9),a=255&r[t+8]|(255&r[t+9])<<8,B+=8191&(h>>>4|a<<12),S+=a>>>1&8191,f=255&r[t+10]|(255&r[t+11])<<8,K+=8191&(a>>>14|f<<2),s=255&r[t+12]|(255&r[t+13])<<8,T+=8191&(f>>>11|s<<5),c=255&r[t+14]|(255&r[t+15])<<8,Y+=8191&(s>>>8|c<<8),k+=c>>>5|U,u=0,y=u,y+=E*L,y+=x*(5*G),y+=M*(5*I),y+=m*(5*F),y+=B*(5*C),u=y>>>13,y&=8191,y+=S*(5*N),y+=K*(5*O),y+=T*(5*P),y+=Y*(5*R),y+=k*(5*z),u+=y>>>13,y&=8191,l=u,l+=E*z,l+=x*L,l+=M*(5*G),l+=m*(5*I),l+=B*(5*F),u=l>>>13,l&=8191,l+=S*(5*C),l+=K*(5*N),l+=T*(5*O),l+=Y*(5*P),l+=k*(5*R),u+=l>>>13,l&=8191,w=u,w+=E*R,w+=x*z,w+=M*L,w+=m*(5*G),w+=B*(5*I),u=w>>>13,w&=8191,w+=S*(5*F),w+=K*(5*C),w+=T*(5*N),w+=Y*(5*O),w+=k*(5*P),u+=w>>>13,w&=8191,p=u,p+=E*P,p+=x*R,p+=M*z,p+=m*L,p+=B*(5*G),u=p>>>13,p&=8191,p+=S*(5*I),p+=K*(5*F),p+=T*(5*C),p+=Y*(5*N),p+=k*(5*O),u+=p>>>13,p&=8191,v=u,v+=E*O,v+=x*P,v+=M*R,v+=m*z,v+=B*L,u=v>>>13,v&=8191,v+=S*(5*G),v+=K*(5*I),v+=T*(5*F),v+=Y*(5*C),v+=k*(5*N),u+=v>>>13,v&=8191,b=u,b+=E*N,b+=x*O,b+=M*P,b+=m*R,b+=B*z,u=b>>>13,b&=8191,b+=S*L,b+=K*(5*G),b+=T*(5*I),b+=Y*(5*F),b+=k*(5*C),u+=b>>>13,b&=8191,g=u,g+=E*C,g+=x*N,g+=M*O,g+=m*P,g+=B*R,u=g>>>13,g&=8191,g+=S*z,g+=K*L,g+=T*(5*G),g+=Y*(5*I),g+=k*(5*F),u+=g>>>13,g&=8191,_=u,_+=E*F,_+=x*C,_+=M*N,_+=m*O,_+=B*P,u=_>>>13,_&=8191,_+=S*R,_+=K*z,_+=T*L,_+=Y*(5*G),_+=k*(5*I),u+=_>>>13,_&=8191,A=u,A+=E*I,A+=x*F,A+=M*C,A+=m*N,A+=B*O,u=A>>>13,A&=8191,A+=S*P,A+=K*R,A+=T*z,A+=Y*L,A+=k*(5*G),u+=A>>>13,A&=8191,d=u,d+=E*G,d+=x*I,d+=M*F,d+=m*C,d+=B*N,u=d>>>13,d&=8191,d+=S*O,d+=K*P,d+=T*R,d+=Y*z,d+=k*L,u+=d>>>13,d&=8191,u=(u<<2)+u|0,u=u+y|0,y=8191&u,u>>>=13,l+=u,E=y,x=l,M=w,m=p,B=v,S=b,K=g,T=_,Y=A,k=d,t+=16,n-=16;this.h[0]=E,this.h[1]=x,this.h[2]=M,this.h[3]=m,this.h[4]=B,this.h[5]=S,this.h[6]=K,this.h[7]=T,this.h[8]=Y,this.h[9]=k},yr.prototype.finish=function(r,t){var n,e,o,i,h=new Uint16Array(10);if(this.leftover){for(i=this.leftover,this.buffer[i++]=1;i<16;i++)this.buffer[i]=0;this.fin=1,this.blocks(this.buffer,0,16)}for(n=this.h[1]>>>13,this.h[1]&=8191,i=2;i<10;i++)this.h[i]+=n,n=this.h[i]>>>13,this.h[i]&=8191;for(this.h[0]+=5*n,n=this.h[0]>>>13,this.h[0]&=8191,this.h[1]+=n,n=this.h[1]>>>13,this.h[1]&=8191,this.h[2]+=n,h[0]=this.h[0]+5,n=h[0]>>>13,h[0]&=8191,i=1;i<10;i++)h[i]=this.h[i]+n,n=h[i]>>>13,h[i]&=8191;for(h[9]-=8192,e=(1^n)-1,i=0;i<10;i++)h[i]&=e;for(e=~e,i=0;i<10;i++)this.h[i]=this.h[i]&e|h[i];for(this.h[0]=65535&(this.h[0]|this.h[1]<<13),this.h[1]=65535&(this.h[1]>>>3|this.h[2]<<10),this.h[2]=65535&(this.h[2]>>>6|this.h[3]<<7),this.h[3]=65535&(this.h[3]>>>9|this.h[4]<<4),this.h[4]=65535&(this.h[4]>>>12|this.h[5]<<1|this.h[6]<<14),this.h[5]=65535&(this.h[6]>>>2|this.h[7]<<11),this.h[6]=65535&(this.h[7]>>>5|this.h[8]<<8),this.h[7]=65535&(this.h[8]>>>8|this.h[9]<<5),o=this.h[0]+this.pad[0],this.h[0]=65535&o,i=1;i<8;i++)o=(this.h[i]+this.pad[i]|0)+(o>>>16)|0,this.h[i]=65535&o;r[t+0]=this.h[0]>>>0&255,r[t+1]=this.h[0]>>>8&255,r[t+2]=this.h[1]>>>0&255,r[t+3]=this.h[1]>>>8&255,r[t+4]=this.h[2]>>>0&255,r[t+5]=this.h[2]>>>8&255,r[t+6]=this.h[3]>>>0&255,r[t+7]=this.h[3]>>>8&255,r[t+8]=this.h[4]>>>0&255,r[t+9]=this.h[4]>>>8&255,r[t+10]=this.h[5]>>>0&255,r[t+11]=this.h[5]>>>8&255,r[t+12]=this.h[6]>>>0&255,r[t+13]=this.h[6]>>>8&255,r[t+14]=this.h[7]>>>0&255,r[t+15]=this.h[7]>>>8&255},yr.prototype.update=function(r,t,n){var e,o;if(this.leftover){for(o=16-this.leftover,o>n&&(o=n),e=0;e=16&&(o=n-n%16,this.blocks(r,t,o),t+=o,n-=o),n){for(e=0;e=0},r.sign.keyPair=function(){var r=new Uint8Array(Tr),t=new Uint8Array(Yr);return Z(r,t),{publicKey:r,secretKey:t}},r.sign.keyPair.fromSecretKey=function(r){if(Q(r),r.length!==Yr)throw new Error("bad secret key size");for(var t=new Uint8Array(Tr),n=0;n void): void;
-}
diff --git a/deps/npm/node_modules/tweetnacl/nacl.js b/deps/npm/node_modules/tweetnacl/nacl.js
deleted file mode 100644
index f72dd78d12550f..00000000000000
--- a/deps/npm/node_modules/tweetnacl/nacl.js
+++ /dev/null
@@ -1,1175 +0,0 @@
-(function(nacl) {
-'use strict';
-
-// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri.
-// Public domain.
-//
-// Implementation derived from TweetNaCl version 20140427.
-// See for details: http://tweetnacl.cr.yp.to/
-
-var u64 = function(h, l) { this.hi = h|0 >>> 0; this.lo = l|0 >>> 0; };
-var gf = function(init) {
- var i, r = new Float64Array(16);
- if (init) for (i = 0; i < init.length; i++) r[i] = init[i];
- return r;
-};
-
-// Pluggable, initialized in high-level API below.
-var randombytes = function(/* x, n */) { throw new Error('no PRNG'); };
-
-var _0 = new Uint8Array(16);
-var _9 = new Uint8Array(32); _9[0] = 9;
-
-var gf0 = gf(),
- gf1 = gf([1]),
- _121665 = gf([0xdb41, 1]),
- D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]),
- D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]),
- X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]),
- Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]),
- I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]);
-
-function L32(x, c) { return (x << c) | (x >>> (32 - c)); }
-
-function ld32(x, i) {
- var u = x[i+3] & 0xff;
- u = (u<<8)|(x[i+2] & 0xff);
- u = (u<<8)|(x[i+1] & 0xff);
- return (u<<8)|(x[i+0] & 0xff);
-}
-
-function dl64(x, i) {
- var h = (x[i] << 24) | (x[i+1] << 16) | (x[i+2] << 8) | x[i+3];
- var l = (x[i+4] << 24) | (x[i+5] << 16) | (x[i+6] << 8) | x[i+7];
- return new u64(h, l);
-}
-
-function st32(x, j, u) {
- var i;
- for (i = 0; i < 4; i++) { x[j+i] = u & 255; u >>>= 8; }
-}
-
-function ts64(x, i, u) {
- x[i] = (u.hi >> 24) & 0xff;
- x[i+1] = (u.hi >> 16) & 0xff;
- x[i+2] = (u.hi >> 8) & 0xff;
- x[i+3] = u.hi & 0xff;
- x[i+4] = (u.lo >> 24) & 0xff;
- x[i+5] = (u.lo >> 16) & 0xff;
- x[i+6] = (u.lo >> 8) & 0xff;
- x[i+7] = u.lo & 0xff;
-}
-
-function vn(x, xi, y, yi, n) {
- var i,d = 0;
- for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i];
- return (1 & ((d - 1) >>> 8)) - 1;
-}
-
-function crypto_verify_16(x, xi, y, yi) {
- return vn(x,xi,y,yi,16);
-}
-
-function crypto_verify_32(x, xi, y, yi) {
- return vn(x,xi,y,yi,32);
-}
-
-function core(out,inp,k,c,h) {
- var w = new Uint32Array(16), x = new Uint32Array(16),
- y = new Uint32Array(16), t = new Uint32Array(4);
- var i, j, m;
-
- for (i = 0; i < 4; i++) {
- x[5*i] = ld32(c, 4*i);
- x[1+i] = ld32(k, 4*i);
- x[6+i] = ld32(inp, 4*i);
- x[11+i] = ld32(k, 16+4*i);
- }
-
- for (i = 0; i < 16; i++) y[i] = x[i];
-
- for (i = 0; i < 20; i++) {
- for (j = 0; j < 4; j++) {
- for (m = 0; m < 4; m++) t[m] = x[(5*j+4*m)%16];
- t[1] ^= L32((t[0]+t[3])|0, 7);
- t[2] ^= L32((t[1]+t[0])|0, 9);
- t[3] ^= L32((t[2]+t[1])|0,13);
- t[0] ^= L32((t[3]+t[2])|0,18);
- for (m = 0; m < 4; m++) w[4*j+(j+m)%4] = t[m];
- }
- for (m = 0; m < 16; m++) x[m] = w[m];
- }
-
- if (h) {
- for (i = 0; i < 16; i++) x[i] = (x[i] + y[i]) | 0;
- for (i = 0; i < 4; i++) {
- x[5*i] = (x[5*i] - ld32(c, 4*i)) | 0;
- x[6+i] = (x[6+i] - ld32(inp, 4*i)) | 0;
- }
- for (i = 0; i < 4; i++) {
- st32(out,4*i,x[5*i]);
- st32(out,16+4*i,x[6+i]);
- }
- } else {
- for (i = 0; i < 16; i++) st32(out, 4 * i, (x[i] + y[i]) | 0);
- }
-}
-
-function crypto_core_salsa20(out,inp,k,c) {
- core(out,inp,k,c,false);
- return 0;
-}
-
-function crypto_core_hsalsa20(out,inp,k,c) {
- core(out,inp,k,c,true);
- return 0;
-}
-
-var sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]);
- // "expand 32-byte k"
-
-function crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) {
- var z = new Uint8Array(16), x = new Uint8Array(64);
- var u, i;
- if (!b) return 0;
- for (i = 0; i < 16; i++) z[i] = 0;
- for (i = 0; i < 8; i++) z[i] = n[i];
- while (b >= 64) {
- crypto_core_salsa20(x,z,k,sigma);
- for (i = 0; i < 64; i++) c[cpos+i] = (m?m[mpos+i]:0) ^ x[i];
- u = 1;
- for (i = 8; i < 16; i++) {
- u = u + (z[i] & 0xff) | 0;
- z[i] = u & 0xff;
- u >>>= 8;
- }
- b -= 64;
- cpos += 64;
- if (m) mpos += 64;
- }
- if (b > 0) {
- crypto_core_salsa20(x,z,k,sigma);
- for (i = 0; i < b; i++) c[cpos+i] = (m?m[mpos+i]:0) ^ x[i];
- }
- return 0;
-}
-
-function crypto_stream_salsa20(c,cpos,d,n,k) {
- return crypto_stream_salsa20_xor(c,cpos,null,0,d,n,k);
-}
-
-function crypto_stream(c,cpos,d,n,k) {
- var s = new Uint8Array(32);
- crypto_core_hsalsa20(s,n,k,sigma);
- return crypto_stream_salsa20(c,cpos,d,n.subarray(16),s);
-}
-
-function crypto_stream_xor(c,cpos,m,mpos,d,n,k) {
- var s = new Uint8Array(32);
- crypto_core_hsalsa20(s,n,k,sigma);
- return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,n.subarray(16),s);
-}
-
-function add1305(h, c) {
- var j, u = 0;
- for (j = 0; j < 17; j++) {
- u = (u + ((h[j] + c[j]) | 0)) | 0;
- h[j] = u & 255;
- u >>>= 8;
- }
-}
-
-var minusp = new Uint32Array([
- 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 252
-]);
-
-function crypto_onetimeauth(out, outpos, m, mpos, n, k) {
- var s, i, j, u;
- var x = new Uint32Array(17), r = new Uint32Array(17),
- h = new Uint32Array(17), c = new Uint32Array(17),
- g = new Uint32Array(17);
- for (j = 0; j < 17; j++) r[j]=h[j]=0;
- for (j = 0; j < 16; j++) r[j]=k[j];
- r[3]&=15;
- r[4]&=252;
- r[7]&=15;
- r[8]&=252;
- r[11]&=15;
- r[12]&=252;
- r[15]&=15;
-
- while (n > 0) {
- for (j = 0; j < 17; j++) c[j] = 0;
- for (j = 0; (j < 16) && (j < n); ++j) c[j] = m[mpos+j];
- c[j] = 1;
- mpos += j; n -= j;
- add1305(h,c);
- for (i = 0; i < 17; i++) {
- x[i] = 0;
- for (j = 0; j < 17; j++) x[i] = (x[i] + (h[j] * ((j <= i) ? r[i - j] : ((320 * r[i + 17 - j])|0))) | 0) | 0;
- }
- for (i = 0; i < 17; i++) h[i] = x[i];
- u = 0;
- for (j = 0; j < 16; j++) {
- u = (u + h[j]) | 0;
- h[j] = u & 255;
- u >>>= 8;
- }
- u = (u + h[16]) | 0; h[16] = u & 3;
- u = (5 * (u >>> 2)) | 0;
- for (j = 0; j < 16; j++) {
- u = (u + h[j]) | 0;
- h[j] = u & 255;
- u >>>= 8;
- }
- u = (u + h[16]) | 0; h[16] = u;
- }
-
- for (j = 0; j < 17; j++) g[j] = h[j];
- add1305(h,minusp);
- s = (-(h[16] >>> 7) | 0);
- for (j = 0; j < 17; j++) h[j] ^= s & (g[j] ^ h[j]);
-
- for (j = 0; j < 16; j++) c[j] = k[j + 16];
- c[16] = 0;
- add1305(h,c);
- for (j = 0; j < 16; j++) out[outpos+j] = h[j];
- return 0;
-}
-
-function crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) {
- var x = new Uint8Array(16);
- crypto_onetimeauth(x,0,m,mpos,n,k);
- return crypto_verify_16(h,hpos,x,0);
-}
-
-function crypto_secretbox(c,m,d,n,k) {
- var i;
- if (d < 32) return -1;
- crypto_stream_xor(c,0,m,0,d,n,k);
- crypto_onetimeauth(c, 16, c, 32, d - 32, c);
- for (i = 0; i < 16; i++) c[i] = 0;
- return 0;
-}
-
-function crypto_secretbox_open(m,c,d,n,k) {
- var i;
- var x = new Uint8Array(32);
- if (d < 32) return -1;
- crypto_stream(x,0,32,n,k);
- if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1;
- crypto_stream_xor(m,0,c,0,d,n,k);
- for (i = 0; i < 32; i++) m[i] = 0;
- return 0;
-}
-
-function set25519(r, a) {
- var i;
- for (i = 0; i < 16; i++) r[i] = a[i]|0;
-}
-
-function car25519(o) {
- var c;
- var i;
- for (i = 0; i < 16; i++) {
- o[i] += 65536;
- c = Math.floor(o[i] / 65536);
- o[(i+1)*(i<15?1:0)] += c - 1 + 37 * (c-1) * (i===15?1:0);
- o[i] -= (c * 65536);
- }
-}
-
-function sel25519(p, q, b) {
- var t, c = ~(b-1);
- for (var i = 0; i < 16; i++) {
- t = c & (p[i] ^ q[i]);
- p[i] ^= t;
- q[i] ^= t;
- }
-}
-
-function pack25519(o, n) {
- var i, j, b;
- var m = gf(), t = gf();
- for (i = 0; i < 16; i++) t[i] = n[i];
- car25519(t);
- car25519(t);
- car25519(t);
- for (j = 0; j < 2; j++) {
- m[0] = t[0] - 0xffed;
- for (i = 1; i < 15; i++) {
- m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1);
- m[i-1] &= 0xffff;
- }
- m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1);
- b = (m[15]>>16) & 1;
- m[14] &= 0xffff;
- sel25519(t, m, 1-b);
- }
- for (i = 0; i < 16; i++) {
- o[2*i] = t[i] & 0xff;
- o[2*i+1] = t[i]>>8;
- }
-}
-
-function neq25519(a, b) {
- var c = new Uint8Array(32), d = new Uint8Array(32);
- pack25519(c, a);
- pack25519(d, b);
- return crypto_verify_32(c, 0, d, 0);
-}
-
-function par25519(a) {
- var d = new Uint8Array(32);
- pack25519(d, a);
- return d[0] & 1;
-}
-
-function unpack25519(o, n) {
- var i;
- for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8);
- o[15] &= 0x7fff;
-}
-
-function A(o, a, b) {
- var i;
- for (i = 0; i < 16; i++) o[i] = (a[i] + b[i])|0;
-}
-
-function Z(o, a, b) {
- var i;
- for (i = 0; i < 16; i++) o[i] = (a[i] - b[i])|0;
-}
-
-function M(o, a, b) {
- var i, j, t = new Float64Array(31);
- for (i = 0; i < 31; i++) t[i] = 0;
- for (i = 0; i < 16; i++) {
- for (j = 0; j < 16; j++) {
- t[i+j] += a[i] * b[j];
- }
- }
- for (i = 0; i < 15; i++) {
- t[i] += 38 * t[i+16];
- }
- for (i = 0; i < 16; i++) o[i] = t[i];
- car25519(o);
- car25519(o);
-}
-
-function S(o, a) {
- M(o, a, a);
-}
-
-function inv25519(o, i) {
- var c = gf();
- var a;
- for (a = 0; a < 16; a++) c[a] = i[a];
- for (a = 253; a >= 0; a--) {
- S(c, c);
- if(a !== 2 && a !== 4) M(c, c, i);
- }
- for (a = 0; a < 16; a++) o[a] = c[a];
-}
-
-function pow2523(o, i) {
- var c = gf();
- var a;
- for (a = 0; a < 16; a++) c[a] = i[a];
- for (a = 250; a >= 0; a--) {
- S(c, c);
- if(a !== 1) M(c, c, i);
- }
- for (a = 0; a < 16; a++) o[a] = c[a];
-}
-
-function crypto_scalarmult(q, n, p) {
- var z = new Uint8Array(32);
- var x = new Float64Array(80), r, i;
- var a = gf(), b = gf(), c = gf(),
- d = gf(), e = gf(), f = gf();
- for (i = 0; i < 31; i++) z[i] = n[i];
- z[31]=(n[31]&127)|64;
- z[0]&=248;
- unpack25519(x,p);
- for (i = 0; i < 16; i++) {
- b[i]=x[i];
- d[i]=a[i]=c[i]=0;
- }
- a[0]=d[0]=1;
- for (i=254; i>=0; --i) {
- r=(z[i>>>3]>>>(i&7))&1;
- sel25519(a,b,r);
- sel25519(c,d,r);
- A(e,a,c);
- Z(a,a,c);
- A(c,b,d);
- Z(b,b,d);
- S(d,e);
- S(f,a);
- M(a,c,a);
- M(c,b,e);
- A(e,a,c);
- Z(a,a,c);
- S(b,a);
- Z(c,d,f);
- M(a,c,_121665);
- A(a,a,d);
- M(c,c,a);
- M(a,d,f);
- M(d,b,x);
- S(b,e);
- sel25519(a,b,r);
- sel25519(c,d,r);
- }
- for (i = 0; i < 16; i++) {
- x[i+16]=a[i];
- x[i+32]=c[i];
- x[i+48]=b[i];
- x[i+64]=d[i];
- }
- var x32 = x.subarray(32);
- var x16 = x.subarray(16);
- inv25519(x32,x32);
- M(x16,x16,x32);
- pack25519(q,x16);
- return 0;
-}
-
-function crypto_scalarmult_base(q, n) {
- return crypto_scalarmult(q, n, _9);
-}
-
-function crypto_box_keypair(y, x) {
- randombytes(x, 32);
- return crypto_scalarmult_base(y, x);
-}
-
-function crypto_box_beforenm(k, y, x) {
- var s = new Uint8Array(32);
- crypto_scalarmult(s, x, y);
- return crypto_core_hsalsa20(k, _0, s, sigma);
-}
-
-var crypto_box_afternm = crypto_secretbox;
-var crypto_box_open_afternm = crypto_secretbox_open;
-
-function crypto_box(c, m, d, n, y, x) {
- var k = new Uint8Array(32);
- crypto_box_beforenm(k, y, x);
- return crypto_box_afternm(c, m, d, n, k);
-}
-
-function crypto_box_open(m, c, d, n, y, x) {
- var k = new Uint8Array(32);
- crypto_box_beforenm(k, y, x);
- return crypto_box_open_afternm(m, c, d, n, k);
-}
-
-function add64() {
- var a = 0, b = 0, c = 0, d = 0, m16 = 65535, l, h, i;
- for (i = 0; i < arguments.length; i++) {
- l = arguments[i].lo;
- h = arguments[i].hi;
- a += (l & m16); b += (l >>> 16);
- c += (h & m16); d += (h >>> 16);
- }
-
- b += (a >>> 16);
- c += (b >>> 16);
- d += (c >>> 16);
-
- return new u64((c & m16) | (d << 16), (a & m16) | (b << 16));
-}
-
-function shr64(x, c) {
- return new u64((x.hi >>> c), (x.lo >>> c) | (x.hi << (32 - c)));
-}
-
-function xor64() {
- var l = 0, h = 0, i;
- for (i = 0; i < arguments.length; i++) {
- l ^= arguments[i].lo;
- h ^= arguments[i].hi;
- }
- return new u64(h, l);
-}
-
-function R(x, c) {
- var h, l, c1 = 32 - c;
- if (c < 32) {
- h = (x.hi >>> c) | (x.lo << c1);
- l = (x.lo >>> c) | (x.hi << c1);
- } else if (c < 64) {
- h = (x.lo >>> c) | (x.hi << c1);
- l = (x.hi >>> c) | (x.lo << c1);
- }
- return new u64(h, l);
-}
-
-function Ch(x, y, z) {
- var h = (x.hi & y.hi) ^ (~x.hi & z.hi),
- l = (x.lo & y.lo) ^ (~x.lo & z.lo);
- return new u64(h, l);
-}
-
-function Maj(x, y, z) {
- var h = (x.hi & y.hi) ^ (x.hi & z.hi) ^ (y.hi & z.hi),
- l = (x.lo & y.lo) ^ (x.lo & z.lo) ^ (y.lo & z.lo);
- return new u64(h, l);
-}
-
-function Sigma0(x) { return xor64(R(x,28), R(x,34), R(x,39)); }
-function Sigma1(x) { return xor64(R(x,14), R(x,18), R(x,41)); }
-function sigma0(x) { return xor64(R(x, 1), R(x, 8), shr64(x,7)); }
-function sigma1(x) { return xor64(R(x,19), R(x,61), shr64(x,6)); }
-
-var K = [
- new u64(0x428a2f98, 0xd728ae22), new u64(0x71374491, 0x23ef65cd),
- new u64(0xb5c0fbcf, 0xec4d3b2f), new u64(0xe9b5dba5, 0x8189dbbc),
- new u64(0x3956c25b, 0xf348b538), new u64(0x59f111f1, 0xb605d019),
- new u64(0x923f82a4, 0xaf194f9b), new u64(0xab1c5ed5, 0xda6d8118),
- new u64(0xd807aa98, 0xa3030242), new u64(0x12835b01, 0x45706fbe),
- new u64(0x243185be, 0x4ee4b28c), new u64(0x550c7dc3, 0xd5ffb4e2),
- new u64(0x72be5d74, 0xf27b896f), new u64(0x80deb1fe, 0x3b1696b1),
- new u64(0x9bdc06a7, 0x25c71235), new u64(0xc19bf174, 0xcf692694),
- new u64(0xe49b69c1, 0x9ef14ad2), new u64(0xefbe4786, 0x384f25e3),
- new u64(0x0fc19dc6, 0x8b8cd5b5), new u64(0x240ca1cc, 0x77ac9c65),
- new u64(0x2de92c6f, 0x592b0275), new u64(0x4a7484aa, 0x6ea6e483),
- new u64(0x5cb0a9dc, 0xbd41fbd4), new u64(0x76f988da, 0x831153b5),
- new u64(0x983e5152, 0xee66dfab), new u64(0xa831c66d, 0x2db43210),
- new u64(0xb00327c8, 0x98fb213f), new u64(0xbf597fc7, 0xbeef0ee4),
- new u64(0xc6e00bf3, 0x3da88fc2), new u64(0xd5a79147, 0x930aa725),
- new u64(0x06ca6351, 0xe003826f), new u64(0x14292967, 0x0a0e6e70),
- new u64(0x27b70a85, 0x46d22ffc), new u64(0x2e1b2138, 0x5c26c926),
- new u64(0x4d2c6dfc, 0x5ac42aed), new u64(0x53380d13, 0x9d95b3df),
- new u64(0x650a7354, 0x8baf63de), new u64(0x766a0abb, 0x3c77b2a8),
- new u64(0x81c2c92e, 0x47edaee6), new u64(0x92722c85, 0x1482353b),
- new u64(0xa2bfe8a1, 0x4cf10364), new u64(0xa81a664b, 0xbc423001),
- new u64(0xc24b8b70, 0xd0f89791), new u64(0xc76c51a3, 0x0654be30),
- new u64(0xd192e819, 0xd6ef5218), new u64(0xd6990624, 0x5565a910),
- new u64(0xf40e3585, 0x5771202a), new u64(0x106aa070, 0x32bbd1b8),
- new u64(0x19a4c116, 0xb8d2d0c8), new u64(0x1e376c08, 0x5141ab53),
- new u64(0x2748774c, 0xdf8eeb99), new u64(0x34b0bcb5, 0xe19b48a8),
- new u64(0x391c0cb3, 0xc5c95a63), new u64(0x4ed8aa4a, 0xe3418acb),
- new u64(0x5b9cca4f, 0x7763e373), new u64(0x682e6ff3, 0xd6b2b8a3),
- new u64(0x748f82ee, 0x5defb2fc), new u64(0x78a5636f, 0x43172f60),
- new u64(0x84c87814, 0xa1f0ab72), new u64(0x8cc70208, 0x1a6439ec),
- new u64(0x90befffa, 0x23631e28), new u64(0xa4506ceb, 0xde82bde9),
- new u64(0xbef9a3f7, 0xb2c67915), new u64(0xc67178f2, 0xe372532b),
- new u64(0xca273ece, 0xea26619c), new u64(0xd186b8c7, 0x21c0c207),
- new u64(0xeada7dd6, 0xcde0eb1e), new u64(0xf57d4f7f, 0xee6ed178),
- new u64(0x06f067aa, 0x72176fba), new u64(0x0a637dc5, 0xa2c898a6),
- new u64(0x113f9804, 0xbef90dae), new u64(0x1b710b35, 0x131c471b),
- new u64(0x28db77f5, 0x23047d84), new u64(0x32caab7b, 0x40c72493),
- new u64(0x3c9ebe0a, 0x15c9bebc), new u64(0x431d67c4, 0x9c100d4c),
- new u64(0x4cc5d4be, 0xcb3e42b6), new u64(0x597f299c, 0xfc657e2a),
- new u64(0x5fcb6fab, 0x3ad6faec), new u64(0x6c44198c, 0x4a475817)
-];
-
-function crypto_hashblocks(x, m, n) {
- var z = [], b = [], a = [], w = [], t, i, j;
-
- for (i = 0; i < 8; i++) z[i] = a[i] = dl64(x, 8*i);
-
- var pos = 0;
- while (n >= 128) {
- for (i = 0; i < 16; i++) w[i] = dl64(m, 8*i+pos);
- for (i = 0; i < 80; i++) {
- for (j = 0; j < 8; j++) b[j] = a[j];
- t = add64(a[7], Sigma1(a[4]), Ch(a[4], a[5], a[6]), K[i], w[i%16]);
- b[7] = add64(t, Sigma0(a[0]), Maj(a[0], a[1], a[2]));
- b[3] = add64(b[3], t);
- for (j = 0; j < 8; j++) a[(j+1)%8] = b[j];
- if (i%16 === 15) {
- for (j = 0; j < 16; j++) {
- w[j] = add64(w[j], w[(j+9)%16], sigma0(w[(j+1)%16]), sigma1(w[(j+14)%16]));
- }
- }
- }
-
- for (i = 0; i < 8; i++) {
- a[i] = add64(a[i], z[i]);
- z[i] = a[i];
- }
-
- pos += 128;
- n -= 128;
- }
-
- for (i = 0; i < 8; i++) ts64(x, 8*i, z[i]);
- return n;
-}
-
-var iv = new Uint8Array([
- 0x6a,0x09,0xe6,0x67,0xf3,0xbc,0xc9,0x08,
- 0xbb,0x67,0xae,0x85,0x84,0xca,0xa7,0x3b,
- 0x3c,0x6e,0xf3,0x72,0xfe,0x94,0xf8,0x2b,
- 0xa5,0x4f,0xf5,0x3a,0x5f,0x1d,0x36,0xf1,
- 0x51,0x0e,0x52,0x7f,0xad,0xe6,0x82,0xd1,
- 0x9b,0x05,0x68,0x8c,0x2b,0x3e,0x6c,0x1f,
- 0x1f,0x83,0xd9,0xab,0xfb,0x41,0xbd,0x6b,
- 0x5b,0xe0,0xcd,0x19,0x13,0x7e,0x21,0x79
-]);
-
-function crypto_hash(out, m, n) {
- var h = new Uint8Array(64), x = new Uint8Array(256);
- var i, b = n;
-
- for (i = 0; i < 64; i++) h[i] = iv[i];
-
- crypto_hashblocks(h, m, n);
- n %= 128;
-
- for (i = 0; i < 256; i++) x[i] = 0;
- for (i = 0; i < n; i++) x[i] = m[b-n+i];
- x[n] = 128;
-
- n = 256-128*(n<112?1:0);
- x[n-9] = 0;
- ts64(x, n-8, new u64((b / 0x20000000) | 0, b << 3));
- crypto_hashblocks(h, x, n);
-
- for (i = 0; i < 64; i++) out[i] = h[i];
-
- return 0;
-}
-
-function add(p, q) {
- var a = gf(), b = gf(), c = gf(),
- d = gf(), e = gf(), f = gf(),
- g = gf(), h = gf(), t = gf();
-
- Z(a, p[1], p[0]);
- Z(t, q[1], q[0]);
- M(a, a, t);
- A(b, p[0], p[1]);
- A(t, q[0], q[1]);
- M(b, b, t);
- M(c, p[3], q[3]);
- M(c, c, D2);
- M(d, p[2], q[2]);
- A(d, d, d);
- Z(e, b, a);
- Z(f, d, c);
- A(g, d, c);
- A(h, b, a);
-
- M(p[0], e, f);
- M(p[1], h, g);
- M(p[2], g, f);
- M(p[3], e, h);
-}
-
-function cswap(p, q, b) {
- var i;
- for (i = 0; i < 4; i++) {
- sel25519(p[i], q[i], b);
- }
-}
-
-function pack(r, p) {
- var tx = gf(), ty = gf(), zi = gf();
- inv25519(zi, p[2]);
- M(tx, p[0], zi);
- M(ty, p[1], zi);
- pack25519(r, ty);
- r[31] ^= par25519(tx) << 7;
-}
-
-function scalarmult(p, q, s) {
- var b, i;
- set25519(p[0], gf0);
- set25519(p[1], gf1);
- set25519(p[2], gf1);
- set25519(p[3], gf0);
- for (i = 255; i >= 0; --i) {
- b = (s[(i/8)|0] >> (i&7)) & 1;
- cswap(p, q, b);
- add(q, p);
- add(p, p);
- cswap(p, q, b);
- }
-}
-
-function scalarbase(p, s) {
- var q = [gf(), gf(), gf(), gf()];
- set25519(q[0], X);
- set25519(q[1], Y);
- set25519(q[2], gf1);
- M(q[3], X, Y);
- scalarmult(p, q, s);
-}
-
-function crypto_sign_keypair(pk, sk, seeded) {
- var d = new Uint8Array(64);
- var p = [gf(), gf(), gf(), gf()];
- var i;
-
- if (!seeded) randombytes(sk, 32);
- crypto_hash(d, sk, 32);
- d[0] &= 248;
- d[31] &= 127;
- d[31] |= 64;
-
- scalarbase(p, d);
- pack(pk, p);
-
- for (i = 0; i < 32; i++) sk[i+32] = pk[i];
- return 0;
-}
-
-var L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]);
-
-function modL(r, x) {
- var carry, i, j, k;
- for (i = 63; i >= 32; --i) {
- carry = 0;
- for (j = i - 32, k = i - 12; j < k; ++j) {
- x[j] += carry - 16 * x[i] * L[j - (i - 32)];
- carry = (x[j] + 128) >> 8;
- x[j] -= carry * 256;
- }
- x[j] += carry;
- x[i] = 0;
- }
- carry = 0;
- for (j = 0; j < 32; j++) {
- x[j] += carry - (x[31] >> 4) * L[j];
- carry = x[j] >> 8;
- x[j] &= 255;
- }
- for (j = 0; j < 32; j++) x[j] -= carry * L[j];
- for (i = 0; i < 32; i++) {
- x[i+1] += x[i] >> 8;
- r[i] = x[i] & 255;
- }
-}
-
-function reduce(r) {
- var x = new Float64Array(64), i;
- for (i = 0; i < 64; i++) x[i] = r[i];
- for (i = 0; i < 64; i++) r[i] = 0;
- modL(r, x);
-}
-
-// Note: difference from C - smlen returned, not passed as argument.
-function crypto_sign(sm, m, n, sk) {
- var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64);
- var i, j, x = new Float64Array(64);
- var p = [gf(), gf(), gf(), gf()];
-
- crypto_hash(d, sk, 32);
- d[0] &= 248;
- d[31] &= 127;
- d[31] |= 64;
-
- var smlen = n + 64;
- for (i = 0; i < n; i++) sm[64 + i] = m[i];
- for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i];
-
- crypto_hash(r, sm.subarray(32), n+32);
- reduce(r);
- scalarbase(p, r);
- pack(sm, p);
-
- for (i = 32; i < 64; i++) sm[i] = sk[i];
- crypto_hash(h, sm, n + 64);
- reduce(h);
-
- for (i = 0; i < 64; i++) x[i] = 0;
- for (i = 0; i < 32; i++) x[i] = r[i];
- for (i = 0; i < 32; i++) {
- for (j = 0; j < 32; j++) {
- x[i+j] += h[i] * d[j];
- }
- }
-
- modL(sm.subarray(32), x);
- return smlen;
-}
-
-function unpackneg(r, p) {
- var t = gf(), chk = gf(), num = gf(),
- den = gf(), den2 = gf(), den4 = gf(),
- den6 = gf();
-
- set25519(r[2], gf1);
- unpack25519(r[1], p);
- S(num, r[1]);
- M(den, num, D);
- Z(num, num, r[2]);
- A(den, r[2], den);
-
- S(den2, den);
- S(den4, den2);
- M(den6, den4, den2);
- M(t, den6, num);
- M(t, t, den);
-
- pow2523(t, t);
- M(t, t, num);
- M(t, t, den);
- M(t, t, den);
- M(r[0], t, den);
-
- S(chk, r[0]);
- M(chk, chk, den);
- if (neq25519(chk, num)) M(r[0], r[0], I);
-
- S(chk, r[0]);
- M(chk, chk, den);
- if (neq25519(chk, num)) return -1;
-
- if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]);
-
- M(r[3], r[0], r[1]);
- return 0;
-}
-
-function crypto_sign_open(m, sm, n, pk) {
- var i, mlen;
- var t = new Uint8Array(32), h = new Uint8Array(64);
- var p = [gf(), gf(), gf(), gf()],
- q = [gf(), gf(), gf(), gf()];
-
- mlen = -1;
- if (n < 64) return -1;
-
- if (unpackneg(q, pk)) return -1;
-
- for (i = 0; i < n; i++) m[i] = sm[i];
- for (i = 0; i < 32; i++) m[i+32] = pk[i];
- crypto_hash(h, m, n);
- reduce(h);
- scalarmult(p, q, h);
-
- scalarbase(q, sm.subarray(32));
- add(p, q);
- pack(t, p);
-
- n -= 64;
- if (crypto_verify_32(sm, 0, t, 0)) {
- for (i = 0; i < n; i++) m[i] = 0;
- return -1;
- }
-
- for (i = 0; i < n; i++) m[i] = sm[i + 64];
- mlen = n;
- return mlen;
-}
-
-var crypto_secretbox_KEYBYTES = 32,
- crypto_secretbox_NONCEBYTES = 24,
- crypto_secretbox_ZEROBYTES = 32,
- crypto_secretbox_BOXZEROBYTES = 16,
- crypto_scalarmult_BYTES = 32,
- crypto_scalarmult_SCALARBYTES = 32,
- crypto_box_PUBLICKEYBYTES = 32,
- crypto_box_SECRETKEYBYTES = 32,
- crypto_box_BEFORENMBYTES = 32,
- crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES,
- crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES,
- crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES,
- crypto_sign_BYTES = 64,
- crypto_sign_PUBLICKEYBYTES = 32,
- crypto_sign_SECRETKEYBYTES = 64,
- crypto_sign_SEEDBYTES = 32,
- crypto_hash_BYTES = 64;
-
-nacl.lowlevel = {
- crypto_core_hsalsa20: crypto_core_hsalsa20,
- crypto_stream_xor: crypto_stream_xor,
- crypto_stream: crypto_stream,
- crypto_stream_salsa20_xor: crypto_stream_salsa20_xor,
- crypto_stream_salsa20: crypto_stream_salsa20,
- crypto_onetimeauth: crypto_onetimeauth,
- crypto_onetimeauth_verify: crypto_onetimeauth_verify,
- crypto_verify_16: crypto_verify_16,
- crypto_verify_32: crypto_verify_32,
- crypto_secretbox: crypto_secretbox,
- crypto_secretbox_open: crypto_secretbox_open,
- crypto_scalarmult: crypto_scalarmult,
- crypto_scalarmult_base: crypto_scalarmult_base,
- crypto_box_beforenm: crypto_box_beforenm,
- crypto_box_afternm: crypto_box_afternm,
- crypto_box: crypto_box,
- crypto_box_open: crypto_box_open,
- crypto_box_keypair: crypto_box_keypair,
- crypto_hash: crypto_hash,
- crypto_sign: crypto_sign,
- crypto_sign_keypair: crypto_sign_keypair,
- crypto_sign_open: crypto_sign_open,
-
- crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES,
- crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES,
- crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES,
- crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES,
- crypto_scalarmult_BYTES: crypto_scalarmult_BYTES,
- crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES,
- crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES,
- crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES,
- crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES,
- crypto_box_NONCEBYTES: crypto_box_NONCEBYTES,
- crypto_box_ZEROBYTES: crypto_box_ZEROBYTES,
- crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES,
- crypto_sign_BYTES: crypto_sign_BYTES,
- crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES,
- crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES,
- crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES,
- crypto_hash_BYTES: crypto_hash_BYTES
-};
-
-/* High-level API */
-
-function checkLengths(k, n) {
- if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size');
- if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size');
-}
-
-function checkBoxLengths(pk, sk) {
- if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size');
- if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size');
-}
-
-function checkArrayTypes() {
- var t, i;
- for (i = 0; i < arguments.length; i++) {
- if ((t = Object.prototype.toString.call(arguments[i])) !== '[object Uint8Array]')
- throw new TypeError('unexpected type ' + t + ', use Uint8Array');
- }
-}
-
-function cleanup(arr) {
- for (var i = 0; i < arr.length; i++) arr[i] = 0;
-}
-
-// TODO: Completely remove this in v0.15.
-if (!nacl.util) {
- nacl.util = {};
- nacl.util.decodeUTF8 = nacl.util.encodeUTF8 = nacl.util.encodeBase64 = nacl.util.decodeBase64 = function() {
- throw new Error('nacl.util moved into separate package: https://github.com/dchest/tweetnacl-util-js');
- };
-}
-
-nacl.randomBytes = function(n) {
- var b = new Uint8Array(n);
- randombytes(b, n);
- return b;
-};
-
-nacl.secretbox = function(msg, nonce, key) {
- checkArrayTypes(msg, nonce, key);
- checkLengths(key, nonce);
- var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length);
- var c = new Uint8Array(m.length);
- for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i];
- crypto_secretbox(c, m, m.length, nonce, key);
- return c.subarray(crypto_secretbox_BOXZEROBYTES);
-};
-
-nacl.secretbox.open = function(box, nonce, key) {
- checkArrayTypes(box, nonce, key);
- checkLengths(key, nonce);
- var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length);
- var m = new Uint8Array(c.length);
- for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i];
- if (c.length < 32) return false;
- if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return false;
- return m.subarray(crypto_secretbox_ZEROBYTES);
-};
-
-nacl.secretbox.keyLength = crypto_secretbox_KEYBYTES;
-nacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES;
-nacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES;
-
-nacl.scalarMult = function(n, p) {
- checkArrayTypes(n, p);
- if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');
- if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size');
- var q = new Uint8Array(crypto_scalarmult_BYTES);
- crypto_scalarmult(q, n, p);
- return q;
-};
-
-nacl.scalarMult.base = function(n) {
- checkArrayTypes(n);
- if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');
- var q = new Uint8Array(crypto_scalarmult_BYTES);
- crypto_scalarmult_base(q, n);
- return q;
-};
-
-nacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES;
-nacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES;
-
-nacl.box = function(msg, nonce, publicKey, secretKey) {
- var k = nacl.box.before(publicKey, secretKey);
- return nacl.secretbox(msg, nonce, k);
-};
-
-nacl.box.before = function(publicKey, secretKey) {
- checkArrayTypes(publicKey, secretKey);
- checkBoxLengths(publicKey, secretKey);
- var k = new Uint8Array(crypto_box_BEFORENMBYTES);
- crypto_box_beforenm(k, publicKey, secretKey);
- return k;
-};
-
-nacl.box.after = nacl.secretbox;
-
-nacl.box.open = function(msg, nonce, publicKey, secretKey) {
- var k = nacl.box.before(publicKey, secretKey);
- return nacl.secretbox.open(msg, nonce, k);
-};
-
-nacl.box.open.after = nacl.secretbox.open;
-
-nacl.box.keyPair = function() {
- var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);
- var sk = new Uint8Array(crypto_box_SECRETKEYBYTES);
- crypto_box_keypair(pk, sk);
- return {publicKey: pk, secretKey: sk};
-};
-
-nacl.box.keyPair.fromSecretKey = function(secretKey) {
- checkArrayTypes(secretKey);
- if (secretKey.length !== crypto_box_SECRETKEYBYTES)
- throw new Error('bad secret key size');
- var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);
- crypto_scalarmult_base(pk, secretKey);
- return {publicKey: pk, secretKey: new Uint8Array(secretKey)};
-};
-
-nacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES;
-nacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES;
-nacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES;
-nacl.box.nonceLength = crypto_box_NONCEBYTES;
-nacl.box.overheadLength = nacl.secretbox.overheadLength;
-
-nacl.sign = function(msg, secretKey) {
- checkArrayTypes(msg, secretKey);
- if (secretKey.length !== crypto_sign_SECRETKEYBYTES)
- throw new Error('bad secret key size');
- var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length);
- crypto_sign(signedMsg, msg, msg.length, secretKey);
- return signedMsg;
-};
-
-nacl.sign.open = function(signedMsg, publicKey) {
- if (arguments.length !== 2)
- throw new Error('nacl.sign.open accepts 2 arguments; did you mean to use nacl.sign.detached.verify?');
- checkArrayTypes(signedMsg, publicKey);
- if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)
- throw new Error('bad public key size');
- var tmp = new Uint8Array(signedMsg.length);
- var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey);
- if (mlen < 0) return null;
- var m = new Uint8Array(mlen);
- for (var i = 0; i < m.length; i++) m[i] = tmp[i];
- return m;
-};
-
-nacl.sign.detached = function(msg, secretKey) {
- var signedMsg = nacl.sign(msg, secretKey);
- var sig = new Uint8Array(crypto_sign_BYTES);
- for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i];
- return sig;
-};
-
-nacl.sign.detached.verify = function(msg, sig, publicKey) {
- checkArrayTypes(msg, sig, publicKey);
- if (sig.length !== crypto_sign_BYTES)
- throw new Error('bad signature size');
- if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)
- throw new Error('bad public key size');
- var sm = new Uint8Array(crypto_sign_BYTES + msg.length);
- var m = new Uint8Array(crypto_sign_BYTES + msg.length);
- var i;
- for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i];
- for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i];
- return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0);
-};
-
-nacl.sign.keyPair = function() {
- var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);
- var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);
- crypto_sign_keypair(pk, sk);
- return {publicKey: pk, secretKey: sk};
-};
-
-nacl.sign.keyPair.fromSecretKey = function(secretKey) {
- checkArrayTypes(secretKey);
- if (secretKey.length !== crypto_sign_SECRETKEYBYTES)
- throw new Error('bad secret key size');
- var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);
- for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i];
- return {publicKey: pk, secretKey: new Uint8Array(secretKey)};
-};
-
-nacl.sign.keyPair.fromSeed = function(seed) {
- checkArrayTypes(seed);
- if (seed.length !== crypto_sign_SEEDBYTES)
- throw new Error('bad seed size');
- var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);
- var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);
- for (var i = 0; i < 32; i++) sk[i] = seed[i];
- crypto_sign_keypair(pk, sk, true);
- return {publicKey: pk, secretKey: sk};
-};
-
-nacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES;
-nacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES;
-nacl.sign.seedLength = crypto_sign_SEEDBYTES;
-nacl.sign.signatureLength = crypto_sign_BYTES;
-
-nacl.hash = function(msg) {
- checkArrayTypes(msg);
- var h = new Uint8Array(crypto_hash_BYTES);
- crypto_hash(h, msg, msg.length);
- return h;
-};
-
-nacl.hash.hashLength = crypto_hash_BYTES;
-
-nacl.verify = function(x, y) {
- checkArrayTypes(x, y);
- // Zero length arguments are considered not equal.
- if (x.length === 0 || y.length === 0) return false;
- if (x.length !== y.length) return false;
- return (vn(x, 0, y, 0, x.length) === 0) ? true : false;
-};
-
-nacl.setPRNG = function(fn) {
- randombytes = fn;
-};
-
-(function() {
- // Initialize PRNG if environment provides CSPRNG.
- // If not, methods calling randombytes will throw.
- var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null;
- if (crypto && crypto.getRandomValues) {
- // Browsers.
- var QUOTA = 65536;
- nacl.setPRNG(function(x, n) {
- var i, v = new Uint8Array(n);
- for (i = 0; i < n; i += QUOTA) {
- crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA)));
- }
- for (i = 0; i < n; i++) x[i] = v[i];
- cleanup(v);
- });
- } else if (typeof require !== 'undefined') {
- // Node.js.
- crypto = require('crypto');
- if (crypto && crypto.randomBytes) {
- nacl.setPRNG(function(x, n) {
- var i, v = crypto.randomBytes(n);
- for (i = 0; i < n; i++) x[i] = v[i];
- cleanup(v);
- });
- }
- }
-})();
-
-})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {}));
diff --git a/deps/npm/node_modules/tweetnacl/nacl.min.js b/deps/npm/node_modules/tweetnacl/nacl.min.js
deleted file mode 100644
index 4484974e619232..00000000000000
--- a/deps/npm/node_modules/tweetnacl/nacl.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(r){"use strict";function n(r,n){return r<>>32-n}function e(r,n){var e=255&r[n+3];return e=e<<8|255&r[n+2],e=e<<8|255&r[n+1],e<<8|255&r[n+0]}function t(r,n){var e=r[n]<<24|r[n+1]<<16|r[n+2]<<8|r[n+3],t=r[n+4]<<24|r[n+5]<<16|r[n+6]<<8|r[n+7];return new sr(e,t)}function o(r,n,e){var t;for(t=0;t<4;t++)r[n+t]=255&e,e>>>=8}function i(r,n,e){r[n]=e.hi>>24&255,r[n+1]=e.hi>>16&255,r[n+2]=e.hi>>8&255,r[n+3]=255&e.hi,r[n+4]=e.lo>>24&255,r[n+5]=e.lo>>16&255,r[n+6]=e.lo>>8&255,r[n+7]=255&e.lo}function a(r,n,e,t,o){var i,a=0;for(i=0;i>>8)-1}function f(r,n,e,t){return a(r,n,e,t,16)}function u(r,n,e,t){return a(r,n,e,t,32)}function c(r,t,i,a,f){var u,c,w,y=new Uint32Array(16),l=new Uint32Array(16),s=new Uint32Array(16),h=new Uint32Array(4);for(u=0;u<4;u++)l[5*u]=e(a,4*u),l[1+u]=e(i,4*u),l[6+u]=e(t,4*u),l[11+u]=e(i,16+4*u);for(u=0;u<16;u++)s[u]=l[u];for(u=0;u<20;u++){for(c=0;c<4;c++){for(w=0;w<4;w++)h[w]=l[(5*c+4*w)%16];for(h[1]^=n(h[0]+h[3]|0,7),h[2]^=n(h[1]+h[0]|0,9),h[3]^=n(h[2]+h[1]|0,13),h[0]^=n(h[3]+h[2]|0,18),w=0;w<4;w++)y[4*c+(c+w)%4]=h[w]}for(w=0;w<16;w++)l[w]=y[w]}if(f){for(u=0;u<16;u++)l[u]=l[u]+s[u]|0;for(u=0;u<4;u++)l[5*u]=l[5*u]-e(a,4*u)|0,l[6+u]=l[6+u]-e(t,4*u)|0;for(u=0;u<4;u++)o(r,4*u,l[5*u]),o(r,16+4*u,l[6+u])}else for(u=0;u<16;u++)o(r,4*u,l[u]+s[u]|0)}function w(r,n,e,t){return c(r,n,e,t,!1),0}function y(r,n,e,t){return c(r,n,e,t,!0),0}function l(r,n,e,t,o,i,a){var f,u,c=new Uint8Array(16),y=new Uint8Array(64);if(!o)return 0;for(u=0;u<16;u++)c[u]=0;for(u=0;u<8;u++)c[u]=i[u];for(;o>=64;){for(w(y,c,a,Br),u=0;u<64;u++)r[n+u]=(e?e[t+u]:0)^y[u];for(f=1,u=8;u<16;u++)f=f+(255&c[u])|0,c[u]=255&f,f>>>=8;o-=64,n+=64,e&&(t+=64)}if(o>0)for(w(y,c,a,Br),u=0;u>>=8}function b(r,n,e,t,o,i){var a,f,u,c,w=new Uint32Array(17),y=new Uint32Array(17),l=new Uint32Array(17),s=new Uint32Array(17),h=new Uint32Array(17);for(u=0;u<17;u++)y[u]=l[u]=0;for(u=0;u<16;u++)y[u]=i[u];for(y[3]&=15,y[4]&=252,y[7]&=15,y[8]&=252,y[11]&=15,y[12]&=252,y[15]&=15;o>0;){for(u=0;u<17;u++)s[u]=0;for(u=0;u<16&&u>>=8;for(c=c+l[16]|0,l[16]=3&c,c=5*(c>>>2)|0,u=0;u<16;u++)c=c+l[u]|0,l[u]=255&c,c>>>=8;c=c+l[16]|0,l[16]=c}for(u=0;u<17;u++)h[u]=l[u];for(v(l,Sr),a=0|-(l[16]>>>7),u=0;u<17;u++)l[u]^=a&(h[u]^l[u]);for(u=0;u<16;u++)s[u]=i[u+16];for(s[16]=0,v(l,s),u=0;u<16;u++)r[n+u]=l[u];return 0}function p(r,n,e,t,o,i){var a=new Uint8Array(16);return b(a,0,e,t,o,i),f(r,n,a,0)}function _(r,n,e,t,o){var i;if(e<32)return-1;for(g(r,0,n,0,e,t,o),b(r,16,r,32,e-32,r),i=0;i<16;i++)r[i]=0;return 0}function A(r,n,e,t,o){var i,a=new Uint8Array(32);if(e<32)return-1;if(h(a,0,32,t,o),0!==p(n,16,n,32,e-32,a))return-1;for(g(r,0,n,0,e,t,o),i=0;i<32;i++)r[i]=0;return 0}function U(r,n){var e;for(e=0;e<16;e++)r[e]=0|n[e]}function E(r){var n,e;for(e=0;e<16;e++)r[e]+=65536,n=Math.floor(r[e]/65536),r[(e+1)*(e<15?1:0)]+=n-1+37*(n-1)*(15===e?1:0),r[e]-=65536*n}function d(r,n,e){for(var t,o=~(e-1),i=0;i<16;i++)t=o&(r[i]^n[i]),r[i]^=t,n[i]^=t}function x(r,n){var e,t,o,i=hr(),a=hr();for(e=0;e<16;e++)a[e]=n[e];for(E(a),E(a),E(a),t=0;t<2;t++){for(i[0]=a[0]-65517,e=1;e<15;e++)i[e]=a[e]-65535-(i[e-1]>>16&1),i[e-1]&=65535;i[15]=a[15]-32767-(i[14]>>16&1),o=i[15]>>16&1,i[14]&=65535,d(a,i,1-o)}for(e=0;e<16;e++)r[2*e]=255&a[e],r[2*e+1]=a[e]>>8}function m(r,n){var e=new Uint8Array(32),t=new Uint8Array(32);return x(e,r),x(t,n),u(e,0,t,0)}function B(r){var n=new Uint8Array(32);return x(n,r),1&n[0]}function S(r,n){var e;for(e=0;e<16;e++)r[e]=n[2*e]+(n[2*e+1]<<8);r[15]&=32767}function K(r,n,e){var t;for(t=0;t<16;t++)r[t]=n[t]+e[t]|0}function T(r,n,e){var t;for(t=0;t<16;t++)r[t]=n[t]-e[t]|0}function Y(r,n,e){var t,o,i=new Float64Array(31);for(t=0;t<31;t++)i[t]=0;for(t=0;t<16;t++)for(o=0;o<16;o++)i[t+o]+=n[t]*e[o];for(t=0;t<15;t++)i[t]+=38*i[t+16];for(t=0;t<16;t++)r[t]=i[t];E(r),E(r)}function L(r,n){Y(r,n,n)}function k(r,n){var e,t=hr();for(e=0;e<16;e++)t[e]=n[e];for(e=253;e>=0;e--)L(t,t),2!==e&&4!==e&&Y(t,t,n);for(e=0;e<16;e++)r[e]=t[e]}function z(r,n){var e,t=hr();for(e=0;e<16;e++)t[e]=n[e];for(e=250;e>=0;e--)L(t,t),1!==e&&Y(t,t,n);for(e=0;e<16;e++)r[e]=t[e]}function R(r,n,e){var t,o,i=new Uint8Array(32),a=new Float64Array(80),f=hr(),u=hr(),c=hr(),w=hr(),y=hr(),l=hr();for(o=0;o<31;o++)i[o]=n[o];for(i[31]=127&n[31]|64,i[0]&=248,S(a,e),o=0;o<16;o++)u[o]=a[o],w[o]=f[o]=c[o]=0;for(f[0]=w[0]=1,o=254;o>=0;--o)t=i[o>>>3]>>>(7&o)&1,d(f,u,t),d(c,w,t),K(y,f,c),T(f,f,c),K(c,u,w),T(u,u,w),L(w,y),L(l,f),Y(f,c,f),Y(c,u,y),K(y,f,c),T(f,f,c),L(u,f),T(c,w,l),Y(f,c,Ar),K(f,f,w),Y(c,c,f),Y(f,w,l),Y(w,u,a),L(u,y),d(f,u,t),d(c,w,t);for(o=0;o<16;o++)a[o+16]=f[o],a[o+32]=c[o],a[o+48]=u[o],a[o+64]=w[o];var s=a.subarray(32),h=a.subarray(16);return k(s,s),Y(h,h,s),x(r,h),0}function P(r,n){return R(r,n,br)}function O(r,n){return gr(n,32),P(r,n)}function F(r,n,e){var t=new Uint8Array(32);return R(t,e,n),y(r,vr,t,Br)}function N(r,n,e,t,o,i){var a=new Uint8Array(32);return F(a,o,i),Kr(r,n,e,t,a)}function C(r,n,e,t,o,i){var a=new Uint8Array(32);return F(a,o,i),Tr(r,n,e,t,a)}function M(){var r,n,e,t=0,o=0,i=0,a=0,f=65535;for(e=0;e>>16,i+=n&f,a+=n>>>16;return o+=t>>>16,i+=o>>>16,a+=i>>>16,new sr(i&f|a<<16,t&f|o<<16)}function G(r,n){return new sr(r.hi>>>n,r.lo>>>n|r.hi<<32-n)}function Z(){var r,n=0,e=0;for(r=0;r>>n|r.lo<